📄 Cópia local — fonte de verdade no GitHub. Origem:
felipeluissalgueiro/cadencia-app/master/cadencia-workers/src/workers/theme-engine/CLAUDE.mdSincronizar via/documentar-softwareousync_to_framework.py.
theme-engine — Theme Engine v3¶
TL;DR¶
Resolve qual template visual (preset + sub-preset) aplicar ao renderizar slides de um tenant. Cacheia em tenant_themes.
Identidade¶
- Tipo: Worker Python
- Stack: Python + Supabase
- Path:
cadencia-workers/src/workers/theme_agent.py - Status: ativo
- Deps:
tenant_config.config.preferred_sub_preset,style_configstable,tenant_themestable
Como funciona¶
- Lê
preferred_sub_presetdotenant_config - Busca configuração de estilo em
style_configs(Big5 + signaling do tenant) - Resolve paleta de cores, tipografia, espaçamento
- Salva resultado em
tenant_themes(cache — evita recalcular a cada render) slide_rendererusa o resultado para montar o HTML template
15 Sub-presets disponíveis¶
| Family | Sub-preset | Key |
|---|---|---|
| Creator Personal | Papel Cremoso | creator_personal_vinci |
| Creator Personal | Amarelo Vibrante | creator_personal_daniela |
| Creator Personal | Caderno Pautado | creator_personal_marketingharry |
| Creator Personal | Dark Elegante | creator_personal_dark_creator |
| Corporate Premium | Cream Emocional | corporate_premium_anabrez |
| Corporate Premium | Cream Factual | corporate_premium_nicolas |
| Corporate Premium | Executivo Dark | corporate_premium_dark_executive |
| Editorial Sério | Jornal Clássico | editorial_serious_cream_classic |
| Editorial Sério | Amarelo Editorial | editorial_serious_yellow_insper |
| Tech/Moderno | Neon Glow | tech_modern_dark_glow |
| Tech/Moderno | Terminal Mono | tech_modern_terminal_mono |
| Bold/Provocativo | Branco Impactante | bold_provocative_white_giant |
| Bold/Provocativo | Dark Provocativo | bold_provocative_dark_brandsdecoded |
| Quente/Pessoal | Dark Acolhedor | warm_personal_dark_intimate |
| Quente/Pessoal | Colorido Vibrante | warm_personal_saturated_rotativo |
Don'ts¶
- Não editar
tenant_themesdiretamente — deixar otheme_agentrecalcular - Cores custom (
palette_custom_primary,palette_custom_accent) emtenant_configsobrescrevem o preset
Quando usar¶
- Step 7 do
pipeline-orchestratorchamatheme_agent.generate_themeinline quandotenant_themesestá vazio para o tenant. - Após mudança de
preferred_sub_presetnotenant_config(frontend admin) — invalidar cache + recalcular.
Quando NÃO usar¶
- ❌ Em hot-path de render (cache em
tenant_themesjá existe — não chamar de novo). - ❌ Antes do tenant ter completado fase 2 do onboarding (sem
preferred_sub_presetdefinido). - ❌ Para testar paleta custom isolada — usar tabela
tenant_config.config.palette_custom_*direto.
Por que funciona assim¶
- Cache em
tenant_themesevita recalcular Big5 + DPR a cada render (custo LLM zero — é tabela lookup + cores). - 15 sub-presets pré-definidos: balanço entre customização (15 opções) e operacional (não é builder de design system livre).
🚫 Don'ts¶
- Não editar
tenant_themesdiretamente no Supabase — deixartheme_agentrecalcular limpo. - Não adicionar sub-preset novo sem atualizar
style_configs+ template HTML correspondente emslide_renderer. - Não sobrescrever paleta custom (
palette_custom_primary/palette_custom_accent) com lógica de preset — custom tem prioridade.
🪦 Já tentamos¶
- 2026-04-25 — Renderer 38 bugs visuais: cores erradas + tipografia inconsistente em batch grande. Fixou no template HTML, não no theme_agent. Ver incident.
- 2026-04-23 — Visual identity prompt sem acentos: prompt LLM perdia acentuação em palavras-chave. Ver
2026-04-23_visual-identity-prompt-sem-acentos.md.
🔥 Troubleshooting¶
| Sintoma | Causa provável | Fix |
|---|---|---|
| Slide renderizado com paleta default ignorando custom | Lógica de prioridade invertida | Verificar palette_custom_primary em tenant_config antes de aplicar preset |
| Sub-preset não aparece nas opções no onboarding | style_configs sem registro para combinação Big5 + signaling | Adicionar registro em style_configs |
tenant_themes cresce sem limpar | Sem TTL — esperado | Cache permanente; invalidar manualmente ao mudar preferred_sub_preset |
📚 Referências cruzadas¶
- pipeline-orchestrator — Consumidor (step 7)
- onboarding-workers — Define
preferred_sub_preset - CONTEXT.md — Sub-preset