Sua amiga de IA que sabe de tudo — te conta a treta com voz de gente e fonte na tela, dá opinião e ainda apresenta um programa só pra você.
Documento-fonte: docs/PROJETO-COMADRE.md · Decisões: docs/adr/
Telas:
/— Home personalizado (manchetes desde última visita, me conta tudo para programa)/palco— Conversa com a Comadre ao vivo (ancorada na treta, com citação de fonte)/programa?treta=...— Modo Programa com voz expressiva e avatar animado/tretas— Listagem completa de tretas ativas/t/[id]— Detalhe da treta (capítulos, votos, discussão)/voce— Perfil e memória do usuário (apelido, fandoms, preferências)/admin— Kill-switch editorial (arquiva tretas problemáticas)/transparencia— Disclosure de IA + regulação 18+
API Core:
| Rota | O quê |
|---|---|
GET /pauta |
títulos das fichas do dia (ticker) |
POST /chat |
conversa SSE com persona ancorada |
POST /programa |
modo programa com blocos narrativos |
GET /home |
manchetes + recomendação personalizada |
GET /tretas |
listagem de fichas ativas |
GET /tretas/:id |
detalhe completo + capítulos |
GET /perfil |
memória do usuário (header x-device-id) |
POST /perfil |
salva apelido e fandoms |
GET /custos |
unit economics (tokens + TTS) |
GET /health |
status |
GET/POST /admin/blocklist |
kill-switch editorial (header x-admin-token) |
# 1. Infra local (Postgres+pgvector na porta 5434, Redis na 6379)
docker compose up -d
# 2. Dependências
pnpm install
# 3. API (porta 4310) — precisa das envs OPEN_ROUTER_API_KEY e ELEVENLABS_API_KEY
pnpm dev:api
# 4. Front (porta 3000)
pnpm dev:web
# 5. Workers BullMQ (agenda coleta de pauta a cada 15min)
pnpm dev:workersAbra http://localhost:3000, clique em "me dá uma fofoca" (ou
https://comadre.gbbragadev.com — túnel comadre (config em ~/.cloudflared/comadre.yml,
API e front no mesmo host: paths /chat|/programa|/health|/custos|/pauta|/home|/tretas|/perfil|/admin → 4310, resto → 3000).
Após reboot: powershell -ExecutionPolicy Bypass -File tools\start-comadre.ps1.
Proteção de custo: teto diário global (LIMITE_TURNOS_DIA=300, LIMITE_TTS_MIN_DIA=20min;
estourou → resposta vira só texto / recusa simpática). Acompanhe em GET /custos.
Documentadas em .env.example. As chaves podem vir das envs da máquina —
o .env é opcional e nunca deve ser commitado. Sem ELEVENLABS_API_KEY, o chat
funciona só em texto.
Fichas vêm do Postgres (fallback para fixtures se vazio). Pipeline (packages/editorial):
RSS → extrai candidato via DeepSeek V4 Flash (regras duras: nada de menores, saúde íntima,
crime fora do enquadramento) → deduplica por personagens → grava treta/capítulos transacionalmente.
Worker roda a cada 15min, mas só liga quando packages/editorial/fontes.json tiver fontes.
Pauta S03: 14 fontes reais de entretenimento brasileiro (Globo, UOL, Extra, Folha, etc.) com feeds RSS funcionando. Criterios em ADR-004 (status: FECHADO) e ADR-006 (auto-publish + 18+).
Setup do banco: pnpm --filter @comadre/api db:migrate aplica schema (idempotente).
pnpm --filter @comadre/api selfcheck # parser de tags [MOSTRAR]
pnpm -r typecheck # typecheck de todos os pacotes
node tools/compara-modelos.mjs # comparativo real de modelos (gasta ~US$0,01)- A persona só comenta o que está na ficha, sempre citando a fonte.
- Nunca voz/imagem clonada de pessoa real — voz é sintética (ElevenLabs Voice Design).
- Fichas de teste usam personagens fictícios.
- Disclosure de IA permanente no rodapé do front.