Features
Every board and page the product site serves — one page each, grouped by the route group it lives in.
The route groups under src/app/(dashboard) are the product's own vocabulary,
and each board has a matching directory in src/composed. A board's route is
where it is reached; its composed/ directory is what it is made of.
Betting
Value Bets
Model price against the market's, in three generations that run at once.
Outliers
Players sitting furthest from their own baseline.
Bet Builder
Prices a multi-selection bet, correlation included. The deepest data graph in the product.
Props
Prop Hunter
Ranks player props against their own history.
Prop Screener
Filters props by league, market, odds, hit rate and bookmaker.
100 Club
Props hitting at 100% over the window. The one board with its own rail.
AGS and Assist
Two routes, one implementation — and the 800 duplicated lines that made it one.
Super Sub Heroes
Players who score after coming off the bench.
Matchday
Lineups
Confirmed and predicted starting XIs.
Fouls Alerts
Fouls and cards worth watching before kick-off.
Stats
Trends
Best recent hit-rate streaks, for players and for teams.
Referees
Card and foul averages per official.
Player Cards
A player's card record, fixture by fixture.
Build-Ups
A Poisson match-up calculator, with its inputs in the URL.
Tools
Assistant
A chat over the same data. The one route handler in the app.
Data Visualiser
Two modes, two keys, one of them ever live.
Favourites
The teams and players you follow, and three writes over them.
Everything else
Home
The day's fixtures, and the most-shared URL in the product.
Entity pages
A fixture, team, player or referee — and the lookup lists in front of them.
Public pages
The SEO and marketing routes, which have their own layouts.
Still served by legacy
/league, /leagues, /previews and /basketball are rewritten to
legacy by LEGACY_ROUTES in next.config.js. Those
rewrites match before this app's own routes, so adding a page here without
removing its entry there means the page is never reached.