← All work
In production - used every week

SMVIT DebSoc

The software my debating society actually runs on. It decides who debates whom, and it checks its own work before a human signs it off.

Live477 commitsEval harnessHuman review gate

What it does

Every week a debating society has to answer an annoying question: who debates whom, in which position, judged by whom? Do it badly and the same two people meet for the fourth time, a beginner gets thrown against the national team, and nobody improves.

Most clubs do it by hand on a whiteboard. I built a pairing engine instead. It knows the history, weighs a stack of metrics, generates candidate arrangements, scores them, and proposes one.

The part I care about most is what happens next. The proposal is not applied. A human reviews it. And a separate evaluation harness exists purely to judge whether the engine is getting better or just getting different.

See it work

Click any stage to read what it does, or press the button to walk the whole thing.

The decision that mattered

The pairing engine generates proposals. The eval harness judges them.

A probabilistic engine that tunes itself has an obvious failure mode: you change a weight, the output changes, and you have no idea whether it got better. It feels better. That's not the same thing.

So the engine and its judge are separate systems. The harness replays fixed historical sessions and reports whether a change actually reduced repetition and improved room balance, or merely moved things around. And the whole thing is written down in the docs as a rule: the engine should generate strong proposals, not act as an unquestionable black box.

Press Show the eval harness and step through again to see which stages it holds fixed.

477commits in the repo
203of them mine
19API surfaces
18architecture docs

Built with

Next.jsPostgreSQLPrismaRedisWebSocketsNextAuthVercel
← DebateIQ All work Regulated AI, banking →