CONTEXT — Linguagem ubíqua do Cadência¶
Termos do domínio com definição direta. Quando um agente diz "tenant", "editorial", "dossier" — significa exatamente o que está aqui. Ambiguidades flagadas como ⚠️.
Entidades principais¶
Tenant — Cliente do SaaS Cadência. Cada tenant tem seu próprio tenant_id, tenant_config, créditos, posts, dossier, editoriais e CRM. Multi-tenancy via RLS Supabase (não DBs separados). Ver ADR-0006.
Tenant config — Linha em tenant_config por tenant com JSON config contendo branding, preferências de geração, email, canais e flags operacionais. Entidades do CRM vivem em tabelas próprias.
Dossier — Perfil de marca gerado pelo worker dossier.py na fase de onboarding. Guarda voz, valores, público, restrições. Insumo para todo conteúdo gerado depois. Tabela tenant_dossier.
Editorial — Cada tenant tem 3 editoriais (pilares de conteúdo). Gerados pelo worker editorials.py no onboarding. Tabela editorials. Toda content_idea pertence a 1 editorial (FK editorial_id).
Content idea — Ideia de post antes de virar conteúdo finalizado. Pode entrar pelo chat (chat-ideias) ou pelo gerador automático (ideas-generator). Tabela content_ideas. Status: pending, approved, discarded, generated.
Published post — Conteúdo finalizado (carrossel, blog, seinfeld, newsletter, linkedin, instagram). Tabela published_posts. Campos por canal: seinfeld_subject/seinfeld_body/seinfeld_scheduled_at/seinfeld_sent, newsletter_included, etc.
Sub-preset (visual) — Variação visual de identidade do tenant. 15 presets disponíveis no onboarding. Define paleta, tipografia, layout do carrossel.
Identidade / Onboarding¶
Onboarding — Processo de 3 fases (fase 1 = signup + dados básicos, fase 2 = dossier + editoriais, fase 3 = visual + publish first post). Tabela tenant_onboarding. Tenant só recebe pipeline diário quando onboarding_completed.
Identity Lock — Mecanismo de geração de cover do carrossel via Gemini 2.5 Flash que mantém consistência visual (rosto/cores/composição) entre posts do mesmo tenant.
Provisioning — Criação do tenant, carteira inicial, pipelines/stages/tags/campos do CRM próprio, domínio Resend/DNS e artefatos de marca. Orquestrado pelo app e por provision_tenant.py.
CRM Cadencia¶
Contato — Pessoa do CRM em public.contacts, sempre isolada por tenant_id.
Empresa — Organização relacionada a contatos em public.companies.
Pipeline — Funil comercial do tenant, identificado por slug estável e composto por stages ordenados.
Stage — Fase dentro de um pipeline do CRM Cadencia. Automações usam slugs, não IDs externos.
Oportunidade — Relação comercial entre contato, pipeline e stage, com valor, status e atividades.
Geração de conteúdo¶
Pipeline (interno Cadência) — Sequência diária de geração por tenant, orquestrada por growth_pipeline.py (cron 11h BRT VPS). Ordem: sync → blog → seinfeld --generate → seinfeld --dispatch → newsletter → linkedin → instagram. Carrossel/reels NÃO entram no pipeline VPS — vão pelos workers no Coolify VPS Master (Railway DESLIGADO). Ver ADR-0004 e ADR-0012 (migração Railway→Coolify concluída).
Trigger on-demand — Geração disparada quando usuário aprova uma ideia. Endpoint /api/app/trigger-generation (Vercel) filtra canais: carrossel/reels → workers (Coolify, via WORKERS_API_URL); resto → VPS:39090/trigger. Newsletter é silenciosamente ignorada no trigger (G002).
Generation queue — Tabela generation_queue (planejada para refator PDL-171) para coordenar jobs entre workers e VPS. Hoje a coordenação é por mistura de trigger_server.py + cron + status em published_posts.
Sync — Step que carrega o estado do tenant e do CRM Cadencia antes de gerar. Sempre roda primeiro.
Dispatch (Seinfeld) — Envio real do email Seinfeld via Resend. Acontece no cron diário e retoma o item vencido mais antigo sem duplicar por contato/post.
Growth (VPS)¶
Growth pipeline — Mesmo que pipeline interno acima. Rodado por /cadencia/crons/growth_pipeline.py.
Seinfeld email — Email diário no estilo "Jerry Seinfeld" (storytelling curto, sem CTA agressivo). Gerado a partir de published_posts que ainda não foram usados como Seinfeld (seinfeld_sent=false AND seinfeld_scheduled_at IS NULL).
Newsletter — Compilação semanal de artigos da semana. Dispara sexta 15h BRT. Não disponível no trigger on-demand.
Scoring — Lead scoring por eventos Resend/Svix na porta 8767. Soma pontos em contacts.score, atualiza temperatura, atribui por post_id e aplica supressão em bounce/complaint. Score bands: Frio (<30), Aquecendo (≥30), Quente (≥60), Hot (≥80).
Mission Control — Dashboard HTML em VPS:8768 (/cadencia/mission_control.py) para Felipe ver estado dos tenants em tempo real.
Workers (Coolify — VPS Master)¶
Orchestrator — Worker principal pipeline-orchestrator (7 steps) que coordena geração de carrossel/reels (workers no Coolify VPS Master; Railway DESLIGADO, ver ADR-0012). Diferente do growth_pipeline.py (que roda VPS e cobre blog/seinfeld/linkedin/instagram).
Theme engine — Worker que escolhe tema visual para um post baseado no dossier + editorial + sub-preset.
Chat agent — Worker do "Tenho uma ideia" — conversa com usuário, captura ideia, devolve para content_ideas. Ver ADR-0002.
RAG memory — Memória de contexto do agente: histórico de posts do tenant, conversas chat, dossier. Usado para evitar repetição e manter coerência.
Billing / Créditos (PDL-505, 11/06/2026 — sem planos)¶
Cadência não tem planos/assinatura desde PDL-505. Termos
trial/essencial/starter/growth/growth_prosão legado — não usar em código/copy novo. Fonte única do modelo:times/produto/cadencia/MODELO-CREDITOS.md(pd-framework).
Carteira de créditos — Tabela tenant_plans (nome legado) é a carteira de créditos do tenant, não um "plano". plan_name deve ser creditos. Tenant pode ter múltiplas linhas ativas (créditos somam). Todos os canais (blog/newsletter/Instagram/LinkedIn/etc) ficam liberados pra qualquer tenant — não há gating por tier.
Crédito — Unidade de geração. Cada post gerado consome créditos do tenant. Tenant com 0 créditos é skipado pelo pipeline (exceto sync + newsletter). Compra self-service: pacotes one-time (+10 R$49,90 · +30 R$129,90 · +60 R$219,90). Cliente gerido (white-glove): créditos injetados manualmente conforme venda comercial.
Stripe — Gateway de pagamento. Substituiu Asaas em 11/05/2026. Ver ADR-0001.
Tracking / Analytics¶
CAPI — Conversions API do Meta. Endpoint /api/capi/* envia eventos server-side para Meta Pixel (deduplicação client+server).
Stevo — Bot WhatsApp do Felipe (não brancado). Usado para notificações internas (deploy, incidentes, status semanal). Endpoint /api/stevo/*.
Ambiguidades flagadas ⚠️¶
- ⚠️ "Pipeline" pode significar (a) pipeline interno de geração, (b) funil comercial do CRM. Sempre desambiguar pelo contexto.
- ⚠️ "Token" sem qualificador é ambíguo. Sempre dizer:
supabase_service_role,stripe_secret,resend_api_keyou a credencial específica do canal. - ⚠️ "Worker" pode ser (a) worker Coolify VPS Master (
cadencia-workers/; Railway DESLIGADO), (b) script Python rodando na VPS growth (/cadencia/). VPS scripts são chamados de growth scripts quando o contexto exige desambiguação. - ⚠️ "Generation" sem canal é ambíguo. Sempre dizer: geração de carrossel, blog, seinfeld, linkedin, instagram, reels, newsletter.
Relacionamentos¶
Tenant ── tem ──► Tenant config ── configura ──► Canais e email
│
├── tem ──► CRM Cadencia ──► contatos / empresas / oportunidades / cadências
├── tem ──► Dossier
├── tem ──► 3 Editoriais ──┐
├── gera ──► Content ideas◄┘
│ │
│ ▼
├── gera ──► Published posts ──► (carrossel/blog/seinfeld/linkedin/instagram/newsletter)
│
├── compra ──► Tenant plans ──► Créditos
└── progride ──► Tenant onboarding (3 fases)
Referências¶
- docs/architecture.md — Diagrama C4 dos containers e fluxos
- CLAUDE.md — Manual operacional do repo
- docs/adr/ — Decisões arquiteturais