Desarrollador Full-Stack
frontend, backend,servidores y despliegues.
Diseño, construyo, despliego y mantengo sistemas web críticos de alta concurrencia: interfaces, backend, frontend, servidores y administración.
Desarrollador Full-Stack
Diseño, construyo, despliego y mantengo sistemas web críticos de alta concurrencia: interfaces, backend, frontend, servidores y administración.
Límites de contexto, contratos de API y trade-offs antes del código.
Tipado estricto, transacciones acotadas y escrituras idempotentes.
SLOs con presupuesto de error, IaC declarativa y rollback probado.
Ingeniero de software con 10 años construyendo y operando sistemas web en producción. Cubro el ciclo completo: del modelo de dominio al servidor que lo sostiene.
Trabajo el sistema completo: interfaz, API, datos y la infraestructura que los ejecuta. Administro servidores Linux, TLS, proxies inversos, pipelines de despliegue y la gestión continua.
Software en producción, desarrollado para clientes que conservan la propiedad del código. Por eso casi todos los repositorios son privados: en lugar del código, esta sección documenta la arquitectura, el stack, las decisiones técnicas que sostienen cada sistema y capturas del producto en funcionamiento.
Modernización modular de un core bancario legado
Repositorio privado 2 Voto electrónico anónimo y verificable con blockchain propia
Repositorio público Consejo de agentes que decide si el código debe escribirse
CMS editorial white-label que reemplaza a WordPress
Repositorio privado Gestión de ventas y cobranza sobre Laravel 12
Repositorio privado Administración eclesiástica migrada fuera de Filament
Repositorio privado Secretaría, tesorería y contraloría reconstruidas sobre TanStack Start
Repositorio privado Portal institucional sobre la plataforma EchoPress
Repositorio privado Estudio de acordes de piano con teclado interactivo
El lenguaje se elige por el problema, no por costumbre. Acá está con qué construyo cada capa —del proceso transaccional a la interfaz— y qué resuelve mejor cada herramienta.
Lenguajes del servidor: dominio de negocio, datos, procesos y APIs.
9 tecnologíasEl caballo de batalla para sistemas de gestión: facturación, inventario, cobranza y paneles administrativos que operan todos los días.
Para sistemas donde un error cuesta dinero: núcleos bancarios, procesos transaccionales y servicios que deben correr años sin reescribirse.
Donde el trabajo es mover y transformar datos: procesos por lotes, conciliaciones, automatización e integraciones entre sistemas que no se hablan.
Cuando el rendimiento y la seguridad de memoria no son negociables: el compilador rechaza clases enteras de fallos antes de que lleguen a producción.
Servicios que se compilan en un único binario y se despliegan sin dependencias: ideal para correr en el sitio del cliente, incluso sin conexión.
El único lenguaje que corre en el navegador y en el servidor: un mismo modelo de datos y una sola validación para las dos mitades del producto.
Lo que evita reescribir autenticación, permisos, migraciones y colas en cada proyecto.
El framework con el que llevo un sistema de gestión de cero a producción más rápido: autenticación, colas, permisos y panel administrativo ya resueltos.
Cuando el sistema vive de sus datos: el panel de administración se genera desde el modelo, así que la gestión existe desde el primer día.
El estándar de la banca y la industria sobre la JVM: transacciones, seguridad e integración con sistemas legados con garantías que un auditor acepta.
Fundamentos de la plataforma, lenguaje, herramientas, estado y calidad.
13 tecnologíasLa plataforma ya trae diálogos, popovers y desplegables nativos. Usarlos elimina kilobytes de JavaScript frágil y los errores de accesibilidad que arrastraba cada librería de UI.
Anidamiento, :has() y container queries dejaron obsoletos a los preprocesadores. Un componente se adapta a su contenedor y no al viewport, y @layer termina con las guerras de especificidad.
JavaScript dinámico acumula deuda porque nadie refactoriza a ciegas con confianza. El tipado estricto convierte el contrato con el backend en algo que el compilador verifica, no la esperanza.
Corta de raíz las hojas de estilo infladas con código muerto y el coste en runtime de CSS-in-JS. Compila sólo las clases que usás, así que no hay colisiones globales ni CSS que nadie se anima a borrar.
Reemplaza pipelines de Webpack y Babel que tardaban minutos en arrancar y configuraciones que nadie quería tocar. Con el bundler reescrito en Rust, el ciclo editar-ver deja de ser un cuello de botella.
Corrige el antipatrón de guardar respuestas de red en un store global. Estados de carga, errores, deduplicación y revalidación dejan de ser cientos de líneas propensas a condiciones de carrera.
Termina con las suites inestables que dependían de esperas arbitrarias. La auto-espera y el aislamiento de contextos convierten los tests de extremo a extremo en algo en lo que se puede confiar para bloquear un despliegue.
Deciden dónde se renderiza y cómo se orquesta la reactividad. El stack de arriba los sostiene.
La base sobre la que corre todo lo que construyo en TanStack Start. Con Server Components la lógica pesada vuelve al servidor y el navegador recibe sólo lo que de verdad necesita interactuar.
Los Server Components ejecutan el acceso a datos en el servidor y mandan cero JavaScript por cada componente no interactivo. Se acabaron los megabytes para pintar una vista casi estática.
No todo sitio necesita ser una SPA. La arquitectura de islas envía HTML puro y sólo hidrata lo que de verdad interactúa, que es lo que sostiene las métricas de Core Web Vitals.
Interfaz reactiva sin montar una aplicación cliente aparte. El estado vive en el servidor, así que no hay dos modelos de datos que sincronizar ni una API intermedia que mantener.
Levanta un panel administrativo completo sobre Laravel en horas: recursos, tablas, formularios y permisos ya resueltos. El precio es acoplar la interfaz al ciclo de versiones del paquete, y hay que decidirlo a conciencia.
Framework con opinión completa: inyección de dependencias, enrutamiento, formularios y HTTP vienen decididos. En equipos grandes eso evita que cada módulo invente su propia arquitectura.
Motores, caché y modelos de datos: dónde vive el estado y bajo qué garantías.
6 tecnologíasEl motor que ya está corriendo en la mayoría de los sistemas heredados que me toca mantener. Migrar a otro casi nunca es la respuesta: la respuesta es entender los índices y las consultas que alguien dejó sin optimizar.
Mi opción por defecto cuando el dato importa. Restricciones, transacciones y tipos serios permiten que las reglas de negocio vivan en la base y no dependan de que cada aplicación se acuerde de cumplirlas.
Sirve cuando el esquema cambia seguido y cada documento se lee entero: catálogos, eventos, bitácoras. Deja de servir en cuanto hay que cruzar colecciones o garantizar consistencia entre varias.
Una base completa dentro de un archivo, sin servidor que administrar. Es lo que permite que un sistema opere en el sitio del cliente sin conexión y sin depender de infraestructura ajena, como en Electorium.
Absorbe el trabajo repetido que no tiene por qué llegar a la base: sesiones, caché, colas y límites de tasa. Bien usado, la mitad de las consultas lentas de un sistema simplemente dejan de ejecutarse.
El tipo binario de documentos de PostgreSQL: guarda estructuras flexibles y las indexa con GIN, sin salir de SQL. Evita montar una base de documentos aparte sólo porque unos campos varían.
Con qué trabajo todos los días y por qué elegí cada una. No hay acuerdo comercial con ninguna: son decisiones de trabajo, no patrocinios.
Origen de verdad del código y de la historia de cada decisión: ramas, revisiones y acciones de integración continua.
El entorno se declara una vez y corre igual en mi máquina, en la del cliente y en el servidor. Un despliegue es traer una imagen etiquetada, no reconstruir en producción.
DNS, certificados y caché delante del servidor de origen. Absorbe el tráfico y los ataques antes de que lleguen a la máquina que realmente sostiene la aplicación.
Donde una API se prueba y se documenta antes de que el frontend dependa de ella. Las colecciones dejan el contrato por escrito y ejecutable, no en un chat.
PhpStorm, IntelliJ y GoLand entienden el proyecto entero, no sólo el archivo abierto: renombrar un método a través de todo el código deja de ser buscar y reemplazar.
Las decisiones de arquitectura y las notas de incidentes quedan escritas en archivos propios, enlazadas entre sí y sin depender del servicio de nadie.
Acceso remoto a infraestructura de clientes sobre WireGuard, con un proveedor que no guarda registros ni pide identidad para operar.
Escritorio y servidor sobre la misma familia de sistemas: lo que compila en la máquina de desarrollo se comporta igual en producción, y las diferencias son decisiones y no accidentes.
Donde vive el sistema en producción: soporte largo y cambios predecibles.
Donde corren los sistemas que administro: soporte hasta 2029, repositorios predecibles y la base sobre la que se apoyan Docker, Nginx y los certificados.
El estándar cuando el cliente exige soporte con contrato y certificaciones: banca, salud y organismos que necesitan un responsable al otro lado del teléfono.
La rama que alimenta a RHEL: sirve para probar contra lo que el servidor corporativo va a recibir en el próximo ciclo, antes de que llegue al cliente.
Donde se escribe y se prueba: herramientas recientes y paridad con el servidor.
El escritorio equivalente al servidor: las mismas versiones de bibliotecas, así que lo que compila en local compila igual en producción.
Kernel y herramientas recientes para probar hoy lo que llega a RHEL dentro de dos años. Es el banco de pruebas del ecosistema Red Hat, no un sistema de soporte extendido.
La máquina desde la que diseño, escribo y me conecto a la infraestructura. Base Unix, así que las mismas herramientas de terminal que en el servidor.
Cada proyecto se despliega donde su carga y su presupuesto lo justifican. Estas son las plataformas que administro y el criterio con el que elijo entre ellas.
Capacidad que se ajusta a la demanda y se paga por uso.
EC2 cuando el sistema necesita crecer o encogerse con la demanda, y Lightsail cuando el proyecto sólo necesita una máquina previsible a precio cerrado.
El punto medio entre precio y control: instancias limpias en minutos, sin la superficie de configuración de un proveedor corporativo.
La mejor relación entre recursos y coste del mercado, con centros de datos en la UE. Para cargas sostenidas, el ahorro frente a la nube grande es de un orden de magnitud.
Recursos fijos, control total del sistema y coste previsible.
Máquina con recursos fijos y acceso completo al sistema: sin vecinos compartiendo CPU ni límites impuestos por el panel del proveedor.
Para sitios que no justifican administrar un servidor entero: dominio, correo y despliegue resueltos sin dedicarles mantenimiento semanal.
Infraestructura y dominios en Latinoamérica, con soporte y facturación local. Menos latencia para usuarios de la región y trámites que no cruzan fronteras.
Una web rápida no depende sólo del código: depende de que cada imagen salga en el formato, el tamaño y la compresión correctos. Preparo los activos yo mismo —SVG para lo vectorial, WebP y AVIF para fotografía, WebM para vídeo— en lugar de publicar lo que venga del diseñador.
Logos e iconos que salen como SVG: pesan unos kilobytes, se ven nítidos en cualquier pantalla y heredan el color del tema en lugar de necesitar una versión clara y otra oscura.
Recorte, retoque y exportación a WebP o AVIF en la medida exacta en que se renderiza. Una foto mal exportada puede pesar más que todo el código de la página.
Muchos clientes entregan su marca en archivos .cdr heredados de su imprenta. Poder abrirlos y convertirlos a formatos web evita rehacer una identidad desde cero.
De la primera conversación al mantenimiento del año tres. Cada etapa se apoya en el stack, la infraestructura y los sistemas documentados más arriba, y cada enlace lleva a la evidencia correspondiente.
Todo empieza con una conversación, no con un presupuesto. Entender el problema real, las restricciones y qué pasa si no se resuelve suele cambiar la solución antes de escribir la primera línea.
Modelo el dominio y fijo los límites y contratos antes de escribir código. Las decisiones quedan escritas con sus trade-offs, así que se pueden discutir y revertir sin arqueología.
Interfaz, API y datos como un solo sistema tipado de extremo a extremo: transacciones acotadas, escrituras idempotentes y consultas que no crecen sin control.
Las reglas de negocio viven en la base, no en la esperanza de que cada aplicación las respete. La caché absorbe lo repetido para que el motor haga sólo el trabajo que importa.
Del contenedor al dominio: entornos reproducibles, TLS, proxies inversos y despliegues que se repiten igual y se revierten sin drama.
Un sistema entregado no está terminado. Servidores administrados, respaldos que se prueban restaurando y mantenimiento evolutivo mientras el producto siga vivo.
Las personas que abren estos sistemas todos los días para trabajar. Sin puntuaciones ni estrellas: lo que cuentan es qué cambió en su rutina desde que el sistema entró en producción.
Antes cerrábamos el mes revisando cuadernos y llamando a los cobradores uno por uno. Ahora abro el sistema y el saldo está ahí, con quién pagó y quién no. Lo que más agradezco es que cuando algo no cuadra, Pablo lo revisa el mismo día.
Le pedí algo sencillo para que los muchachos estudiaran acordes sin depender de mí. Quedó mejor de lo que imaginaba: entran, eligen la nota y ven el teclado. Varios de ellos ya practican solos en casa, y eso antes no pasaba.
El cierre semanal me tomaba toda una tarde entre planillas. Hoy lo hago en un rato y el libro diario queda cuadrado. Cuando pedimos un cambio en los códigos contables, no hubo que explicar dos veces para qué servía.
Veníamos de un sistema que cada actualización rompía algo. Pablo lo reconstruyó y desde entonces trabajamos tranquilos. No es solo que funcione: es que uno pregunta y hay alguien que responde y entiende el problema.
La prueba salió redonda. Las máquinas trabajaron sin internet toda la jornada y al cerrar tuvimos los resultados con su respaldo. Poder mostrar que cada voto quedó registrado y que nadie sabe quién votó qué, eso fue lo que convenció a la gente.
¿Necesita ordenar una arquitectura, construir un producto o estabilizar una plataforma en producción? Escriba con el problema concreto y recibirá un diagnóstico honesto: si puedo resolverlo, qué abordaría primero y cuánto tiempo requiere.
Para propuestas, alcance y todo lo que convenga dejar por escrito.
Para una conversación corta sobre algo concreto.
Trayectoria, recomendaciones y contacto profesional.
Repositorios públicos y código abierto.