Monorepo folder structure

Official apps, packages, and documentation layout (DOC-015).

Source: docs/architecture/DOC-015-monorepo-folder-structure.md

DOC-015: Monorepo folder structure

Estado

Accepted — 2026-08-23 · Enmienda 2026-09-08: apps/cli (motor Python) + scaffold SaaS desde FoodHub (feature/saas-scaffold-from-foodhub).

Layout objetivo. Hoy: apps/cli/ + apps/{api,web,help,docs} + packages/* (platform factory). Dominio IVPrior (opciones) en slices posteriores.

Referencias: ADR-002 · ADR-016 · ADR-024 · DOC-020.


ivprior/
├── apps/
│   ├── cli/                 # Motor Python — señales / IV / options (V0; HOY)
│   ├── api/                 # NestJS (ADR-001, ADR-006) — diferido
│   ├── web/                 # Next.js (ADR-004) — diferido
│   ├── help/                # Help Center :3002 (ADR-079) — diferido
│   └── docs/                # Developer Docs :3003 (ADR-079) — diferido
├── packages/                # diferido hasta scaffold SaaS
│   ├── ui/
│   ├── api-contract/
│   └── shared/
├── devops/                  # diferido
│   └── docker/
├── docs/
├── specs/
├── openspec/
├── agents/
├── memory/
├── scripts/                 # cli-install / cli-run / cli-smoke / cli-test
├── main.py                  # shim → apps/cli/main.py
├── bollinger.py             # shim → apps/cli/bollinger.py
├── Makefile                 # ADR-016 — make cli*
└── … (pnpm/turbo solo post scaffold SaaS)

Hoy: apps/cli + SaaS factory (apps/api|web|help|docs, packages/*) — spike saas-product-scaffold (closed-go).
Pendiente: podar dominio food; dominio IVPrior en Prisma/API; deploy post compra ivprior.com.
No en V1 SaaS: apps/mobile.


apps/cli (Python motor)

Home del kit IVPrior: main.py, options.py, módulos de señales/datos, listas (watchlist.txt, …), requirements.txt, GUIA.md, README.md.

make cli-install
make cli ARGS='AAPL --opciones'
make cli-smoke
make cli-test

apps/api (Nest) — diferido

Módulos por bounded context (DOC-003): identity, organization, customer, invoice, collections, inbox, classification, promise, dispute, task, dashboard, audit, integration.

Dentro de módulos con reglas:

domain/  application/  infrastructure/  presentation/

Prisma solo en infrastructure (ADR-008).

Worker: mismo codebase, entrypoint distinto (apps/api job runner) — no un segundo repo.


apps/web (Next)

app/                 # routes
features/            # auth, customers, invoices, inbox, …
lib/                 # api client

apps/help y apps/docs (ADR-079)

AppPuertoAudienciaFuente
help3002Owner / Controller / AR specialistapps/help/content/{en,es}/{module}/{slug}.md (ADR-080)
docs3003humanos y agentesdocs/adr + allowlist (DOC-011, CONTRIBUTING, CHANGELOG, OpenAPI)

No se mezclan: Help no publica ADRs; Docs no enseña a cobrar invoices.


Relación con la semilla

docs/, openspec/, .cursor/, agents/ no se mueven. El scaffolding se suma; no se reinventa la semilla.