FinanSync
App de finanzas personales para Android que anota sola los pagos que hago con el celular y me dice cuánto puedo gastar hoy sin tocar lo que ya debo.
- Contexto
- Proyecto personal, 2026
- Rol
- Diseño y desarrollo completo
- Stack
- React Native, Expo, TypeScript, SQLite, Android
El problema
La gente abandona las apps de finanzas personales porque anotar cada gasto a mano es tedioso: basta con olvidarlo unos días para que los números dejen de servir. A mí siempre me ha gustado llevar el control de mis ingresos y gastos, y quería que ese registro pasara solo.
Mi solución
El gasto se registra solo al pagar. Cuando pago con el celular por NFC con Google Wallet en un comercio que la app ya reconoce, el gasto aparece registrado sin que yo haga nada. Así tengo claro a dónde se va mi dinero.
Lo demás gira alrededor de un número, lo que puedo gastar hoy:
- Para gastar hoy: lo que tengo libre, menos lo comprometido, repartido entre los días que faltan para mi próximo cobro.
- Captura en segundos: un teclado propio o texto libre («gasolina 500»), un widget, un atajo en los ajustes rápidos o agitar el teléfono.
- Pagos y tarjetas: pagos programados con aviso un día antes, y tarjetas de crédito con su día de corte y compras a meses sin intereses.
- «¿Puedo comprarlo?»: reparte el precio de una compra entre las quincenas que faltan y aparta cada parte sola.
- Reportes del mes por categoría, tres monedas (GTQ, USD y EUR), respaldos y exportación a CSV y PDF, en español e inglés.
Cómo funciona por dentro
- Cómo detecto el pago: Google Wallet publica una notificación con cada cobro y la app la lee con el servicio de escucha de notificaciones de Android. El título trae el comercio; el texto, el monto, la moneda y los últimos cuatro dígitos de la tarjeta. Solo cuenta como pago si el texto empieza con monto y moneda, porque Wallet manda una segunda notificación por compra, sin monto.
- Cómo reconozco el comercio: guardo su nombre normalizado (minúsculas, sin acentos) junto a la categoría, y los cuatro dígitos de la tarjeta identifican la cuenta. Si conozco los dos, el gasto se registra solo y un aviso me deja corregirlo con un toque.
- Qué pasa cuando no lo reconoce: el pago va a una bandeja de pendientes que no toca ningún saldo. El aviso abre la captura ya llenada y yo solo confirmo; la categoría que elijo queda recordada. Las notificaciones con números que la app no entiende tampoco se pierden: se guardan para registrarlas a mano.
- Dónde se guardan los datos: en SQLite dentro del teléfono, con migraciones versionadas y el dinero en centavos enteros para no perder precisión. No hay backend ni cuentas de usuario.
- Cómo sé que las cuentas cuadran: la lógica pura (el parser de dinero, el plan de compra, lo disponible) lleva comprobaciones con asserts que corren al arrancar en desarrollo.
Cómo protejo los datos
- Nada sale del teléfono: no hay servidor ni analítica. La única conexión descarga el tipo de cambio y no envía ningún dato de mis finanzas.
- El único permiso delicado es el acceso a notificaciones, y la escucha se limita al paquete de Google Wallet.
- Al exportar, el PDF escapa el HTML y el CSV neutraliza las celdas que empiezan como fórmula. Un respaldo pasa la verificación de integridad de SQLite antes de restaurarse.
Lo más difícil
No existe una API para saber que pagué con Google Wallet. Antes de escribir la captura hice una sonda que solo guardaba las notificaciones, sin interpretarlas, para ver qué manda Wallet en realidad. De ahí salieron tres decisiones:
- Ningún pago se registra dos veces. Android vuelve a entregar la notificación cuando Wallet la actualiza. Cada una se identifica por su clave y, una vez atendida, no vuelve a entrar.
- La fecha es la del cobro. El gasto lleva la hora en que se publicó la notificación, no la hora en que la app la procesa, para que un aviso que llega tarde no caiga en el día o el mes equivocado.
- Solo registra sola lo que ya conoce. Un número que aparece sin que yo lo apruebe es un número en el que dejo de confiar. Si el comercio o la tarjeta son nuevos, el pago pasa por mí.
Qué mejoraría
- La escucha vive en el proceso de la app: si Android lo cierra, los pagos de ese rato no se capturan. Lo siguiente es avisar cuando la captura estuvo apagada y después moverla a código nativo.
- La app decide por quincena, pero los reportes son mensuales. Quiero que también se puedan ver por quincena.

































