Inspiration
People get tax, bank, courier and traffic-fine notices they cannot fully read, often in a language that is not their first. Some ignore real notices and miss deadlines. Others obey fake ones and pay scammers. A general chatbot can explain a letter, but you have to paste your personal details into it, and it does not show evidence for what it says.
What it does
Notice Check helps you decide whether an official-looking notice is genuine, and what to do next.
- Paste a notice, or pick a fictional sample.
- Your browser masks personal details (phone numbers, PAN, account numbers, names) and shows you exactly what will be sent.
- The masked text is checked by a rule engine and by Gemini. You get a verdict (Likely genuine, Suspicious or Likely scam), the exact lines that triggered each flag, a "Why this verdict" breakdown, the deadline, and a next-steps checklist.
- For genuine or suspicious notices there is a drafted reply, with your details restored locally. For scams there is a "do not reply" panel with reporting steps (1930, cybercrime.gov.in).
- Everything is available in English, Tamil and Hindi.
How I built it
I used the Devpost Learn Skill Pack in [Antigravity / Codex / Claude Code]. The agent interviewed me first (1-start), then we wrote scope, PRD and spec (2-scope, 3-prd, 4-spec) before any code, built in small slices against a checklist (5-build), and prepared the submission (6-ship). The planning documents are in the devpost/ folder of the repo.
The app is Next.js, TypeScript, Tailwind, Zod and Vitest, with the Gemini API on the free tier. It has four layers:
- Local redaction: pure TypeScript in the browser. The placeholder map stays in memory and is used to restore details in the reply.
- Rule engine: payment channels, threats, lookalike domains, sender mismatches and deadlines.
- Model analysis: structured JSON, validated with a schema.
- Evidence grounding and scoring: any model flag whose quote is not in the letter is dropped, and a deterministic score combines rules and model output. The model is one input, not the judge.
Challenges
- [Keep only what you actually fixed.] A review showed the default Gemini model had been retired, so the app silently fell back to rules-only. I made the model configurable and the interface now says why the AI was not used.
- Regex masking missed formats such as grouped mobile numbers and single names. I added tests and a residual-data scan, and the app says plainly that masking is best-effort.
- The first scoring version could be gamed: a real government link could cancel out threats. Positive markers can no longer offset hard signals.
- The deadline parser read the issue date as a due date.
What I learned
Planning before code kept the project small. Claims in the UI and README need tests behind them. And a trust tool should show its evidence and fail visibly instead of looking confident.
What's next
On-device analysis, photo upload, more notice types, and a native-speaker review of the Tamil and Hindi text.
Notice Check gives guidance only, not legal or financial advice. All sample letters are fictional.
Built With
- antigra
- google-gemini
- nextjs
- node.js
- react
- tailwindcss
- typescript
- vitest
- zod
Log in or sign up for Devpost to join the conversation.