FootyMate app icon

Venture · FootyMate

One club, and the two jobs other football apps ignore.

A club-first football app built around two jobs a scores feed treats as an afterthought — a reminder before kickoff, and fixtures in the calendar you already use.

FootyMate fixtures screen on iPhone, with competition filters, a month rail, and the next match marked
Fixtures
FootyMate match statistics on iPhone, comparing both teams on shots, expected goals, possession, and discipline
Match centre
Status
Live on the App Store and Google Play
For
Supporters who follow one club across twelve leagues and plan their week around the match
Market
International
Current release
Version 2.0.0 on iOS

The product

FootyMate follows one club. You choose a league and a club once, and from then on the app is only about that club: its fixtures across every competition the data provider publishes for it, its league position and recent form, the match centre while a game is on, and the two things a supporter with a busy diary actually needs — a reminder before kickoff, and the season in a calendar other people can see.

There is no global scores feed, no multi-team following, no news, no video, and no advertising. That restraint is the product, not a gap in it.

Why I built it

Most football apps are built for breadth — every league, every match, a firehose of notifications. The question I kept failing to answer for myself was narrower and more practical: when does my team play next, and will I be free? That is a scheduling problem, not an information problem, and nothing I used treated it as one.

So the two features FootyMate invests most in are the ones a scores aggregator treats as an afterthought: reminders and calendar integration.

Product decisions

  • One club, by design. Team selection is a commitment, not a filter. It sets the app’s entire context, and changing it is a deliberate reset rather than a toggle.
  • A curated league list, not the provider’s whole catalogue. Twelve competitions are exposed for team selection and the league table. Shipping every league the API returns would have meant shipping every league’s coverage gaps with it.
  • Reminders reconcile themselves. The alert schedule is rebuilt from current fixture data, so a moved kickoff moves its reminder, a postponed match loses one, and a device restart changes nothing. One alert per match, never a duplicate.
  • The calendar feature can only touch its own events. Every event the app creates is recorded in its own register, and every update and cleanup path reads from that register. An event FootyMate did not create is unreachable by design — which is what makes writing to someone’s real calendar defensible.
  • Free users get real alerts, not a nag. The free tier sends occasional match alerts with a minimum spacing rule, and keeps sending them if a subscription lapses.
  • The interface states how old its data is. A single status line says when fixtures were last updated, or that saved fixtures are showing, and disappears when data is fresh. A failed refresh never blanks a saved season.

What was interesting to build

The data layer is cache-first around one rule: better data is never replaced by worse. The local database is what the screen renders, the network only adds to it, and every dataset carries the timestamp of its last successful validated refresh. Getting the honest version of “is this current?” into a single line of copy took more design than the fixtures list itself.

The second problem was parity. Both apps are fully native — Swift and SwiftUI on iOS, Kotlin and Jetpack Compose on Android — with no shared codebase. Matching behavior rather than code meant writing the reminder, calendar, and refresh policies down as specifications first, then implementing each one twice against the same set of edge cases.

Availability

Version 2.0.0 is on the App Store for iPhone and iPad running iOS 17 or later, and FootyMate is on Google Play for Android 7.0 and later. Both are free, with an optional FootyMate Premium subscription sold through the relevant store. The consumer product site is at footymate.kanyantamubanga.com.

Interface evidence

One club's season, from the lineup sheet to the table.

FootyMate lineup screen showing both starting elevens plotted in formation on a pitch
Lineups and substitutions
FootyMate match event timeline listing goals and substitutions against the minute each happened
Match timeline
FootyMate league table in Form mode, with home and away filters and a selectable run of recent matches
League table and recent form
The same FootyMate fixtures screen running on Android, matching the iPhone layout and behavior
The same fixtures screen on Android

Availability

Shipping on both stores, from one specification.

FootyMate is free on the App Store and Google Play. The full product story — supported leagues, what Premium adds, and how reminders and calendar sync behave — is on the dedicated FootyMate site.