Skip to content
Anxin (安心)

Anxin (安心)

Peace of mind, verified twice.

Created on 5th September 2026

•

Anxin (安心)

Anxin (安心)

Peace of mind, verified twice.

The problem Anxin (安心) solves

A scam text lands on a parent's phone. They read Chinese. The person best placed to warn them: their adult child — reads English. So the message gets forwarded around the family group, and nobody is sure. The tools that could settle it speak one of those languages, and answer with a confident paragraph you're meant to take on faith.

Anxin (安心, "peace of mind") takes a forwarded message, a link, or a screenshot and returns, in English and Simplified Chinese:

  • a Truth Score (0–100): how strongly evidence supports the claim
  • a separate scam-risk score: a plausible message can still be a scam, so the two are never merged
  • three plain-language warning signs and what to do next: never "call the number in the message"
  • the Gonka Request ID and public receipt behind every model call

How it earns trust: two independent models (DeepSeek and MiniMax) on the Gonka network, called concurrently on identical evidence, neither shown the other's answer, pinned with X-Gonka-No-Fallback. Disagreement is shown, not averaged: within 20 points they agree, 21–40 drops confidence, beyond 40 we say insufficient. If no sources were found, confidence is capped. A precise score resting on nothing is the most misleading thing we could display.

What it holds back: no account, nothing stored; phone and account numbers masked before any model sees them; screenshots read by local OCR only, with the text shown for correction first; every warning is colour plus an icon plus words, in large type — for readers who are older, colour-blind, or on a bad screen.

Live: https://anxin-protect.com. And if what got forwarded is a meme, not a scam, it explains the joke in both languages, and says plainly that explaining isn't verifying.

Anxin is not a truth oracle. It is a transparent pause button for bilingual families.

Check our demo:

Challenges we ran into

1. The network would quietly hand us the same model twice.
DeepSeek-V4-Flash is sustainedly saturated on Gonka, and the router's default failover re-routes overflow to MiniMax. Without noticing, a share of our "DeepSeek" verifications would have been answered by MiniMax — turning two independent opinions into one opinion printed on two lines. Fix: every call sends X-Gonka-No-Fallback: true, so saturation returns a real 429 instead of a substitute; we compare requested vs actual model on every response; and a 429 is treated as "this leg produced no opinion" — the report degrades to insufficient with a "Not cross-verified" badge and confidence capped at 60, never presented as consensus. (gonka_client.py, test_deepseek_429_and_minimax_ok_degrades_honestly)

2. Two models disagree — and averaging is a lie.
(90 + 10) / 2 = 50 reports a scam one model confidently caught as "medium risk". We replaced averaging with consensus bands: within 20 points they agree; 21–40 drops confidence and reports a lean; beyond 40 we refuse to average contradictory answers and say insufficient. Fraud risk is taken as the maximum, never averaged down. And an evidence gate caps confidence when no sources were found — with one deliberate exception: phishing has no web evidence by nature, so high_risk is read off the message's own structure. (consensus.py, 27 tests)

3. The models can't browse, and can't see images.
Gonka serves text-in/text-out models: asked to "inspect this URL" they correctly answer "I cannot access this URL", and image input isn't supported. Retrieval moved entirely to our side — evidence.py fetches the URL and runs a keyless web search, SSRF-guarded (private, loopback and cloud-metadata hosts blocked, redirects re-validated) — and the models reason over fenced evidence. For screenshots, local Tesseract extracts text only, the user corrects it, and only then does anything go to Gonka. We confirmed this boundary with Gonka's tech lead before building on it.

4. Real model output is nothing like the schema.
Reasoning models wrap JSON in ```json fences and <think> blocks, improvise labels ("TRUE", "high risk"), and sometimes score 0–1 instead of 0–100. json_utils.py extracts tolerantly and the verifier normalises labels and scales — but genuinely unparseable output is still rejected rather than invented (test_unparseable_output_raises_rather_than_inventing). One sloppy label never costs us a whole second opinion.

5. Screenshot mode "worked" while doing nothing.
On any machine without Tesseract, pytesseract raised, the exception was swallowed, and users saw "no text could be extracted" — a claim about their image when the truth was a missing engine. Two more faults hid behind it: Tesseract 5 silently drops a missing language from eng+chi_sim and exits 0, so Chinese failed quietly; and pytesseract doesn't strip quotes from config on Windows, so a quoted --tessdata-dir reached the binary with the quotes still in the path. Fix: ask Tesseract which packs exist up front, export TESSDATA_PREFIX, raise a distinct engine-missing error, and return an honest "OCR engine is not installed" with an editable box. Render's native Python runtime has no Tesseract at all, so the backend now ships as a Docker image. (ocr.py, test_ocr.py, backend/Dockerfile)

6. Decentralised inference has a long tail.
The same model answers in under a second or in 40, depending on which node picks up the request. Both verifications run concurrently, each bounded at 45 s with one retry, the UI shows honest stages instead of a spinner, and the frontend's OCR timeout went from 30 s to 90 s after we found a sleeping free-tier backend takes ~30 s just to wake — aborting uploads before the server had read them.

7. One sentence that over-claimed.
We described receipts as proof a verdict "came from the network rather than our server". Gonka's tech lead pointed out the receipt is served from GonkaRouter's database, so it's their attestation, not an independent one. We rewrote the claim everywhere it appears — UI, README, docs — to what's defensible: independently verifiable against GonkaRouter, not something we could fabricate on our own server, and it does not prove the claim is true.

8. Accessibility across two scripts.
Our risk icons were text glyphs (✓ ⚠ ✕). With a Chinese font active the browser substitutes full-width or emoji variants, so the same warning rendered at a different size in EN and ZH. We replaced them with an original inline-SVG icon set, kept the rule that no state is ever colour alone, and never merged the Truth Score with the scam-risk score — a plausible message can still be a scam.

Tracks Applied (1)

AI For Society

Anxin (安心) Gonka Router track Anxin's entire reasoning and verification pipeline runs exclusively on Gonka Router. Ev...Read More

Gonka Router

Discussion

Builders also viewed

See more projects on Devfolio