Logo Lanfrica

JohnnyPoks/237sentinel-api

Domain:

peace and security

Record type:

software
Creator:
Joh
Host:
Digital verification for Cameroon: send a link, message, image, voice note, video or PDF and get an honest verdict — is it real, and from who it claims? FastAPI + HF-hosted models + Gemini. # 237Sentinel — API > **You send us something. We tell you if it's real, and why.** Backend for 237Sentinel, a digital verification platform for Cameroon. A citizen sends anything suspicious — a link, message, image, voice note, video or PDF — and it answers, in plain EN/FR, whether to trust it and what to do next. It asks *"is this what it claims to be, and from who it claims?"* — **never** *"was AI involved?"*. - **Live site:** sentinel237cm.web.app - **Live API + docs:** two37sentinel-api.onrender.… - **Frontend repo:** JohnnyPoks/237sentinel-web ## The three verdicts | Verdict | Meaning | When | |---|---|---| | **VERIFIED** | "This is really them." | Sender matches a registered official channel, no strong manipulation. | | **UNCONFIRMED** | "We cannot confirm this." | Not in the registry, no strong evidence either way. The honest, most common default — *not-in-registry never means fake*. | | **ALTERED** | "This was altered." | Strong forensic evidence of synthesis/alteration. | ## How it works `POST /api/v1/analyze` → content router detects the type → per-modality service (link / text / image / audio / video / document) → **semantic layer** (what is this, who does it claim to be, what does it want?) → registry lookup → the verification engine picks one verdict → plain-language EN/FR explanation. The models run on **Hugging Face** (called over HTTPS) and the reasoning uses a fallback chain **Gemini → HF router (Llama-3.3-70B / Llama-4 vision) → rule-based**, so the backend stays light and never hard-fails. Details: docs/ARCHITECTURE.md · docs/MODELS.md · docs/API.md. ## Run locally Python 3.11 (3.10 works too). ```bash python -m venv .venv && source .venv/Scripts/activate # .venv/bin/activate on mac/linux pip install -r requirements.txt cp .env.example .env # runs with zero keys (rule-based fallback + SQLite) python -m scripts.seed # seed the registry + scam patterns uvicorn app.main:ap …