StreakCast — Automated Live Score and Season Stats Publisher for Amateur Sports Leagues
Youth soccer leagues and adult recreational basketball leagues are still updating scores on a Facebook group post and a hand-drawn bracket on Google Slides — while every parent and player is refreshing their phone expecting a real experience. StreakCast gives any amateur league a live scoreboard, standings, and player stats page that any volunteer scorekeeper can update from the sideline in 10 seconds.
Difficulty
intermediate
Category
Consumer Apps
Market Demand
High
Revenue Score
6/10
Platform
Web App
Vibe Code Friendly
No
Hackathon Score
6/10
What is it?
There are 35,000 amateur sports leagues in the US operating everything from adult kickball to youth travel soccer, and virtually none of them have a real-time stats and standings experience. They post scores on Facebook, update brackets in Google Sheets, and text standings to coaches. StreakCast provides a league admin portal where a commissioner sets up teams and a schedule in 10 minutes, and a scorekeeper app where any volunteer types in a score from the sideline. The public league page updates live, shows standings, and lets players see their own stats. No app download, no Facebook dependency, no spreadsheet. Buildable as a Next.js app with Supabase Realtime for live score updates.
Why now?
Supabase Realtime reached production stability in 2024 and is now cheap enough to broadcast live score updates to hundreds of concurrent public viewers without a custom WebSocket server — making this buildable in a weekend by a solo dev.
- ▸Commissioner portal to create league, teams, schedule, and divisions in under 15 minutes.
- ▸Scorekeeper mobile web page — enter a score in 3 taps from the sideline, no login required with a magic link.
- ▸Public league page with live standings, game results, and top scorer leaderboard updating in real time.
- ▸Season archive with historical standings and results accessible via shareable URL.
Target Audience
Amateur sports league commissioners and organizers running recreational and youth leagues with 8-64 teams, approx. 35,000 leagues in the US.
Example Use Case
Dave runs a 24-team adult rec basketball league. He sets up StreakCast in 15 minutes, sends the public standings link to all coaches, and now every player tracks standings on their phone instead of texting Dave every Sunday night asking who won.
User Stories
- ▸As a league commissioner, I want to set up teams and a schedule in under 15 minutes, so that I can stop managing scores in a Facebook group.
- ▸As a volunteer scorekeeper, I want to enter a final score from my phone in 3 taps at the end of a game, so that standings update before parents drive home.
- ▸As a league player, I want to check live standings on my phone without downloading an app, so that I know where my team stands without texting the commissioner.
Done When
- ✓League setup: done when commissioner creates a league, adds 8 teams, and enters a 4-game schedule in under 10 minutes with no errors.
- ✓Score entry: done when scorekeeper opens a magic link on mobile, enters two team scores, and the public standings page updates within 3 seconds.
- ✓Public page: done when an unauthenticated visitor opens the league standings URL and sees a correctly sorted standings table with team records.
- ✓Stripe billing: done when commissioner hits the 8-team free limit, completes Stripe checkout, and immediately gains access to add more teams.
Is it worth building?
$29/month x 150 leagues = $4,350 MRR at month 6. Realistic via youth sports parent communities and league director Facebook groups. $29/month x 500 leagues = $14,500 MRR at month 12 is ambitious but plausible with a viral public page.
Unit Economics
CAC: $25 via Facebook sports group posts and direct commissioner DMs. LTV: $348 (12 months at $29/month). Payback: 1 month. Gross margin: 93%.
Business Model
SaaS subscription
Monetization Path
Free for 1 season up to 8 teams. $29/month per league for unlimited teams, seasons, and player stats.
Revenue Timeline
First dollar: week 2 via first paid league signup. $1k MRR: month 3. $5k MRR: month 9.
Estimated Monthly Cost
Vercel: $20, Supabase: $25, Stripe fees: $10, Resend: $5. Total: ~$60/month at launch.
Profit Potential
Sustainable side project to $5k MRR. Full-time viable with sponsorship features at $10k+ MRR.
Scalability
Medium-High — add white-label league pages, sponsorship banner slots, and referee scheduling.
Success Metrics
Week 2: 5 leagues running a live season. Month 1: 10 paid leagues. Month 3: $1k MRR with 90% season-completion retention.
Launch & Validation Plan
Post in r/soccercoach, r/basketballl, and youth sports Facebook groups asking which tool commissioners currently use — offer StreakCast free for the next season in exchange for feedback.
Customer Acquisition Strategy
First customer: DM 15 commissioners in local youth sports Facebook groups and adult rec league Facebook groups offering a free full season in exchange for a 15-minute onboarding call. Ongoing: SEO targeting local league-specific searches, public league pages as viral acquisition when parents share the standings link.
What's the competition?
Competition Level
Medium
Similar Products
GameChanger targets baseball and softball with a full $9.99/player model. LeagueApps charges per player and requires enterprise onboarding. StreakCast targets the 80% of misc adult rec and youth leagues that need simple scores and standings at a flat $29/month with zero per-player friction.
Competitive Advantage
Public standings page works as viral acquisition — every parent who views it is a potential commissioner. No app download, no per-player fee, flat league pricing.
Regulatory Risks
Low regulatory risk. If youth leagues store minor player names, COPPA applies — limit public player stats to first name and last initial only in V1.
What's the roadmap?
Feature Roadmap
V1 (launch): league setup, scorekeeper magic link, live standings, public page, Stripe billing. V2 (month 2-3): player stat tracking, season archive, commissioner mobile view. V3 (month 4+): bracket tournament mode, sponsorship banner slots, white-label custom domain.
Milestone Plan
Phase 1 (Week 1-2): admin portal, score entry, Supabase Realtime standings live. Phase 2 (Week 3-4): public page, Stripe billing, magic link delivery. Phase 3 (Month 2): 10 paying leagues, player stats shipped.
How do you build it?
Tech Stack
Next.js, Supabase Realtime, Stripe, Resend — build with Lovable for public scoreboard UI, Cursor for admin logic, v0 for standings components.
Suggested Frameworks
Next.js App Router, Supabase Realtime, Drizzle ORM
Time to Ship
2 weeks
Required Skills
Supabase Realtime, Next.js, mobile-responsive UI, Stripe.
Resources
Supabase Realtime docs, Next.js App Router docs, Stripe docs.
MVP Scope
app/page.tsx (landing), app/[leagueSlug]/page.tsx (public standings), app/admin/page.tsx (commissioner portal), app/score/[gameId]/page.tsx (scorekeeper mobile UI), app/api/games/score/route.ts (score update), lib/db/schema.ts (Drizzle schema), lib/realtime.ts (Supabase channel subscription), components/StandingsTable.tsx, components/ScoreEntry.tsx, seed.ts (demo league), .env.example.
Core User Journey
Commissioner creates league -> adds teams and schedule -> shares scorekeeper magic link -> scorekeeper enters game score -> public standings page updates live.
Architecture Pattern
Commissioner creates league and schedule in admin -> scorekeeper opens magic link on phone at game -> enters final score -> Supabase Realtime broadcasts to public page -> standings recalculated and rendered live -> parents see updated table without refreshing.
Data Model
League has many Seasons. Season has many Teams and Games. Game has two TeamScores. Standing is computed per Season from Game results. Player belongs to Team and has StatLines.
Integration Points
Supabase Realtime for live score broadcasting, Supabase Auth for commissioner login, Stripe for billing, Resend for scorekeeper magic link delivery.
V1 Scope Boundaries
V1 excludes: mobile app, player registration, waiver management, referee scheduling, payment collection from teams, bracket tournament mode.
Success Definition
A league commissioner with no founder help sets up a 16-team season, runs 3 game weeks, and renews for the next season without ever contacting support.
Challenges
Supabase Realtime channel limits can cause issues at scale with many concurrent public viewers — implement client-side polling fallback for public pages. Distribution reality: cold acquisition of league commissioners is hard because they change every season. Target parent volunteer networks and sport-specific Facebook groups where commissioners actively ask for tools.
Avoid These Pitfalls
Do not build player registration or waiver management in V1 — commissioners will ask for it but it doubles the scope and the real pain is just scores and standings. Do not require scorekeeper login — magic links that expire after the game are sufficient and eliminate the biggest adoption friction. Public page viral loop only works if the page loads fast without login — do not gate it.
Security Requirements
Supabase Auth magic link for commissioners. Scorekeeper access via signed expiring URLs — no full auth required. RLS on all league and score data per league. Minor player names limited to first name and last initial. Rate limiting on score submission route.
Infrastructure Plan
Vercel for Next.js, Supabase for Postgres, Realtime, and Auth, GitHub Actions for CI, Sentry for errors, Vercel Analytics.
Performance Targets
500 concurrent public page viewers per league via Supabase Realtime. Score update to standings render under 3 seconds. Public page load under 1.5s.
Go-Live Checklist
- ☐Supabase Realtime channel limits stress-tested for 100 concurrent viewers.
- ☐Stripe billing flow tested end-to-end.
- ☐Sentry live.
- ☐Public page load tested on 4G mobile.
- ☐Custom domain with SSL active.
- ☐Privacy policy published with minor data note.
- ☐3 beta leagues completed a full game week.
- ☐Rollback to prior Vercel deployment documented.
- ☐Launch post drafted for r/soccercoach and adult rec league Facebook groups.
First Run Experience
On first run: a demo league called Demo Rec Basketball is pre-loaded with 8 teams, 6 completed games, and a live standings table. User can immediately view the public standings page and click Enter Demo Score to simulate a scorekeeper entry. No manual config required: demo league and seed data load automatically on first visit.
How to build it, step by step
1. Define Drizzle schema: League, Season, Team, Game, GameScore, Standing, Player, StatLine. 2. Build Supabase Auth magic link flow for commissioner login. 3. Build admin portal page with forms to create league, add teams, and enter schedule with date and opponent. 4. Build scorekeeper page at /score/[gameId] accessible via a signed magic link that expires after the game date. 5. Build /api/games/score route that accepts a final score, writes to Supabase, and triggers standing recalculation. 6. Build lib/realtime.ts subscribing to a Supabase Realtime channel per league for live score updates. 7. Build StandingsTable.tsx that recalculates W-L-T and points from game results and renders sorted standings. 8. Build public league page at /[leagueSlug] showing live standings and recent results with no auth required. 9. Add Stripe billing for $29/month unlocking unlimited teams after a free 8-team trial. 10. Verify: create a demo league, add 8 teams, enter a game score from the scorekeeper page, confirm standings update live on the public page, and confirm Stripe checkout grants paid access.
Generated
May 15, 2026
Model
claude-sonnet-4-6
Disclaimer: Ideas on this site are AI-generated and may contain inaccuracies. Revenue estimates, market demand figures, and financial projections are illustrative assumptions only — not financial advice. Do your own research before making any business or investment decisions. Technology availability, pricing, and market conditions change rapidly; always verify details independently.