J. Castillo
Idioma

Proyectos

Cada uno dice qué es, cómo está construido y con qué. El argumento completo —la alternativa que descarté y lo que todavía no está construido— vive dentro de cada proyecto.

01

corebank

Un banco digital completo: cuentas, transferencias entre clientes, historial de movimientos y un asistente de IA al que le preguntas por tus saldos en lenguaje normal.

Arquitectura

Una API en Go entre dos almacenes: TigerBeetle tiene el dinero y PostgreSQL todo lo demás. No hay transacción distribuida — el uuid de la fila es el identificador del movimiento en el ledger.

Backend Go 1.26 · chi · pgxLedger TigerBeetle 0.17.9Datos PostgreSQL 17 · gooseFrontend React 19 · Vite 6 · TanStack Query · Tailwind 4Asistente MCP · SDK de Anthropic para GoInfraestructura Docker Compose · nginx · GitHub Actions

Lo que me llevo

Una invariante que de verdad importa no se defiende con una comprobación: se defiende quitando la posibilidad. No hay columna de saldo, así que no puede desincronizarse; el modelo no puede confirmar, así que una inyección de prompts no escala a una pérdida; el tope de gasto compara e incrementa en una sola sentencia, así que no hay carrera que ganar. En los tres casos el costo fue perder una comodidad.

Panel de corebank con el saldo disponible, 32.354,53 dólares, su barra de composición y la leyenda «Nada retenido: todo tu saldo está disponible». A la derecha, el asistente responde en lenguaje natural cuánto dinero hay tras consultar las cuentas.

02

loklflow

Un sistema para llevar un restaurante entero: toma de comandas, pantalla de cocina, plano de mesas, inventario, cierre de caja y permisos por rol.

Arquitectura

El servidor —NestJS y PostgreSQL— corre dentro del establecimiento, sobre un UPS, y caja, meseros y cocina hablan con él por la WiFi interna. La nube sólo recibe el tablero remoto y el respaldo.

Backend NestJS 11 · TypeORM · Socket.ioDatos PostgreSQL 16 · migraciones versionadasFrontend Next.js 16 · React 19 · Tailwind 4 · ZustandPruebas Jest · Vitest · supertestInfraestructura Docker · GitHub Actions

Lo que me llevo

De un sistema que tiene que aguantar sin red, la mitad que no se puede añadir después es la del servidor. Que reenviar una operación devuelva el estado en vez de duplicar el cobro tuvo que estar antes de que existiera la cola en el dispositivo: al revés no se llega, porque para entonces ya hay cobros dobles en la base.

Pantalla de cocina de loklflow en tres columnas —pendientes, en preparación y listas—. Cada tarjeta lleva el número de orden, la mesa, las líneas del pedido con sus notas y un tiempo transcurrido que pasa de gris a ámbar y a rojo.

03

mundial-2026-ml

Un predictor del Mundial 2026: estima cómo termina cada partido y simula el torneo completo cinco mil veces para dar la probabilidad de que gane cada selección.

Arquitectura

Un pipeline de cuatro pasos —datos, variables, modelos y backtest— sobre 49.509 partidos guardados en SQLite, con las variables construidas hacia adelante en el tiempo y un tablero al final.

Datos pandas · numpy · SQLiteModelado scikit-learn · GradientBoosting · PoissonRegressor · Dixon-ColesEvaluación backtest de ventana expansiva · RPS escrito a manoSimulación Monte Carlo, 5.000 torneosInterfaz Streamlit · plotly

Lo que me llevo

Buscar la fuga en mi propio código valió más que subir la accuracy. Encontré cinco variables contaminadas de catorce y las publiqué con lo que costaría arreglarlas, así que las métricas del repositorio son un techo optimista — y lo digo yo antes de que lo encuentre quien lea el código.

Interfaz del predictor con Argentina contra Francia: las probabilidades calibradas en barras —victoria de Argentina 47,1 %, empate 22,7 %, victoria de Francia 30,2 %— y el marcador predicho 1-0. Debajo, la matriz de marcadores de Poisson con corrección Dixon-Coles como un mapa de calor de siete por siete, con la celda del marcador predicho recuadrada.

Otros proyectos

Código mío que existe pero que no da para un caso. Lo pongo aquí para que nadie lo confunda con los tres de arriba.

mi-cartera ↗

Turborepo · NestJS · TypeORM · PostgreSQL · Next.js

Aplicación de finanzas personales con cuentas, transacciones, categorías e inversiones. Monorepo con Turborepo, API en NestJS con TypeORM y frontend en Next.js. Está en una etapa temprana — cinco commits — y lo digo aquí para que nadie lo confunda con los tres casos de arriba.