🎱

Snooker League

Three divisions. One break. Earn your spot.

Page 1 of 8 — Splash & Onboarding
01 β€” Splash
9:41
●●●
🎱

Snooker League

Three divisions. One break. Earn your spot.

AVEOSOFT

02 β€” Welcome
9:41
●●●
πŸ†

Welcome to the League

Compete inside your division. Climb the table. Earn promotion at season end.

Premier
Division 1
Division 2
03 β€” Sign In
9:41
●●●

Sign in to play

New players join Division 2 by default.

Sign In
Create Account
βœ‰οΈ
πŸ”’

Forgot password?

01 β€” Division Home
Good evening
Marcus L.
ML
CURRENT DIVISION
DIVISION 1
Season 1 Β· Week 4 of 12
68%
WIN RATE
6
MATCHES
#2
RANK
Matches
Players
Standings
vs James Carter
Sat Β· May 16 Β· 7:30 PM
CONFIRMED
vs David Reeves
Sun Β· May 17 Β· 6:00 PM
COUNTER-OFFERED
vs Tom Sullivan
Thu Β· May 14 Β· 8:00 PM
RESULT NEEDED
vs Eddie Walsh
Awaiting response
PENDING
+
🏠
HOME
πŸ‘₯
PLAYERS
πŸ“Š
TABLE
πŸ‘€
ME
01 β€” Players List
Division 1
14 players Β· Season 1
πŸ”
Search players…
JC
James Carter
72% WIN Β· 8 MATCHES
CHALLENGE
DR
David Reeves
TAP TO OPEN PROFILE
CHALLENGE
TS
Tom Sullivan
61% WIN Β· 7 MATCHES
CHALLENGE
EW
Eddie Walsh
54% WIN Β· 6 MATCHES
CHALLENGE
RB
Ronnie Briggs
48% WIN Β· 5 MATCHES
CHALLENGE
PH
Peter Hayes
42% WIN Β· 5 MATCHES
CHALLENGE
🏠
HOME
πŸ‘₯
PLAYERS
πŸ“Š
TABLE
πŸ‘€
ME
01 β€” New Match
β€Ή
New Match Request
JC
CHALLENGING
James Carter
DIVISION 1 Β· 72% WIN
Date
πŸ“…
Saturday, May 24
β€Ί
Time
πŸ•–
7:30 PM
β€Ί
Venue (optional)
Cannock Snooker Club
Table 3
WHAT HAPPENS NEXT
James gets a push notification. He can Accept, Decline, or Counter-offer with a different time. Match locks once both agree.
SEND REQUEST
01 β€” Incoming Match
β€Ή
Match Request
DR
David Reeves
DIVISION 1 Β· 64% WIN Β· 7 MATCHES
PROPOSED
Sun Β· May 17
6:00 PM Β· Cannock SC
🎱
REQUESTED
AGREED
Counter-offer
DATE
Mon Β· May 18
TIME
8:00 PM
ACCEPT
SEND COUNTER-OFFER
Decline
01 β€” Log Result
β€Ή
Frame Result
MATCH
vs James Carter
Sat Β· May 16 Β· Cannock SC
COMPLETED
Frames Won
YOU
4
Marcus L.
OPPONENT
3
James Carter
Frames Played
7
CONFIRMATION REQUIRED
Both players must confirm. You will be notified if James's count differs from yours. Disputes lock the result until resolved.
SUBMIT RESULT
01 β€” Standings
Season 1 Β· Week 12 of 12
Division 1 Table
πŸ†
PROMOTION ZONE Β· TOP 5
β†’ PREMIER
1
JC
James Carter
14 MATCHES Β· 79%
PROMOTED
2
ML
Marcus L. (YOU)
13 MATCHES Β· 74%
β†’ PREMIER
3
DR
David Reeves
12 MATCHES Β· 67%
PROMOTED
4
TS
Tom Sullivan
14 MATCHES Β· 58%
QUALIFIED
5
EW
Eddie Walsh
12 MATCHES Β· 50%
QUALIFIED
6
RB
Ronnie Briggs
8 MATCHES Β· 62%
BELOW MIN
7
PH
Peter Hayes
9 MATCHES Β· 44%
BELOW MIN

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.

βš™οΈ

Tech Stack

Flutter 3.x
Node.js + Fastify
PostgreSQL 15
Firebase Cloud Messaging
Postmark (email)
Fly.io
🧠

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