Visão Geral
EcoWeb é uma plataforma SaaS de gestão ambiental e operacional construída como um monorepo TurboRepo. Ela oferece dashboards interativos, integração com sistemas GIS, gestão de telemetria hídrida, controle de usuários/permissões e relatórios operacionais para empresas de saneamento.
Stack Tecnológico
| Camada | Tecnologia | Versão |
|---|---|---|
| Framework | Next.js (App Router) | 15+ |
| Runtime | React | 19.x |
| Linguagem | TypeScript | 5.x |
| Estilos | Tailwind CSS + shadcn/ui | 4.x |
| Monorepo | TurboRepo + npm workspaces | — |
| Estado (servidor) | TanStack Query | v5 |
| Estado (global) | React Context API | — |
| Autenticação | Strapi JWT + Cookie HttpOnly | — |
| CMS / Auth server | Strapi v5 | v5 |
| API Operacional | EcoAPI | — |
| Mapas | React Leaflet + ArcGIS + GISWater WMS | — |
| Gráficos | Recharts | — |
| Animações | Framer Motion | — |
| Notificações | Sonner | — |
| Validação | Zod | v3 |
| Logger | Pino | — |
| Build | Turbopack (dev) | — |
| Testes unitários | Vitest | — |
| Testes E2E | Playwright | — |
| Containerização | Docker + Compose | 24+ |
Estrutura do Monorepo
- next.config.ts
Pacotes Compartilhados
O monorepo organiza o código em camadas reutilizáveis:
| Pacote | Nome npm | Conteúdo |
|---|---|---|
packages/shared/core | @ecoweb/shared | Value Objects, primitivos de domínio, Result<T>, logger (Pino) |
packages/shared/web | @ecoweb/shared-web | Componentes React compartilhados (Header, Sidebar, Charts), hooks utilitários, cn() |
packages/auth/core | @ecoweb/auth | DTOs e schemas Zod de entidades (User, Company, Group, Profile, Permission, NavigationItem) |
packages/auth/web | @ecoweb/auth-web | React hooks e providers de autenticação e sessão (AuthProvider, useAuth, useCompanyList, etc.) |
packages/ecoapi/core | @ecoweb/ecoapi | Contratos e DTOs da EcoAPI (framework-agnostic) |
packages/ecoapi/web | @ecoweb/ecoapi-web | Cliente HTTP Axios para a EcoAPI |
packages/strapi/core | @ecoweb/strapi | Contratos e DTOs do Strapi (framework-agnostic) |
packages/strapi/web | @ecoweb/strapi-web | Cliente HTTP Axios para o Strapi |
packages/tailwindcss-config | @config/tailwindcss-config | Configuração base do Tailwind CSS |
packages/typescript-config | @config/typescript-config | Configurações base do TypeScript |
packages/eslint-config | @config/eslint-config | Regras ESLint compartilhadas |
Grafo de dependências
@ecoweb/shared
└── @ecoweb/auth
├── @ecoweb/shared-web
└── @ecoweb/auth-web
└── apps/ecoweb
@ecoweb/ecoapi → @ecoweb/ecoapi-web → apps/ecoweb
@ecoweb/strapi → @ecoweb/strapi-web → apps/ecoweb@ecoweb/shared nunca deve depender de @ecoweb/auth. Essa regra previne
dependência circular. Tipos compartilhados entre ambos devem ser definidos em
@ecoweb/auth e re-exportados em apps/ecoweb/types/ quando necessário.
Pacotes de core são framework-agnostic (sem React, sem Next.js). Pacotes
de web dependem de React e podem consumir os core correspondentes.
Início Rápido
Instalar dependências
npm installConfigurar variáveis de ambiente
Crie .env.local em apps/ecoweb/:
# URLs dos serviços externos (obrigatórias)
NEXT_PUBLIC_STRAPI_BASE_URL=http://localhost:1337
NEXT_PUBLIC_ECOAPI_BASE_URL=http://localhost:3006
# URLs internas (quando rodando via Docker — opcional)
STRAPI_INTERNAL_URL=http://strapi:1337
ECOAPI_INTERNAL_URL=http://ecoapi:3006
# Segurança
SECURE_COOKIES=false # true em produção (HTTPS)
LOG_LEVEL=info # trace | debug | info | warn | error | fatal
NODE_ENV=developmentIniciar em desenvolvimento
# Rodar todos os apps do monorepo
npm run dev
# Rodar apenas o app ecoweb
cd apps/ecoweb && npm run devO app estará disponível em http://localhost:3000.
Rodar com Docker
cd apps/ecoweb
docker compose up -dServiços iniciados:
ecoweb→http://localhost:3000strapi→http://localhost:1337postgres→ porta5432
Scripts disponíveis
| Script | Comando | Descrição |
|---|---|---|
dev | npm run dev | Inicia em modo dev com Turbopack |
build | npm run build | Build de produção |
start | npm run start | Inicia o servidor de produção |
lint | npm run lint | Verifica ESLint |
test | npm run test | Roda testes unitários (Vitest) |
test:e2e | npm run test:e2e | Roda testes E2E (Playwright) |
type-check | npm run type-check | Verificação de tipos TypeScript |
Portas padrão
| Serviço | Porta |
|---|---|
| EcoWeb (Next.js) | 3000 |
| EcoWeb Docs (Nextra) | 3002 |
| Strapi CMS | 1337 |
| EcoAPI | 3006 |
| PostgreSQL | 5432 |