New: the $2,500 CRM System→
← All case studies

Matchday — adult soccer team app · Mobile Apps · Build 17

A soccer team's app: fixtures, RSVPs, standings and the leaderboard.

An adult soccer team playing in several leagues kept fixtures in a group chat and stats in nobody's head. Matchday is one codebase that runs as an iPhone app, an Android app and a website: games with RSVPs, results and match reports, standings and a leaderboard that calculate themselves, and a tappable map of the park.

3.

Platforms from one codebase — iOS, Android, web

0.

Tables kept by hand — standings and leaderboard compute themselves

2 taps.

To announce a game in the team's WhatsApp group

The brief

Three leagues, a roster that changes weekly, and forty replies to 'who's in Monday?'.

The problem

A team in three leagues has three schedules, a roster that changes weekly, and a group chat where 'who's in Monday?' gets forty replies. Goals and assists lived in one person's memory, and the standings lived on a league site nobody could find on a phone.

The solution

One Expo codebase shipped as an iPhone app, an Android app and a website: games with RSVPs, results and stats that compute the standings and leaderboard by themselves, and a two-tap share back into the group chat.

01 · The next game

Who, where, when — and who's coming.

Home opens on the next game: the opponent, kick-off, the field (on a drawn, tappable map of the park) and the RSVP count. One tap to say you're in; one more to announce it in the team's WhatsApp group with the RSVP link inside.

  • RSVPs per game
  • Tappable field map
  • Two-tap WhatsApp share
Live simulation · mobile app
9:41●●●

Mondays · 7v7 · Week 6

vs. Riverside United

8:30

kick-off

11

going

Field 3

north pitch

You're in

tap to change your RSVP

Going

Need 2 more for a full bench

3 haven't replied

Nudge

Share to the team chat

matchup, kick-off, field, RSVP link

WhatsApp

RSVPs from the shared link flow straight back into the app

HomeScheduleStatsSquad

Matchday — home

02 · Standings

The table updates itself.

Organizations, leagues, teams and real seasons. Enter a result and the standings — W-D-L, points, goal difference, form — recalculate. Nobody maintains a spreadsheet.

  • Computed from results
  • Every league the team plays in
  • Seasons that roll over
Live simulation · mobile app
9:41●●●

League table

Mondays O40 · Fall

2nd

position

13

points

+9

goal diff.

1. Northside FC

5-1-0 · W W D W W

16

2. Our team

4-1-1 · W W L W D

13

3. Riverside United

3-2-1 · L W W D W

11

computed from results — nobody updates the table

HomeScheduleStatsSquad

Matchday — stats

03 · The leaderboard

Goals and assists, finally on the record.

Per-player stat lines on every game feed the leaderboard and the match report. Three permission tiers — admin, team manager, player — enforced in the database: only emails on the roster can read anything.

  • Row-level security
  • Sign in with an emailed code
  • iOS, Android and web from one codebase
Live simulation · mobile app
9:41●●●

Season leaders

Goals & assists

31

team goals

6

games played

Diego "Flash" M.

7 goals · 3 assists

Top

Sam K.

5 goals · 5 assists

2nd

Theo R.

2 goals · 6 assists

Assists
HomeScheduleStatsSquad

Matchday — leaderboard

The outcome

The group chat went back to banter. Everything else lives in the app.

Expo (React Native)Expo RouterTypeScriptSupabase (Postgres + row-level security)Supabase Auth (email codes)Resend (SMTP)WhatsApp shareVercel
01

The group chat went back to banter. Everything else — who's coming, where, the score, who scored — lives in the app.

Want a system like this one?

A 30-minute call to map what you have to what you need. Fixed-fee where the scope is known, $100/hr beyond it, and everything documented so your team runs it without me.

Team names, players and results shown are illustrative.

Next case study — Personal life app — finance, fitness, nutrition

Money, training and meals in one app — three spaces, one sign-in.

→