# MercadoDeVida vNext — Roadmap

Source of truth for intent: project/design_prompt.md
Source of truth for execution: backlog/features.json (one feature at a time, gates before done)

Stack decisions (fixed, boring):

- Backend: TypeScript + Node.js + Fastify (modular monolith)
- Frontend: Next.js + React + TypeScript + Tailwind (SSG/ISR for SEO pages)
- Database: PostgreSQL (source of truth) + Redis (cache only)
- Product code lives in project/

## Waves

### Wave 0 — Foundation (F-001 … F-004)

Skeleton, migrations, request context, config/flags. Nothing business yet.
Exit: build/lint/typecheck/test green, dev DB up with one command.

### Wave 1 — Identity & Users (F-005 … F-006)

Accounts, sessions, RBAC. Exit: customer and admin identities work.

### Wave 2 — Catalog (F-007 … F-012)

Categories → products → brands → variants/rich data → images → search.
Exit: full catalog model behind public module APIs, search replaceable.

### Wave 3 — Storefront & SEO (F-013 … F-015)

Next.js shell → catalog pages (SSG/ISR, stable URLs) → structured data, sitemap, redirects.
Exit: SEO-critical public surface is live and crawlable.

### Wave 4 — Commerce core (F-016 … F-023)

Inventory → pricing → cart → promotions → shipping → orders → checkout → payments.
This is the money path. Order matters; do not skip dependencies.
Exit: customer pays, order becomes PAID, stock is correct under concurrency.

### Wave 5 — Post-purchase & cross-cutting (F-024 … F-030)

Notifications, reviews, CMS, caching, security hardening, observability, E2E.
Exit: production-grade cross-cutting concerns with the money path protected end to end.

## Execution rules (from design_prompt.md)

1. NO FEATURE WITHOUT SPEC: each ticket produces specs/<feature>/SPEC.md, DESIGN.md, TASKS.md, TESTS.md during the design stage.
2. Smallest possible change; no unrelated refactors.
3. Every change reports expected blast radius before coding.
4. Modules communicate only through public interfaces or domain events.
5. Never trust frontend for price, stock, discount, payment status or user identity.
6. ./scripts/verify.sh green is a precondition for closing any ticket.
