Roster Setup

Paste the draft-board tab straight out of the spreadsheet — keep the header row and it is read as columns, unknown columns and all. Coach notes go in a Notes column: separate several with  | , and lead one with Coach Name: to attribute it. No header row? One player per line still works: number name, birthday, both optional, dates as 2014-03-15 or 3/15/2014.

Evaluation

Draft Board

Data

Step 1 — Export raw capture

Copy this and paste it into any Claude session — it carries its own scoring instructions, so a brand-new session works fine.

Step 2 — Import scored data

Paste Claude's reply here. Code fences or extra chatter around the JSON are handled.

Backup

Everything lives in this browser's storage for this exact origin. Clearing browser data wipes it — this file is the only way back.

Note — dictate or type, then Cmd+Enter

Quick rating (optional — overrides everything)

Saved notes

Scores — tap to override

Transcripts

How this works

Three phases: eval on the field, a short hand-off, then the draft.

How to use — the short version

  1. Load a roster — paste one player per line (number name, birthday) and click Load roster, or tap Load Demo Players to try it out with ten fictional kids.
  2. Eval — tap a player, dictate or type a note, Cmd+Enter saves. Tap a 1–5 chip only when you're already certain.
  3. Score it — Data tab → Copy export → paste into any Claude chat → copy its reply into the Step 2 box → Apply scored data.
  4. Draft — the board ranks everyone out of 15; click Draft on a row as players are taken.
  5. Protect your data — Data tab → Download backup .json before leaving the field, and always open the app the same way so your saved work is there.

Everything below is the detail behind those five steps.

One rule. Open it the same way every time. Your evals are stored per origin — and on an iPad, a Home Screen copy of the app stores separately from Safari — so the hosted URL one day and a double-clicked file the next means the second one looks empty. Any method works; just pick one and stay with it.

Phase 1 — Eval

  1. Open the app at https://draftnight.pages.dev — works on any device, and on an iPad you can Add to Home Screen from Safari's Share menu. Fully offline instead? Double-clicking index.html or running ./serve.sh (http://localhost:8765) still works. Whatever you choose, use the same method every time.
  2. Paste the draft-board tab straight out of the spreadsheet, header row included, and click Load roster. It is read as columns: names, birthdays, last season's stats, and a Notes column of whatever the coaches know. Columns the app doesn't recognise are ignored, so there is nothing to trim first. Put several notes in one cell separated by  | , and lead one with Coach Name: to attribute it.

    No spreadsheet? One player per line still works: 12 Jake Sandoval, 2014-03-15, number and birthday both optional.

    A row the app can't line up with the header is skipped and named rather than guessed at, and you stay on this screen until you've read the warning. An unreadable birthday is not fatal — that player just loads with a blank age. If you already started, the app reopens where you left off; use Edit roster on the Data tab to change the list. Just exploring? Load Demo Players loads ten fictional 7–9-year-olds instead.
  3. Players start in List view; switch to Grid with the toggle next to the filter box.
  4. Tap a player. Add as many notes per player as you want — each one saves on its own.
  5. The cursor lands in the Note box automatically. Trigger macOS dictation — on most MacBooks that is the mic key (F5) on the function row; check yours in System Settings → Keyboard → Dictation — then speak. On an iPad, tap the mic button on the on-screen keyboard instead. Cmd+Enter saves the note.
  6. Tap a 1–5 chip only when you're already certain. A chip beats voice, typed, and the AI.
  7. Move between players with / , the Jump to player box, or the / keys. Esc closes the card.
  8. Nothing needs saving — every note, edit, and chip writes immediately.
  9. Before leaving the field: Data tab → Download backup .json. Clearing browser data wipes the session and this file is the only way back. Restore backup on the same tab reads it back in.

Phase 2 — Hand-off to Claude

  1. Data tab → Copy export for a small roster, or Download export .txt and attach the file for a big one. The hint under the buttons tells you which. Either way the payload carries its own scoring instructions.
  2. Send it to any Claude session — a brand-new one is fine, it needs no memory of this project. Send it as-is. Do not send the backup .json instead; that is your restore file and has no instructions in it.
  3. Copy Claude's reply into the Step 2 box and click Apply scored data. Code fences or extra chatter around the JSON are handled.
  4. Read the confirmation — it names any player it couldn't match. Then check the Draft tab.
  5. If this fails, skip it. The board still ranks on the chips you tapped. You lose the summaries, not the tool.

Phase 3 — Draft

  1. Opens sorted by Total, Available only, top three outlined.
  2. Row reads: rank, name, one-line AI summary, then HIT / SPD / DEF and TOT.
  3. Search matches names, numbers, transcripts, and AI summaries. Sort by any category to fill a specific hole.
  4. When a player is taken, click Draft on the row. No modal opens. To reverse it, filter to Drafted only and click Undo.
  5. Click the row body for the full card — complete summary, the verbatim phrase behind each score, all transcripts, and tappable overrides.

Reading the markers

  • * on a total — incomplete. Some category was never scored. The player still ranks on the total he has.
  • Dashed amber tile — low confidence. Worth a look before you trust it.
  • in a tile — no evidence captured for that category. Never guessed at.
  • Age badge (e.g. 11y 4m) — computed from the birthday, shown as of today. When two players have the same total, the younger one ranks first, and players with no birthday sort last within a tie. Sort: Age (youngest) ranks the whole board by age. Age never influences a score — it is a tie-breaker for you, not an input to the AI.
  • Prior-season line — the OPS chip on each row, with its rank out of however many players actually have a season (15/87, not 15). Sort: Spring OPS and Sort: Spring AVG rank the board on last season instead of the eval. Open the card for the full line: games, average, OPS, RBI, extra-base hits, each with its rank.
  • No season — a no Spring 2026 badge and a dimmed chip. That is missing information, not a bad line: those players never rank as a zero, and they sort last on the prior-season sorts rather than at the bottom. Their card says so in words.
  • Coach intel — anything imported in the Notes column shows on both the eval card (above the note box, so you read it before you dictate) and the draft card. It is secondhand, so it can only fill a category you said nothing about, and never beats a manual chip. Availability and logistics in an intel note — missed weeks, an injury, wanting to catch — never move a score.

If something goes wrong

Dictation won't startMac: check the shortcut in System Settings → Keyboard → Dictation, and make sure the cursor is in the Note box. iPad: use the mic button on the on-screen keyboard. You can always just type.
App opens empty but you had dataYou opened it a different way than last time — hosted URL vs file vs localhost, or on iPad the Home Screen app vs Safari (those store separately). Reopen it the old way, or restore your backup .json on the Data tab.
Dictation misheard a nameTap the note text to edit it in place, or fix it before pressing Cmd+Enter.
A score looks wrongTap the chip you want. Manual chips are never overwritten.
Import says "no match"Roster changed after export. Re-export and redo the hand-off.
Accidentally resetRestore backup on the Data tab.