Documentação

Reparou — Stack Técnica

Decisão (11/06/2026): a base do Reparou é a mesma stack do ailook (~/IdeaProjects/ailook), hospedada no Railway por ora. Stack já dominada pelo time, com padrões operacionais validados em produção.

Stack

CamadaTecnologia
Monorepopnpm 9 + Turborepo 2
BackendNode 20 + Express 4 + Prisma 6 + PostgreSQL + Zod + Pino
WebNext.js 15 + React 19 + Tailwind v4 + TanStack Query + Zustand
MobileExpo (expo-router) + React Native + TanStack Query
Sharedpackages/shared — Zod schemas + tipos compartilhados
Infra100% Railway (api + web + Postgres plugin), Nixpacks; mobile via EAS Build (release only)
Design systemRaceOS (ver design-language.md) sobre Tailwind v4 — tokens dark/light desde o início

Estrutura do monorepo

reparou/
├── apps/
│   ├── api/         # @reparou/api    (Express + Prisma)
│   ├── web/         # @reparou/web    (Next.js 15 — cockpit da oficina + portal do cliente)
│   └── mobile/      # @reparou/mobile (Expo — app da oficina, único e multipapel, F2)
├── packages/
│   └── shared/      # @reparou/shared (Zod + types)
├── docs/            # análise de mercado, visão, blueprint, design language
├── turbo.json
├── pnpm-workspace.yaml
├── railway.toml     # raiz fallback; cada service tem o seu (apps/api, apps/web)
└── nixpacks.toml

Adaptações em relação ao ailook

As 5 decisões de fundação do blueprint-plataforma.md mapeadas para esta stack:

  1. Multi-tenancy hierárquico. No ailook o tenant é plano (contaId). No Reparou o schema nasce com dois níveis: Conta (tenant raiz — a empresa/grupo) e Unidade (a oficina física). Toda entidade operacional (OS, orçamento, box, estoque) carrega contaId + unidadeId; entidades de cadastro (cliente, veículo) carregam contaId (compartilhadas entre unidades da mesma conta). A UI da Fase 1 expõe 1 unidade; o modelo já suporta rede/franquia (módulos 1, 28, 42, 44).
  2. RBAC + audit log dia 1. Papéis iniciais: OWNER · GESTOR · CONSULTOR · MECANICO. Tabela de auditoria (quem, o quê, quando, antes/depois) escrita pelos services desde a primeira entidade.
  3. Campos customizados. Entidades centrais (OS, orçamento, checklist) com coluna JSONB customFields validada por schema Zod dinâmico por conta.
  4. Eventos de domínio. Services publicam eventos (os.criada, orcamento.aprovado, veiculo.entregue) numa tabela outbox no Postgres — sem broker por enquanto (Railway, simplicidade); consumidores: automações/WhatsApp hoje, Workflow Engine (37) e Data Platform (45) depois.
  5. API-first. O web/mobile consomem a mesma API REST validada por Zod que será a API pública (46) — nenhum acesso Prisma fora de apps/api.

Integrações de plataforma (providers abstraídos desde o início)

Padrões operacionais (herdados do ailook — ver CLAUDE.md)