AppVion Studio logo AppVion Studio Case study

Events platform

Sports Society Events: trials, fixtures, and results in one place.

A sports society runs on sign-up sheets, group chats, and a coach's notebook. This replaces all three — event listings with real registration, per-event chat, leaderboards, and performance tracking that follows a participant across the season.

Jetpack Compose Firebase Material 3 Real-time chat Multi-role
3 user roles Live event chat Season leaderboards
Event flow Announce to leaderboard
01
Event published Trials and fixtures with full detail
02
Participants register A real roster, not a comment thread
03
Event chat live Scoped to the people actually attending
04
Performance recorded Coach scoring feeds the leaderboard

The problem

Nobody knows who is actually turning up.

Context

A society runs trials, fixtures, and training sessions across several sports at once, with a membership that changes every intake and coaches who only see their own group.

What kept breaking

"Interested" in a group chat is not a registration, so numbers were guesswork until the day. Announcements reached whoever happened to be in the right chat. And performance across a season lived in a coach's own notes, so selection decisions were hard to explain.

The real requirement

A registration that means something, a conversation scoped to the people in the event, and a performance record that survives past the end of the fixture.

The approach

Three roles built around the event record.

01

Participant

Browse and filter events, register, keep a personal list of registrations, join the event chat, and see standing on the leaderboard.

02

Coach

See who registered, run the event, and record performance against individual participants so selection has evidence behind it.

03

Administrator

Create and manage events across sports, oversee participation, and review performance across the whole society.

04

Shared backend

Firebase Authentication for role-gated access and Firestore for events, registrations, chat messages, and performance records.

Engineering highlights

The parts that were harder than they look.

Chat scoped to an event

The chat belongs to the event rather than to a permanent group, so it appears with the fixture and stops mattering when the fixture is over. That single scoping choice is what keeps it useful instead of becoming another muted group.

Performance to leaderboard

A coach's score against a participant is the same record the leaderboard reads. There is no separate tally to reconcile, which is how season standings usually drift out of agreement with reality.

Role-gated navigation

Each role enters its own navigation graph after authentication. A participant's build has no route to a coach's scoring screen at all, rather than hiding it behind a disabled control.

Filtering that matches reality

A society member cares about two or three sports, not twenty. Filtering is a first-class part of the event list rather than a secondary screen, because an unfiltered feed is the same as no feed.

Technology

The stack behind Sports Society Events.

Kotlin Jetpack Compose Material 3 Coroutines & Flow Firebase Auth Cloud Firestore Navigation Compose Real-time Chat Role-Based Access

More case studies

Other systems we have built.

University product

WUM Connect

Role-based campus communication with real-time announcements, faculty and student management, and push notifications.

Read the Case Study
Data-heavy utility

Attendance Management

Multi-role institutional attendance with offline capture, background sync, analytics, and an append-only audit log.

Read the Case Study
All work

Full portfolio

Every case study and product demo in one place, across logistics, field service, education, events, and SaaS.

Browse all case studies

Start the conversation

Coordinating events, teams, or memberships?

Registration, communication, and a record that lasts past the event are the three pieces most community platforms get wrong. Bring the workflow and we will scope it properly.

WhatsApp Start Project