尚未检测到更新。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.