
Fully Booked - Implementación Dockerizada con DigitalOcean y Cloudflare
Fully Booked salió como cinco servicios Docker en un único droplet de DigitalOcean detrás de Cloudflare, para que un equipo muy pequeño pudiera operar un marketplace que gestiona depósitos. Un solo repositorio construía cada imagen, un archivo compose y un Makefile reducían una publicación a pull, build y up, un proxy Caddy se encargaba de los certificados y las cabeceras de seguridad, y Playwright generaba en el servidor el PDF de cada presupuesto y factura. Como los servicios eran independientes desde el principio, más tarde pasaron a un clúster de Kubernetes autoalojado sin reconstruir nada.
La historia completa
La infraestructura que permitió a un mercado que cobra depósitos llevar cinco servicios con un equipo pequeño y sin sorpresas.
Un mercado que guarda depósitos no puede caerse
Fully Booked cobra los depósitos de los clientes, envía a los operadores sus ganancias y entrega los documentos de los que dependen ambas partes. Aquí una caída no es una simple molestia: el cliente que no puede pagar reserva en otro sitio, y el operador que no puede abrir un presupuesto pierde el trabajo.
La plataforma son cinco servicios, una web para clientes, una web para operadores, un panel de administración, un sitio de documentación y un único backend, construidos y mantenidos por un equipo muy pequeño. El despliegue tenía que ser lo bastante sencillo para llevarlo a mano y lo bastante sólido para confiar en él.
Cinco servicios, un repositorio, un comando
Cada servicio se publica como su propia imagen de Docker desde un único repositorio. Las cuatro webs se compilan en pequeños servidores estáticos, el backend en NestJS lleva la API GraphQL, y MongoDB y los archivos subidos viven en volúmenes persistentes. Un archivo compose los conecta en una red privada, y un Makefile reduce cada lanzamiento a pull, build y up.


Cloudflare delante, con dos excepciones deliberadas
Cloudflare gestiona el DNS de cada subdominio y hace de proxy de las webs públicas para la caché, los certificados y la protección. Dos registros quedan directos a propósito: la web de operadores, para que Apple pueda leer el archivo que permite que los enlaces abran la app, y la API, para que los webhooks de pago de Square lleguen sin bloqueos.
Equivocarse en cualquiera de los dos rompería los enlaces profundos de cada PDF o impediría que los pagos se confirmaran, y por eso ambos están documentados junto a la tabla de DNS.


Un proxy inverso que se encarga de la seguridad
Un contenedor de Caddy en el borde emite los certificados automáticamente, comprime las respuestas, redirige cada dirección con www, añade a la API las cabeceras de strict transport, frame y content type, y sirve los archivos de asociación de la app con el content type que esperan las tiendas.


Documentos generados en producción
Cada presupuesto, carta de cancelación, factura, confirmación de reserva y hoja de conductor se genera en el servidor con Playwright, que corre dentro de la imagen del backend. Conseguir instalar un navegador sin interfaz dentro de un contenedor de producción fue lo más difícil de todo el trabajo, y es lo que permite a un operador enviar un PDF impecable desde el móvil en segundos.




De un droplet a un clúster
El droplet sostuvo la plataforma durante sus primeras fases. Cuando la factura mensual y los límites de una sola máquina empezaron a pesar, las mismas imágenes pasaron a un clúster de Kubernetes autoalojado sin tiempo de inactividad, algo posible porque desde el principio se habían construido como servicios independientes.
Para el fundador supuso no reconstruir nada ni sufrir caídas, y para operadores y clientes nada cambió, salvo que todo siguió funcionando. Los servicios en sí se cuentan en la historia de Fully Booked.
Lo que dijeron
Excellent time keeping, great attitude, brilliant skill. highly recommend
dic 05, 2024
(5,0)Monir is an exceptional developer with outstanding expertise in his field. His advanced skills enable him to deliver results that surpass those of competitors. He is very thorough and has keen attention to detail, Monir is an excellent listener who can transform your ideas into reality with precision.
nov 28, 2024
(5,0)Today marks one year of working with Monir, and this time has allowed me to know Monir as a truly dedicated individual. We have collaborated on my project daily for the past year, and not once has Monir failed to respond. Monir has invested tremendous effort and focus into this project, working late nights and early mornings, always available to answer calls and resolve issues. There has never been a moment when Monir turned down work or shirked responsibility. The project is growing day by day, and if it becomes a success, it will be largely thanks to Monir's unwavering dedication.
jul 03, 2024
(5,0)I cannot express enough gratitude for Monir's exceptional work as a full-stack developer. Over the past 8 months, Monir has been instrumental in bringing my vision to life by diligently crafting a sophisticated platform that exceeds all expectations. Monir's proficiency in his craft is unparalleled. His technical expertise, coupled with his creative problem-solving skills, has consistently resulted in innovative solutions that have elevated our platform to new heights. His ability to seamlessly navigate through complex challenges showcases his mastery of both front-end and back-end development. Beyond his technical prowess, Monir's professionalism and dedication are truly commendable. He has demonstrated unwavering commitment and reliability throughout the entire development process, ensuring that every aspect of the platform is meticulously crafted to perfection. Working with Monir has been an absolute pleasure. His clear communication, attention to detail, and proactive approach have made collaboration effortless and enjoyable. He has not only met deadlines consistently but has also gone above and beyond to deliver features that surpass expectations. In conclusion, Monir is not just a developer; he is a visionary who brings passion, expertise, and dedication to every project he undertakes. I am immensely grateful for his invaluable contributions to our platform, and I wholeheartedly recommend him to anyone seeking a top-tier full-stack developer. Thank you, Monir, for your outstanding work and unwavering commitment to excellence. You are truly a standout talent in your field.
mar 27, 2024
(5,0)Monir is a very experienced developer. I have been working with him very closely for 8 months now. He has achieved every goal that we planned. He has taken on very complex challenges with the project that we have created and has been able to solve every issue that we've faced. He is extremely hard working. He works day and night. He's work ethic is excellent. He never complains or give excuses. My project is beautiful now and I can't wait to promote it to the world.
ene 21, 2024
(5,0)Monir has been working on my project for the last 3-4 months. We have been speaking and creating ideas to improve this project on a daily basis. The project is now complete and I can honestly say Monir is one of the best people I've ever worked with. Every single commitment that Monir promised from the beginning of this journey he stuck to and achieved. He never moaned, complained or made an excuse about anything. He completed every single commitment that we agreed upon. Monir worked early mornings and late nights until he produce the project I asked of him, and now my business journey is ready to move forward and I'm completely glad that I choose Monir to create this platform for me. The project consisted of an admin panel a customer website and an app. All projects were built to high specification and have very sophisticated features. I would definitely recommend monir to anyone looking for a serious developer.
oct 18, 2023
(5,0)También te puede gustar
Fully Booked - Producción de videos promocionales y tutoriales
Un vídeo promocional que recorre con un operador de minibuses del Reino Unido las ventajas de Fully Booked en el orden en que le importan, hecho con la app real y no con imágenes de archivo. Empieza por el propio problema del operador, dedica a cada ventaja un momento en una pantalla real y se editó en varias duraciones, desde un gancho de pocos segundos para redes sociales hasta una versión completa para páginas de destino y las fichas de las tiendas.
Fully Booked - Migración sin Tiempo de Inactividad a Kubernetes Autoalojado
Fully Booked funcionaba sobre infraestructura gestionada en la nube, con una factura que crecía cada mes y una pila que nadie controlaba del todo. Trasladamos toda la plataforma a un clúster de Kubernetes autoalojado sin un minuto de interrupción para quienes la usaban. El cambio abarcó DNS, ingress, bases de datos y el pipeline de despliegue, escalonado de modo que el tráfico se movía solo una vez probada cada capa en el clúster nuevo. Nadie que usara la aplicación esa semana notó nada, que era exactamente el objetivo. La factura recurrente pasó a ser hardware propio, y ese mismo clúster sostiene hoy las publicaciones semanales de la plataforma.
Fully Booked - Diseño de activos visuales con Photoshop
Capturas para las tiendas, un gráfico destacado, un icono de app y el arte de los correos, creados en Photoshop a partir de pantallas reales para que una plataforma joven parezca consolidada ante los operadores. Las capturas cuentan la propuesta en cinco deslizamientos en cada tamaño que exigen Apple y Google, cada correo se abre con su propia ilustración en los colores de la marca, y el icono y las pantallas de bienvenida llevan el logotipo de dos manos que se encuentran.

El blog son notas de campo desde producción: decisiones de arquitectura, sistemas de AI que sobrevivieron al contacto con usuarios reales e infraestructura que se paga sola. Escrito desde el trabajo, no sobre él.


