How to Use Podium
Podium is a real-time hackathon judging platform. Follow the steps below to organize your event from start to finish. Each section includes an interactive demo you can try out.
Create Your Event
After signing in, you'll land on the Event Setup screen. Here you can create a new hackathon event or select an existing one.
- Enter an event name and year
- Each event gets a unique ID based on the name (e.g.,
hackprinceton-2026) - All your events appear as cards you can click to open
Interactive Demo
Launch New Event
Your events will appear here. Try creating one!
Setup Floors & Judges
The Admin Panel (Setup) is where you configure the venue and judging staff.
Floors
- Each floor has a name and a team number range
- Example: "Floor 1" covers teams 1-30, "Floor 2" covers teams 31-60
- Ranges must not overlap
Judges
- Add judges by name (one per line)
- Drag and drop judges between floors
- Or use Auto-Distribute to evenly spread them
Interactive Demo
Manage Floors
| Floor | Team Range |
|---|---|
| Floor 1 | 1 - 30 |
| Floor 2 | 31 - 60 |
Assign Judges to Floors
Unassigned (2)
Floor 1
Floor 2
Add Teams
The Teams page lets you populate your event with participating teams. There are multiple ways to add them:
Generate
Set a prefix, start number, and count to auto-create teams (e.g., "Team 1" through "Team 30").
Bulk Import
Paste a list of team names (tab, comma, or colon separated) for quick import from a spreadsheet.
Manual Add
Add teams one at a time with a custom number and optional name.
Teams are automatically assigned to floors based on their number and the floor ranges you configured. You can also pause teams to temporarily exclude them from judging.
Interactive Demo
Teams (0)
Assign Judges to Teams
The Assignments dashboard is where the magic happens. Select a floor, then assign judges to blocks of teams.
Auto Mode
- Select which judges to assign, then click Generate & Assign
- The algorithm assigns each judge a block of 5 teams
- It minimizes overlap and spreads reviews evenly
- Judges who have seen most teams are automatically marked as "Finished"
Manual Mode
- Select a specific judge and pick teams manually
- Already-judged teams are grayed out to prevent duplicates
- Useful for edge cases or special assignments
Judge Statuses: Busy = currently assigned, Assignable = ready for a new block, Finished = has seen nearly all teams.
Interactive Demo
Assignable Judges
Assignment Results
Select judges and click Generate to see assignments
Score Teams
From the Floor Dashboard or the Assignments page, click Enter Scores on a busy judge to open the scoring form.
Ranking System
1st Place
3 points
2nd Place
2 points
3rd Place
1 point
Unranked
0 points
Each rank is exclusive per judge — only one team can be 1st, one 2nd, and one 3rd per assignment. Judges can also leave optional comments on each team.
Interactive Demo
Enter Scores for Judge Alice
CyberSquad(#1)
DataDragons(#2)
CodeCrafters(#3)
ByteBuilders(#4)
PixelPioneers(#5)
Monitoring Views & Dashboards
While judging is in progress, Podium provides several real-time views to monitor the state of your event at every level.
Floor Dashboards
Each floor gets its own dedicated dashboard tab in the navbar. This is your primary view during active judging.
Judge Panel (Left Side)
- See all judges on this floor with real-time status badges: Busy Assignable Finished
- Search judges by name, filter by status, and sort by name or completed assignments
- See each busy judge's actively assigned teams listed as badges
- Track how many teams each judge has reviewed out of the total on the floor
- Click Enter Scores on any busy judge to immediately open the scoring form
Team Grid (Right Side)
- Cards for every active team showing review count and assigned judge avatars
- Filter teams by All / Assigned / Unassigned
- Sort by team number, most seen, or least seen
- Click any team card to see its full score detail breakdown
- Pause or unpause teams that leave early or have issues
Judge Details Modal
Click the settings icon on any judge to open their detailed view.
Currently Evaluating
See the exact teams the judge is currently assigned to. Remove individual teams from the assignment, or cancel the entire assignment.
Completed History
Full list of all teams this judge has already reviewed, with their total completed assignment count.
Move to Another Floor
Reassign a judge to a different floor (one-time switch). Only available when the judge has no active assignment.
Team Status Matrix
Click the grid icon on the Floor Dashboard or the Assignment Dashboard to open a bird's-eye view of all teams on a floor.
Each dot represents a team. Hover over any dot to see team details, review count, and active assignment status.
Per-Judge Matrix: You can also view a judge-specific matrix by clicking the grid icon on an individual judge. This shows only the assignments belonging to that judge, so you can see exactly which teams they've covered.
View Results & Export
The Results page gives you a complete overview of all scores.
Leaderboard View
- Teams ranked by average score
- See high, low, and average scores per team
- Filter by floor, search by name or number
- Sort by average, high, low, or team number
- Click any team to see detailed score breakdown
Matrix View
- Teams vs. Judges grid showing who reviewed whom
- Quickly spot gaps in coverage
- Exportable as CSV for external analysis
Export: Both the leaderboard and matrix can be exported as CSV files for sharing with organizers, sponsors, or for recordkeeping.
Interactive Demo
Final Results
Tips & Best Practices
Before the Event
- Create your event and set up all floors with the correct team ranges
- Add all judges and assign them to floors in advance
- Generate or import teams once table assignments are finalized
During Judging
- Use Auto Mode to quickly assign judges in rounds
- Monitor judge statuses on the Assignment Dashboard
- Use Floor Dashboards for a per-floor view of progress
- Pause teams that leave early or have issues
Scoring Tips
- Judges should rank their top 3 out of 5 teams per assignment
- Encourage judges to leave comments for the top teams
- Scores update in real-time across all connected devices
After Judging
- Check the Results page for the final leaderboard
- Use the Matrix view to verify all teams were reviewed
- Export CSVs for your records before closing the event
- Click on individual teams to see their full review breakdown
How the Assignment Algorithm Works
When you click Generate & Assign, Podium runs a multi-pass algorithm that distributes teams across judges as fairly and spread-out as possible. Here's a breakdown of every step.
1Shuffle Judge Order
The selected judges are randomly shuffled using the Fisher-Yates algorithm before any assignments are made. This prevents the same judges from always getting "first pick" of the best teams, and ensures fairness across multiple rounds of assignment.
2Detect Exclusive vs. Overlap Mode
The algorithm checks whether there are enough teams for each judge to get an entirely unique block of 5:
Exclusive Mode
When floor(availableTeams / 5) ≥ numJudges, each judge's 5 teams are locked exclusively — no two judges in the same batch see the same team.
Overlap Mode
When there aren't enough teams for exclusive blocks, overlap is allowed. Instead of locking teams, the algorithm uses a pressure map to minimize how many judges see the same team.
3Build Candidate Pool per Judge
For each judge, the algorithm filters out teams they've already reviewed in prior submitted assignments. This creates their candidate pool of teams they haven't yet seen.
// For each judge:
candidateTeams = allTeamsOnFloor
.filter(team => !judge.alreadyJudged.includes(team))
.filter(team => !lockedByOtherJudge(team))
// If fewer than 5 candidates remain, judge is skipped ("Finished")4Two-Pass Window Scoring
The algorithm slides a window of 5 consecutive teams across the candidate pool and scores each possible block. It uses a two-pass approach:
Pass 1: Strict
Finds the best block that does not share 4 or more teams with any existing assignment (submitted or active). This prevents judges from seeing nearly identical groups.
Pass 2: Relaxed
If Pass 1 finds nothing (all blocks are too similar), re-runs without the similarity check. This ensures every judge gets something, even if it overlaps more.
Scoring Formula
Each candidate window of 5 teams is scored. The lowest score wins:
totalScore = pressureScore × 1000 + closenessPenalty
PPressure Score
Sum of review counts for all 5 teams in the window:
This ensures judges are sent to teams that have been reviewed the fewest times, balancing coverage across all teams.
CCloseness Penalty
The spread of team numbers within the window:
Prefers tightly grouped teams so judges don't have to walk far between adjacent tables. A block of teams 5-9 scores 4 (closeness), while 5-20 scores 15.
Why multiply pressure by 1000? This ensures review balance is always prioritized over physical closeness. A block with fewer total reviews will always beat a closer block that has more reviews. The closeness penalty is only a tiebreaker.
5Spread Logic: Shuffled Search Order
To prevent assignments from clustering at the beginning of the team list, the algorithm shuffles the order it searches through window positions. Instead of always checking windows starting at team 1, then team 2, etc., it randomizes which starting positions are evaluated first.
// Instead of checking windows [0,1,2,3,4,5...]
// We shuffle to [4,1,5,0,3,2...] so the search
// doesn't always favor early team numbers
shuffledIndices = shuffle([0, 1, 2, ..., candidateTeams.length - 5])When multiple windows have the same score, the first one found (in the shuffled order) wins. This means even when all teams have zero reviews, the assignments will be naturally spread out across the floor.
6Overlap Reversal & Team Locking
After selecting a block of 5 teams for a judge, two final safeguards kick in:
Reversal (Overlap Mode)
If two judges in the same batch get the same 5-team block (only possible in overlap mode), the second judge's block is reversed. So if Judge A visits teams 5→6→7→8→9, Judge B visits 9→8→7→6→5. This prevents judges from colliding at the same table at the same time.
Team Locking (Exclusive Mode)
In exclusive mode, once a block of 5 teams is assigned to a judge, those teams are locked for the rest of the batch. No other judge in this round can be assigned overlapping teams.
7Cross-Batch Deduplication
Every newly assigned block within the same batch is added to the list of existing block signatures before the next judge is processed. This means each subsequent judge in the batch also avoids blocks that overlap ≥ 4 teams with blocks assigned earlier in the same generate operation, not just historical ones. The result: maximum team coverage diversity across all judges.
Algorithm Summary
Ready to organize your hackathon? Head back and create your first event.