Versus02
Rank anything by comparing two items at a time — text, images or colours — then publish the ranking and let a crowd vote on it live.












- Timeline
- Sept 2026 —
- Role
- design + build
- Author
- Steeve Pommier
- Stack
- TypeScript, Vite, Cloudflare Workers, Durable Objects, Cloudflare D1, Cloudflare R2, Vitest, Playwright
- AI
- Vibecoded
Picking a favourite out of twenty is hard; picking one of two is easy. Versus asks only the easy question — this one or that one — again and again, and turns those quick duels into a real ranking, with a podium and a margin of error. Items can be text, images (dropped or pasted, downscaled in the browser) or colours and gradients from an inline editor; a whole list pasted at once becomes items too.
Four ways to score the same duels
Every duel is kept, so the scoring method can change at any time without losing a vote:
| Method | Algorithm | Best for |
|---|---|---|
| Balanced (default) | Bradley-Terry, fitted on all duels at once, with a ± margin per item | Things that do not change: photos, products |
| Dynamic | Elo, duel by duel | Preferences that drift over time |
| Simple | Smoothed win rate | Readability |
| Exact sort | Binary insertion sort | Settling a short list in the fewest duels |
The results page can put two methods side by side, which shows where a ranking is still fragile. Pair selection favours items with few duels, close positions and unseen pairs.
Local first, published on request
The app runs in the browser, keeps everything in localStorage, installs as a PWA and works offline. Only what you publish leaves the device: a published board gets a link, and a crowd votes on it in real time — one Durable Object per board holds the votes and the WebSockets, a D1 registry lists the boards, pictures wait in R2 until they are approved. Rankings, a crowd's result or a single duel can be shared as an image drawn in the browser, and a board's link unfurls with its own card.
It ships in English and French, the home page included, with no UI framework and three runtime dependencies — all of them fonts.



