
Santander 2050
Prosantander · Fedesarrollo · Desarrollo full-stack
La hoja de ruta con la que Santander planea su futuro, y la plataforma que la mantiene viva.
- Next.js
- TypeScript
- Drizzle ORM
- Turso
- Tailwind CSS
10°02′N 73°14′W → 5°49′N 73°02′W · de Codazzi a Duitama
Soy desarrollador fullstack. Desde 2022 construyo la plataforma SaaS de Datasketch y sitios para instituciones públicas. Soy de Codazzi, en el Cesar, así que el calor lo pongo yo.
De 2022 a 2026, una etapa por año. Cada puerto es algo que construí o resolví, y su categoría la asigné yo según el tamaño, el riesgo y el tiempo que me tomó. Elige una etapa y toca un puerto.
Categorías como en las grandes vueltas: puntos = km × pendiente media². 3ª desde 150, 2ª desde 300, 1ª desde 600 y HC desde 900. Cada puerto lleva el largo y la pendiente de un puerto real de su categoría.
Etapa 1 · 2022 · Sitios para clientes · 105,3 km
Listas de candidatos, secciones con pestañas y un cuestionario que termina en recomendaciones. (5,3 km al 5,5 % · 160 pts)
Un test por pasos en Next.js con preguntas en orden aleatorio, respuestas guardadas en cada paso e insignia final descargable. 28 PR. (8,1 km al 6,7 % · 368 pts)
Páginas de departamento y región con mapa para el sitio de biodiversidad del SiB Colombia. (9,9 km al 6,5 % · 416 pts)
Etiquetas ARIA, textos alternativos y títulos de iframe para que un sitio se pudiera usar con lector de pantalla. (6,2 km al 6,1 % · 232 pts)
Componentes React publicados como paquete y compartidos entre dos sitios del mismo cliente. (7,5 km al 5,9 % · 256 pts)
La primera construcción del sitio de la Federación Nacional de Departamentos, en Next.js. (13,6 km al 6,4 % · 560 pts)
Etapa 2 · 2023 · Entro a la plataforma · 69,6 km
La primera de varias actualizaciones del framework de la plataforma. Después vinieron la v7.1 y la v7.7. (5,3 km al 5,5 % · 160 pts)
La interfaz nueva para subir datos, con el esquema de tablas y un límite de tamaño por archivo. (5,3 km al 5,9 % · 184 pts)
Likes, marcadores y la interfaz del marketplace de extensiones, y el botón para crear o actualizar un sitio. (9,9 km al 6,5 % · 416 pts)
Reemplacé Tabulator por AG Grid y escribí los primeros editores y celdas propias. (9,7 km al 6,9 % · 464 pts)
Etapa 3 · 2024 · El año de los datos · 134,8 km
Equipos dentro de cada organización, con acceso a apps y bases de datos según el equipo. (8,1 km al 6,3 % · 320 pts)
Cuántas organizaciones, bases, sitios y visualizaciones privadas permite cada plan. (5,3 km al 5,9 % · 184 pts)
Fui su principal contribuidor: operaciones de columnas, persistencia en S3 con URLs prefirmadas, carga masiva y JWT. Mantengo su cliente npm desde la v1.0.0. (13,5 km al 7,3 % · 716 pts)
Editores y celdas propias en AG Grid para imágenes, colores, fechas y los demás tipos de columna. (9,7 km al 6,9 % · 464 pts)
Pasé la plataforma al servicio de bases de datos y migré las bases existentes al modelo nuevo, en equipo con el líder técnico. (14,6 km al 7,5 % · 812 pts)
Cada tabla puede tener vistas con orden y agrupación de filas, guardadas en el servidor. (13,6 km al 6,4 % · 560 pts)
Etapa 4 · 2025 · Me quedo con la plataforma · 149,2 km
La plataforma en español, inglés y portugués. El primer cambio tocó 130 archivos. (5,3 km al 5,5 % · 160 pts)
Cambié el proveedor de identidad con la plataforma en uso. Quien venía de Auth0 definía su contraseña al entrar, y nadie perdió el acceso. (11,8 km al 7,5 % · 668 pts)
Rehice el cobro para varios planes con un modelo de suscripción y un webhook idempotente. La primera integración no era mía; esta reconstrucción sí. (13,5 km al 7,3 % · 716 pts)
Saqué del repositorio los datos del sitio corporativo y los leí desde la API de datos: 9.200 líneas menos. (6,2 km al 6,1 % · 232 pts)
La creé desde cero en Express y TypeScript. Elige el motor, Turso o DuckDB, según el tamaño de los datos, y permite editar tablas en tiempo real por websockets. Las lecturas bajaron de 2-5 s a menos de 1 s. (17,4 km al 8 % · 1104 pts)
Cambié el modelo de datos en producción dentro de una sola transacción. Si algo fallaba, se rompía todo el contenido publicado. (16,5 km al 7,2 % · 860 pts)
Etapa 5 · 2026 · Plataforma nueva e IA · 290,3 km
Pasé miles de usuarios con sus organizaciones y bases de datos en una sola corrida, con cero errores. Los scripts se pueden repetir sin duplicar nada y mantienen vivas las extensiones de la versión anterior. (15,9 km al 7,6 % · 920 pts)
Cada formulario publicado crea su propia base de datos y cada respuesta se guarda como una fila. (8,1 km al 6,7 % · 368 pts)
Un sitio con mapa en Leaflet que funciona sin conexión, con service worker sobre Next.js. (9,9 km al 6,5 % · 416 pts)
13 tipos de campo, constructor de páginas por bloques, publicación programada y traducciones. Todo el módulo es mío. (12,9 km al 7,7 % · 764 pts)
Una organización puede crear otras con su sitio y su CMS ya clonados. Si algo falla a mitad de camino, no quedan organizaciones huérfanas. (11,5 km al 6,7 % · 512 pts)
Diseñé la matriz de permisos y la apliqué en 11 módulos, en el servidor y en la interfaz, con pruebas de extremo a extremo. (16,5 km al 7,2 % · 860 pts)
Reforcé el control de acceso y la seguridad del motor, y compilé el CSS en el build: 92,9 % menos peso en la ruta crítica. (11 km al 7,6 % · 644 pts)
Revisé la infraestructura en la nube, respaldé los datos de lo que ya no se usaba y apagué lo que sobraba. El costo mensual bajó. (9 km al 6,6 % · 392 pts)
Habilité el chat en sitios externos, con acceso por organización. (14,4 km al 7,2 % · 740 pts)
Optimicé la consulta de un endpoint hasta bajar su respuesta de 47 MB a 0,1 MB. (10,6 km al 6,8 % · 488 pts)
Lo diseñé en cinco etapas y lo medí contra 68 consultas de referencia. Las búsquedas sin resultado pasaron del 60 % al 0 %, el recall del 53 % al 78 %, y responde en 67 ms (p95). (18,3 km al 7,8 % · 1127 pts)
Limpié miles de filas duplicadas en registros financieros sin borrar ninguna venta legítima. (8,1 km al 6,3 % · 320 pts)
Quince proyectos, entre los que construí por mi cuenta y los que hice como parte del equipo en Datasketch. Empiezo por los seis que mejor representan lo que sé hacer.

Prosantander · Fedesarrollo · Desarrollo full-stack
La hoja de ruta con la que Santander planea su futuro, y la plataforma que la mantiene viva.

Instituto Humboldt · SiB Colombia · Frontend y visualización de datos
Los datos de especies de Colombia, abiertos y navegables, para el Instituto Humboldt.

Federación Nacional de Departamentos · Desarrollo full-stack
Plataforma full-stack para la entidad que representa a los 32 departamentos de Colombia.

Programa Anticontrabando · Desarrollo full-stack
Sistema de registro y control anticontrabando para los 32 departamentos del país.

Datasketch · Desarrollo full-stack
El sitio de contenidos de Datasketch: abre rápido, lo edita el equipo y los artículos traen sus propias visualizaciones.

Proyecto personal · código abierto
Una libreta de entrenamiento que vive entera en el teléfono: sin cuentas, sin servidor y sin conexión.
El resto de lo que he construido o en lo que participé.
Empecé en sistemas industriales y terminé en la web. El paso por hardware y sensores todavía me sirve para pensar en cómo se mueven los datos.
Feb 2022 – Presente
Datasketch
Soy uno de los desarrolladores principales de la plataforma SaaS de Datasketch: diseñé partes de su arquitectura en todas sus versiones y participo en su definición técnica. Construí desde cero la segunda API de bases de datos, migré la autenticación de Auth0 a Clerk y pasé a todos los usuarios a la plataforma nueva sin un error. En la nueva hice el CMS, los roles y permisos y los formularios. También construyo sitios para instituciones y trabajo directo con clientes y con equipos de diseño e investigación.
Oct 2021 – Ene 2022
CREANGEL Ltda.
Construí de punta a punta el módulo de respaldos del sistema Ifindit, con interfaces dinámicas y lógica de servidor en Servlets y JSP. Integré y configuré Apache Solr para mejorar la búsqueda y la indexación de la información de los clientes.
Jun – Oct 2021
Automatización e Informática Industrial
Desplegué MQTT sobre AWS para comunicarme en tiempo real con sensores en planta. Puse en producción una aplicación de conteo automático de varillas que redujo los tiempos de control de inventario. Audité y optimicé bases de datos MySQL para que las consultas dejaran de ser el cuello de botella.
Una plataforma se construye por capas, y cada una se apoya en la de abajo. Trabajo sobre todo en las de la base: datos, APIs y despliegue. No colecciono tecnologías, estas son las que uso lo suficiente como para responder por ellas.
Elige un módulo para ver qué hace y qué he construido ahí.
01
Donde corre todo: servidores, contenedores y despliegue.
Qué he construido
02
El modelo y el almacenamiento, que es lo que tiene que seguir teniendo sentido en un año.
Qué he construido
03
Las reglas del negocio: quién entra, qué puede hacer y cómo se cobra.
Qué he construido
04
Lo que ve la gente: rápido, legible y usable en el teléfono.
Qué he construido
05
La capa de arriba: solo sirve si las de abajo están bien hechas.
Qué he construido
Soy de Agustín Codazzi, Cesar, y vivo en Duitama, Boyacá.
Entré a Ingeniería Electrónica porque de niño me interesaba cómo funcionaban las cosas por dentro, y porque creía que ese era el camino para construir robots. No lo era. Pero durante la carrera aparecieron las materias de programación y ahí me quedé: ver código convertirse en algo que funciona me pareció razón suficiente para cambiar de rumbo.
Me interesa que los datos abiertos lleguen a alguien que pueda usarlos. Tener los datos no sirve de mucho si nadie ve la información que hay adentro, y esa distancia entre una cosa y la otra es más o menos lo que hago todos los días.
Últimamente me llama la atención el modelado de sistemas a gran escala: réplicas, balanceo de carga, distribución de contenido. Todavía no he trabajado en algo de ese tamaño, pero es hacia donde quiero ir.
Fuera del computador salgo en bicicleta en las mañanas. En las tardes casi siempre estoy con mi esposa, comiendo por ahí, viendo series, o manejando a algún pueblito que no conocemos.
Si quieres conversar sobre algo que escribí, sobre código abierto o sobre una oportunidad laboral, escríbeme. Suelo responder el mismo día.