Clarity Judge/How it works
…No run yet

Text in, verdicts back.

Jev doesn't write anything. It reads your text once and answers every check in the same request with structured values and probabilities.

Open the judge
  1. 01
    You pick the checks

    Each check is one specific question with a fixed answer shape. Seven ship with the app; you can add your own.

  2. 02
    Checks become typed questions

    Yes/No checks become noul questions, option checks become choice questions. The text goes along as Jev's state.

  3. 03
    One batched verdict request

    The browser posts to this app's own /api/judge route, which forwards to Jev with the server key or the key saved in your browser.

  4. 04
    Answers are normalised

    A probability per Yes/No, a pick plus per-option probabilities per choice. Anything missing or malformed becomes Needs review, never a pass.

  5. 05
    Evidence is picked

    In live mode a second, optional request asks Jev which sentence drove each answer. If that fails, or in demo mode, a local keyword match picks one and labels it approximate.

  6. 06
    The summary is built

    Passes, issues, and low-confidence flags are counted and the takeaway line is written. Moving the threshold recomputes flags locally, with no new request.

Confidence

For pick one checks Jev returns a confidence value directly. For Yes/No checks it returns only the probability of yes, so the app derives confidence as how far that probability sits from a coin flip:

confidence = max(p, 1 − p)

A probability of 0.92 is 92% confident. A probability of 0.5 is 50%, genuinely unsure, and always flagged at the default threshold of 70%. Confidence is Jev's probability for its own answer, not a measure of whether that answer is right.

The topbar shows latency measured in the browser and the verdict request's input tokens as Jev reported them. The optional evidence request is not counted, so treat it as a readout, not a bill.

Keys and privacy

The server key is read only in the server layout and API route and reaches the browser as a single true/false. A key you save in the browser lives in localStorage, is masked while you type, is never displayed again, and travels only as a header to this app's own route.

Live runs send your text to TypeSafe. Demo mode sends nothing anywhere: the answers are seeded from the text and the question, so the same input always gives the same simulated result.

Error messages pass through a redaction step that masks anything key-shaped, and a pre-commit hook plus CI scan the repo for credentials. Those controls reduce risk; nothing here is an absolute guarantee.

Clarity Judge · Judged by TypeSafe JevDecisions, not scores.
Credentials

Your TypeSafe API key

No key anywhere yet, so results are simulated. Paste a TypeSafe key to get real verdicts from Jev.

Stays in this browser until removed or site data is cleared. Masked on screen, sent only to this app's own /api/judge route, and never displayed again. Get one at typesafe.ai.
Set it on the server instead
  1. In the Vercel dashboard open this project, then Settings → Environment Variables, and add TYPESAFE_API_KEY for Production. Or from the repo:
    vercel env add TYPESAFE_API_KEY production
  2. Redeploy so the variable is picked up:
    vercel --prod

A server key is shared by everyone who can open this URL, and every run spends its credits. For a public demo, leave it unset and let each visitor paste their own key.

The key stays on the server. The browser only talks to this app's own /api/judge route.