Work
Interface2026Design & buildShipped

The Nine

A forced-choice Enneagram test with persistent shareable results, length-normalized cross-comparison between people, and an AI-written reading for a chosen relationship context.

Vanilla JSVercel serverless functionsUpstash KVGLM-5

The Nine is a forced-choice Enneagram test I built for myself and my partner: take it at three lengths (Quick 36, Standard 72, or the RHETI-scale Full 144 plus 15 instinct items), save a result to a shareable link, and drop two or more results into one group to see how they compare.

Why forced choice, not a 1-5 scale

Most online Enneagram tests ask you to rate agreement with a statement, which lets everyone rate themselves a 4 or 5 on the statements they like the sound of. Forced choice — pick the truer of two statements, even if neither is perfect — removes that escape hatch. It's a harder test to take and a more honest one to score.

Why length has to be normalized before comparing

A raw score from the 36-item test and a raw score from the 144-item test aren't the same unit — more items means more total signal, so the totals aren't comparable across people who took different lengths. Every score shown, in a single result or a group comparison, is normalized to a share-of-attention percentage first. That's the detail that makes "how do we compare" an honest question instead of a coincidence of test length.

What's shown here, and what isn't

This piece shows the test-taking mechanic itself — the group screen, the length picker, the question card and its progress ring — because that's the reusable, general-purpose part of the build. What it doesn't show is any actual result: not a type score, not a comparison, not the AI-written relationship reading the app can generate once two people have both taken it. Those are personal to whoever took the test — in this case, largely me and my partner — and a screenshot of a real result is a screenshot of two real people's private answers about each other, which isn't something to publish regardless of how the interface around it looks. The screens above are a fresh, untouched instance of the app with nobody's answers in it.