'use client' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { AlertTriangle } from 'lucide-react' import { scoreGradient } from './chart-theme' interface JurorMetric { userId: string name: string evaluationCount: number averageScore: number stddev: number deviationFromOverall: number isOutlier: boolean } interface JurorConsistencyProps { data: { overallAverage: number jurors: JurorMetric[] } } function ScoreDot({ score, maxScore = 10 }: { score: number; maxScore?: number }) { const pct = ((score / maxScore) * 100).toFixed(1) return (
{score.toFixed(1)}
) } export function JurorConsistencyChart({ data }: JurorConsistencyProps) { if (!data?.jurors?.length) { return (

No juror consistency data available

) } const outlierCount = data.jurors.filter((j) => j.isOutlier).length const sorted = [...data.jurors].sort((a, b) => b.averageScore - a.averageScore) return (
{/* Juror Scoring Patterns — bar-based visual instead of scatter */} Juror Scoring Patterns Overall Avg: {data.overallAverage.toFixed(2)} {outlierCount > 0 && ( {outlierCount} outlier{outlierCount > 1 ? 's' : ''} )}
{sorted.map((juror) => (
{juror.name}
σ {juror.stddev.toFixed(1)} {juror.evaluationCount} eval{juror.evaluationCount !== 1 ? 's' : ''}
{juror.isOutlier && ( )}
))}
{/* Overall average line */}

Bars show average score per juror. σ = standard deviation. Outliers deviate 2+ points from the overall mean.

{/* Juror details table */} Juror Consistency Details {/* Desktop table */}
Juror Evaluations Avg Score Std Dev Deviation Status {sorted.map((juror) => ( {juror.name} {juror.evaluationCount} {juror.averageScore.toFixed(2)} {juror.stddev.toFixed(2)} {juror.deviationFromOverall >= 0 ? '+' : ''}{juror.deviationFromOverall.toFixed(2)} {juror.isOutlier ? ( Outlier ) : ( Normal )} ))}
{/* Mobile card stack */}
{sorted.map((juror) => (
{juror.name} {juror.isOutlier ? ( Outlier ) : ( Normal )}

Avg Score

{juror.averageScore.toFixed(2)}

Std Dev

{juror.stddev.toFixed(2)}

Evals

{juror.evaluationCount}

))}
) }