Arquitetura & Engenharia
Estrutura do Monorepo
Entendendo a organização, aplicações e pacotes compartilhados no Turborepo.
O Urbis adota uma arquitetura de Monorepo gerenciada por Turborepo e pnpm. Essa estrutura unificada viabiliza o compartilhamento imediato de código tipado entre backend e múltiplos frontends, builds otimizados com cache e versionamento coeso.
📁 Estrutura de Diretórios
urbis/
├── apps/
│ ├── accounts/ # Portal Angular de identidade, perfis e autenticação OIDC
│ ├── api/ # Backend NestJS (REST API, TypeORM, OIDC Provider, Redis, Bull)
│ ├── docs/ # Portal de documentação técnica (Next.js + Fumadocs MDX)
│ ├── legis/ # Editor e gestão territorial legislativa (React + Vite + Tiptap)
│ ├── site/ # Portal institucional público (React + Vite SSG)
│ └── web/ # Aplicação principal de mapas GIS (React + Deck.gl + MapLibre)
├── packages/
│ ├── auth/ # Cliente unificado de autenticação OIDC e telemetria (@open-urbis/map-auth)
│ ├── endereco-digital/ # Algoritmo de geocodificação territorial (@open-urbis/endereco-digital)
│ ├── eslint-config/ # Configurações compartilhadas de ESLint
│ ├── map/ # Componente e engine de mapa reutilizável (@open-urbis/map)
│ ├── shared/ # Tipos TypeScript, DTOs e Feature Flags (@open-urbis/map-shared)
│ ├── typescript-config/ # Presets de configuração TypeScript
│ └── ui/ # Componentes visuais UI compartilhados (@open-urbis/map-ui)
├── docs/ # Guias em Markdown e relatórios de homologação
├── infra/ # Helm charts, Dockerfiles e scripts de deploy Kubernetes
├── package.json # Scripts globais do monorepo
├── pnpm-workspace.yaml # Configuração dos workspaces pnpm
└── turbo.json # Pipeline de tarefas e cache do Turborepo🎯 Benefícios da Arquitetura
- Segurança de Tipos Ponta a Ponta: Interfaces, DTOs e regras de Feature Flags são definidas em
packages/sharede consumidas pela API e pelos frontends. Qualquer quebra de contrato na API causa falha de tipagem no frontend em tempo de desenvolvimento. - Workspaces Nativos do pnpm: Permite o consumo local instantâneo dos pacotes sem necessidade de build intermediário ou publicação em registros NPM durante o desenvolvimento.
- Pipeline Otimizado com Turborepo: O Turborepo calcula grafos de dependência e executa tarefas (lint, build, test) em paralelo, armazenando os resultados em cache para evitar retrabalho em arquivos inalterados.