Algunos de mis proyectos recientes
PMS hotelero full-stack en un monorepo pnpm — frontend Next.js 14 (App Router, server components) y una API Express 5 + TypeScript (ES modules, tsx sin paso de build, Vitest). Su pieza central es el motor de planificación de turnos: el problema de asignación mensual de turnos se modela como constraint programming y se resuelve con Google OR-Tools (CP-SAT) en un daemon Python persistente. Node lo controla mediante JSON line-delimited a través de un cliente con máquina de estados, semáforo single-flight (CP-SAT no es thread-safe) y respawn transparente. Las restricciones duras (cobertura, rotación de bloques de noche, transiciones prohibidas, ventanas de descanso consecutivo, libres mensuales, celdas bloqueadas) se combinan con una función objetivo blanda ponderada (balance de noches, descansos aislados, prioridad de turno, bloques cortos); la continuidad entre meses se modela con días virtuales, y un analizador heurístico de infactibilidad devuelve las restricciones en conflicto y las relajaciones sugeridas. La lógica del solver se ancla a un validador TypeScript independiente mediante una suite de tests de paridad.
El resto del sistema abarca checklists operativos diarios (contenido definido en JSON sincronizado, reset diario por cron con auto-cierre perezoso), un parser de PDFs de Opera PMS que ingiere los ingresos diarios de F&B en un pivot SQL, ciclo completo de reservas de parking, caja multi-turno con exportación PDF, seguimiento de grupos, un flujo de mantenimiento con estados y un libro de registro auditado. Autenticación JWT en cookies HttpOnly (access + refresh), MySQL 8 con 40+ tablas y migraciones idempotentes, Cloudinary para imágenes/PDFs, tareas en segundo plano por cron, desplegado en Render (API) / Aiven (MySQL) / Vercel (frontend).
Aplicación de gestión financiera doméstica totalmente cifrada. El backend nunca ve datos en claro: todas las transacciones, categorías y presupuestos se cifran client-side con AES-256-GCM y se almacenan como blobs. Derivación de claves con Argon2id (memory-hard), encriptación con claves jerárquicas (UserKey → AccountKey → Datos), y recuperación mediante frase mnemónica BIP39 de 24 palabras. Sistema de invitaciones multicuenta con transferencia segura de claves, módulo de asesoramiento de inversión con IA (Groq/Ollama/Claude/Gemini/HuggingFace), importación masiva Excel/CSV con deduplicación, presupuestos, gráficos interactivos con Recharts, autenticación JWT + OAuth (Google/GitHub), protección XSS/CSRF, rate limiting y PWA instalable. Backend en sleeping Render, DB en Aiven, frontend en Vercel.
Editor de PDF local-first construido con Flutter — todo se ejecuta en el dispositivo, sin servidor, sin cuentas y 100% offline. Permite abrir PDFs y navegarlos con zoom y barra de miniaturas, añadir texto encima de cualquier página (familia, tamaño y color), tapar contenido original con un rectángulo opaco (whiteout/tipp-ex) y escribir encima, dibujar a mano alzada, resaltar áreas y deshacer/rehacer sobre todo el historial. El archivo original nunca se modifica: la exportación rasteriza las anotaciones y las embebe en un PDF nuevo con las fuentes elegidas.
Arquitectura Clean Architecture feature-first en tres capas (domain / data / presentation), con la capa de dominio sin imports de Flutter ni de terceros. Estado con Riverpod 3, modelos inmutables con freezed, renderizado con pdfrx (pdfium vía FFI) y exportación con pdf + printing. Open-source bajo licencia MIT (solo dependencias open-source — MIT / BSD-3 / Apache-2.0 — y fuentes OFL/Apache embebibles), con binarios precompilados para Windows, Android y Linux en el Release v1.0.0 de GitHub.
Sistema de productividad para desarrolladores en dos formas: app de escritorio (Electron Forge + Vite, backend Express embebido, SQLite + Drizzle ORM, bóveda cifrada AES-256-GCM) y versión web de producción, desarrollada para la Hackaton CubePath 2026 de Midudev —seleccionada entre los 10 mejores de casi 250 proyectos— y desplegada en un VPS de CubePath vía Dokploy.
Núcleo común: jerarquía Misión → Objetivos → Planes → Tareas con progreso en cascada, Kanban con drag-and-drop, pipeline de Ideas con scoring y dashboard analítico (Recharts). La web añade multiusuario con SQLite aislada por usuario, autenticación scrypt + tokens HMAC, rate limiting, headers de seguridad (HSTS/CSP) y PWA instalable, con CI/CD y auto-deploy. El enlace abre la landing (Astro, Vercel), desde donde se accede a la demo en vivo. Instalador de escritorio próximamente.
Procedimiento generalizable de auditoría web aplicado en remoto, sin acceso al servidor ni al código fuente. El análisis se construye sobre herramientas públicas (curl con flags de cabeceras, Lighthouse, PageSpeed Insights, WebPageTest, Mozilla Observatory, securityheaders.com, WAVE, axe DevTools, Wappalyzer, dig/whois) y observación de caja negra: cabeceras HTTP, recursos cargados, redirecciones, políticas de seguridad, lighthouse scores y trazabilidad de assets. Cada hallazgo queda documentado con su comando reproducible, evidencia visual y severidad (Crítico / Alto / Medio).
La entrega es un sitio Astro 6 (SSR en Vercel) con TypeScript strict + Tailwind 4 + Content Collections y 8 secciones — metodología, stack, rendimiento, seguridad, accesibilidad, SEO, propuesta de migración e informe final. Incluye un control de acceso por token: middleware Edge fail-closed que compara un token compartido y emite una cookie httpOnly de 2h, headers no-store, robots.txt Disallow: / y meta noindex. En esta demo el token es público para que el informe pueda visitarse, pero el acceso puede restringirse en cualquier momento cambiando una variable de entorno en Vercel, sin tocar el código. La propuesta de migración recomienda un stack moderno (Next.js / Astro + TypeScript + Tailwind + despliegue en Vercel) con CSP, HSTS y mejoras concretas de a11y/SEO. El flujo de análisis incorpora agentes y skills de IA configurados a medida para acelerar la verificación cruzada de hallazgos.
Una plataforma de comercio electrónico moderna que evolucionó de un prototipo en vanilla JS a una arquitectura escalable con Next.js + Strapi. La versión legacy sentó las bases para conceptos fundamentales como manejo del DOM y lógica del carrito, mientras que el nuevo stack ofrece mejor rendimiento, mantenibilidad y escalabilidad en progreso. Esto podría ser infinito. Ve a la sección del blog si quieres saber más. Info de despliegue: base de datos (Aiven), backend (Render — la primera carga puede activar un cold start de algunos minutos), frontend (Vercel).
Reconstrucción total del sitio del AMPA del CEIP Mariana Pineda: migración desde una instalación WordPress en Hostinger a una web estática propia con Astro 6 (SSG), TypeScript y Tailwind CSS 4. El cambio de stack eliminó la dependencia de plugins y la sobrecarga de PHP/MySQL, multiplicando el rendimiento (Lighthouse) y reduciendo la superficie de mantenimiento. También redujo costes: se pasó de un hosting de pago a plataformas con planes gratuitos generosos (Vercel para la web, Firebase para el foro).
Incluye un blog bilingüe (ES/EN) gestionado con Content Collections, imágenes optimizadas a WebP con Sharp y responsive automático, SEO técnico con Open Graph y sitemap, y una PWA instalable con manifest y soporte offline. La pieza técnica más destacada es un foro comunitario en tiempo real construido con Firebase: autenticación con Google, base de datos Firestore con actualizaciones en vivo (onSnapshot), App Check (reCAPTCHA v3) contra abuso y registro de moderación. Todo bajo un diseño mobile-first con modo claro/oscuro y desplegado en Vercel.
App en producción construida con Next.js 16 y React 19 con datos meteorológicos completos de Open-Meteo API. Geolocalización automática inteligente con geocodificación inversa, arquitectura offline-first mediante service workers Serwist y validación de API segura con esquemas Zod. Navega por 28 ciudades preseleccionadas en 6 continentes o busca en todo el mundo, consulta condiciones actuales con más de 28 interpretaciones de códigos meteorológicos WMO, pronósticos de 7-16 días y predicciones por hora. Instalable en iOS, Android y escritorio con actualizaciones automáticas y notificaciones al usuario. Incluye alertas de lluvia/calor, cambio °C/°F, filtrado por continente, cambio de tema y caché StaleWhileRevalidate para rendimiento óptimo. Monitorizado con Vercel Analytics y Speed Insights.
Desarrollador autodidacta con pasión por construir cosas que funcionan. Mi formación viene de la práctica directa: depurar errores, entender el fondo del problema y aplicar la solución correcta. Horas de documentación, tutoriales y proyectos reales — aprendiendo solo desde mi primer PC en 1997. Estuve en IRC antes de que Discord existiera — donde nacieron proyectos que cambiaron el software, como Linux y Ubuntu.
He pasado años construyendo software real para negocios y personas cercanas: sistemas PMS para hoteles, dashboards para asociaciones escolares (ser padre enseña; las oportunidades de desarrollar aparecen en cualquier ámbito), y automatizaciones de flujos de trabajo personalizadas para amigos.
Hoy, construyo aplicaciones full-stack desde cero: plataformas PMS end-to-end, bases de datos, aplicaciones web, y sitios de e-commerce—backend, frontend, y todo lo demás. Actualmente construyendo HotelCode—un sistema integral de operaciones hoteleras.
+ lo que funcione
Deja que la IA maneje la parte aburrida, pruébala, borra lo inútil — construye cosas que la gente realmente use.
Tecnologías con las que trabajo
Perspectiva sobre Tecnología y Experiencia en Proyectos
Cómo auditar una web en caja negra usando sólo herramientas públicas, documentar hallazgos reproducibles y proponer una migración — sin tocar el servidor ni el código fuente.
9 minSubí Matrix a la hackathon de Midudev casi sin pensarlo. Lo que pasó después no lo vi venir para nada.
4 minUna historia real sobre cómo tuve que corregir a una IA que daba consejos técnicos correctos pero con suposiciones erróneas sobre mi configuración.
6 min