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

CamadaTecnologiaVersão
FrameworkNext.js (App Router)15+
RuntimeReact19.x
LinguagemTypeScript5.x
EstilosTailwind CSS + shadcn/ui4.x
MonorepoTurboRepo + npm workspaces
Estado (servidor)TanStack Queryv5
Estado (global)React Context API
AutenticaçãoStrapi JWT + Cookie HttpOnly
CMS / Auth serverStrapi v5v5
API OperacionalEcoAPI
MapasReact Leaflet + ArcGIS + GISWater WMS
GráficosRecharts
AnimaçõesFramer Motion
NotificaçõesSonner
ValidaçãoZodv3
LoggerPino
BuildTurbopack (dev)
Testes unitáriosVitest
Testes E2EPlaywright
ContainerizaçãoDocker + Compose24+

Estrutura do Monorepo

        • next.config.ts

Pacotes Compartilhados

O monorepo organiza o código em camadas reutilizáveis:

PacoteNome npmConteúdo
packages/shared/core@ecoweb/sharedValue Objects, primitivos de domínio, Result<T>, logger (Pino)
packages/shared/web@ecoweb/shared-webComponentes React compartilhados (Header, Sidebar, Charts), hooks utilitários, cn()
packages/auth/core@ecoweb/authDTOs e schemas Zod de entidades (User, Company, Group, Profile, Permission, NavigationItem)
packages/auth/web@ecoweb/auth-webReact hooks e providers de autenticação e sessão (AuthProvider, useAuth, useCompanyList, etc.)
packages/ecoapi/core@ecoweb/ecoapiContratos e DTOs da EcoAPI (framework-agnostic)
packages/ecoapi/web@ecoweb/ecoapi-webCliente HTTP Axios para a EcoAPI
packages/strapi/core@ecoweb/strapiContratos e DTOs do Strapi (framework-agnostic)
packages/strapi/web@ecoweb/strapi-webCliente HTTP Axios para o Strapi
packages/tailwindcss-config@config/tailwindcss-configConfiguração base do Tailwind CSS
packages/typescript-config@config/typescript-configConfigurações base do TypeScript
packages/eslint-config@config/eslint-configRegras 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 install

Configurar 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=development

Iniciar em desenvolvimento

# Rodar todos os apps do monorepo npm run dev # Rodar apenas o app ecoweb cd apps/ecoweb && npm run dev

O app estará disponível em http://localhost:3000.

Rodar com Docker

cd apps/ecoweb docker compose up -d

Serviços iniciados:

  • ecowebhttp://localhost:3000
  • strapihttp://localhost:1337
  • postgres → porta 5432

Scripts disponíveis

ScriptComandoDescrição
devnpm run devInicia em modo dev com Turbopack
buildnpm run buildBuild de produção
startnpm run startInicia o servidor de produção
lintnpm run lintVerifica ESLint
testnpm run testRoda testes unitários (Vitest)
test:e2enpm run test:e2eRoda testes E2E (Playwright)
type-checknpm run type-checkVerificação de tipos TypeScript

Portas padrão

ServiçoPorta
EcoWeb (Next.js)3000
EcoWeb Docs (Nextra)3002
Strapi CMS1337
EcoAPI3006
PostgreSQL5432