Sub-apps e Sistemas Modulares
Pra apps grandes (CRM, ERP, gestão), divida em sub-apps — módulos independentes que compartilham dados via tabelas comuns.
Quando usar
| Sintoma | Use sub-apps |
|---|---|
| App passou de 2000 linhas | Sim |
| 5+ áreas funcionais (vendas, estoque, RH...) | Sim |
| LLM começou a gerar código cortado | Sim |
| Múltiplos perfis (admin, vendedor, cliente) | Sim |
| App simples de 1-2 telas | Não |
3 maneiras de criar
Opção 1 — Wizard (recomendado pra sistemas novos)
Dashboard → "Sistema modular →" (link no rodapé do campo de prompt). Ou direto: /creator/wizard.
- Descreve o sistema em 1 parágrafo (ou usa um dos 4 quick prompts: CRM, ERP Loja, Help Desk, Gestão de Projetos)
- IA propõe estrutura: app pai + N sub-apps + entidades compartilhadas (~10-30s)
- Revisa e edita inline: rename, adiciona/remove sub-apps e colunas
- "Criar sistema" — plataforma cria tudo em ~5s: pai + sub-apps placeholder + tabelas no banco
- Pra cada sub-app, abre o creator → "Gerar com IA" (prompt sugerido já no chat)
Opção 2 — Manual: cria pai e depois sub-apps
- Cria o app pai normalmente no
/creator - No app pai: menu → "Modelo de dados" → declara entidades compartilhadas
- No app pai: menu → "Criar sub-app" (vai pro creator com
parentIdpré-setado) - Banner persistente "Criando sub-app de X" aparece durante toda a sessão
- Salva — o sub-app fica linkado ao pai
Opção 3 — Converter app existente
Pra transformar um app comum em sub-app de outro:
- Abre o creator no app filho (
?edit=<slug>) - No save modal, escolhe um app no campo "Conectar a um sistema"
- Salva — vira sub-app
Modelo de dados (shared tables)
Entidades declaradas no app pai viram tabelas reais no banco com prefix:
app_<parent-slug>_shared_<entity>
Exemplo de schema declarado em /app/crm/data-model:
clientes (id SERIAL, nome TEXT, email TEXT, created_at TIMESTAMP)
oportunidades (id SERIAL, cliente_id INTEGER, valor NUMERIC, estagio TEXT)
Tabelas reais criadas:
app_crm_shared_clientesapp_crm_shared_oportunidades
Toda a família (pai + sub-apps) tem read + write nessas tabelas. Sub-apps gerados depois recebem o schema automaticamente no contexto da IA — ela usa os nomes exatos sem inventar.
Hierarquia de acesso
| Quem | Lê | Escreve |
|---|---|---|
| Pai → próprias tabelas | ✓ | ✓ |
| Pai → tabelas compartilhadas | ✓ | ✓ |
| Sub-app → tabelas compartilhadas do pai | ✓ | ✓ |
| Sub-app → tabelas internas de outro sub-app irmão | ✓ | ✗ (read-only) |
| Sub-app → tabelas privadas próprias | ✓ | ✓ |
Navegação
Sub-apps aparecem em vários lugares:
- Sidebar lateral: nested com chevron pra expandir/recolher
- AppSubNav: barra de abas no topo do sub-app (alternar entre irmãos)
/app/<slug>/tree: árvore visual com pai + filhos + count de tabelas/apps: 1 card por sistema (expand pra ver sub-apps)/businesses/<slug>: idem dentro do negócio
Templates de sistema modular
Marcar o app pai como template → vira 1 card na galeria com badge "Sistema modular · N sub-apps". Quando alguém duplica, a plataforma:
- Clona o pai com novo slug + novo prefix de tabelas
- Cria todos os sub-apps linkados ao novo pai
- Aplica CREATE TABLE nas shared tables do novo prefix
- Reescreve refs no código pra apontar pras tabelas novas
Resultado: o user clica 1 vez e tem o sistema completo no workspace dele.
Excluir / arquivar
Operações no app pai cascateiam automaticamente:
- Deletar pai → soft-delete dos sub-apps junto
- Arquivar pai → arquiva sub-apps junto
- Esconder pai → esconde sub-apps junto
Modal de confirmação avisa quantos sub-apps + quais.
Limites
- Profundidade máxima testada: 1 nível (pai → filhos). Sub-sub-apps existem no schema mas UI assume 1 nível.
- Recomendado: 3-7 sub-apps por sistema. Mais que isso vira ruído.
- Entidades compartilhadas: até 20 por sistema.
Problemas comuns
"Sistema · N sub-apps" não aparece no card?
Verifica se o app não tem parentId (é pai) E se tem children com parentId = id.
Sub-app salvo como independente sem querer? O banner persistente + select lock no save modal evitam isso. Se rolar, vai em "Conectar a um sistema" no save modal e seleciona o pai.
IA não usa as tabelas compartilhadas?
Verifica se você declarou entidades em /app/<pai>/data-model antes de gerar o sub-app. A IA só sabe das tabelas se o schema declarativo existir.