Versa

A live daily word game from Dear Barry Games. The player experience is simple. Behind it is a quality system for generation, model evaluation, human review, curation, and product learning.

0→1 product AI evaluation Human-in-the-loop PostHog Responsive product AI-native workflow
Play Versa ↗ Try Versa Review ↗
Current Versa Review interface showing the queue, candidate details, model insights, and human annotation panel.
Versa Review V3. The current workflow gives the human decision more visual priority than the model score.

The challenge

Generation was easy. Deciding what should ship was not.

I co-founded Dear Barry Games with my mum and launched Versa, a daily word game built around antonyms and multiple meanings of one answer.

Three versions of the Versa player interface showing the evolution of the live game.
Player product evolution. I kept simplifying the interface as I learned what players needed.

A daily game needs new content every day. Language models can create many candidates quickly, but a candidate still has to be correct, fair, clear, well ordered, and interesting enough to publish.

I did not want model-generated content to go directly to players. I needed a quality system between generation and release.

1,408 → 90 Only 6.4% of evaluated candidates reached final selection.
54.5% Failed at least one explicit quality gate.
55% Of multiply-reviewed candidates produced conflicting human verdicts.
70.5% Of human-flagged bad-antonym cases had model antonym scores of 95+.

Analysis based on 1,408 evaluated candidates and 562 human review decisions exported on 9 August 2026.

The quality system

I designed a multi-stage path from candidate generation to publication.

01Generate

Create a broad candidate pool using specialized generation roles.

02Quality gates

Reject known structural failures with explicit rules.

03Cross-model evaluation

Use same/near-family and cross-family judges to score the same candidate.

04Human review

Inspect model evidence, clues, difficulty, and quality issues.

05Resolve disagreement

Keep separate judgments visible and send conflicts to discussion.

06Curate + publish

Select the final mix instead of publishing every accepted item.

07Measure

Use live player behavior to test whether pre-release judgments were useful.

Two model judges, one shared rubric

Each candidate is evaluated by a same or near-family model and a cross-family model. Both score the candidate across the same quality dimensions.

Distinct senses Antonym accuracy Tier ordering Aha quality Fairness Language quality Spoiler safety

I did not rely only on LLM-as-judge scores

I added hard quality gates for failures that should block a candidate even when an evaluator sounds positive. These rules include repeated clue words, weak antonym accuracy, insufficiently distinct meanings, and spoiler failures.

Design principle: use model judgment for nuance, deterministic rules for known constraints, and humans for contextual judgment.

1,408Evaluated
593Model shortlisted
437Human reviewed
172Ready / accepted
111Unique ready answers
90Final selections

What the data showed

The models reduced the search space. They did not make the release decision.

54.5%

Explicit quality gates did real work.

767 of 1,408 candidates failed at least one hard gate. The main automated failures included repeated clue words, low antonym accuracy, and insufficiently distinct meanings.

18.8%

The two model evaluators disagreed on almost one in five candidates.

The same/near-family and cross-family judges agreed on 81.2% of verdicts. Their scoring behavior also differed, so I do not treat a judge score as a universal measurement.

51.2%

A model score of 95+ still did not mean “ship it.”

Only 51.2% of human reviews on candidates scoring 95 or higher were direct accepts. The rest went to discussion, rejection, or further consideration.

54.8%

Human judgment was not automatically consistent either.

115 candidates received more than one human review. 63 produced conflicting verdicts. This turned the product from a simple approval tool into an adjudication workflow.

95.2%

Model agreement did not guarantee human agreement.

In 60 of the 63 human-conflict cases, the two model evaluators had agreed on the verdict. Their median score difference in those cases was only two points.

What changed

The system needed evidence and adjudication, not only scoring. Model judgment helped reduce the search space. Humans found contextual failures. Humans also disagreed with each other, so I kept individual judgments, notes, conflicts, and discussion states visible.

Versa Review

The evaluation pipeline created an operating-product problem.

Reviewers needed a practical way to inspect candidates, understand model evidence, record judgments, and resolve conflicts. I built Versa Review around that task.

The reviewer can inspect clues and model insights, accept or reject a candidate, send it to discussion, change difficulty, add quality tags, leave notes, and see existing human reviews.

Versa Review V1 desktop interface.
V1Prove the workflow

The core review flow worked, but the interface was dense and desktop-first.

Versa Review V2 desktop interface.
V2Improve structure

I separated model evidence, candidate information, and human annotation more clearly.

Versa Review V3 desktop interface.
V3Design around the reviewer

Queue, candidate evidence, and the human decision now have a clearer hierarchy.

Real users changed the architecture

The first implementation failed on phones.

My parents helped with real Versa reviews and often did the work on their phones. The first interface was not responsive and was difficult to use on a small screen.

I tried to adapt the existing implementation, but the desktop interaction model did not translate well. I stopped patching it, removed the implementation, and rebuilt the review product from scratch.

The rewrite uses different interaction patterns for the available space. Desktop can show several parts of the workflow together. Tablet uses panels when needed. Phone focuses the flow around queue → candidate → annotation.

Lesson: an internal tool is still a product. If it does not work where people actually perform the task, the system does not work.

AI-native build workflow

I used different AI tools for different parts of the work.

I use omp as my development harness. I orchestrate work across specialized agents and models instead of expecting one coding assistant to handle product strategy, design exploration, implementation, and review equally well.

01

Explore

I used Claude Design, Google Stitch, Kimi K3, and Emil Kowalski's prototype skill to test different UI approaches before committing to an implementation.

02

Define

I used my own Design Studio tool to define typography, color, semantic tokens, accessibility, elevation, and themes before handing rules to coding agents.

03

Orchestrate

omp is the harness I use to route work across agents, models, and coding tasks while keeping the product context in one workflow.

04

Validate

I tested the product with real reviewers, compared model and human evaluation results, and used production analytics after launch.

omp Claude Design Claude Code Google Stitch Kimi K3 Emil's prototype skill ↗ Design Studio Google Design MCP PostHog LLM APIs

A tool became another product

Design Studio started as an artifact I built for myself.

I kept seeing the same problem in AI-assisted coding: agents can implement interfaces quickly, but they can make inconsistent visual decisions when the design rules are not explicit. Design Studio helps me define and test those rules first. It now connects with Google Design MCP and is becoming a standalone product.

Design Studio is a separate portfolio project. It appears here only because it became part of the Versa build workflow.

After release

The evaluation loop now meets the product analytics loop.

Versa Review tells me what the system believes about a puzzle before release. The live game gives me another source of evidence after release.

I instrumented the player journey in PostHog across game views, starts, guesses, clue reveals, hint use, completion, sharing, archive navigation, and repeat play.

Before release

Is this a good puzzle?

Model scores, hard gates, human verdicts, difficulty changes, tags, and reviewer disagreement.

After release

Did players experience it as a good puzzle?

Completion rate, completion time, wrong guesses, clue use, hints, sharing, streaks, acquisition, and retention.

The long-term goal is not to maximize an evaluator score. It is to learn which pre-release signals actually predict a good player experience.

Next steps

Turn real failures into the next evaluation set.

The review data now gives me something more useful than hypothetical test cases: examples that passed model evaluation but failed human review.

01

Build regression sets from real failures

Create semantic-validity cases from bad-antonym failures, redundancy cases from duplicate-clue failures, and calibration cases from human disagreements.

02

Test every evaluator change against them

When I change a prompt, rubric, threshold, evaluator model, or generation strategy, measure whether the new system catches failures the old one missed.

03

Improve reviewer calibration

Use overlapping reviews to separate genuine subjective differences from unclear evaluation criteria.

04

Connect quality signals to player behavior

Test whether model scores, human verdicts, difficulty, tags, or disagreement predict completion, clue use, wrong guesses, sharing, or retention.

What this project demonstrates

AI product judgment, evaluation design, failure analysis, human-in-the-loop systems, product analytics, responsive product iteration, technical execution, and AI-native ways of working.