Files
Projeto-Portaria/prompts/FASE-0-bootstrap.md
2026-07-22 15:55:55 -03:00

3.3 KiB

FASE 0 — Bootstrap do monorepo

Objetivo

Estrutura completa do monorepo, ambiente Docker subindo, CI verde. Nenhuma regra de negócio ainda — apenas o esqueleto onde tudo será construído.

Pré-requisitos

Ler docs/01-ARQUITETURA.md (§3 estrutura do monorepo) e docs/05-INFRA-DOCKER.md (compose completo).

Tarefas

1. Raiz do Gradle

settings.gradle.kts incluindo :shared e :backend. Version catalog em gradle/libs.versions.toml com: Kotlin 2.1+, Spring Boot 3.4+, jOOQ, Flyway, PostGIS driver, Testcontainers, ShedLock, Resilience4j, LiveKit server SDK, kotlinx.serialization, kotlinx.datetime.

JDK 21. Toolchain configurado explicitamente.

2. Módulo shared/

KMP com targets jvm(), androidTarget(), iosArm64(), iosSimulatorArm64(). Pacote base br.com.portaria.shared. Apenas kotlinx.serialization e kotlinx.datetime como dependências — este módulo não conhece Spring, Android nem iOS.

Pacotes vazios criados: model/, dto/, state/, validation/.

3. Módulo backend/

Spring Boot 3 + Kotlin, estrutura hexagonal conforme 01-ARQUITETURA.md §3. Perfis local, test, prod. Actuator com health, prometheus, info expostos. OpenAPI via springdoc em /v3/api-docs.

Um controller GET /api/v1/health devolvendo {"status":"UP"}, só para provar a esteira ponta a ponta.

4. web/ com pnpm workspaces

pnpm-workspace.yaml com visitor, admin, shared-ui. Vite + React 19 + TS em ambos os apps. visitor configurado como PWA.

shared-ui exporta tokens.json e o tokens.css gerado. Script pnpm tokens:build que gera tokens.css e Theme.kt a partir do JSON — ver docs/04-DESIGN-SYSTEM-UX.md §2.

5. apps/ Compose Multiplatform

composeApp (comum), androidApp, iosApp. Depende de :shared. Uma tela "Hello Portaria" em ambas as plataformas, apenas para validar o build.

6. infra/

docker-compose.yml exatamente como em docs/05-INFRA-DOCKER.md §2, mais docker-compose.observability.yml e .env.example. Configs em livekit/livekit.yaml, traefik/, postgres/init/01-extensions.sql (CREATE EXTENSION postgis; CREATE EXTENSION pgcrypto;).

7. CI — GitHub Actions

.github/workflows/ci.yml
  ├─ gradle build (backend + shared, com Testcontainers)
  ├─ pnpm lint && test && build
  ├─ gate de bundle: visitor > 200KB gzip → FALHA
  ├─ docker compose config
  └─ verificação de contraste dos tokens

O gate de bundle não é opcional — a escolha de React em vez de Wasm foi motivada por TTI, e sem gate automático essa vantagem se perde em poucas sprints.

8. Documentação de arranque

README.md na raiz com pré-requisitos, docker compose up, como rodar cada app, e o mapa de portas.

Critérios de aceite

  • ./gradlew build verde
  • pnpm -r build verde
  • docker compose -f infra/docker-compose.yml config sem erro
  • docker compose up -d sobe tudo; todos os healthchecks passam
  • GET /api/v1/health responde via Traefik com TLS
  • /actuator/prometheus expõe métricas
  • App Android e iOS compilam e abrem a tela de teste
  • pnpm tokens:build gera tokens.css e Theme.kt
  • CI verde no primeiro push

Não faça nesta fase

  • Nenhuma tabela de negócio (é a FASE 1)
  • Nenhum endpoint além do health
  • Nenhuma tela real
  • Nenhuma integração com LiveKit, FCM ou APNs