Producto propio · finanzas personales
FinanzasApp
Finanzas personales en varias monedas, con deudas en cuotas y presupuestos que avisan antes de pasarse.
Es una app privada: te la muestro en una videollamada.
¿En qué se fue el dinero?
Cuota ¿3 de 12?
45.90
Supermercado
?
Pago en otra moneda
120.00
¿Presupuesto del mes?
—

- Antes:
- Dinero que se iba sin registro, en varias monedas.
- Después:
- Cada gasto, cuota y presupuesto en un solo lugar.
El problema
Sin ningún registro, el dinero se iba sin saber en qué. No había forma de ver cuánto faltaba pagar de una deuda en cuotas ni si el mes iba dentro del presupuesto.
Y no todos llevan sus cuentas en soles: hacía falta manejar varias monedas desde el principio.
La solución
Una app web donde cada persona crea su cuenta y elige su moneda: soles, dólares o riyales. Registra gastos e ingresos, y los que se repiten (sueldo, alquiler, suscripciones) se registran una sola vez y aparecen solos cuando llega su fecha.
Las deudas en cuotas muestran su calendario: pagas una cuota o haces un abono adelantado y la app recalcula lo que falta. Los presupuestos por categoría avisan cuando estás lejos del límite, cerca o ya lo agotaste, y cada mes se descarga un reporte en PDF.
El resultado
Es un producto propio en uso, con usuarios reales, incluidos usuarios fuera del Perú que llevan sus cuentas en otra moneda.
Gastos, ingresos, ahorro, deudas y presupuestos quedan en un solo lugar, con un dashboard que muestra en qué se va el dinero mes a mes.
En pantalla
Under the hoodDetalles técnicos
Stack
- .NET 10 + ASP.NET Core
- EF Core 10 + PostgreSQL
- React 19 + TypeScript
- TanStack Query y Zustand
- QuestPDF
- Docker
- Recurrencias que se generan cuando vencen, con un BackgroundService, para que el historial y los presupuestos no se llenen de movimientos futuros.
- Deudas con abonos parciales: el abono cuenta para la cuota en curso, las siguientes se ajustan y cada pago queda también como gasto.
- Sesión con tokens de vida corta: JWT breve, refresh token que rota en cada uso y se guarda solo como hash, y lista de revocación al cerrar sesión.
- API endurecida: límite de peticiones por IP, bloqueo temporal tras varios intentos fallidos y mensajes que no revelan si un correo existe.
- Reporte PDF generado en el servidor y multimoneda por usuario.




