Judge Profiles

Shows every persisted judge profile as a roster — side-vote bias, average speaker points, delivery-speed tolerance, theory receptiveness, and most-tagged paradigm — ordered by rounds judged.

  • Route: /practice/prep?section=judges, a tab of the Prep Workspace (the old /practice/judges redirects there)
  • Package: debate-speech-writer

What it shows

A roster table, a "Log a judged round" form (creates/updates a profile from ballot history), a Bulk import (CSV) section for pasting a whole spreadsheet of judged rounds at once, a logged-rounds list with Edit/Delete/Undo/Redo actions, and a Compare judges section for prepping a panel round (side leans, recommended pace, theory risk, paradigm conflicts).

Data flow

state/judgeRoundRecords.ts (localStorage: judgeRoundRecords)
  → rebuildJudgeProfileFromRecords(judgeId)
state/judgeProfiles.ts (localStorage: judgeProfiles)
  → buildJudgeProfilesRoster()
  → panels/JudgeProfilesPanel.tsx

Known gaps

No real ballot data source — every round is entered by hand, one at a time or in a CSV batch via Bulk import. Profiles (judgeProfiles) and their logged rounds (judgeRoundRecords) sync to a signed-in user's account — see Tool Data Sync — but still per-user, not a shared team resource, and with no identity/permission checks.