An unlisted text classification game. Match every displayed range, then press Enter or the submit button. Fewer words earn more points. Normal editing is the default. Settings → Hard mode makes text append-only: no Backspace, Delete, cut, undo or replacement of committed text. Pasting appends at the end; uncommitted IME composition remains editable. The mode preference is saved locally. The same text field remains mounted and keeps focus between rounds. There is no transcription API.
The interface uses literal labels, a fixed viewport and no page scrolling. While the keyboard is open, targets use the available space above a single-line entry with inline submit. The title row is compact and secondary footer links are hidden; classifications remain available in Settings. The footer returns when the keyboard closes. Other classifications open in an overlay. Settings contains Hard mode, success sound, the front-camera toggle, restart and measured usage. Remix on Val Town is prominent below the game when the keyboard is closed. The front camera is a mirrored local preview in the bottom half, with a saved 1×–3× digital zoom slider. It shrinks at keyboard heights to keep the game visible. It is for the user's own screen recorder. The app does not record, save, upload or request microphone access.
| Completed levels | Axes | Window width |
|---|---|---|
| 0–1 | 1 | 30 percentage points |
| 2 | 1 | 20 points |
| 3–4 | 2 | 24 points |
| 5–7 | 3 | 20 points |
| 8 onward | 3 | 10 points |
Targets use warmth, urgency, conviction, formality and passive-aggressiveness. Four original five-level rubric scores map to 0–100. Passive-aggressive is Jev's yes-probability, not an intensity measure. Values round to one decimal before both display and inclusive range checks. Multi-axis combinations were adjusted against 18 actual Jev sentence probes to avoid obviously conflicting targets; the internal difficulty values remain provisional, not empirical Elo ratings.
Scoring: (100 × axes + max(0, 300 − 15 × words)) × multiplier. The multiplier increases every three consecutive clears, capped at four. Skipping resets the streak and changes the prompt without increasing difficulty. Every run has its own random seed, shuffled target order, shuffled multi-axis selections and slightly varied ranges. Refreshing preserves that run; restarting draws a new seed. Progress and drafts persist locally; simulated and live progress are separate.
All 16 original classifications run together on every live request. Inactive results appear in Other classifications without another request. Outputs are free, but their question instructions still add input tokens.
The serial request scheduler uses a 130ms debounce and a 450ms scheduling window, coalesces edits, ignores stale responses for scoring and records their actual token usage. Up to 80 identical results are cached in memory. Errors require an explicit retry; there is no polling or retry loop.
Jev's published price, verified September 16, 2026, is $0.042 per million input tokens; free output. Primary source.
Ten short-sentence probes using all 16 classifications averaged 873 input tokens per update. The ten requests used 8,730 tokens and cost $0.00036666. At this measured token size, $5 buys approximately 136,364 updates.
| Assumed updates per completed level | Levels per $5 |
|---|---|
| 10 | 13,636 |
| 25 | 5,455 |
| 50 | 2,727 |
These are explicit scenarios, not measured averages of human gameplay. One million updates of this size cost about $36.67. One million levels at 25 updates each cost about $916.65. Hosting is excluded. Longer text and different request content change token usage. Settings shows a local projection using actual input tokens divided by observed clears, including requests on skipped/unfinished rounds. It excludes unresolved failed requests and is not a representative multiplayer sample.
The inherited SQLite budget defaults to $2, independently of the $5 comparison above. Atomic reservations reconcile successful calls against actual usage and conservatively retain ambiguous failed reservations. Text is limited to 800 characters, with inherited per-IP/global burst controls.
Store TYPESAFE_API_KEY server-side in environment variables. The model defaults to jev-latest. No key appears in client code. Without a key, the interface explicitly labels simulated scoring and leaves model-only extra readings blank.
tests/game.ts: range boundaries, incomplete results, all-axis scoring, brevity, streak cap and 1,000 generated rounds.tests/budget.ts: rejects an over-budget reservation without spending tokens.tests/live-probe.ts: ten small actual-model probes; will consume a fraction of a cent when explicitly run with a key.tests/playtest-results.json: 18 observed readings used to select compatible multi-axis targets.tests/mobile.html: phone and keyboard-height iframe layout checks, including a synthetic camera fixture that exercises the production zoom component without a physical camera or Jev calls.
Browser checks cover live scoring, Enter advancement, retained focus, stale-result protection and mobile layout. Physical iPhone dictation, camera permissions and OS screen recording require device verification. Front-camera failure is handled in the interface; closing it or leaving the page stops camera tracks.
HTML/API responses are uncached; browser modules have immutable version URLs. Application logs include timing, usage and outcome metadata without user text or camera data.