01 / arquitetura
Arquitetura do portal
Monorepo Next.js 16 com duplo deploy: Cloudflare Workers para conteúdo estático e Guará Cloud (Docker standalone) para rotas dinâmicas. Teto de 25 MiB por asset no Workers e 3 MiB gzip de bundle ditam todas as decisões de payload.
Stack
- Next.js 16 (App Router, TypeScript, Tailwind CSS)
- Monorepo:
apps/web/— rotas, componentes, lib, dados - Banco (leitura/escrita): Neon Postgres via Drizzle ORM
- Banco (escrita ao vivo em Workers): Cloudflare D1
- Espelho de Documentos: Cloudflare R2 (S3-compatible) para guarda perene de PDFs
- Deploy A: Cloudflare Workers via OpenNext — estático + ISR
- Deploy B: Guará Cloud (Docker, região br-gru) via
output: standalone - Guarda pré-build: Linter textual e normalizador de grandezas (
npm run lint:textos) e varredura de CPF
Tetos que mandam na arquitetura
| Teto | Valor | Consequência prática |
|---|---|---|
| Asset por rota (Workers) | 25 MiB | Coleção grande usa índice fatiado, não props |
| Bundle gzip por rota | 3 MiB | Sem bibliotecas de gráfico — SVG inline ou CSS |
| Arquivos no Workers | 20.000 | Dado versionado em data/, compactado antes de commitar |
| Neon storage (Free) | 0,5 GB | Novas coletas vão para D1 até renovação |
| Documentos e PDFs | Cloudflare R2 | Espelho perene sem inchar o repositório Git |
3 Grandes Eixos e Top 100 Páginas
O portal organiza o conhecimento cívico em três eixos mestres: Direitos em Movimento, Terra e Territórios, e Estado e Economia. As 100 páginas de maior relevância cívica compõem o catálogo central na rota /indice, com busca instantânea e navegação no topo de todas as páginas.
Duplo deploy
O mesmo código gera dois artefatos independentes: o Workers (OpenNext, output: export) e o container Docker (Guará Cloud, output: standalone). O DNS aponta para o Workers por padrão. O container é a saída de contingência e o ambiente de homologação de rotas dinâmicas.
Detalhes operacionais: esta página. Deploy passo a passo: Fontes e coleta.