James Chang
/
Work
/
The Judge Tool
/
Changelog
Judge Tool:
Under the hood
Roadmap & health
Changelog
Judge Tool · Changelog · Last Updated April 15, 2026
14 releases in 20 days.
v0.0.1 → v0.14.0 between Mar 6–26, 2026. Every release categorized:
feature, fix, perf, refactor, test, docs, or security. Full app scaffolded
in one session, then methodically hardened.
14 releases (v0.0.1 → v0.14.0)
83 individual changes tracked
13 development sessions
+16,395 / −9,237 net lines changed
Change-type distribution
Features
31 (37%)
Fixes
13 (16%)
Refactor
12 (14%)
Docs
12 (14%)
Security
7 (8%)
Tests
7 (8%)
Perf
1 (1%)
Releases
v0.14.0
Mar 26, 2026 · Session 13
security
Vercel migration & security hardening
Migrated app hosting from Render Pro to Vercel free tier — $49/mo savings
Hashed competition judgePin with bcrypt — eliminated plaintext PIN storage
Added TypeScript module augmentation for next-auth — removed unsafe type casts
Split auth into auth.config.ts (Edge-safe) and auth.ts (Node.js)
Marketing site moved to GitHub Pages, separate from app
12 files changed · +180 / −95
v0.13.0
Mar 19, 2026 · Session 12
feature
Static marketing site
Separated static marketing site into its own marketing/ directory
Independent deployment from the app
Added package.json for Render static site config
v0.12.0
Mar 18, 2026 · Session 11
feature
Marketing landing page
Full marketing landing page: hero, pain points, judge section, feature comparison, CTA
Dark mode with system preference detection
Mobile responsive across all sections
Middleware updated to allow unauthenticated access to /
8 files changed · +1,850 / −25
v0.11.0
Mar 17, 2026 · Session 10
feature
Meta pages — Roadmap, Changelog, Status, Analytics
Added /roadmap with health scorecard, phased roadmap, risk register, velocity
Added /changelog with release cards, change-type distribution, expandable details
Added /status with live API health checks
Added /analytics with product metrics
MetaPageNav shared component; MermaidDiagram for client-side rendering
12 files changed · +2,400 / −50
v0.10.0
Mar 16, 2026 · Session 9
improvement
Tech page overhaul
Rewrote /tech into 11-section build teardown
Cost comparison (US dev shop vs offshore vs AI-assisted)
AI development workflow section with delegation split documented
Mermaid architecture flowchart + 3 ERD diagrams
CollapsibleSection component using native HTML details/summary
7 files changed · +2,190 / −324
v0.8.0
Mar 11, 2026 · Session 7b
security
Code review fixes & architecture cleanup
Split monolithic competition/actions/index.ts (1,200+ lines) into 6 focused files
Security hardening on server-action auth patterns
Performance improvements on Prisma queries with selective includes
Fixed edge cases discovered during code review
37 files changed · +1,785 / −1,728
v0.7.0
Mar 11, 2026 · Session 7a
improvement
Diataxis docs, E2E simulation & accessibility
E2E competition simulation — 2,000+ assertions: seed → distribute → score 4 cats → tabulate → validate
Simulation generates markdown report at reports/simulation-report.md
Restructured docs into Diataxis framework (15 docs): tutorials, how-to, reference, explanation
Fixed 3 DQ edge-case bugs that unit tests missed
85 files changed · +3,533 / −148
v0.6.0
Mar 10, 2026 · Session 6
security
WCAG accessibility, OWASP security & spec gaps
WCAG pass — ARIA labels, keyboard navigation, focus management
OWASP security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
Sliding-window rate limiter (5 attempts / 15 min) on both login providers
Failed login attempts logged with timestamp
Test count: ~40 → 113 across 25 suites (+3 new edge-case suites)
47 files changed · +1,657 / −258
v0.4.0
Mar 9, 2026 (mid) · Session 4
feature
Box distribution algorithm
Latin square box distribution generator — no repeat competitor at same table across categories
Distribution approval workflow with cascading delete guard
Category submission dialog for table captains
Server-side gates for competition state transitions
188 unit tests for the distribution generator alone
17 files changed · +1,006 / −100
v0.3.0
Mar 9, 2026 (AM) · Session 3b
security
Security hardening
Created auth-guards.ts: requireAuth(), requireOrganizer(), requireJudge(), requireCaptain()
Retrofitted all 62 server actions with auth guards
Derived all user IDs from session — eliminated IDOR
Captain actions verify table.captainId === userId
Wrapped multi-step mutations in prisma.$transaction
15 files changed · +172 / −173
v0.1.0
Mar 8, 2026 · Session 2
feature
Complete application build
The big one — full app in one session.
Prisma schema (12 models)
5 feature modules with full structure (competition, judging, scoring, tabulation, users)
NextAuth.js v5 with JWT strategy and 3 Credentials providers
Dashboard shell with role-based sidebar navigation
KCBS scoring constants and engine
Judge flow (4-phase setup: not-registered → awaiting-table → pick-seat → ready)
Scoring components (ScorePicker, ScoreCard, SubmissionQueue)
Captain dashboard (TableStatusBoard, ScoreReviewTable, CorrectionRequestPanel)
Tabulation engine (weighted scoring, drop-lowest, KCBS tiebreaking)
Results page (4-tab layout with 15s polling)
Design system: 11 common components + 10 UI primitives
130 files changed · +14,396 / −1,605 — later flagged in retrospective as "don't build the whole app in one commit."
v0.0.1
Mar 6, 2026 · Session 1
feature
Project scaffolding
Next.js 14.2 with TypeScript strict mode and App Router
Tailwind CSS v3 with custom deep red theme (#C0392B)
Path aliases: @/*, @features/*, @shared/*
shadcn/ui configured for new-york style
Initial CLAUDE.md with project constraints