Product · Football app
FootyMate
A free football app that follows one club instead of a league feed. It puts its effort into the two things a supporter with a busy week needs: a reminder before kickoff, and fixtures in the calendar they already use.
- Status
- Live on the App Store and Google Play
- Built for
- Supporters who follow one club across twelve leagues and plan their week around the match
- Coverage
- International, twelve leagues
- Current release
- Version 2.0.0 on iOS
What it is
FootyMate follows one club. You pick 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, 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. Those omissions are the point of the app.
Why I built it
Most football apps are built for breadth: every league, every match, constant notifications. The question I could never answer quickly was narrower — when does my team play next, and will I be free? That is a scheduling problem rather than an information problem, and nothing I used treated it as one. So the two features FootyMate invests most in are reminders and calendar integration.
The decisions behind it
- One club, by design. Choosing a team sets the app’s whole context, and changing it is a deliberate reset rather than a filter.
- Twelve leagues, not the provider’s full catalogue. Shipping every league the API returns would have meant shipping every league’s coverage gaps too.
- Reminders rebuild themselves from current fixture data. A moved kickoff moves its reminder, a postponed match loses one, and restarting the phone 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 reads from that register. An event FootyMate did not create is unreachable, which is what makes writing to a real calendar defensible.
- Free users get real alerts. The free tier sends match alerts with a minimum spacing rule, and keeps sending them if a subscription lapses.
- The app says how old its data is. One status line reports when fixtures were last updated, or that saved fixtures are showing, and disappears when the data is fresh. A failed refresh never blanks a saved season.
How it is built
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 refresh. Reducing “is this current?” to a single honest line of copy took more design than the fixtures list did.
Both apps are fully native — Swift and SwiftUI on iOS, Kotlin and Jetpack Compose on Android — with no shared code. Matching behavior rather than code meant writing the reminder, calendar, and refresh rules down as specifications first, then building each one twice against the same edge cases.
Where to get it
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 product site is footymate.kanyantamubanga.com.
More screens
One club's season, in four views
The same screens run on both platforms. There is no shared codebase between them — the behavior was specified first, then built twice.
Get FootyMate
Free on both stores, built twice from one specification
The full product detail — which leagues are supported, what Premium adds, and exactly how reminders and calendar sync behave — is on the FootyMate site.
Ask about FootyMate FootyMate privacy policy The other app: DriveTrain