From 0243d7e532c491df0dce5f0ef50e76cea26e2936 Mon Sep 17 00:00:00 2001 From: aamoghS Date: Thu, 19 Feb 2026 17:11:30 -0500 Subject: [PATCH] feat: setup Hackathon 2026, seed judges, and enhance admin judging dashboard --- .gitignore | 4 +- packages/db/src/schemas/hackathons.ts | 2 +- packages/db/src/schemas/judge.ts | 2 +- .../app/(portal)/admin-judging/page.tsx | 81 +++++++++++++++++++ 4 files changed, 86 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d347fad..ba419ef 100644 --- a/.gitignore +++ b/.gitignore @@ -60,4 +60,6 @@ packages/db/scripts/seed.ts packages/db/scripts/seed2.ts scripts/seed-stripe.ts packages/db/scripts/seed-judges.ts -packages/db/scripts/seed-projects.ts \ No newline at end of file +packages/db/scripts/seed-projects.ts +packages/db/final_judge_assignments.csv +packages/db/scripts/seed-2026.ts diff --git a/packages/db/src/schemas/hackathons.ts b/packages/db/src/schemas/hackathons.ts index aee7e5d..313e528 100644 --- a/packages/db/src/schemas/hackathons.ts +++ b/packages/db/src/schemas/hackathons.ts @@ -101,7 +101,7 @@ export const hackathonProjects = pgTable("hackathon_project", { name: text("name").notNull(), description: text("description").notNull(), technologies: text("technologies").array(), - tracks: text("tracks").array(), // Enum: GEN-AI, SPORTS, FINANCE, HEALTH, CYBER, NONE + tracks: text("tracks").array(), // Enum: Sports, Entertainment, Imagination, Finance, Healthcare, databricks, sphinx, growth factor, figma, actian, safety kit, GEN-AI, CYBER, NONE challenges: text("challenges").array(), // Enum: AGG, ASSURANT, AWS, CAPONE, GROWTH, MLH_MONGODB, MLH_STREAMLIT, MLH_TECH, MLH_CLOUDFLARE, MLH_REACH_CAPITAL isCreateX: boolean("is_create_x").default(false), teamMembers: text("team_members").array(), // Store names/emails if not fully linked diff --git a/packages/db/src/schemas/judge.ts b/packages/db/src/schemas/judge.ts index ec82418..6d754d0 100644 --- a/packages/db/src/schemas/judge.ts +++ b/packages/db/src/schemas/judge.ts @@ -48,7 +48,7 @@ export const judgingProjects = pgTable("judging_project", { teamMembers: text("team_members"), // comma-separated or JSON string projectUrl: text("project_url"), repoUrl: text("repo_url"), - tracks: text("tracks").array(), // Enum: GEN-AI, SPORTS, FINANCE, HEALTH, CYBER, NONE + tracks: text("tracks").array(), // Enum: Sports, Entertainment, Imagination, Finance, Healthcare, databricks, sphinx, growth factor, figma, actian, safety kit, GEN-AI, CYBER, NONE challenges: text("challenges").array(), // Enum: AGG, ASSURANT, AWS, CAPONE, GROWTH, MLH_MONGODB, MLH_STREAMLIT, MLH_TECH, MLH_CLOUDFLARE, MLH_REACH_CAPITAL isCreateX: boolean("is_create_x").default(false), createdAt: timestamp("created_at").defaultNow().notNull(), diff --git a/sites/mainweb/app/(portal)/admin-judging/page.tsx b/sites/mainweb/app/(portal)/admin-judging/page.tsx index 268ce2b..f918b82 100644 --- a/sites/mainweb/app/(portal)/admin-judging/page.tsx +++ b/sites/mainweb/app/(portal)/admin-judging/page.tsx @@ -32,6 +32,11 @@ export default function AdminResultsPage() { { enabled: !!selectedHackathon } ); + // Get judges + const { data: judges } = trpc.judge.list.useQuery(undefined, { + enabled: !!session && !!adminStatus?.isAdmin, + }); + useEffect(() => { setMounted(true); }, []); @@ -525,6 +530,82 @@ export default function AdminResultsPage() { )} + {/* Judge Roster Section */} +
+
+
+

Operations Personnel

+

+ Judge Roster +

+
+
+ Active: {judges?.filter(j => j.isActive).length || 0} Nodes +
+
+ + +
+ + + + + + + + + + + {judges?.map((j) => ( + + + + + + + ))} + {!judges?.length && ( + + + + )} + +
JudgeContactAssigned TracksStatus
+
+ {j.name +
+

{j.name}

+

{j.specialty || 'Generalist'}

+
+
+
+

{j.user?.email}

+
+
+ {j.assignments + .filter(a => a.hackathonId === selectedHackathon) + .map((a, i) => ( + + {a.track || 'Unassigned'} + + ))} +
+
+ + {j.isActive ? 'Active' : 'Offline'} + +
+ No judges registered in the central database. +
+
+
+
+ {/* Global Stats */} {rankings && rankings.rankings.length > 0 && (