Sistemas modulares

Sub-apps e Sistemas Modulares

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

SintomaUse sub-apps
App passou de 2000 linhasSim
5+ áreas funcionais (vendas, estoque, RH...)Sim
LLM começou a gerar código cortadoSim
Múltiplos perfis (admin, vendedor, cliente)Sim
App simples de 1-2 telasNã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.

  1. Descreve o sistema em 1 parágrafo (ou usa um dos 4 quick prompts: CRM, ERP Loja, Help Desk, Gestão de Projetos)
  2. IA propõe estrutura: app pai + N sub-apps + entidades compartilhadas (~10-30s)
  3. Revisa e edita inline: rename, adiciona/remove sub-apps e colunas
  4. "Criar sistema" — plataforma cria tudo em ~5s: pai + sub-apps placeholder + tabelas no banco
  5. 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

  1. Cria o app pai normalmente no /creator
  2. No app pai: menu → "Modelo de dados" → declara entidades compartilhadas
  3. No app pai: menu → "Criar sub-app" (vai pro creator com parentId pré-setado)
  4. Banner persistente "Criando sub-app de X" aparece durante toda a sessão
  5. Salva — o sub-app fica linkado ao pai

Opção 3 — Converter app existente

Pra transformar um app comum em sub-app de outro:

  1. Abre o creator no app filho (?edit=<slug>)
  2. No save modal, escolhe um app no campo "Conectar a um sistema"
  3. 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_clientes
  • app_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

QuemEscreve
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:

  1. Clona o pai com novo slug + novo prefix de tabelas
  2. Cria todos os sub-apps linkados ao novo pai
  3. Aplica CREATE TABLE nas shared tables do novo prefix
  4. 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.