Plataforma de Segurança Alimentar para Celíacos Detecta alérgenos em produtos — incluindo traços de contaminação cruzada — e avisa antes de você consumir.
- Ambiente de Produção (VPS)
- Estrutura do Monorepo
- Como Começar
- Funcionalidades
- Testes
- Arquitetura
- Documentação
- Segurança & Governança
- 💻 Web App: https://www.celilac.com.br/ (ou https://celilac.com.br/)
- ⚙️ Backend API: https://api.celilac.com.br/
- 🔒 Reverse Proxy & SSL: Traefik com renovação automática Let's Encrypt
celillac/
├── .github/
│ └── workflows/ # CI/CD: ci-tests.yml (testes & build) e cd-deploy.yml (VPS SSH)
├── backend/ # API Node.js/TypeScript (Clean Architecture + DDD)
│ ├── src/
│ │ ├── domain/ # Coração: entidades, VOs, interfaces (zero dependências)
│ │ ├── application/ # Casos de uso
│ │ ├── infrastructure/ # PostgreSQL (pg), gateways (Asaas), repositórios
│ │ └── interfaces/ # Controllers HTTP (Express)
│ └── tests/unit/ # 90 suítes | 615 testes
├── frontend/
│ ├── web-app/ # Aplicação principal (Next.js 14, porta 3001)
│ ├── landing-page/ # Landing page estática (Next.js 14, porta 3002)
│ └── mobile-app/ # App Mobile (Flutter)
│ ├── lib/ # Código-fonte Dart
│ │ ├── api/ # Chamadas HTTP/Cliente API
│ │ ├── core/ # Temas, constantes e utilitários
│ │ └── features/ # Features de negócio (Auth, Perfil, Scanner)
│ └── test/ # Testes unitários e de widget
├── docs/ # Documentação de arquitetura e contratos
├── harness/ # Regras de governança da IA
└── infra/docker/ # docker-compose.yml (PostgreSQL + Full Stack Container)
- Node.js 18+
- Docker Desktop
docker-compose up -dcd backend
cp .env.example .env # Configure as variáveis
npm install
npm run devcd frontend/web-app
cp .env.local.example .env.local
npm install
npm run devcd frontend/landing-page
npm install
npm run devcd frontend/mobile-app
flutter pub get
flutter runAndroid Emulator: A URL da API usa
http://10.0.2.2:3000(localhost do emulador Android).
Cada contexto tem seu próprio doc em docs/features/ com endpoints, entidades e regras. Contratos completos de API em docs/API_CONTRACTS.md.
| Contexto | Status | Doc |
|---|---|---|
| 🔐 IAM & Autenticação | ✅ Implementado | docs/features/iam.md |
| 👤 Consumidor | ✅ Implementado | docs/features/consumer.md |
| 🥗 Perfil Alimentar | ✅ Implementado | docs/features/food-profile.md |
| ✅ Implementado | docs/features/allergen-engine.md |
|
| 🛒 Catálogo de Produtos | ✅ Implementado | docs/features/catalog.md |
| 🏷️ Categorias de Produtos & Moderação | ✅ Implementado | docs/features/categories.md |
| 🏪 Gestão de Parceiros Comerciais | ✅ Implementado | docs/features/partner.md |
| 📦 Pedidos & Trava Biológica | ✅ Implementado | docs/features/orders.md |
| 💳 Pagamentos, Asaas & Split Marketplace | ✅ Implementado | docs/features/payments.md |
| 🌐 Frontend (Web App + Landing Page) | ✅ Implementado | docs/features/frontend.md |
| 🛡️ Administração & Moderação | ✅ Implementado | docs/features/admin.md |
| ⭐ Avaliações e Confiança | ✅ Implementado | docs/features/reviews.md |
| ❤️ Favoritos | ✅ Implementado | docs/features/favorites.md |
| 📜 Auditoria & Rastreabilidade do Domínio | ✅ Implementado | docs/features/audit.md |
| 📱 App Mobile (Flutter) | ✅ Implementado | docs/features/mobile-app.md |
| 🛡️ Segurança, Anti-Bot & Anti-DDoS | ✅ Implementado | docs/features/security-hardening.md |
| 💵 Pagamento na Entrega & Proteção Contra Fraude | ✅ Implementado | docs/features/delivery-payment-and-fraud-protection.md |
| 🔄 Autonomia de Testes & Auto-Cura | ✅ Implementado | docs/features/autonomous-testing-protocol.md |
| ⏱️ Cancelamento Automático de Pedidos (Timeouts) | ✅ Implementado | docs/features/order-auto-cancellation.md |
# Validação completa em pirâmide (Backend Typecheck + 88 suítes Jest + Paridade + Frontend Typecheck + Smoke Tests)
npm run verify # ou node scripts/agent-verify.mjs
# Execução rápida (apenas backend)
npm run verify:quick # ou node scripts/agent-verify.mjs --quick
# Smoke tests HTTP contra a API em execução
npm run test:smoke # ou node scripts/test-api-smoke.mjs
# Apenas testes unitários Jest
cd backend && npm test93 suítes de teste | 645 casos 100% aprovados, cobrindo domínio, casos de uso, controllers, middlewares de segurança e o Motor de Alérgenos:
| Suíte | Cobertura |
|---|---|
domain/Result.spec.ts |
100% |
domain/partner/Cnpj.spec.ts |
100% |
domain/partner/Cpf.spec.ts |
100% |
domain/iam/Email, PasswordHash, User, PasswordReset |
100% |
domain/food-profile/SeverityLevel, Restriction, FoodProfile |
100% |
domain/allergen-engine/AllergenEngine ← 9 casos críticos |
~98% |
domain/catalog/Product, Category |
~98.5% |
domain/partner/Partner |
~97.8% |
domain/order/Order, OrderItem, OrderStatus |
100% |
domain/payment/Payment, PartnerFinancialAccount, PaymentRefund |
100% |
domain/reviews/Review |
95% |
domain/audit/AuditLog, PgAuditLogRepository |
100% |
application/food-profile/UpdateFoodProfileUseCase |
100% |
application/consumer/ToggleConsumerStatusUseCase |
~95.8% |
application/allergen-engine/CheckCompatibilityUseCase |
100% |
application/catalog/CreateProductUseCase, CreateCategoryUseCase, SearchProductsUseCase |
100% |
application/order/CreateOrderUseCase, OrderUseCases (Cancel, Get, List, UpdateStatus) |
100% |
application/payment/PaymentUseCases (Checkout, Subaccount, Webhook, Refund) |
100% |
application/reviews/SubmitReviewUseCase, GetProductReviewsUseCase |
~94% |
application/admin/CreateReportUseCase, ListReportsUseCase, ReviewReportUseCase, ReviewCategoryUseCase |
~94% |
application/iam/LogoutUserUseCase, RequestPasswordResetUseCase, ResetPasswordUseCase |
~96% |
interfaces/http/controllers/consumer/ToggleConsumerStatusController |
100% |
interfaces/http/middlewares/AuthMiddleware |
100% |
interfaces/http/middlewares/SecurityMiddleware |
100% |
interfaces/http/middlewares/RateLimitMiddleware |
100% |
Para relatório de cobertura: npm test -- --coverage.
Interfaces (HTTP)
│
Application (Use Cases)
│
Domain ← Núcleo puro, zero dependências externas
│
Infrastructure (PostgreSQL, pg.Pool)
Status de cada bounded context na tabela de Funcionalidades, acima.
Host: localhost:5432
Banco: celilac_db
Usuário: celilac_user
| Tabela | Descrição |
|---|---|
users |
IAM — id, email, password_hash, role, full_name, avatar_url, account_status |
food_profiles |
Perfil — user_id (FK), restrictions (JSONB), accepts_cross_contamination |
partners |
Parceiros — name, cnpj, address, phone, type, approval_status, operational_status, logo_url, updated_at |
product_categories |
Categorias — name, normalized_name, partner_id (FK), status, visibility, rejection_reason |
products |
Catálogo — nome, marca, ingredientes, categoria, category_id (FK), status de análise, partner_id (FK) |
product_reviews |
Avaliações — user_id (FK), product_id (FK), rating, comment |
product_reports |
Denúncias — reporter_id (FK), product_id (FK), reason, details, status |
user_favorites |
Favoritos — user_id (FK), product_id (FK), partner_id (FK) |
email_verifications |
Verificação de e-mail OTP — user_id (FK), code, expires_at, is_used |
blacklisted_tokens |
Tokens JWT revogados — token (PK), expires_at |
audit_logs |
Auditoria & Rastreabilidade do Domínio — id (PK), entity_type, entity_id, action, actor_id, actor_role, changes (JSONB), reason, created_at |
Detalhes de schema e estratégia de persistência em docs/DATABASE.md.
| Arquivo | Conteúdo |
|---|---|
docs/PRD.md |
Requisitos do produto |
docs/features/ |
Status, endpoints e regras por bounded context |
docs/DOMAIN_MODEL.md |
Bounded contexts e regras |
docs/DATABASE.md |
Schema e estratégia de persistência |
docs/FRONTEND_STRATEGY.md |
Regras de interface |
docs/ALLERGEN_ENGINE.md |
Especificação do motor |
docs/API_CONTRACTS.md |
Contratos de API completos |
CHANGELOG.md |
Histórico de entregas |
AGENTS.md |
Regras de governança para IAs |
harness/guardrails.md |
Restrições de segurança |
O app mobile cobre o fluxo completo do consumidor no campo:
| Tela | Descrição |
|---|---|
| Login / Cadastro | Autenticação via POST /iam/login e POST /iam/register |
| Onboarding de Perfil | Seleção de alérgenos e severidade (POST /food-profile) |
| Scanner | Câmera EAN-13/EAN-8 → busca no catálogo → compatibilidade |
| Busca | Busca por nome/marca + verificação instantânea |
| Perfil | Restrições ativas, aviso de revalidação e logout |
Segurança Mobile:
- Token JWT armazenado em Keychain (iOS) / Keystore (Android) via
flutter_secure_storage - Compatibilidade calculada exclusivamente no backend — nunca no dispositivo
- Alertas visuais: ✅ SAFE · 🟡 WARNING ·
⚠️ DANGER · ⛔ BLOCKED
- Pipelines CI/CD no GitHub Actions:
.github/workflows/ci-tests.ymlexecuta 100% das 35 suítes de teste e builds em cada PR/push;.github/workflows/cd-deploy.ymlrealiza o deploy automatizado via SSH no Docker da VPS Oracle Cloud ao aprovar o merge namain. - Middleware JWT no Backend: validação do cabeçalho
Authorization: Bearer <token>em todas as rotas de domínio privadas (perfil, avaliações, compatibilidade). - Proteção contra IDOR/BOLA: checagem estrita de identidade em nível de controller. Um usuário comum só pode ler/escrever em dados vinculados ao seu próprio id.
- Tratamento de Erro Global: Express configurado para ocultar logs detalhados e stack traces internos, retornando um status
500genérico e limpo. - CORS & Headers de Segurança: CORS seguro para origens controladas e headers OWASP recomendados (
nosniff,DENYclickjacking, etc.). .envnunca commitado — apenas.env.exampleno repositório- Motor de Alérgenos: 100% das alterações exigem aprovação humana
- JWT mobile: armazenado em Keychain/Keystore via
flutter_secure_storage(não em AsyncStorage) - JWT web: em
sessionStoragee em memória — não armazenado emlocalStorage - Seeds apenas em ambiente local — nunca dados reais de usuários
- Agente de IA segue
AGENTS.md+harness/guardrails.mda cada tarefa