Dashboard AI-native para consultoras contables chilenas. Centraliza la operación de cada cliente desde plataformas externas (Clay, Softland, Talana, Chipax, Zoho) y la infraestructura tributaria chilena (SII, Previred, Tesorería vía BaseAPI), operado por un agente Claude con tools de lectura y acción.
Etapa: MVP demo. Mock data (3 tenants), sin auth real. Deployable a Vercel (ver Demo). Ver
docs/MVP.mdpara el alcance ydocs/GAPS.mdpara el registro de decisiones y huecos.
En vivo: https://wya-platform.vercel.app
Demo navegable con mock data (no requiere DB ni servicios externos). Recorrido sugerido en docs/DEMO-SCRIPT.md. El chat usa Claude real con ANTHROPIC_API_KEY; sin key, cae a un demo scripted.
Frontend — demo navegable (mock data), verificado en browser:
- Cartera — 3 clientes con semáforo de salud y los 4 módulos de un vistazo.
- Vista 360° por cliente — 5 tabs (Conta, RRHH, Finanzas, Comercial, Tributario), ficha del empleado, pre-cierre del período, y conciliación bancaria.
- Chat AI-native — agente Claude con 4 tools; fallback scripted sin API key.
- Documentos — bandeja multi-empresa, vista PDF/escaneo, OCR simulado.
- Reportes — PDF ejecutivo + enviar por correo con preview.
- Portal del cliente — subida de documentos con OCR (otra superficie).
- Alertas, Calendario, Ajustes. Dark/light en todo.
Backend — Sprint 1, verificado:
- Monorepo pnpm + Turborepo + TypeScript estricto.
@wya/lib(RUT chileno),@wya/data-db(Drizzle + seed + PGlite),@wya/baseapi-mcp(2 tools + entrypoint stdio para Claude Desktop).- Tests: 14/14 verde (Vitest contra PGlite, sin docker).
El frontend lee de
apps/dashboard/lib/mock-data.ts. El data layer real (Postgres víabaseapi-mcp, ya testeado) está construido pero aún no conectado a la UI — es el siguiente paso (verdocs/GAPS.mdG25).
Next 15 · React 19 · TypeScript · Tailwind · Drizzle ORM · PostgreSQL · Zod ·
@modelcontextprotocol/sdk · Vitest. Gestor de paquetes: pnpm.
apps/dashboard/ Next 15 (scaffold)
packages/
lib/ chilean-rut, formatters
data/db/ Drizzle schema + seed + client (pg) + PGlite (tests)
mcps/
shared/ tipos + audit
baseapi-mcp/ 2 tools + stdio entrypoint
docs/ MVP, PRD, ARCHITECTURE, DESIGN-SYSTEM, ROADMAP, GAPS, specs
docker-compose.yml Postgres 16 para dev
Requisitos: Node ≥ 20, pnpm, Docker (para Postgres).
# 1. Instalar pnpm si no lo tienes
npm install -g pnpm
# 2. Dependencias
pnpm install
# 3. Levantar Postgres
docker compose up -d
# 4. Migrations + seed del Tenant A
cp .env.example .env
pnpm db:generate # genera las migrations desde el schema
pnpm db:migrate # las aplica a Postgres
pnpm seed # carga el Tenant A (Restaurante Sabor SpA)
# 5. Tests
pnpm test # o, sin pnpm: npx vitest run (usa PGlite, no necesita docker)
# 6. Dashboard
pnpm dev # http://localhost:3000El dashboard corre con mock data — no necesita Postgres ni docker:
cd apps/dashboard && npm install && npm run dev # http://localhost:3000Postgres (docker) solo hace falta para el seed real y validar el MCP. Los tests tampoco necesitan docker (corren contra PGlite in-process).
Con Postgres levantado y seedeado, agrega a tu claude_desktop_config.json:
{
"mcpServers": {
"baseapi": {
"command": "npx",
"args": ["tsx", "/RUTA/ABSOLUTA/A/wya/packages/mcps/baseapi-mcp/src/index.ts"],
"env": { "DATABASE_URL": "postgres://wya:wya@localhost:5432/wya" }
}
}
}Reinicia Claude Desktop y pregunta, por ejemplo:
Consulta el contribuyente del tenant
11111111-1111-4111-8111-111111111111. Obtén el RCV de compras del periodo2026-05para ese tenant.
(El UUID es el del Tenant A, fijo y determinista — ver packages/data/db/src/constants.ts.)
El chat sidebar usa un agente Claude real cuando defines ANTHROPIC_API_KEY:
- Sin key: el chat funciona en modo demo (respuestas scripted) — nada se rompe.
- Con key:
export ANTHROPIC_API_KEY=...ypnpm dev. El agente (Vercel AI SDK +@ai-sdk/anthropic) orquesta 4 tools —consultar_contribuyente,obtener_rcv_compras,obtener_liquidaciones,consultar_previred— sobre la misma mock data que la UI. Endpoint:apps/dashboard/app/api/chat/route.ts. Modelo configurable conAGENT_MODEL(defaultclaude-sonnet-4-6).
Conectar el agente al data layer real (
baseapi-mcp→ Postgres, ya testeado) en vez de al mock-data es el siguiente paso natural.
Este repo se construyó en una máquina sin docker; por eso los tests usan PGlite
(Postgres in-process) y la app mantiene Postgres en Docker. Ambos usan el mismo
schema Drizzle. Ver docs/GAPS.md G24.
| Necesitas | Lee |
|---|---|
| Alcance del MVP | docs/MVP.md |
| Producto completo | docs/PRD.md |
| Arquitectura, DB, RLS | docs/ARCHITECTURE.md |
| Design system | docs/DESIGN-SYSTEM.md |
| Decisiones y huecos | docs/GAPS.md |
| Diseño del Sprint 1 | docs/superpowers/specs/2026-06-02-wya-sprint1-design.md |