O Leite Fácil é uma plataforma SaaS para produtores e veterinários gerenciarem a operação leiteira de ponta a ponta: cadastro e manejo de animais, protocolos de inseminação (IATF), controle sanitário, registro de produção, dietas, relatórios analíticos, coleiras IoT de monitoramento e o ciclo financeiro (assinaturas e cobrança).
A arquitetura é composta por serviços independentes que conversam entre si através de um BFF central, com identidade e autenticação isoladas em um Identity Provider próprio.
flowchart TD
subgraph Clientes
FE["Front-end Web<br/>React + Vite"]
MO["App Mobile<br/>Expo · offline-first"]
ADM["Painel ADM<br/>React"]
end
subgraph Backends
BFF["Back-end / BFF<br/>NestJS · :3001<br/>domínio + orquestração"]
ADMB["ADM Back-end<br/>NestJS"]
CORE["Agro-Core (IdP)<br/>NestJS · :3000<br/>auth · users · /internal/*"]
end
subgraph Infra
DB[("PostgreSQL<br/>Drizzle ORM")]
IOT["Coleiras IoT"]
end
FE -->|auth via BFF| BFF
MO -->|REST| BFF
ADM --> ADMB
BFF -->|OAuth2 RS256| CORE
ADMB --> CORE
BFF --> DB
ADMB --> DB
CORE --> DB
IOT --> BFF
A autenticação do front passa pelo BFF (
:3001); o Agro-Core expõe apenas rotas/internal/*para os back-ends, nunca diretamente para os clientes.
| Repositório | Papel | Stack |
|---|---|---|
Agro-Core |
Identity Provider standalone — auth, identidade e user management (:3000) |
NestJS · BullMQ · class-validator |
leite-facil-back-end |
Back-end de domínio + BFF — regra de negócio e orquestração (:3001) |
NestJS · Drizzle ORM · PostgreSQL |
leite-facil-front-end |
Aplicação web principal do produtor/veterinário | React · Vite · TanStack Query · Sentry |
leite-facil-mobile |
App de campo offline-first (sincronização automática) | Expo · React Native · TanStack Query |
leite-facil-adm-back-end |
Back-end do painel administrativo | NestJS · Drizzle · Neon |
leite-facil-adm-front-end |
Painel administrativo (gestão interna) | React · React Router · Tailwind |
leite-facil-coleiras |
Integração das coleiras IoT de monitoramento | — |
leite-facil-e2e |
Testes end-to-end do ecossistema | Node · pg |
| Camada | Tecnologias |
|---|---|
| Back-end | NestJS · TypeScript · Drizzle ORM · PostgreSQL · BullMQ |
| Front-end | React · Vite · TanStack Query · Tailwind · Radix UI · Hugeicons |
| Mobile | Expo · React Native · AsyncStorage (offline-first) |
| Auth | OAuth 2.0 · JWT RS256 (public key) · class-validator |
| Observabilidade | Sentry |
| Qualidade | ESLint (--max-warnings 0) · Husky · lint-staged · testes E2E |
Convenções do ecossistema
- Autenticação via OAuth 2.0 / JWT RS256, validação com class-validator (não Zod).
- Em conflitos de contrato front × back, o back é a fonte da verdade.
- Sem resíduo legacy: migrações e refatorações são feitas de uma vez (com backup).
- Pre-commit roda lint-staged + ESLint sem tolerância a warnings.