O que replica-architect faz?
Lê replica/recon.md e replica/features.csv. Escreve replica/architecture.md (modelo: architecture.md nesta pasta).
Se não houver mapa de reconhecimento, pare e execute /replica-recon primeiro. Planejar um clone apenas de memória do que um aplicativo faz é como perder metade dele.
Etapa 1: a stack
Use o que o usuário já conhece, se ele tiver uma stack. Caso contrário, use a padrão, porque cada parte é gerenciada, documentada e barata com zero usuários:
| camada | padrão | substituir por |
|---|---|---|
| web app | Next.js (App Router) + TypeScript | Remix, SvelteKit, Rails |
| estilo | Tailwind, tokens do replica-design | CSS modules |
| mobile | Expo (React Native) | SwiftUI, Kotlin |
| banco de dados | Postgres no Supabase ou Neon | PlanetScale, SQLite (Turso) |
| ORM | Drizzle ou Prisma | SQL puro |
| autenticação | Supabase Auth ou Auth.js | Clerk |
| pagamentos | Stripe Checkout + Billing | Lemon Squeezy, Paddle |
| Resend ou Postmark | SES | |
| jobs | Vercel Cron, Inngest ou Trigger.dev | um worker no Fly |
| arquivos | Supabase Storage ou Cloudflare R2 | S3 |
| hospedagem | Vercel | Netlify, Fly, Render |
Escreva cada escolha com uma linha de porquê. Um banco de dados. Sem microsserviços. O clone não precisa da arquitetura original, precisa dos recursos originais.
Etapa 2: o esquema
Transforme o modelo de dados inferido em SQL. Para cada tabela:
id uuid primary key default gen_random_uuid(),created_at,updated_at- uma coluna de proprietário (
user_idouorg_id) em tudo que um usuário possui - chaves estrangeiras com uma regra
on deletedefinida, não padronizada - índices em cada chave estrangeira e em cada coluna que você filtra ou ordena
- enums ou restrições check para campos de status
- horários como
timestamptz, sempre, armazenados em UTC - dinheiro como centavos inteiros mais uma coluna de moeda
- regras de acesso: Row Level Security do Postgres no Supabase, ou uma verificação de autorização por consulta na camada de dados. Escreva qual.
Exemplo, para um aplicativo de reservas:
create table bookings (
id uuid primary key default gen_random_uuid(),
event_type_id uuid not null references event_types(id) on delete cascade,
host_id uuid not null references users(id) on delete cascade,
start_at timestamptz not null,
end_at timestamptz not null,
guest_name text not null,
guest_email text not null,
guest_timezone text not null,
status text not null default 'confirmed'
check (status in ('confirmed','cancelled','rescheduled')),
answers jsonb not null default '{}',
created_at timestamptz not null default now(),
constraint no_zero_length check (end_at > start_at)
);
create index on bookings (host_id, start_at);
Em seguida, as restrições difíceis que o reconhecimento encontrou. Dois convidados reservando o mesmo horário é um problema de banco de dados (uma restrição de exclusão ou um índice único), não um problema de interface.
Etapa 3: a API
Uma tabela por fluxo do mapa de reconhecimento. Para cada rota ou server action:
método caminho | o que faz | quem pode chamar | entrada | saída | fluxo
Além disso, webhooks de entrada (Stripe, provedores de calendário) e de saída, e jobs em segundo plano (lembretes, sincronização, limpeza) com sua programação.
Apenas APIs oficiais e públicas com as próprias chaves do usuário. Nunca os endpoints privados do aplicativo original, mesmo que estejam visíveis no navegador.
Etapa 4: as partes que mordem
Escreva uma linha para cada uma que se aplica: fusos horários e horário de verão, idempotência (webhooks chegam duas vezes), condições de corrida, limites de taxa, limites de tamanho de arquivo, pesquisa, tempo real, offline, entregabilidade de email, multi-inquilino, exclusão GDPR.
Etapa 5: ordem de construção
- Fatia vertical. O loop central do início ao fim, feio: cadastre-se, faça a única coisa, veja o resultado. Prova a stack.
- Obrigatórios de
features.csv, por área. - Desejáveis, depois opcionais.
- As correções que o replica-entrepreneur encontrar, depois que ele for executado.
Cada marco lista suas telas (S-IDs), tabelas e rotas.
Saída
replica/architecture.md, o SQL em replica/schema.sql ou como a primeira migração, e um resumo: stack em uma linha, contagem de tabelas, contagem de rotas, as três partes mais arriscadas e o próximo passo: /replica-design.