Emilio Rodríguez

Proyecto · T-Ledger

Proyecto 06 / 07: T-Ledger

2026 · Personal · Arquitectura y desarrollo

Personal · 2026

Usted anota un movimiento y el libro escribe el asiento de partida doble. Finanzas personales para usted, su pareja o su familia.

Visitar el sitio (abre en otra pestaña)Ver el código (abre en otra pestaña)

El problema

Una lista de gastos no responde lo que importa: cuándo termina de pagar una deuda, cuánto ahorra en intereses si adelanta cuotas, si llega a tiempo a una meta o si el mes cierra. T-Ledger lleva contabilidad de partida doble para responderlo, y cada cifra se rastrea hasta su origen.

Qué hice

  1. 01 / 07

    Cada movimiento genera su asiento balanceado.

    Con el comprobante adjunto. Los asientos son inmutables: un error se corrige con un asiento de reversa, nunca editando.

  2. 02 / 07

    Para decidir, modela deudas con amortización e interés compuesto.

    Metas de ahorro, inversiones, presupuesto por cubetas y la proyección del flujo de caja.

  3. 03 / 07

    Lleva el mayor, el balance de comprobación.

    La situación financiera, el estado de resultados y el cierre mensual. Concilia contra estados de cuenta importados en CSV, y el patrimonio sale en una moneda con el tipo de cambio del BCCR.

  4. 04 / 07

    Cada persona comparte sus libros por invitación.

    Como dueño, editor o lector. Aislé los libros en dos capas: un cliente de Prisma que agrega el libro a cada consulta, y falla si falta, y una guardia de rol en cada endpoint.

  5. 05 / 07

    Medí transacciones serializables.

    Con cuatro libros, 27 de 120 escrituras agotaban los reintentos. Las cambié por un candado por libro en Postgres, y ahora dos personas en el mismo libro no se pisan y los libros distintos nunca se esperan.

  6. 06 / 07

    La bitácora de auditoría se escribe en la misma transacción que el cambio.

    Así que no hay cambio sin rastro. Sentry no recibe ningún dato del libro.

  7. 07 / 07

    Construí 13 módulos en NestJS sobre PostgreSQL.

    Con 37 modelos, 26 migraciones y Better Auth. Un contrato OpenAPI genera los tipos del frontend en React 19 con TanStack, y unos 1140 casos de prueba en 146 archivos cubren los dos lados.

Resultados

  1. En producción, en la versión 1.4.0. El código está publicado para consulta.
  2. Seis decisiones de arquitectura documentadas, entre ellas el aislamiento entre libros, la concurrencia y por qué el cifrado extremo a extremo se difiere.

Stack

  • React
  • TanStack
  • NestJS
  • PostgreSQL
  • Prisma
  • Better Auth
  • Cloudflare R2

Fin de la ficha

Siguiente proyecto

emiliorb.com

Volver a la serie