← back to projects

case study

ModelVerdict — an LLM arena for your own prompts

LLMArenaEvalTypeScript

Problem, architecture and tradeoffs behind a side-by-side LLM comparison tool

the problem

Picking an LLM for a feature usually goes like this: skim a leaderboard, pick the highest-ranked model you can afford, and hope. But leaderboards measure aggregate performance on benchmark tasks — not your prompts, your tone requirements, your output format. The mismatch shows up in production.

ModelVerdict makes the comparison cheap: one prompt in, two answers out, side by side, and you pick the winner.

architecture

 ┌──────────┐      one prompt
 │  client   │ ───────────────────────┐
 └──────────┘                         ▼
                              ┌───────────────┐
                              │  api route     │
                              │  (next.js)     │
                              └───┬───────┬───┘
                       parallel   │       │   parallel
                        stream A  ▼       ▼  stream B
                        ┌──────────┐  ┌──────────┐
                        │ model A   │  │ model B   │
                        └─────┬────┘  └─────┬────┘
                              │             │
                              ▼             ▼
                     side-by-side streaming UI → verdict

Key decisions:

tradeoffs i made

decisionwhycost
stream raw text, no markdown render during streamingfair visual comparison, no layout jumpingfinal answer re-renders once at the end
no automatic judgehuman eyes are the eval — that's the pointdoesn't scale past manual use
verdicts stored client-side onlyzero backend state, deploys anywhereno cross-device history

what i'd do differently

↗ view the code

⌘K