尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A portfolio project for drafting insurance appeal letters. Drop an EOB PDF, extract denied claims via Vision AI, and draft an appeal from the notes you paste. Not a HIPAA product. Not for real patient information.
• Framework: Next.js 16 (App Router)
• Styling: Tailwind CSS + shadcn/ui
• Database & Auth: Supabase (PostgreSQL, Auth, RLS)
• AI: Gemini, then Groq, then OpenRouter. A provider is skipped when its key is missing.
• PDF Processing: pdfjs-dist (client-side rendering)檢視完整 README ↗A portfolio project for drafting insurance appeal letters. Drop an EOB PDF, extract denied claims via Vision AI, and draft an appeal from the notes you paste. Not a HIPAA product. Not for real patient information.
npm install
npm run dev
Copy .env.example. Extraction and letters keep working when a key is absent: that provider is skipped. If none of the three keys are set, the app returns a short message and does not call a model.
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | yes | Supabase anon key |
SUPABASE_SERVICE_ROLE_KEY | server | Service role key |
GEMINI_API_KEY | first AI choice | Direct Gemini API (generativelanguage.googleapis.com) |
GEMINI_MODELS | no | Comma-separated model chain. Default: gemini-3.5-flash-lite,gemini-3.1-flash-lite,gemini-3.8-flash,gemini-2.5-flash-lite. Flash-Lite models are first because Flash models on this key allow only 20 requests a day. |
GROQ_API_KEY | second AI choice | Groq's OpenAI-compatible API. Used for text extraction and letters, not page images. |
GROQ_MODEL | no | Default openai/gpt-oss-120b. The request allows extra output tokens so reasoning fits. |
OPENROUTER_API_KEY | last resort | The previous OpenRouter model chains, unchanged. |
A signed-in GET /api/ai-health pings the first model of each configured provider and returns { provider, configured, models: [{ model, ok, httpStatus }] }. Add ?all=1 to ping every model. Unconfigured providers are listed and not called. The response never includes keys or upstream error text.