Campus Sports↗
Find a game. Bring your campus together.
fun startListeningToEventChat(eventId: String) {
// Don't create duplicate listeners
if (chatListeners.containsKey(eventId)) return
val listener = firestore.collection("chats")
.whereEqualTo("eventId", eventId)
.orderBy("timestamp", Query.Direction.ASCENDING)
.addSnapshotListener { snapshot, error ->
if (error != null) {
println("Error listening to chat: ${error.message}")
return@addSnapshotListenerOpen it.
Inspect the work.
The Android application has a successful build workflow and inspectable Kotlin implementation. This team-project excerpt shows the real-time chat repository; the linked run includes the debug APK artifact.
fun startListeningToEventChat(eventId: String) {
// Don't create duplicate listeners
if (chatListeners.containsKey(eventId)) return
val listener = firestore.collection("chats")
.whereEqualTo("eventId", eventId)
.orderBy("timestamp", Query.Direction.ASCENDING)
.addSnapshotListener { snapshot, error ->
if (error != null) {
println("Error listening to chat: ${error.message}")
return@addSnapshotListenerOriginal team-project source. Event-specific Firestore listeners feed the chat state, with duplicate-listener protection. Repository evidence is presented as team work.
GitHub Actions run 32771478086 succeeded at commit 28faf5d. Workflow runs lintDebug, testDebugUnitTest, and assembleDebug and uploads a debug APK. Confirmed September 14, 2026; no emulator walkthrough claimed.
A real problem.
A considered solution.
Campus sports need more than an event list: students need discovery, registration, communication, and tools to run the game.
What I worked on.
Our team built a native Android application with event discovery and creation, registration, chat, ownership workflows, scorekeeping, timers, and a coin flip.
Discover event
Students browse events stored in Firestore through a native Compose interface.
A guided explanation of the project architecture. This explorer does not connect to production systems.
Model UI state deliberately.
ViewModels and repository layers separate Compose screen state from Firebase data access.
Support real-time interaction.
Firebase Authentication and Firestore power sign-in, event records, participants, and conversation workflows.
Preserve collaborative evidence.
The public repository retains source and commit history, with a Gradle debug build in GitHub Actions.
A complete Android source release demonstrating real-time data, authentication, Compose interfaces, and collaborative development.
Student team project; individual contributions can be reviewed in the public commit history.
DealFW Storefront
Arlington, TX · Open to Seattle and US relocation