3.4 KiB
Advance Criterion & Juror Progress Dashboard
Date: 2026-02-25 Status: Approved
Problem
Jurors have no visibility into their evaluation progress — specifically how many YES/NO advancement decisions they've made and for which projects. Admins similarly lack a quick summary of advancement votes across the jury.
Solution
A new advance criterion type, a juror-facing progress dashboard, and admin dashboard enhancements.
Design
1. New Criterion Type: advance
Added alongside numeric, text, boolean, section_header.
Shape in criteriaJson:
{
id: string,
label: string, // default "Advance to next round?"
description?: string,
type: "advance",
trueLabel: string, // default "Yes"
falseLabel: string, // default "No"
required: true // always required, not configurable
}
Storage: criterionScoresJson as { [criterionId]: true | false }.
Constraints:
- Max one per
EvaluationForm(enforced in form builder UI and server-side on upsert) - Always
required: true - No
weight— does not factor into numeric average - No
condition— always visible, never conditional
2. Round Config Addition
New field in EvaluationConfig (JSON column, no migration needed):
showJurorProgressDashboard: boolean // default false
Admin toggle in round config to enable/disable the juror progress view.
3. Juror Progress Dashboard
Location: Collapsible card above the project assignment cards on /jury/competitions/[roundId], gated by showJurorProgressDashboard.
Data source: New tRPC query evaluation.getMyProgress(roundId) returning:
{
total: number,
completed: number,
advanceCounts: { yes: number, no: number },
submissions: Array<{
projectId: string,
projectName: string,
submittedAt: Date,
advanceDecision: boolean | null,
criterionScores: Array<{ label: string, value: number }>,
numericAverage: number | null,
}>
}
UI:
- Progress bar:
completed / totalwith percentage (shadcn Progress) - Advance summary:
X YES · Y NOinline badges - Submissions table: Project Name | Numeric Average | per-criterion scores | Advance (green YES / red NO badge) | Date — sorted by
submittedAtDESC, submitted evaluations only
4. Admin Dashboard Changes
Summary card (AdvancementSummaryCard):
- Renders on round detail page for EVALUATION rounds when form contains an
advancecriterion - Donut/bar visual: YES / NO / Pending counts with percentages
Assignments table:
- New "Advance" column after Score column
- Green YES / red NO / gray "—" badges
5. Form Builder Changes
- New button
+ Advance to Next Round?alongside existing add buttons - Disabled with tooltip when one already exists in the form
- Edit mode:
trueLabel/falseLabelcustomization, description field,requiredlocked true, no weight/condition - Juror rendering: two prominent buttons with green/red color treatment
6. Scope Boundaries
In scope:
advancecriterion type (form builder, juror rendering, server validation)- Juror progress dashboard (gated by round config toggle)
- Admin summary card and table column
- One new tRPC query
Out of scope:
- No changes to
binaryDecisionfield orscoringMode: "binary" - No changes to AI summary generation
- No schema migration (all JSON columns)
- Export unchanged (advance values flow through
criterionScoresJsonautomatically)