Pagos

PWA local-first de finanzas personales para Perú: registra pagos, ingresos y gastos en dos toques, no olvida ningún vencimiento y muestra a dónde va el dinero, incluso sin conexión.

Pagos — App de finanzas personales PWA

Sobre el Proyecto

Pagos es una PWA de finanzas personales pensada para el contexto peruano: registra pagos, ingresos y gastos en dos toques, avisa antes de cada vencimiento y muestra con claridad a dónde va el dinero del hogar.

Como Full-Stack Lead, diseñé la arquitectura completa: frontend en Next.js 16 con Dexie (IndexedDB) para un modelo local-first que siempre lee y escribe sobre el espejo local del dispositivo, y un backend en NestJS 12 con un protocolo de sincronización por cursor (push/pull) que resuelve conflictos por última escritura y nunca borra datos físicamente.

El sistema soporta hogares compartidos con roles por capacidad (gestionar/escribir/leer), multi-moneda con tipo de cambio SUNAT diario, pagos programados con recordatorios push, tarjetas de crédito con fecha de corte y pago, cuotas, préstamos entre personas, presupuesto flexible con metas y detección automática de gastos recurrentes.

Detalles Técnicos

  • RolFull-Stack Lead
  • Año2026
  • FrontendNext.js 16, Dexie (IndexedDB)
  • BackendNestJS 12, Prisma 7
  • EstadoEn Producción
  • ArquitecturaPWA Local-First

STACK TECNOLÓGICO —

Next.js 16
TypeScript
Tailwind CSS 4
NestJS 12
Prisma 7
PostgreSQL 16
Redis 7
PWA Instalable

Stack Completo:

Frontend:

Next.js 16, Dexie (IndexedDB), TanStack Query, shadcn/ui

Backend:

NestJS 12 (ESM), Prisma 7, Zod, BullMQ

Sincronización:

Protocolo push/pull por cursor, resolución de conflictos por última escritura

Auth:

Google OAuth, PIN local y passkeys (@simplewebauthn)

FUNCIONALIDADES —

Registro en Dos Toques

Alta de pagos, ingresos y gastos optimizada para completarse en dos toques, con plantillas para movimientos frecuentes.

Local-First con Sincronización

La app lee y escribe siempre en un espejo local (IndexedDB); un motor de sincronización por cursor envía y trae cambios sin bloquear la interfaz, incluso sin conexión.

Hogar Compartido

Invitaciones, permisos por capacidad (gestionar/escribir/leer) y transacciones privadas marcadas como 'mío' que no afectan el total compartido.

Pagos Programados

Recordatorios push antes de cada vencimiento, calendario de pagos, saldo proyectado a fin de mes y tarjetas de crédito con fecha de corte y pago.

Presupuesto y Metas

Presupuesto flexible por categoría, metas de ahorro con fecha objetivo, alertas al 80% y 100% del límite, y aviso al detectar un posible duplicado.

Automatización

Reglas de categorización automática y detección de gastos recurrentes tras 3 ocurrencias similares, con creación de programados en un toque.

Desafíos Técnicos y Soluciones

01. Sincronización Local-First Sin Conflictos

Diseñé un protocolo de sincronización por cursor (POST /sync/push, GET /sync/pull) idempotente, donde el cliente siempre lee de su espejo local y los conflictos se resuelven por última escritura, sin borrado físico de registros (deletedAt).

02. Dinero en Enteros, Nunca en Float

Todo monto se maneja como amountMinor (céntimos) con su moneda ISO 4217, evitando por completo errores de redondeo de punto flotante en cálculos de splits, cuotas y saldos multi-moneda.

03. Capacidades en Vez de Roles Fijos

El sistema pregunta por capacidades (household.manage | write | read) en lugar de nombres de rol fijos, permitiendo que cada hogar nombre sus propios roles sin tocar el código.

IMPACTO —

195+
Pruebas E2E automatizadas
8/8
Fases de producto cerradas
PWA
Instalable y Offline-First
amountMinor
Precisión monetaria
3
Ocurrencias para detectar recurrentes
Passkeys
Desbloqueo biométrico
Turborepo
Monorepo pnpm

Notas Técnicas

Monorepo pnpm + Turborepo (apps/web, apps/api, packages/shared). Frontend Next.js 16 con Dexie (IndexedDB) para el espejo local y TanStack Query; backend NestJS 12 (ESM) con Prisma 7 sobre PostgreSQL 16, WebSockets con Socket.IO, colas con BullMQ y Redis 7. Autenticación con Google OAuth, PIN local y passkeys vía @simplewebauthn. Desplegado en producción sobre un VPS propio detrás de Cloudflare y Caddy, con CI/CD por GitHub Actions.

TUS FINANZAS, EN ORDEN.