Fixtures, live scores, team chat and sign-ups for 9,000 players — built on Firebase so a volunteer-run league has no servers to look after.
View live demo Opens a working demo with sample content in a new tab.
On location
Soccer BallPhoto: Michal Jarmoluk (CC0)
Soccer FieldPhoto: Abigail Keenan (CC0)
Soccer NetPhoto: Chen YiZhou (CC0)
Football SoccerPhoto: Eric Haidara (CC0)
Soccer FieldPhoto: Abigail Keenan (CC0)
About the Project
This case study covers a sports league app for an amateur league organiser serving 9,000 players. Fixtures lived in a spreadsheet, scores travelled by text message, sign-ups and payments meant chasing people at the side of the pitch, and the volunteers running it had no appetite for looking after servers.
We built a Flutter app on Firebase that delivers fixtures, live scores, moderated team chat and online registration with Stripe payments, without a single server for the league to run. Score updates reach every phone within a second of a referee submitting them, and a read-aware data model keeps the Firebase bill at about $61 a month at full usage.
About the Client
The client organises amateur football and netball leagues run largely by volunteers. Captains manage their teams, referees report results, and a small group of organisers handles fixtures, venues, registrations and disputes alongside their day jobs.
What they needed most was something that would simply keep working: no servers to patch, no surprise bills, and no single person whose spreadsheet held the league together. Anything new had to be simple enough for the next set of volunteers to inherit.
Project Goals
Put fixtures, venues and live scores on every player’s phone.
Give each team a chat channel that organisers can moderate.
Move season sign-up and payment fully online.
Enforce who can see and change what, regardless of the app’s screens.
Keep running costs low and predictable with no backend to operate.
Project Overview
The Challenge and Our Solution
The Challenge
The league ran on a Facebook group, a shared spreadsheet and a lot of goodwill. Fixtures changed at short notice, scores arrived by text message, and new players signed up on paper. The organisers wanted a proper app but had no budget for servers or anyone to maintain them.
Our Solution
We built a Flutter app for iOS and Android with Firebase as the entire backend. Firestore holds fixtures, results and chat with a data model shaped around what each screen reads, so a match-day update costs a handful of document reads rather than thousands. Cloud Functions handle the logic that cannot be trusted to the client: league tables, registration payments and moderation. Security rules were written per collection and tested in the emulator before launch. Push notifications go out for fixture changes and final scores.
A Live Scores App Powered by Firestore Listeners
Fixtures, results and league tables are stored in Cloud Firestore, and every screen listens for changes rather than polling or asking users to refresh. When a referee submits a score, Firestore pushes it to every phone that is watching that match or table, and the update arrives within a second.
Firebase Cloud Messaging adds notifications for kick-off changes, results and team news, so players do not need the app open to stay informed.
Sign-in uses Firebase Authentication with Apple, Google or a phone number, so players join in seconds without yet another password, and organisers never handle login details themselves.
Real-time listeners instead of polling
Scores on every phone within a second
Notifications for fixtures, results and team news
Team Chat With Moderation Built In
Every team has its own chat channel. Because chat is open to every registered player, moderation was a requirement, not an afterthought. Players can report a message, and a Cloud Function hides flagged messages immediately while they wait for an organiser to review them.
Organisers get the tools to keep conversations friendly without reading every message, and captains can share kit, lift-sharing and tactics in one place instead of scattered group chats.
Registration, Payments and Security Rules That Hold
Season sign-up runs in the app, with Stripe payments handled in a Cloud Function so card logic never runs on the device. Sign-ups and payments moved fully online, and the spreadsheet that used to track them was retired.
Access is enforced by Firestore security rules rather than by hiding buttons: players read the leagues they belong to, captains edit their own teams, and organisers manage everything. Even a modified app cannot read or change data it should not.
Firebase App Development With Costs Designed, Not Guessed
Firebase charges by reads and writes, so an innocent-looking screen can become expensive at 9,000 users. We designed the data model around how often each screen is opened, denormalising tables and fixture lists so a typical visit costs a handful of reads rather than hundreds.
The result is a Firebase bill of about $61 a month at full usage, and a platform the league’s volunteers never have to patch, scale or restart.
Files such as team photos and venue maps live in Firebase Storage under the same security model, and Google Cloud’s monitoring shows organisers exactly where usage and spend come from if the league grows.
Our Process
How We Delivered It
1
Matchday Discovery
We followed fixtures from scheduling to final whistle to see where information was slow or lost.
2
Read-Aware Data Model
Firestore collections shaped around real screen usage so costs stay low as membership grows.
3
Security Rules First
Roles for players, captains and organisers written and tested as rules before features were built.
4
Flutter Build and Cloud Functions
One Flutter app with live listeners, moderated chat and Stripe payments handled server-side.
5
Season Launch
Opened for registration before the season, then live scores switched on for the first round of fixtures.
Key Features
What We Delivered
Live fixtures and scores
Firestore listeners keep every screen current without polling or refreshing.
Team chat with moderation
Per-team channels with reporting, and a Cloud Function that hides flagged messages pending review.
Registration and payments
Season sign-up with Stripe handled in a Cloud Function so card logic never runs in the app.
Security rules that hold
Players read their leagues, captains edit their teams, organisers manage everything — enforced by rules, not by the UI.
Outcome
Results and Impact
9,000 registered players in the first season with no backend to operate.
Firebase bill of about $61 a month at full usage, thanks to the read-aware data model.
Score updates reach every phone within a second of a referee submitting them.
Sign-ups and payments moved fully online; the spreadsheet was retired.
Services
Services Behind This Project
The Firebase, Flutter App, Mobile App expertise we used to build this mobile app development — and can bring to yours.
Web and mobile backends on Firebase — sign-in, Firestore data, Cloud Functions, push notifications and hosting — built with security rules and cost control from day one.
High-performance Android and iPhone apps built with Flutter, Dart, Kotlin and Swift — from idea and UI/UX design to Google Play and App Store launch.
Learn more
FAQ
Frequently Asked Questions
Is Firebase suitable for a league app with thousands of users?
Yes, when the data model is designed for it. Firestore scales automatically and its listeners make live scores straightforward. The key is shaping data around how screens are used, so read costs stay low as the number of players grows.
How do you keep Firebase costs predictable?
By counting reads during design rather than after launch. We denormalise frequently viewed data such as tables and fixture lists, avoid listeners on large collections and set budget alerts. That is how this league runs at about $61 a month at full usage.
How is team chat moderated?
Players can report messages, and a Cloud Function hides reported content straight away until an organiser reviews it. Organisers can remove messages or members, and chat is limited to each team’s own channel, which keeps conversations relevant and easier to supervise.
Can players register and pay for the season in the app?
Yes. Registration collects player details and payment through Stripe, with the payment handled in a Cloud Function so card logic never runs on the phone. Organisers see who has registered and paid without maintaining a spreadsheet.
Why Flutter for a sports app?
Flutter delivers native Android and iPhone apps from one codebase, which suits volunteer-run organisations with limited budgets. Its official Firebase plugins make real-time listeners, authentication and messaging straightforward to build and maintain.
Does a serverless app still need maintenance?
Much less than a traditional backend. There are no servers to patch or scale, but dependencies, store releases and security rules still need occasional updates. We document the setup so a volunteer or a small support retainer can look after it comfortably.
Similar Work
Related Projects
Case studies built with the same technologies or for similar needs.