Sports League
Operations & IoT · React + Node (Express) · 17 @molecule/* packages
ESPN fantasy-like app with teams, schedules, scores, and standings — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (18)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Standings
/standings(signed in) - Teams
/teams(signed in) - TeamDetail
/teams/:id(signed in) - Matches
/matches(signed in) - MatchDetail
/matches/:id(signed in) - PlayerDetail
/players/:id(signed in) - Settings
/settings(signed in) - Dashboard
/dashboard(signed in) - Players
/players(signed in) - Stats
/stats(signed in) - Schedule
/schedule(signed in) - Profile
/profile(signed in) - Notifications
/notifications(signed in)
Data model (12 tables)
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- divisions — id, league_id, name, conference, created_at, updated_at
- favorite_teams — id, user_id, team_id, created_at
- game_events — id, game_id, occurred_at, period, game_clock, type, team_id, player_id, …
- games — id, league_id, season, week, home_team_id, away_team_id, scheduled_at, date, …
- leagues — id, name, sport, season, division_count, status, owner_user_id, created_at, …
- notifications — id, user_id, type, title, body, href, read, created_at
- player_stats — id, match_id, player_id, team_id, points, assists, rebounds, fouls, …
- players — id, team_id, first_name, last_name, name, jersey_number, position, height, …
- roster_entries — id, team_id, player_id, joined_at, left_at, role, created_at
- teams — id, league_id, division_id, name, abbreviation, city, logo_url, primary_color, …
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
API (11 handlers)
- \_seed
api/src/handlers/_seed.ts - \_test
api/src/handlers/_test.ts - favorite-teams
api/src/handlers/favorite-teams.ts - notifications
api/src/handlers/notifications.ts - players
api/src/handlers/players.ts - profile
api/src/handlers/profile.ts - schedule
api/src/handlers/schedule.ts - scores
api/src/handlers/scores.ts - standings
api/src/handlers/standings.ts - stats
api/src/handlers/stats.ts - teams
api/src/handlers/teams.ts
Subscription tiers
free / pro / team — gated by: maxSchedule, maxScores, maxStandings, maxTeams, advancedFeatures, canExport, retentionDays
Built from 17 @molecule/* packages
@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-payments-stripe@molecule/api-push-notifications-web-push@molecule/api-realtime-socketio@molecule/api-reporting-database@molecule/api-resource-payment@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/app-billing-react@molecule/app-calendar@molecule/app-charts@molecule/app-command-palette@molecule/app-data-table@molecule/app-realtime-socketio
Required secrets
DATABASE_URLPostgreSQL connection stringMEILISEARCH_API_KEYMeiliSearch API key
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing