Pular para o conteúdo

Stack tecnológica

Versões alvo. Pinos exatos em package.json de cada workspace. Atualização via Renovate/Dependabot com PRs pequenos.

Runtime e build

CamadaTecnologiaVersão alvo
RuntimeNode.js22 LTS
Package managerpnpm (via Corepack)9.15.x
MonorepoTurborepo^2.3
LinguagemTypeScript^5.6

Frontend (apps/web)

CamadaTecnologiaVersão
FrameworkReact + Vite18.x / 5.x
UIshadcn/ui + Tailwind + Radix^3.4
Data clientTanStack Query^5
Estado UIZustand^5
Formsreact-hook-form^7.53
ValidaçãoZod^3.23
i18nreact-i18next^15
GráficosRecharts^2
PWAvite-plugin-pwa (Workbox)^0.21
Push (server)web-push em Edge Function send-push^3.6
Fontes@fontsource-variable/inter (bundled)^5.1
Captcha@hcaptcha/react-hcaptcha^1.11
Observabilidade@sentry/react + posthog-js (opcional F2.5+)^8.40 / ^1.18

Documentação (apps/docs)

CamadaTecnologiaVersão
FrameworkAstro 5^5.0
Docs themeStarlight^0.32

Backend (Supabase)

CamadaTecnologiaVersão
Postgres15 (com extensions: pgcrypto, moddatetime)15.x
AuthSupabase Auth + Custom Access Token Hook
Edge FunctionsDenoruntime Supabase
StorageS3-compatible
CLIsupabase^2.0

Provedores externos

CategoriaProvedorNotas
HostingNetlify Pro$19/mês — wildcard SSL F1.5+
DNSHostGator → Cloudflare (pendente F1.5)Cloudflare obrigatório pra wildcard *.clinicgestor.com
Email transacionalResendDKIM + SPF + DMARC verificados
CobrançaAsaasAPI v3 (sandbox + produção); 2 níveis (plataforma + subcontas)
Assinatura digitalAssinafyAPI v1 (sem ZapSign — ver ADR 0007)
CaptchahCaptchasite key pública + secret no Vault
ObservabilidadeSentry + PostHog (opcional F2.5+)sem PII em events
LLMAnthropic via AI Gatewayredact obrigatório antes do prompt

Testes

CategoriaTecnologiaVersão
Unit / integrationVitest^2
E2EPlaywright (Chromium)^1.49
Coverage mínima70% packages com lógica de negócio · 50% app

Toolchain

CamadaTecnologiaVersão
LintESLint 9 (flat config)^9.15
Plugins ESLintreact · react-hooks · jsx-a11y · tailwindcss · @typescript-eslint
FormatPrettier^3.3
HooksHusky + lint-staged^9.1 / ^15.2

Lints custom obrigatórios:

  • pnpm lint:tokens — proíbe hex inline, style={{ color }}, rgb(...), fontFamily inline
  • pnpm lint:pages — toda rota usa <PageContainer> (exceto auth/* e _dev/*)
  • pnpm lint:consultancy-scope — toda mutation em tabela tenant valida consultancy_id
  • pnpm lint:no-spam-b2b — proíbe rotas /consultancy/(marketplace|search|browse)-clinic*

Como rodar localmente

Terminal window
nvm use 22
corepack enable
corepack prepare pnpm@9.15.0 --activate
pnpm install
pnpm db:start
pnpm db:reset
pnpm dev
# Validação antes de PR
pnpm type-check
pnpm lint
pnpm lint:tokens
pnpm lint:pages
pnpm test
pnpm --filter @clinicgestor/web build

Comandos pnpm db:* e pnpm dev ficam disponíveis a partir do Sprint 1, quando o monorepo for completado com apps/web, packages/* e supabase/.