You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
EventBridge is a Kotlin Multiplatform mobile app that helps university students discover, create, and join campus events. Browse events by category, search with local history, register for events, and navigate to venues with an integrated map.
Features
Feature
Description
Event discovery
Browse events on the home feed, filtered by category
Search
Full-text event search with persistent local search history (Room)
Event details
View banners, schedule, venue, organizer, capacity, and attendee list
Join / leave
Register for events and manage membership via Supabase
Google Identity / Credential Manager (Android), Supabase Auth
Logging
Napier
Targets
Android (API 24+), iOS (Arm64 / Simulator Arm64)
Architecture Overview
EventBridge follows Clean Architecture with an MVVM presentation layer. Business rules live in the domain layer; the data layer implements repository contracts against Supabase, Room, and external APIs.
Join — On event details, tap join; membership is stored in Supabase.
Create — My Events tab → create flow → publish (banner uploaded to Storage).
Navigate — From event details, open map when coordinates are available.
Bottom navigation
Tab
Route
Screen
Home
home
Category-filtered feed
Explore
explore
Search
My Events
events
Joined / created events
Account
account
Profile & sign out
API Documentation
The mobile client talks to Supabase (PostgREST + RPC + Storage), not a custom REST server.
Supabase PostgREST tables
Table
Operations
events
INSERT on create
memberships
INSERT, DELETE, SELECT for join/leave/status
profiles
SELECT, UPDATE for current user
Supabase RPC functions
Function
Parameters
Returns
get_categories
—
List of categories
get_event_by_id
p_event_id
Single event with relations
get_events_by_category
p_category_id (nullable)
Filtered events
search_events
query
Matching events
get_my_events
— (uses auth.uid())
User's events
get_event_attendees
p_event_id
List of attendee profiles
Supabase Storage
Bucket
Path pattern
Purpose
event-banners
banners/{userId}/{timestamp}.jpg
Event banner images
External APIs
Service
Endpoint
Purpose
OpenRouteService
POST /v2/directions/driving-car
Driving route polyline
Auth
Provider: Google via ID token → supabase.auth.signInWith(IDToken)
Session: Observed via supabase.auth.sessionStatus
Database Design
Remote (Supabase / PostgreSQL)
Logical schema inferred from DTOs and repository usage:
erDiagram
profiles ||--o{ memberships : "user_id"
events ||--o{ memberships : "event_id"
categories ||--o{ events : "category_id"
profiles {
uuid id PK
text full_name
text email
text avatar_url
}
categories {
bigint id PK
text name
}
events {
bigint id PK
text name
text description
text banner_url
text location
date date
time time
time end_time
bigint category_id FK
text venue_name
text venue_detail
text organizer_name
int max_attendees
int remaining_seats
float pin_latitude
float pin_longitude
text department
boolean is_active
text status
}
memberships {
bigint event_id FK
uuid user_id FK
}