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