Saltar al contenido

Hola, me llamo

Francisco

Desarrollador full stack y administrador de sistemas

Construyo aplicaciones web con PHP y JavaScript, y me ocupo de todo lo que hay debajo: servidores Linux, contenedores Docker, colas de mensajes y despliegues automatizados. Me interesa el trabajo que sigue funcionando cuando nadie lo mira.

servidores en producción
3
contenedores en marcha
40+
infraestructura como código
100%

01Sobre mí

Trabajo en las dos mitades de una aplicación. Escribo el backend en PHP y el frontend con JavaScript, pero no doy el trabajo por terminado cuando el código compila: también monto el servidor que lo sirve, el proxy que le pone el certificado y la copia de seguridad que lo rescata si algo sale mal.

Esa parte la aprendí manteniendo mi propia infraestructura. Tres servidores Linux, más de cuarenta contenedores y todo definido en un repositorio, con monitorización y copias verificadas. Cuando algo falla a las tres de la mañana, el aviso llega a mi teléfono.

Me interesan los sistemas que se pueden reconstruir desde cero, los procesos desacoplados con colas de mensajes y los scripts que evitan repetir una tarea por tercera vez.

02Proyectos

Infraestructura como código

2026

Tres servidores Linux y más de cuarenta contenedores, definidos por completo en un repositorio.

Todo el homelab está descrito en ficheros versionados: un repositorio con una carpeta por máquina y un stack por servicio. Levantar cualquier pieza desde cero es clonar y ejecutar docker compose up.

Las decisiones que sostienen el montaje:

  • Los secretos nunca entran en git. Salen a ficheros .env con permisos 600 en cada máquina, y el repositorio solo guarda los .env.example.
  • Copias de seguridad con restic cifradas hacia almacenamiento externo, con retención escalonada y aviso por Telegram cuando algo falla. Las bases de datos se vuelcan en caliente de forma consistente antes de subirlas.
  • Restaurar se prueba, no se supone. La verificación no compara hashes: comprueba que la base de datos restaurada funciona y contiene lo que debe.
  • Certificados automáticos con Traefik y desafío DNS, incluidos los servicios que nunca se exponen a internet.
  • Docker
  • Docker Compose
  • Traefik
  • Bash
  • Linux
  • Prometheus
  • Grafana
  • restic
Repositorio privado — puedo enseñarlo en una entrevista

Bot de WhatsApp para una clínica

2026

Atención automatizada sobre la Cloud API de WhatsApp, con respuestas configurables sin tocar código.

Bot que responde a los mensajes que llegan a la clínica de fisioterapia. Las respuestas se definen en un fichero JSON, de modo que ajustar un texto o añadir un comando no exige desplegar código nuevo.

Detalles de ingeniería:

  • Integración continua que valida composer.json, comprueba el estilo con php-cs-fixer y ejecuta la batería de PHPUnit en cada push.
  • Pruebas de humo que esperan a que el proxy enrute el contenedor recién creado antes de dar el despliegue por bueno — un fallo real que apareció en producción y quedó cubierto.
  • Despliegue reproducible: un script comprueba si hay cambios en git y solo reconstruye cuando los hay.
  • PHP 8.3
  • Composer
  • PHPUnit
  • Docker
  • Traefik
  • WhatsApp Cloud API
Repositorio privado — puedo enseñarlo en una entrevista

Servidor MCP de herramientas multimedia

2026

Expone generación y edición de imágenes, voz y embeddings como herramientas para asistentes de IA.

Servidor que implementa el Model Context Protocol para poner un conjunto de herramientas multimedia al alcance de un asistente: generación y edición de imágenes, síntesis de voz, transcripción de audio, embeddings y reordenación de resultados.

Es el tipo de pieza que solo resulta útil si la interfaz está bien definida: cada herramienta declara su esquema de entrada, y el asistente decide cuándo usarla.

Publicado como software libre.

  • JavaScript
  • Node.js
  • MCP
  • API REST

Sistema de citas para fisioterapia

2026

Agenda de una clínica: reservas, disponibilidad de los profesionales y avisos a los pacientes.

Aplicación de agendamiento pensada para el día a día real de una consulta: horarios por profesional, duraciones distintas según el tratamiento y huecos que no se solapan.

El reto no es el formulario de reserva, sino todo lo que lo rodea: qué pasa cuando alguien cancela, cómo se evita la doble reserva y cómo se recuerda una cita sin resultar pesado.

  • PHP
  • MariaDB
  • JavaScript
  • Docker
Repositorio privado — puedo enseñarlo en una entrevista

Web de una casa rural

2026

Sitio de alojamiento rural sobre WordPress, contenedorizado y con despliegue reproducible.

Web de la casa rural Mi Rinconcillo: contenido, galería de fotos y reservas.

Lo interesante está fuera del gestor de contenidos. WordPress corre en contenedores junto a su base de datos, con el certificado y el enrutado resueltos por Traefik, de modo que la instalación completa se reproduce en otra máquina sin pasos manuales.

El tema es hijo de Astra, para que las actualizaciones del tema padre no se lleven por delante los ajustes propios — el error clásico de tocar un tema directamente.

  • WordPress
  • PHP
  • MariaDB
  • Docker
  • Traefik
  • Astro
Repositorio privado — puedo enseñarlo en una entrevista

03Stack

Herramientas con las que trabajo de forma habitual, no una lista de todo lo que he tocado alguna vez.

Backend

La lógica de negocio y las integraciones con terceros.

  • PHP 8
  • Symfony
  • Composer
  • PHPUnit
  • MariaDB
  • SQLite

Frontend

Interfaces que cargan rápido y funcionan sin adornos.

  • JavaScript
  • TypeScript
  • Astro
  • Tailwind CSS
  • HTML
  • CSS

Infraestructura

Servidores propios, no plataformas gestionadas.

  • Linux
  • Docker
  • Traefik
  • Nginx
  • SSH
  • systemd

Automatización

Lo que se hace dos veces, se escribe una.

  • Bash
  • GitHub Actions
  • cron
  • restic
  • Prometheus
  • Grafana

Mensajería

Procesos desacoplados y tareas en segundo plano.

  • RabbitMQ
  • Colas de trabajo
  • Webhooks

04Contacto

¿Un proyecto, una duda o simplemente saludar? El correo es la vía más directa y respondo a todo.