Inspiration It started with a shoebox. So many people who grew up translating for a parent or grandparent describe the same thing: a stack of official mail nobody fully understood, kept "just in case." A Medicaid renewal. A notice from the housing authority. Something from immigration with a deadline buried in the third paragraph.

These letters are written at a college reading level, in dense bureaucratic English — and the people they affect most are often the least equipped to decode them: recent immigrants, seniors, and overwhelmed families. The cruelty is that the stakes are highest exactly where the language is hardest. A missed date on a benefits letter means losing coverage. A misread eviction notice means losing a home.

We didn't want "another chatbot for documents." We wanted something a frightened person could point their phone at and immediately understand: what is this, what do I have to do, and by when. We named it Lantern — it doesn't decide for you, it just helps you see.

What it does You photograph a confusing letter. Lantern reads it with a vision model and returns, in your language:

A plain-language explanation of what the letter actually means The real deadline, with one-tap calendar export A guided, tabbed action plan — Understand → Take action → Talk it through — including what they need from you, a document checklist, a ready-to-send response letter, and a phone script A tap-to-explain glossary for the jargon ("Notice of Action," "unlawful detainer," "Medicaid") Verified, hand-curated help resources — every phone number and link is real and cited, never invented by the model A scam check that shows why it flagged something (urgency language, gift-card payment, mismatched sender), not just a verdict It speaks ten languages, reads results aloud with natural TTS, auto-detects the user's language, and ships with large-text and high-contrast accessibility modes.

How we built it Framework: Next.js 16 (App Router + Turbopack), TypeScript, Tailwind CSS v4 Vision + reasoning: Vercel AI SDK v6 with Groq's Llama 4 Scout vision model, returning a strict Zod-validated schema Voice: ElevenLabs multilingual TTS for read-aloud Local help: Perplexity-backed search layered on top of a fixed national resource list i18n: a baseline English string table that each of 10 languages partially overrides, so new copy can never break a translation Deploy: Vercel production The core architectural decision was a hard line between two layers: the model reads and explains the letter, but the resources — every contact, URL, and program name — come from a hand-checked, cited list in the code, never from the model. That's the trust difference versus a general chatbot.

To make impact measurable rather than vibes, we score reading level on-screen with Flesch–Kincaid Grade Level:

FKGL

0.39 ( total words total sentences ) + 11.8 ( total syllables total words ) − 15.59 FKGL=0.39( total sentences total words ​ )+11.8( total words total syllables ​ )−15.59

A typical government letter lands around grade $14$; Lantern's rewrite usually lands near grade $5$ — and we show both side by side, so the "before → after" is concrete.

Challenges we ran into Hallucinated help is worse than no help. A general model will happily invent a plausible 1-800 number — dangerous for this audience. Grounding the entire resource layer in a fixed, cited list took discipline but is the whole trust story. A crisis filter that doesn't cry wolf. The word "ice" hides in "service," "office," and "ice cream." We matched ICE case-sensitively and leaned on multi-word phrases so the immigration guardrail is reliable without drowning users in false alarms. Free-tier reality. ElevenLabs free keys can't use "library" voices via the API (a 402 payment_required), so we switched to a premade multilingual voice to keep read-aloud working for everyone. Reducing overwhelm. Our first results screen was one long, scary scroll. We restructured it into three guided tabs so a panicked user only ever sees one step at a time. Designing for the edge, not the demo. Blurry photos, tiny images, and ambiguous letter types were the hard part — making the uncertain path safe, not just the happy path. Accomplishments that we're proud of A deterministic crisis guardrail: a plain keyword scan — not the model's judgment — that always surfaces the right hotline for eviction, ICE/removal, medical emergencies, or utility shutoffs, even if the model misses it. We tested it: "removal proceedings" fires the immigration line; "the ice cream social is Friday" correctly fires nothing. A low-confidence escalation path that admits uncertainty and routes to a real human (211 + local legal aid) instead of guessing. A persistent human-in-the-loop banner on every result: "Lantern explains — it doesn't decide. Always confirm with the office on your letter." Genuine accessibility and reach: ten languages, read-aloud, auto-detected language, large-text and high-contrast modes — built in, not bolted on. On-screen, measurable impact via the before/after Flesch–Kincaid score. What we learned The biggest lesson: trust is a feature, not a vibe. For a vulnerable audience, admitting uncertainty is more valuable than projecting confidence — so we built Lantern to say "I'm not sure about this one" and hand off to a person. We also learned that a single sharp architectural boundary (model explains, code grounds) does more for safety than any amount of prompt tuning, and that reducing cognitive load — one step at a time — matters as much as the accuracy of the answer.

What's next for Lantern Offline-first capture for low-connectivity users An SMS / WhatsApp front door for people without smartphones Expanding the verified resource layer from national → state → county, so "find real help near me" gets even closer to home Caseworker hand-off: export a summary a legal-aid or social worker can act on directly

Built With

  • apis
  • cloud-services
  • css
  • databases
  • elevenlabs
  • frameworks
  • groq
  • javascript
  • llama
  • next.js
  • perplexity-api
  • platforms
  • react
  • tailwindcss
  • turbopack
  • typescript
  • vercel
  • vercel-ai-sdk
  • web-speech-api
  • zod
Share this project:

Updates