RoboTech is GT IEEE's annual robotics hackathon. In 2026 the event scaled to 120+ participants across three competition tracks — Beginner, Controller, and Autonomous — with 30+ judges scoring teams across two phases. The scoring platform I built handled all of it in real time, from team registration through final rankings.

Source is closed — the system contains judge scores, team data, and user accounts — but the live app is publicly accessible and I'm happy to walk through the architecture. View live app →

What it does

  • Live scoring — Firestore real-time listeners push score changes and phase transitions to every connected client instantly. No polling, no refresh.
  • Leaderboard — competitors see live rankings filtered by track. Scores aggregate automatically as judges submit.
  • Role-based access — four distinct roles each have a tailored interface. Firestore security rules enforce permissions at the database, not just the UI.
  • Judge management — admins assign judges to teams per phase and track submission progress live.
  • Audit trail — every sensitive action (score edits, phase transitions, judge assignments) writes to an append-only log with actor ID, timestamp, and before/after state.
  • Bulk import — super admins can import teams from a structured file. Each team gets a unique code for competitor login.

Scoring

Every score has two components — Task Performance and Feature Score — each worth up to 50 points, for a maximum of 100. Feature weights differ per track to reflect what each competition type values.

  • Task = 10 × (Execution × 0.4 + Difficulty × 0.3 + Design × 0.3)
  • Feature = 10 × (Mechanical × w₁ + Software × w₂ + Electrical × w₃ + Design × w₄)

Track weights:

  • Beginner — Mech 20 · SW 30 · Elec 20 · Design 30
  • Controller — Mech 30 · SW 20 · Elec 30 · Design 20
  • Autonomous — Mech 10 · SW 55 · Elec 15 · Design 20

Competition flow

The competition runs in two locked phases controlled by admins. The system blocks a phase from closing until all assigned judges have submitted.

  • Phase 1 — all teams scored by multiple judges; scores averaged across all assigned judges; top N teams advance via auto or manual selection
  • Phase 2 — admin designates a single Final Judge; that score is the definitive result; Phase 1 scores preserved in the audit trail

Roles

  • Super Admin — full system control: invite users, configure competition settings, bulk import teams, read access to every action
  • Admin — competition day-of: assign judges, monitor scoring progress, advance phases
  • Judge — scores assigned teams across all criteria; sees anonymized peer scores after their own submission locks
  • Competitor — logs in with a team code; views their scores, judge comments, and live leaderboard position

Security

  • Firestore security rules explicitly allow/deny per collection — judges cannot read other judges' scores before submitting, competitors have zero write access
  • All input validated before writing to Firestore; score values validated server-side to the 1–5 range
  • Append-only audit log on every sensitive mutation

Stack

  • React 18, TypeScript, Vite
  • Firebase — Firestore, Firebase Auth, Cloud Functions
  • Deployed on Firebase Hosting