尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Take a photo of a confusing official letter (Medicaid renewal, hospital bill, eviction notice, SNAP recertification, financial aid) and get a plain-language explanation: what it is, how urgent it is, the deadlines, 3–5 next steps and who to call. English and Spanish, with read-aloud.
Next.js (App Router) + TypeScript + Tailwind, one API route, no database, no login. Nothing is stored.
Test the API without the UI (server must be running):
Only send mock letters to the free Gemini tier: Google may use free-tier inputs.檢視完整 README ↗Take a photo of a confusing official letter (Medicaid renewal, hospital bill, eviction notice, SNAP recertification, financial aid) and get a plain-language explanation: what it is, how urgent it is, the deadlines, 3–5 next steps and who to call. English and Spanish, with read-aloud.
Next.js (App Router) + TypeScript + Tailwind, one API route, no database, no login. Nothing is stored.
npm install
cp .env.example .env.local # paste a free key from https://aistudio.google.com/apikey
npm run dev # http://localhost:3000
Test the API without the UI (server must be running):
npm run test:decode -- path/to/sample-letter.png es
Only send mock letters to the free Gemini tier: Google may use free-tier inputs.
Open http://localhost:3000/?demo=1. Pick the sample letter from the dropdown, take the photo as usual, and the app returns the saved result from data/demo/ instead of calling Gemini. Use this on stage so the demo never depends on Wi-Fi or rate limits.
app/page.tsx shrinks the photo to ~1500px wide in the browser and POSTs it with the language to /api/decode.app/api/decode/route.ts validates the request and calls lib/gemini.ts, which sends the image to Gemini Flash-Lite in JSON mode with the DecodeResult schema and validates the answer with zod. If Flash-Lite is busy or returns bad JSON, it falls back to Gemini Flash. Letters are always read in English first; Spanish is a second, text-only translation call, which keeps accents right.
Switching language on the results page calls app/api/translate/route.ts, which translates the existing result without sending the photo again (under a second).components/ResultView.tsx shows the summary, urgency badge, deadlines (with the quoted line from the letter and an "Add to calendar" .ics download), numbered steps and matching local help from data/resources.json.speechSynthesis, picking a Spanish voice for Spanish.| File | What it is |
|---|---|
lib/types.ts | Shared DecodeResult contract |
lib/schema.ts | zod versions of the contract and request |
lib/i18n.ts | All interface text in English and Spanish |
lib/mockResult.ts | Example result for styling |
data/demo/ | Saved results for the five sample letters, per language |
data/resources.json | Local help orgs, matched by letterTypes |
data/resources.json only has 211 right now. Add 6–8 verified local orgs: name, phone, optional url, description.en/description.es, letterTypes (any of medicaid, snap, medical_bill, eviction, financial_aid, other, or all), and optional zips: the ZIP codes or prefixes the org serves ("081" covers 08101–08199). Orgs without zips show for every letter; orgs with zips show only when the letter's recipient ZIP matches.data/demo/*.json are written for fictional sample letters. Once the printed sample letters exist, update the amounts, dates, sender and sourceQuote so they match what's on paper.Import the repo in Vercel and set GEMINI_API_KEY (and optionally GEMINI_MODEL) in the project's environment variables.