Bitácora Miau: infraestructura de un proyecto editorial auto hospedado
BitácoraMiau es un proyecto digital sobre salud felina construido sobre infraestructura propia: Ghost CMS, Docker, MariaDB, Nginx, imgproxy, Mailgun proxy, membresías, SEO, herramientas y producción de contenido para tutores de gatos.
Bitácora Miau es un proyecto digital enfocado en salud felina, cuidado de gatos y recursos para tutores. La cara más visible es un blog, sin embargo, el proyecto se convirtió en una plataforma auto hospedada donde combiné desarrollo web, infraestructura, correo, optimización, SEO, membresías, herramientas propias y producción de contenido multimedia.
El objetivo fue construir una base técnica mantenible para un producto editorial real: un sitio con identidad propia, rendimiento cuidado, flujos de miembros, newsletters, herramientas para usuarios y una arquitectura preparada para crecer.
Este proyecto forma parte de mi portafolio porque reúne decisiones técnicas y decisiones de producto. Así como infraestructura, experiencia de usuario, contenido, backend, optimizaciones y retos de operación diaria.
Resumen del proyecto
Bitácora Miau nació como un sitio para compartir información útil sobre gatos: señales de alerta, salud felina, alimentación, comportamiento y experiencias relacionadas con cuidados veterinarios.
Con el tiempo, el proyecto creció hacia una plataforma más completa. Además del blog, desarrollé y configuré capas relacionadas con:
- CMS editorial.
- Infraestructura autohospedada.
- Despliegue con Docker.
- Base de datos.
- Proxy y caché.
- Optimización de imágenes.
- Correo transaccional.
- Newsletters.
- Miembros.
- Herramientas internas.
- SEO técnico.
- Producción de contenido para redes.
- Uso de inteligencia artificial como apoyo creativo y técnico.

Problema que buscaba resolver
El reto inicial era crear un blog especializado en salud felina. Sin embargo, rápidamente aparecieron necesidades más amplias:
- Tener control real del sitio y no depender de una plataforma cerrada.
- Publicar contenido editorial con buena estructura SEO.
- Mantener una identidad visual propia.
- Administrar miembros y newsletters.
- Optimizar rendimiento para un sitio con muchas imágenes.
- Preparar una base para futuras herramientas para tutores.
- Aprender y documentar una arquitectura real de despliegue autohospedado.
Por eso el proyecto evolucionó de “un blog en Ghost” a una plataforma editorial con servicios separados y decisiones técnicas propias.
Arquitectura general
La arquitectura de Bitácora Miau se puede entender por capas:
Usuario
↓
Traefik / Reverse Proxy
↓
Nginx Accelerator
↓
Ghost CMS
↓
MariaDBY alrededor del CMS se integran servicios adicionales:
Ghost CMS
├── Mailgun proxy / SMTP
├── imgproxy
├── tools-api
├── Ghost Members / Portal
├── SEO técnico
└── contenido editorial y multimediaLa intención fue separar responsabilidades:
- Ghost administra contenido, miembros y publicación.
- MariaDB conserva la información principal del CMS.
- Nginx acelera la entrega pública del sitio.
- imgproxy optimiza imágenes.
- Traefik publica servicios dentro de la infraestructura general del VPS.
- tools-api abre la puerta a herramientas propias.
- El proxy de correo permite mayor control sobre flujos relacionados con newsletters y eventos de envío.
Stack trabajado

Retos técnicos principales
1. Convertir una instalación de Ghost en una plataforma mantenible
Instalar Ghost es relativamente directo, el verdadero reto fue convertirlo en una plataforma operable: con servicios separados, persistencia, rutas claras, integración con proxy, correo, optimización e infraestructura preparada para crecer.
Para resolverlo, estructuré el proyecto con Docker Compose, separando CMS, base de datos, proxy de correo, herramientas internas, Nginx e imgproxy. Esto permitió mantener responsabilidades separadas y facilitar cambios futuros sin mezclar toda la lógica en un solo servicio.
2. Optimizar rendimiento sin romper funciones dinámicas
Un sitio editorial con imágenes puede volverse pesado si todo se entrega directamente desde el CMS. Por eso agregué una capa de Nginx orientada a acelerar Ghost.
El reto fue diferenciar qué rutas podían cachearse y cuáles no. Las páginas públicas, recursos estáticos e imágenes pueden beneficiarse de caché, compresión y expiración. En cambio, rutas como administración, APIs, previews, miembros y flujos autenticados requieren un tratamiento más cuidadoso.
La solución fue usar Nginx como acelerador, con reglas diferenciadas para contenido público, recursos estáticos, imágenes y rutas sensibles.
3. Optimizar imágenes para mejorar la experiencia móvil
Bitácora Miau depende mucho de imágenes: portadas, artículos, recursos visuales y contenido para redes. Esto hacía importante reducir peso y mejorar la entrega sin sacrificar calidad.
Para resolverlo integré imgproxy como servicio de optimización y transformación de imágenes. Esta capa permite entregar imágenes en formatos modernos, reducir tamaño y controlar mejor cómo se sirven los recursos visuales.
4. Resolver el flujo de correo en un entorno autohospedado
El correo fue uno de los retos más importantes del proyecto. Ghost utiliza correo para miembros, magic links, notificaciones y newsletters. En un entorno autohospedado, esto exige pensar en compatibilidad, entregabilidad, dominios, remitentes, eventos, límites y diagnóstico.
Además, el flujo de newsletters de Ghost depende de una integración específica con Mailgun para envíos masivos. Para entender y controlar mejor ese flujo, trabajé con configuración SMTP y un Mailgun proxy como capa intermedia.
El objetivo del proxy fue tener una capa de compatibilidad y control para observar eventos, manejar concurrencia, probar fallback SMTP y diagnosticar mejor el comportamiento del sistema.
Este reto fue especialmente útil porque obligó a entender la diferencia entre correo transaccional y correo masivo, así como las limitaciones de operar newsletters desde una instalación propia.
5. Evolucionar de blog a plataforma con herramientas propias
Desde el inicio, la intención fue que Bitácora Miau pudiera crecer más allá de artículos. Por eso empecé a trabajar una sección de herramientas para tutores, incluyendo una funcionalidad inicial de “Mis gatos”, entre otras.
La idea es que los miembros puedan guardar información básica de sus gatos y, en fases futuras, acceder a recursos más útiles para seguimiento, organización o preparación.
Para esto desarrollé una API propia de herramientas bajo /tools-api/ con endpoints mínimos para salud del servicio, usuario autenticado y datos básicos de gatos.
6. Decidir cuándo agregar servicios y cuándo simplificar
Durante la evolución del proyecto también probé un sistema externo de comentarios con Remark42. ya que al inicio del blog en la plataforma Ghost 5 no existían los comentarios nativos y, aunque esta funcionalidad después la deprequé, esto me permitió explorar la autenticación (con Google y otras plataformas externas), persistencia, moderación y despliegue de un servicio adicional.
Sin embargo, agregar servicios también aumenta la complejidad operativa. Por eso, parte del aprendizaje fue evaluar cuándo conviene mantener una dependencia externa y cuándo es mejor simplificar aprovechando funciones nativas de Ghost.
Esta decisión llevó a documentar la migración hacia comentarios nativos de Ghost 6 y dejar notas anti-regresión para evitar volver accidentalmente a dependencias retiradas.
Documentación pública del proyecto
Para que el proyecto sea más útil como parte de mi portafolio, preparé una documentación técnica pública en GitHub. La intención es documentar la arquitectura, decisiones y aprendizajes del proyecto.
El repositorio incluye:
docs/
├── architecture.md
├── mailgun-proxy.md
├── nginx-cache.md
├── imgproxy.md
├── ghost-members.md
├── operations.md
└── decisions.md
examples/
├── docker-compose.example.yml
├── nginx.example.conf
├── env.example
└── mailgun-proxy.example.env
diagrams/
├── architecture.svg
├── request-flow.svg
└── email-flow.svgLa documentación está pensada para mostrar:
- Arquitectura general.
- Flujo de requests.
- Flujo de correo.
- Separación de servicios.
- Configuración de ejemplo.
- Decisiones técnicas.
- Retos encontrados.
- Riesgos operativos.
Qué demuestra este proyecto
Bitácora Miau demuestra experiencia práctica en varias áreas:
- Administración de infraestructura Linux.
- Despliegue de aplicaciones con Docker.
- Operación de Ghost CMS en entorno autohospedado.
- Configuración de base de datos MariaDB.
- Uso de reverse proxy y redes de servicios.
- Optimización de rendimiento con Nginx.
- Optimización de imágenes con imgproxy.
- Configuración de correo transaccional y newsletters.
- Diseño de una capa de compatibilidad tipo Mailgun proxy.
- Manejo de miembros y flujos de autenticación.
- Desarrollo de API propia para herramientas internas.
- Documentación técnica de arquitectura.
- SEO técnico.
- Producción de contenido editorial y multimedia.
- Uso de inteligencia artificial como apoyo creativo y técnico.
Conclusión
Bitácora Miau empezó como un blog sobre gatos y terminó convirtiéndose en una plataforma editorial autohospedada donde pude integrar infraestructura, desarrollo web, correo, optimización, SEO, contenido y herramientas propias.
Para mí, el valor técnico del proyecto está en haber construido algo real: un sitio que publica contenido, atiende usuarios, envía correos, administra miembros, entrega imágenes optimizadas y se mantiene sobre una arquitectura propia. Muestra criterio para construir, operar, documentar y evolucionar un producto digital completo.