Miau Logbook: Infrastructure of a Self-Hosted Editorial Project

Miau Logbook: Infrastructure of a Self-Hosted Editorial Project

BitácoraMiau is a digital project focused on feline health built on self-hosted infrastructure: Ghost CMS, Docker, MariaDB, Nginx, imgproxy, Mailgun proxy, memberships, SEO, custom tools, and content production for cat owners.

Share

Bitácora Miau is a digital project focused on feline health, cat care, and resources for pet guardians. Its most visible face is a blog; however, the project evolved into a self-hosted platform combining web development, infrastructure, email, performance optimization, SEO, memberships, custom tools, and multimedia content production.

The goal was to build a maintainable technical foundation for a real editorial product: a website with its own identity, carefully tuned performance, member flows, newsletters, user tools, and an architecture ready to scale.

This project is part of my portfolio because it brings together technical decisions and product decisions, encompassing infrastructure, user experience, content, backend engineering, performance tuning, and daily operational challenges.


Project Summary

Bitácora Miau originated as a site to share helpful information about cats: warning signs, feline health, nutrition, behavior, and veterinary care experiences.

Over time, the project expanded into a more complete platform. In addition to the blog, I developed and configured layers covering:

  • Editorial CMS.
  • Self-hosted infrastructure.
  • Docker deployment.
  • Relational database.
  • Reverse proxy and caching.
  • Image optimization.
  • Transactional email.
  • Newsletters.
  • Membership tiers.
  • Internal tools.
  • Technical SEO.
  • Social media content production.
  • Artificial intelligence as a creative and technical copilot.
Screenshot of the Bitácora Miau website
Screenshot of the Bitácora Miau website

The Problem It Solved

The initial challenge was creating a specialized blog on feline health. However, broader requirements quickly emerged:

  1. Retain genuine control over the site without relying on closed proprietary platforms.
  2. Publish editorial content with sound SEO architecture.
  3. Maintain a custom, distinct visual brand identity.
  4. Manage members and email newsletters.
  5. Optimize performance for an image-heavy publication.
  6. Lay the groundwork for future interactive guardian tools.
  7. Learn and document a production-grade self-hosted deployment architecture.

Consequently, the project evolved from "a Ghost blog" into an editorial platform with separated services and deliberate engineering decisions.


General Architecture

The architecture of Bitácora Miau is structured across clear layers:

User
  ↓
Traefik / Reverse Proxy
  ↓
Nginx Accelerator
  ↓
Ghost CMS
  ↓
MariaDB

And surrounding the core CMS, supplementary services are integrated:

Ghost CMS
├── Mailgun proxy / SMTP
├── imgproxy
├── tools-api
├── Ghost Members / Portal
├── Technical SEO
└── Editorial & multimedia content

The guiding principle was separation of concerns:

  • Ghost manages content, members, and publishing workflows.
  • MariaDB stores primary CMS data.
  • Nginx accelerates public asset and page delivery.
  • imgproxy optimizes and resizes visual media on the fly.
  • Traefik exposes services across the VPS infrastructure.
  • tools-api enables custom backend utilities.
  • The mail proxy provides fine-grained observability over newsletter pipelines and delivery events.

Technology Stack

Bitácora Miau architecture diagram
Bitácora Miau architecture diagram

Key Technical Challenges

1. Turning a Ghost Installation into a Maintainable Platform

Installing Ghost is straightforward; the real challenge was turning it into an operable platform: decoupled services, reliable data persistence, clear routing, proxy integration, mail pipelines, caching, and infrastructure primed for growth.

To achieve this, I structured the deployment with Docker Compose, isolating CMS, database, mail proxy, custom internal tools, Nginx, and imgproxy. This separation made future updates predictable without tangling application logic in a single monolithic service.


2. Optimizing Performance Without Breaking Dynamic Flows

An editorial publication loaded with imagery can quickly bog down if all requests hit the CMS application layer directly. I introduced an Nginx caching layer tuned specifically for Ghost.

The key challenge was delineating between cacheable public assets and strictly dynamic endpoints. Public articles, static assets, and images benefit heavily from caching, gzip compression, and aggressive cache headers. Conversely, admin routes, APIs, draft previews, member sessions, and authentication flows require pass-through handling.

The solution was using Nginx as an accelerator with segmented rules for public content, static assets, images, and sensitive authenticated paths.


3. Optimizing Images for Mobile Performance

Bitácora Miau relies heavily on photography: hero covers, instructional articles, visual guides, and social assets. Reducing payload size without degrading visual clarity on high-DPI screens was vital.

I integrated imgproxy as a dedicated image processing service. This layer converts assets to modern formats (such as WebP/AVIF), downscales to appropriate breakpoints, and gives fine control over asset delivery.


4. Handling Email in a Self-Hosted Environment

Email delivery was one of the most critical challenges of the project. Ghost leverages email for member signups, magic links, transactional alerts, and newsletter broadcasting. In a self-hosted environment, this requires meticulous attention to sender reputation, DNS records (SPF, DKIM, DMARC), bounce tracking, rate limits, and diagnostic logs.

Furthermore, Ghost bulk newsletters depend on Mailgun API integration. To master and control that pipeline, I worked with SMTP configuration alongside a custom Mailgun proxy intermediary.

The proxy provided compatibility and visibility to inspect delivery events, manage concurrency, test SMTP fallbacks, and diagnose delivery behavior.

This exercise proved invaluable for understanding the concrete operational differences between transactional delivery and bulk broadcast pipelines in self-hosted setups.


5. Evolving from Blog to Platform with Custom Tools

From the outset, the goal was for Bitácora Miau to grow beyond static articles. I began developing a suite of utilities for pet guardians, starting with a "My Cats" profile manager.

Members can track essential health records for their cats and, in future phases, access targeted care reminders and veterinary checklists.

To support this, I built a dedicated backend API under /tools-api/ featuring health check endpoints, session validation, and CRUD operations for cat profiles.


6. Knowing When to Adopt Services and When to Simplify

During the project's evolution, I evaluated an external commenting system powered by Remark42 (when Ghost 5 lacked native comments). While this provided hands-on experience with OAuth authentication (Google and social providers), persistence, and moderation workflows, it also added operational overhead.

Part of the engineering learning curve is discerning when an external dependency is justified and when native platform capabilities should take precedence. When Ghost introduced native commenting in Ghost 6, I decommissioned Remark42, documented the migration, and established anti-regression notes to keep the footprint lean.


Public Project Documentation

To maximize this project's value within my engineering portfolio, I published comprehensive technical documentation on GitHub detailing the architecture, design choices, and operational takeaways.

The repository includes:

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.svg

The documentation covers:

  • End-to-end architecture.
  • HTTP request lifecycles.
  • Email routing workflows.
  • Service boundaries.
  • Production configuration examples.
  • Architectural decision records (ADRs).
  • Operational challenges and mitigation strategies.

What This Project Demonstrates

Bitácora Miau reflects hands-on experience across multiple engineering domains:

  • Linux server administration and hardening.
  • Containerized deployments with Docker Compose.
  • Production Ghost CMS operation in a self-hosted setting.
  • MariaDB database setup and maintenance.
  • Reverse proxying and network isolation with Traefik and Nginx.
  • Nginx caching and static asset acceleration.
  • Real-time image transformation using imgproxy.
  • Transactional email and bulk newsletter orchestration.
  • Design of proxy layers for observability and fallback handling.
  • Member authentication and gated content flows.
  • Custom REST API engineering for client tools.
  • Comprehensive architectural documentation.
  • Technical SEO optimization.
  • Multimedia and editorial content production.
  • Pragmatic integration of AI for creative and technical workflows.

Conclusion

Bitácora Miau began as a cat health blog and evolved into a production-grade self-hosted editorial platform bringing together infrastructure, web engineering, email delivery, caching, SEO, content workflows, and custom tools.

The technical value lies in having built and maintained a real-world system: delivering articles, serving active users, dispatching verified emails, managing authenticated members, and optimizing multimedia—all underpinned by a self-managed architecture. It demonstrates sound engineering judgment across building, operating, documenting, and scaling a digital product.