Start here
Pick your path
4 personas · 4 steps each
The dashboard touches a lot of surfaces. These four flows are the narrowest path through it for the most common goals — open one, click straight through, then come back to the full guide below when you want depth.
Fan
follow your guy, week to week
Open
The HUB · narrative hero + course blockPick
A favorite from /dash/playersRead
Trajectory tabs + similar playersWatch
Live mode lights up Thursday on the HUB
DFS player
salaries × projection × stack
Open
LAB → DFS toolSort
By VALUE (proj / $1k) for chalk vs leverage
Cross-check
Player compare for top picksSave
Build a saved SG-query for the field shape
Bettor
find edges, track CLV
Scan
HUB Bet Sheet — top 8 model-vs-market gapsDrill
Player profile · form histogram + Kalman estimate
Compare
Betting value finder across all booksReview
Archived event CLV — did the edge hold up?
Podcaster / analyst
stories you can defend on air
Skim
HUB risers / fallers + course-fit moversOpen
Player profile trajectory + volatility tabs
Search
Similar player finder for the compFrame
Course DNA radar + archetype splits
00Orientation
What you’re looking at
Four primary surfaces
GolfIQ is a comprehensive golf-intelligence dashboard built on a complete mirror of a live tour-stats feed. Every page reads from a Postgres database that refreshes every 15 minutes during live events and daily otherwise.
| Surface | Path | Use it for |
|---|---|---|
| Home dashboard | /dash | The week at a glance — predictions, betting markets, live event, schedule |
| Player profiles | /dash/player/[id] | One player’s full skill breakdown, career-at-course history, current-week edge |
| Course profiles | /dash/course/[slug] | A venue’s historical fingerprint — which skills win here, all-time leaders |
| Tools | /dash/tools/* | Course-fit calculator, betting-value finder, fantasy projections, model backtest |
01The hub
The home dashboard
/dash
1.1 The sticky banner
At the top of every page, you’ll see a glowing header with:
- Eyebrow tag — tour + event status, e.g.
PGA · ACTIVE EVENT - Event title — the current tournament name and (in cyan) the course name
- Snapshot timestamp — when the model last refreshed
- “Live mirror” badge — confirms data is flowing
- Tour pills — switch between PGA, DP World, Korn Ferry, Opposite, Alt, LIV. Pills only light up for tours that currently have data.
1.2 Conditions strip
Thin metadata bar under the header showing tour · event · date. Holds the slot where live wind / rain / temp / bias will land once OpenWeather is wired (v3.1).
1.3 Narrative hero
The single biggest model-vs-market edge among the current event's top contenders, picked automatically. Headline names the player. Sub-line shows MODEL % · MARKET % · EDGE pp. Below: a one-sentence GolfIQ "why" and an Open profile → CTA.
1.4 Field at a glance (3-col grid)
- Pre-tournament decomposition — recharts stacked horizontal bars for the top 15:
BASELINE + HIST + FIT + MAJOR + OTHERcontributions to final win prob. Hover for the per-component breakdown. - Risers / Fallers — two columns, 5 rows each. Player + current rank + delta + inverted rank sparkline (up = improving). Last 14-day window.
- Course-fit movers — plain-SVG slope chart, baseline rank → fit-adjusted rank. Green up = course suits the player, red down = course fades them.
1.5 Course block
Wraps the existing hole heat map with a 5-pill SG weights row (OTT/APP/ARG/PUTT/Scrambling) and a top-3 "watch holes" card grid. Self-resolves the slug from the active event so the section just works for any tournament.
1.6 Event mode module
Pre-tournament vs live, picked by event.isLive:
- Pre-tournament — pairings table (group, tee, hole, players).
- Live — top-20 leaderboard slice (pos/total/thru/ win%/SG total) + live contender trajectories (multi-line win% chart, 6 contenders, time on x-axis) + cut-line tracker (projected cut score + ±1 bubble strip during Thu-Fri).
1.7 The Bet Sheet
Horizontal snap-scroll strip of 8 cards. Each card: player name · market · DG fair % + American odds · best book + implied % · edge pip · 4-book chip grid · 5-pip confidence score.
1.8 GolfIQ on this week
Four chip questions seeded for the current event. Tapping any opens the existing GolfIQ chat surface with the question pre-filled — same chat trigger that fires from the insight cards.
1.9 Off-week mode
When no tour event is active, the HUB swaps to: a recap card for last week (winner + link to the model report card) · risers / fallers · "course of the week" pulled deterministically from course_archetypes. The Bet Sheet hides until there's a market to bet on.
02One player, every angle
Player profiles
/dash/player/[dg_id]
Reached by clicking any player name across the app. Sections, top to bottom:
| Block | What it shows |
|---|---|
| Header | Name, country flag, amateur indicator, DG rank pill, OWGR pill, skill estimate, DG snapshot timestamp |
| Live stats | If active: position, score, today’s score, thru, live win/top-5/top-10/cut probabilities, live SG |
| Trajectory tabs | 4-tab pill switcher inside one card. Tab 1 — 5-axis SG radar (default). Tab 2 — 52-week multi-line SG chart (OTT/APP/ARG/PUTT). Tab 3 — Form histogram of last 24 rounds SG: TOT with mean + Kalman estimate reference lines. Tab 4 — Rolling 12-week volatility σ with amber dots at detected regime changes. |
| SG component breakdown | Horizontal bar chart of the 4 SG categories with absolute SG and 0–100 percentile vs the full tour. |
| Approach skill detail | Row of 8 yardage/lie buckets with SG-per-shot, GIR rate, proximity per shot, shot count |
| This week’s decomposition | Baseline → final breakdown: course history, fit, major, age adjustments |
| Predictions | Both model variants (baseline and baseline_history_fit) for the current event |
| Matchups | Every H2H market the player appears in: market type, opponent, odds vs. odds, tie rule |
| Outrights | Every outright line live (win / top 5 / top 10 / top 20 / make cut) |
| Career at these courses | Pulled-from-archive table sorted by avg SG: Total. Events, rounds, SG breakdown, last year played |
| Trouble spots | The 3 courses where the player has 2+ starts and the worst historical SG: Total |
| Most-similar peers | 5 horizontal cards. Nearest neighbours by 4-D Euclidean distance over (SG: OTT, APP, ARG, PUTT). Each card links to that player’s profile. |
| Archetype heat map | 6-row table — one per course archetype (Major Test / Bomber’s Park / Shotmaker’s / Resort Birdie-Fest / Wind-Exposed / Stadium). SG cell gets a diverging green↔red background scaled by |SG|; sample-size pip (low/medium/high). |
| Head-to-head ledger | Top-10 most-frequent opponents from dg_historical_matchups, each as a card with W/T/L tally and last-met year. Clicking an opponent card deep-links into /dash/compare?p=… with that pairing pre-selected. |
03The venue’s fingerprint
Course profiles
/dash/course/[slug]
Reached from the Courses directory or by clicking course names in the History tab or live event banner.
Header
- Event name (current event, if any) + course name
- Stats strip — active event: field size, avg adjustment, max boost, biggest fade. Always: events on file, total rounds, avg score, year span. Plus derived Par + Yardagepills summed from the heat map's most-recent round.
Skill importance (legacy bar view)
Bar chart with four horizontal bars: OTT, APP, ARG, PUTT — each showing what fraction of the spread between players at this course is attributable to that skill (variance-based). Kept alongside the radar below as a quick scan view.
This week's best/worst fits
Two side-by-side tables. Best fits = largest positive total adjustment from baseline. Worst fits = largest negative. When there's no active event for this course, both tables fall back to all-time leader / laggard rows from the per-course history aggregate.
Course DNA radar
5-axis radar — OTT / APP / ARG / PUTT / Scrambling — with a dashed tour-average reference polygon at 20% per axis. Auto-generated sentence below the chart calls out the dominant skill weight at this course (e.g. "this course rewards approach play 2.3× more than average"). Confidence pip (low / medium / high) based on events on file.
Course over time
Single-line chart, x = year, y = field-avg SG vs par. Hover for the per-year round count. Reads from mv_course_difficulty_history.
Hole-by-hole scorecard
18-cell grid (3 cols on mobile, 6 sm, 9 lg). Each cell: hole # · par · vs-par SG · difficulty rank pip. Diverging red↔green background by vs-par sign (over par = red, under par = green), clamped to ±0.5 strokes. Per-hole drawer with scoring distribution + best/worst players queued for v3.1.
All-time leaders
20-row table from mv_player_course_career (rounds ≥ 4). Player headshot, rounds, events, avg SG/round, first/last year played. Click any name to open their profile.
Baseline → Final slope (current event only)
Slope chart from this course's active event — top 10 movers in baseline → fit-adjusted rank. Green up = course suits the player, red down = course fades them. Same primitive as the HUB's course-fit movers panel.
Historical leaders + nemeses (legacy)
Kept alongside the new all-time leaders table. Bottom 5 players with 2+ starts — venues that have consistently chewed them up.
04One event under a microscope
Archived events
/dash/event/[id]/[year]
Reached by clicking any SG ▸ row in the History tab. The single best way to put any individual historical event under a microscope.
Model report card
4-tile grid + reliability diagram, computed live from the full leaderboard's predicted_win × fin_num == 1:
| Tile | Reads |
|---|---|
| Pre-favorite finished | Where the model’s #1 pre-tournament pick actually placed |
| Top-10 hit rate | Fraction of the actual top-10 the model had in its pre-tournament top-10 |
| Brier score | Mean squared error of predicted_win vs binary outcome. Lower is better; tile flips accent when < 0.05. |
| Log loss | Negative log-likelihood per row, with predicted_win clamped to (1e-6, 1-1e-6). Lower is sharper. Tile flips accent when < 0.4. |
Reliability diagram
Recharts composed chart in the right column. Predicted win % bucketed into 10 deciles on the x-axis, observed win frequency on the y-axis, with a dashed 45° "perfect calibration" reference line. Hover any bucket to see how many players were in it.
Leaderboard
Full historical leaderboard (all players, not just 80): finish position, name + headshot, predicted win %, round-by-round scores, SG breakdown averaged across rounds.
Model accuracy plot
Scatter chart: predicted win % on X-axis, actual finish position on Y-axis. Each dot is a player. Top-10 finishers in green, the rest in cyan. A well-calibrated model clusters dots in the upper-right (favorites finished high).
Closing-line value
Top 10 players by model edge vs. bet365 close (DG fair probability − closing-line implied probability). Columns: player, open/close odds, edge in pp (capped at ±15pp for sanity), finish, bet result.
05Schedule + drill-in
The Tournaments hub
/dash/tournaments
In-play
Live
Events with in-play data in the last 5 days. Each card: date, tour, event name, live badge.
On deck
Upcoming
Forward-dated events from the schedule sync.
Last 45 days
Recent
Cards link to the archived event page if data is available.
Past-dated events never appear in Upcoming any more — NULL or stale event_date rows get filtered out and logged. Clicking any event opens its full detail page (/dash/tournaments/[event_id]) with the live or pre-tournament leaderboard, betting markets, and tee pairings.
On the detail page — live sections
When event.isLive is true, two extra cards mount between the leaderboard and the odds module:
- Live contender trajectories — multi-line win-% chart for the top 6 contenders, sourced from
dg_in_play_history(which is fed by the 5-min snapshot cron during Thu-Sun 11-23 UTC). - Cut-line tracker— latest snapshot's projected cut score + ±1 bubble strip with player names. Hides until 65+ players have posted live scores.
The odds module never lands on "No win market." any more — when dg_outrights is empty, each card falls back to a 20-row DG-fair list derived from the model probabilities and labels itself "DG fair only · book lines unavailable".
06Custom rigs
The Tools shelf
/dash/tools
Tool
Player comparison
Multi-select up to 4 players. Side-by-side SG radar, percentile-banded comparison table with best-of highlighting per category. AI verdict on who has the edge.
Open →
Tool
Course fit
Adjust four sliders (OTT, APP, ARG, PUTT weight) and the top-300 ranks re-sort in real-time. Now ships with 6 archetype presets (Major test / Bomber's park / Shotmaker's test / Resort birdie-fest / Wind-exposed / Stadium) that match the seeded course_archetypes weights.
Open →
Tool
Betting value
Model fair odds vs. every sportsbook's posted line. Market selector (Win / Top 5 / Top 10 / Top 20 / Make Cut). Sorted by edge. Shin de-vig toggle is wired in the analytics layer and queued for v3.1 in the UI.
Open →
Tool
Fantasy projections
DraftKings + FanDuel projected fantasy points for the field, derived from the model's win / top-5 / top-10 / top-20 / make-cut probabilities. Toggle DK / FD to switch the scoring model; sort to find the highest projected scorers.
Open →
Tool
Model backtest
The most important tool for trusting the model. Accuracy across the historical archive: calibration buckets, favorite ROI vs. bet365 close, top-10 hit rate.
Open →
Tool
SG query
Per-player SG averages over each player's last N rounds (4 / 12 / 24 / 50 / 100). Multi-filter: tour, min rounds, optional SG threshold per category. Sortable; CSV export; save filter sets to localStorage with named chips.
Open →
Tool
Similar player finder
Search any player, see their 10 nearest neighbours by 4-D SG skill vector (Euclidean over OTT/APP/ARG/PUTT). Same algorithm that powers the Similar Players strip on player profiles.
Open →
Tool
Course cluster map
Every course we have historical rounds for, plotted by field-avg SG (x) and round variance (y). Dots sized by round count and color-coded by archetype. Hover for course name; click to open the profile.
Open →
Tool
Matchup simulator
10,000-trial Monte Carlo between any two players over 1–8 rounds. Box–Muller draws around each player's mean SG with empirical σ = 2.6/round (KB v2.0 §6.2). Outputs head-to-head win prob plus margin P10 / P50 / P90.
Open →
Tool
What-if conditions
Three sliders — wind, firmness, cut depth — that scale each player's fit / hist / major adjustments and renormalise the field. Linear re-scoring (not a full sim) so it's a quick intuition tool, not a forecast.
Open →
07The AI command bar
Ask GolfIQ
⌘K · Ctrl K
Press ⌘K (Mac) or Ctrl K (Win/Linux) from anywhere in the app, or click the floating logo at the bottom-right. A slide-out drawer opens with:
- The current page path shown as a context chip in the header
- 4 suggested prompts you can click to send
- A free-text input
- Open full link if you want the full-page chat at /golfiq
- Esc button (or just press Esc)
✓ get_course_history, ✓ get_model_accuracy, etc.). No hallucinated stats.What you can ask
About a player
- “Has Scheffler ever played well at Augusta?”
- “Compare Rory and Scottie’s approach games”
- “How is Jon Rahm trending — moving up or down?”
- “Show me a full profile for Bryson DeChambeau”
About a course
- “What kind of golfer wins at Bay Hill?”
- “Top historical performers at TPC Sawgrass?”
- “Who’s the best fit for Aronimink this week?”
About a tournament
- “What did the 2024 PGA Championship look like?”
- “Who’s the current leader?”
- “Pre-tournament predictions for this week?”
About the model
- “Is the model actually accurate?”
- “Where does the model leak?”
About markets
- “Biggest model edges this week?”
- “Tightest matchups right now?”
About DFS + form
- “Highest projected DK fantasy scorers this week?”
- “Who’s making moves up the rankings?”
- “Biggest fallers this week?”
Tips for getting the best answers
- Be specific about the player. “Scheffler” works, “Scottie” works. Two-word ambiguous queries (“Brown”) may resolve to the wrong player — GolfIQ will list matches.
- Reference the current page. Because the chat knows your pathname, you can ask “explain this player’s edge” on a player profile and it will use that context.
- Ask follow-ups. The chat maintains conversation history. “Now compare him to Rory” works.
- Use it during research. Hit ⌘K from any page — faster than navigating back and forth.
08The vocabulary
Glossary
SG · model · betting · DFS
Strokes Gained (SG)
The fundamental performance metric in modern golf. SG measures how a player performs vs. the PGA Tour field average on the same shot. Positive = above average, negative = below.
| Term | Meaning |
|---|---|
SG: Total | Sum of all categories. ~+2.0 per round is elite. Tour avg = 0. |
SG: OTT | Off-the-Tee — driving and tee shots on par-4s/5s. Distance + accuracy. |
SG: APP | Approach — shots to the green from outside ~30 yards. Usually the biggest swing in winning weeks. |
SG: ARG | Around-the-Green — chips, pitches, bunker shots within ~30 yards. |
SG: PUTT | Putting only. |
SG: T2G | Tee-to-Green = OTT + APP + ARG (everything except putting). |
Model terms
| Term | Meaning |
|---|---|
| Baseline | The model’s prediction using only skill, no course adjustments. |
| Final | Published prediction after course-history, course-fit, major-week, and age adjustments. |
| Course history adjustment | How much the model boosts/fades a player based on their record at this venue. |
| Course-fit adjustment | How much the model adjusts based on whether the venue’s skill profile matches the player’s strengths. |
| Decomposition | The breakdown showing baseline → final, with each adjustment listed. |
baseline_history_fit | The recommended model variant; baseline plus all adjustments. More accurate than baseline alone. |
Betting terms
| Term | Meaning |
|---|---|
| Implied probability | Odds converted to a 0–1 number (e.g., +400 = 20% implied). |
| CLV (Closing-line value) | The edge between your bet and the closing price. Strongest leading indicator of long-term profit. |
| Sharp side | The side of a market sharp money has hit; usually the side closing lines move toward. |
| Edge | DG fair implied probability minus book implied probability. Positive edge = the book offers more value than the model thinks. |
DFS terms
- DK / FD — DraftKings / FanDuel
- Salary efficiency — projected fantasy points per $1,000 of salary. Higher = better value.
Glossary of DG markers
sg_categories=‘yes’— archived event has full SG breakdown availabletraditional_stats=‘yes’— driving accuracy, GIR, proximity, scrambling recordedarchived_preds=‘yes’— pre-tournament predictions backfilled for this event
09Shortcuts
Power-user moves
Stuff the team uses daily
- Click any row in the History tab. Drills into the archived leaderboard with model accuracy.
- Click any course name in This Week’s decomposition table. Goes to the venue profile.
- Use the tour pills. The home dash is fully tour-scoped — pick LIV or DPWT to see those tours’ predictions.
- Sort the Players tab by Δ. Top-of-the-table = biggest weekly rank improvers. The forming bubble.
- Sort DFS by Value. Anything above 5.5 points per $1K is high-leverage; the value column is the single best DFS sort.
- Look at the calibration chart on the Backtest page. If a bucket’s green bar is taller than its cyan bar, the model under-predicted that group’s win rate (those longshots are real value). Inverse if green is shorter.
10Coming soon
What’s next
The dashboard is improved every week
- Off-week dashboard — recent winners, biggest skill movers, archive featured event when no live tournament
- Shot-level visualizations from the historical-rounds payload
- User accounts + watchlists — pin players to a personal home view
- Multi-book historical odds — DK, FD, Pinnacle closing lines alongside bet365
- Auto-refresh of the Live tab during active rounds (no page reload required)
Changelog
What changed
2026-05 · v3.0 — data-quality + analytics rebuild
Materialized views (player × course career, weekly trajectory, course difficulty, rankings delta, archetype performance). New analytics module backs every chart. HUB rebuilt with narrative hero, decomposition stacked bars, risers/fallers, course block, live mode, bet sheet. Player profile gets trajectory tabs (radar + 52-week SG + form + volatility), similar players, archetype heat map, H2H ledger. Course profile gets DNA radar, scoring history, hole grid, all-time leaders, baseline→final slope. Tournament page adds live contender trajectories + cut-line tracker. Archived event becomes a model report card (Brier + log loss + reliability diagram). LAB tools expanded: similar player finder, course cluster map, 10K matchup simulator, what-if conditions, SG query saved-queries.
baseline · baseline/v2.5
Pre-v3 snapshot — homepage, dash routes, Supabase schema, stats sync, GolfIQ insight cards.
Last updated 2026-05-15 · live data mirror · refreshed every 15 min during live events
