Skip to content

CTO Overview

mel é um Node + TypeScript app construído com DDD Light (Domain-Driven Design pragmático). Domínio puro (in-memory aggregates), infraestrutura plugada por adapters em application//infrastructure/. Abordagem: Start by the end — modela o end-state experience do casal primeiro, derivamos linguagem ubíqua, depois domínio, depois adapters.

Testes em três tiers (ADR 002): domain (in-memory, ms), infra (colocated, SQLite :memory: + LLM mock), e2e (Playwright + mock LLM gated por NODE_ENV=test). Specs são scenarios-first BDD — cada .md Gherkin tem sibling .spec.ts 1:1.

Estado atual (2026-06-03): 34 cenários green (000-026 + wa-001/2/3/4 + landing-001/2/3), 0 WIP red — specs passando contra impl real ou mock; backlog técnico (BaileysAdapter prod, write tools) trackado em /cpo/030-next/. 10 ADRs aceitas, dominio core estável.

  • Runtime — Node.js + TypeScript (strict).
  • LLM — Gemini 2.5 Flash via OpenRouter (Vercel AI SDK).
  • Memory@mastra/memory + @mastra/libsql via withMastra().
  • Persistence — drizzle + better-sqlite3 (domain repos).
  • WhatsApp — Baileys (multi-device, MIT). Único canal user-facing.
  • Landing/docs — Astro 6 + Cloudflare Pages.
  • PDF — unpdf via subprocess (sync wrap).
  • E2E — Playwright + mock LLM gated por env.

Detalhes em ADR 001.

  • VO-first, promoção a Entity/Aggregate quando o cenário forçar.
  • Contexts nomeados pelo aggregate root ou capability (planning, agent).
  • domain/ puro · application/ ports · infrastructure/ adapters.
  • PT-BR + EN mix livre nos nomes; texto pro casal sempre PT-BR (ADR 008).

Convenções completas em AGENTS.md.