Snooker League MVP
A focused mobile app for a UK snooker club's 3-tier league: matchmaking inside divisions, mutual result confirmation, season-end promotion. Built to the brief β nothing more, nothing less.
π§
Core Technologies
- Flutter β Single codebase for iOS + Android beta
- Node + Fastify β Match state-machine API + JWT auth
- PostgreSQL β Row-level locking on result confirmation
- FCM + Postmark β Push + email for all state transitions
π¦
V1 Deliverables
β
Player profiles + auto Division 2 onboarding
V1β
Same-division player roster + search
V1β
Match request with date/time + venue note
V1β
Counter-offer flow (requested β counter β accepted β confirmed)
V1β
Push + email notifications on every state change
V1β
Mutual result logging with dispute handling
V1β
Season engine (12 weeks, win %, 12-match minimum)
V1β
Promotion at season end (top ~25%, no relegation)
V1β
Club-admin web console (season reset, manual division moves)
V2β
Match history + head-to-head per player
V2β
Multi-club / multi-league support
V2β
iOS / Android store release (post-beta)
V2
π
Architecture Layers
MOBILE
Flutter Β· Riverpod Β· Hive offline cache Β· FCM/APNs
STATE ENGINE
Node + Fastify Β· explicit FSM: requested β counter β accepted β confirmed β completed β result-confirmed
DATA
PostgreSQL Β· row-level locks on result rows Β· idempotency keys on every mutation
DELIVERY
Fly.io Β· GitHub Actions Β· Postmark email Β· Sentry monitoring