'use client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' import { Textarea } from '@/components/ui/textarea' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' type EvaluationConfigProps = { config: Record onChange: (config: Record) => void } export function EvaluationConfig({ config, onChange }: EvaluationConfigProps) { const update = (key: string, value: unknown) => { onChange({ ...config, [key]: value }) } const advancementMode = (config.advancementMode as string) ?? 'admin_selection' const advancementConfig = (config.advancementConfig as { perCategory?: boolean; startupCount?: number; conceptCount?: number; tieBreaker?: string }) ?? {} const updateAdvancement = (key: string, value: unknown) => { update('advancementConfig', { ...advancementConfig, [key]: value }) } const visConfig = (config.applicantVisibility as { enabled?: boolean; showGlobalScore?: boolean; showCriterionScores?: boolean; showFeedbackText?: boolean }) ?? {} const updateVisibility = (key: string, value: unknown) => { update('applicantVisibility', { ...visConfig, [key]: value }) } return (
{/* Scoring */} Scoring & Reviews How jury members evaluate and score projects

Minimum number of jury evaluations needed

update('requiredReviewsPerProject', parseInt(e.target.value, 10) || 3)} />

How jurors assign scores to projects

How much of other jurors' identities are revealed

{/* Feedback */} Feedback Requirements What jurors must provide alongside scores

Jurors must write feedback text

update('requireFeedback', v)} />
{(config.requireFeedback as boolean) !== false && (

Minimum characters (0 = no minimum)

update('feedbackMinLength', parseInt(e.target.value, 10) || 0)} />
)}

Jurors must score every criterion before submitting

update('requireAllCriteriaScored', v)} />

Jurors must declare conflicts of interest

update('coiRequired', v)} />

Applicants must upload documents for this evaluation round (disable if documents were uploaded in a previous round)

update('requireDocumentUpload', v)} />

Allow jurors to see and comment on other evaluations

update('peerReviewEnabled', v)} />

Show jurors a dashboard with their past evaluations, scores, and advance decisions

update('showJurorProgressDashboard', v)} />
{/* AI Features */} AI Features AI-powered evaluation assistance

Generate AI synthesis of all jury evaluations

update('aiSummaryEnabled', v)} />

AI suggests which projects should advance

update('generateAiShortlist', v)} />

Rank projects using AI when all evaluations are complete

update('autoRankEnabled', v)} />

Natural-language criteria the AI uses to rank projects. E.g. "Prioritize innovation and ocean impact. Weight jury scores 60%, feasibility 40%."