Construido con Next.js 15 · React 19 · SQLite (local) · Drizzle ORM · Tailwind CSS
QYin reúne tus cuentas, presupuestos, metas, deudas e inversiones en un solo lugar, con insights automáticos que te dicen exactamente dónde se va tu dinero. Esta es la Fase 1: una base SaaS multi-usuario funcional de punta a punta, con el modelo de datos de las 16 capas del producto y los módulos núcleo operativos.
Usuario: demo@qyin.app
Contraseña: demo1234
El seed crea una usuaria con 4 cuentas, ~86 transacciones de 4 meses, presupuestos, metas, deudas y facturas — suficiente para ver el dashboard y los reportes con vida.
Requisitos: Node.js ≥ 22.5 (recomendado 24+). No se necesita compilador de C/C++: la persistencia usa el módulo nativo
node:sqliteincluido en Node.
# 1. Instalar dependencias
npm install
# 2. Variables de entorno (opcional; hay valores por defecto)
cp .env.example .env.local
# 3. Crear el esquema de la base de datos local (./data/qyin.db)
npm run db:generate # genera el SQL desde el esquema (ya incluido en /drizzle)
npm run db:migrate # aplica las migraciones
# 4. Cargar datos demo (opcional pero recomendado)
npm run db:seed
# 5. Levantar en desarrollo
npm run dev # http://localhost:3000Para producción: npm run build && npm run start.
| Script | Qué hace |
|---|---|
npm run dev |
Servidor de desarrollo (hot reload) |
npm run build |
Build de producción |
npm run start |
Sirve el build de producción |
npm run db:generate |
Genera migraciones SQL desde src/db/schema.ts |
npm run db:migrate |
Aplica las migraciones a ./data/qyin.db |
npm run db:seed |
Carga datos de demostración |
npm run db:studio |
Explorador visual de la BD (Drizzle Studio) |
- Next.js 15 (App Router) con React 19: Server Components para leer datos y Server Actions para mutar (sin capa de API REST aparte).
- SQLite local vía
node:sqlite(síncrono, cero dependencias nativas) detrás de un shim drop-in debetter-sqlite3→ Drizzle ORM type-safe. Migrable a Postgres/Turso sin reescribir la lógica. Ver docs/ARCHITECTURE.md. - Autenticación propia multi-tenant: contraseñas con
scrypt, sesiones en BD, cookieshttpOnly, protección de rutas por middleware. - Tailwind CSS con tema oscuro fintech y gráficos en SVG propios (sin librerías de charts) → bundle pequeño y render en servidor.
- Dinero en centavos (enteros) en toda la app: nada de floats. Ver
src/lib/money.ts.
src/
├── app/
│ ├── (auth)/ # login, registro y sus server actions
│ ├── (app)/ # app privada (sidebar): dashboard, accounts, transactions,
│ │ # budgets, goals, debts, reports, categories, settings
│ ├── onboarding/ # alta de la primera cuenta
│ ├── page.tsx # landing de marketing + precios
│ └── globals.css # tema (variables CSS) + utilidades
├── components/ # UI, gráficos SVG, formularios cliente, navegación
├── db/
│ ├── schema.ts # esquema completo (16 capas, ~30 tablas)
│ ├── index.ts # conexión Drizzle + node:sqlite
│ ├── migrate.ts # aplica migraciones
│ └── seed.ts # datos demo
├── lib/ # dinero, formato, auth, sesión, queries, finanzas, insights
└── middleware.ts # protección de rutas privadas
vendor/better-sqlite3-shim/ # adaptador node:sqlite → API de better-sqlite3
docs/ # ARCHITECTURE · ROADMAP · BUSINESS
- Arquitectura — modelo de datos, multi-tenancy, seguridad, el shim de SQLite y el camino a la nube.
- Roadmap — las 16 capas del producto: qué está hecho y qué sigue.
- Modelo de negocio — planes, monetización y go-to-market.
Proyecto educativo / base de producto. No constituye asesoría financiera. Antes de producción real revisa el checklist de seguridad y cumplimiento en la documentación.