尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證App onde consulta colaterais e para que serve
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
App web (PWA) para consultar remédios: para que serve, como usar, efeitos colaterais e cuidados, como uma bula resumida em linguagem simples. A busca é por nome ou por foto da caixa. Este app não substitui a orientação de um médico ou farmacêutico.檢視完整 README ↗
App web (PWA) para consultar remédios: para que serve, como usar, efeitos colaterais e cuidados, como uma bula resumida em linguagem simples. A busca é por nome ou por foto da caixa.
Este app não substitui a orientação de um médico ou farmacêutico.
Fora do MVP: login, chat de perguntas, histórico, lembretes, outros países.
Next.js (App Router) + TypeScript + Tailwind, API do Claude para visão e resumo, deploy na Vercel.
npm install
npm run dev
A busca usa src/data/catalog.json, gerado a partir dos dados abertos da ANVISA (só registros ativos). Para atualizar:
node scripts/build-catalog.mjs
Detalhes e limites da fonte em docs/spike-anvisa.md (o texto da bula ainda não tem fonte definida).
POST /api/identificar recebe a foto (multipart, campo foto; JPEG/PNG/WebP até 5 MB), usa a API do Claude para ler o nome na embalagem e devolve candidatos do catálogo para o usuário confirmar. A foto não é gravada. A tela reduz a imagem no aparelho antes de enviar.
Variáveis de ambiente (no servidor; nunca commitar):
| Variável | Uso |
|---|---|
ANTHROPIC_API_KEY | Obrigatória para a foto. Local: .env.local. Produção: variáveis do projeto na Vercel. Sem ela, o endpoint responde 503 e a busca por nome continua funcionando. |
BULINHA_MODEL | Opcional. Padrão claude-opus-5-5. |
DATABASE_URL | Postgres (Neon, via Marketplace da Vercel). Guarda o contador de consultas por IP e os resultados de IA já gerados; as tabelas bulinha_limite e bulinha_cache são criadas sozinhas na primeira execução. Sem ela, o app usa só a memória do servidor. |
BULINHA_SEGREDO | Opcional. Segredo misturado ao hash do IP (padrão: derivado de DATABASE_URL). |
BULINHA_ADMIN_TOKEN | Opcional (32+ caracteres). Senha usada só por scripts/aquecer-cache.mjs para gerar resumos em lote sem gastar o limite diário. Sem ela, o recurso fica desligado. |
BULINHA_LIMITE_DIARIO | Opcional. Consultas novas por IP por dia, somando foto, resumo e interações (padrão 5; contador compartilhado no banco). Resultados já em cache não contam; falha da IA devolve a consulta. |
GET /api/resumo?principio=... gera, com o Claude, um resumo geral da substância (para que serve, efeitos, contraindicações, cuidados, interações), sem doses. Não é a bula do produto; a tela deixa isso explícito e aponta o Bulário da ANVISA. Só aceita princípios ativos que existem no catálogo. O resultado é guardado no banco e na CDN da Vercel, então cada princípio ativo é gerado uma única vez (mude VERSAO em src/lib/cache-ia.ts ao melhorar o prompt, para regenerar).
node scripts/aquecer-cache.mjs --limite 300 --listar # só mostra a lista, não gasta nada
BULINHA_ADMIN_TOKEN=... node scripts/aquecer-cache.mjs --limite 10 # teste pequeno: confira o custo no Console da Anthropic
BULINHA_ADMIN_TOKEN=... node scripts/aquecer-cache.mjs --limite 300 # lote completo
O script chama /api/resumo do próprio site (as chaves da IA e do banco ficam só na Vercel). A lista começa pelas substâncias mais usadas no Brasil e completa pelo catálogo. Pode ser interrompido e repetido: o que já foi gerado volta do cache na hora.
/meus-remedios): lista de até 10 remédios guardada só no aparelho (localStorage), sem login. GET /api/interacoes?p=... recebe apenas princípios ativos (validados no catálogo) e gera, com o Claude, possíveis interações e substâncias repetidas; cache de 30 dias na CDN. Duplicidades de princípio ativo idênticas são detectadas no próprio navegador, sem IA.src/app/ouvir.tsx): leitura com a Web Speech API (voz do aparelho, nada sai do dispositivo); divide o texto em trechos curtos e permite falar mais devagar.