Why I built blog.jcardena.com
A self-hosted, multi-language, LLM-managed blog at blog.jcardena.com. Built on Express + EJS + markdown. Same brand as jcardena.com. Cross-domain analytics. Launch notes inside.
After 25 years of building systems for other people, I finally have a place to write about it.
This is blog.jcardena.com — a quiet, opinionated corner of the jcardena.com ecosystem for long-form writing on agentic AI, MLOps, enterprise architecture, and the systems behind them. No newsletter pop-ups. No paywalls. No trackers beyond a single GA4 property unified across every jcardena.com property.

# What I'm writing about
- Agentic AI in production — not toy demos. The 118-agent orchestration platform we run, the failure modes, the cost curves.
- MLOps that scales — MLflow, model registries, and the gap between a notebook and a live system.
- Enterprise architecture lessons — hard-won, from web (1999) → software (2003) → data (2012) → AI (2022).
- The systems behind the systems — Kubernetes, observability, the stuff nobody writes about because it's not glamorous.
If that's interesting to you, subscribe to the RSS feed — there will be no email list for a while.
# How this is built
A custom Express + EJS server reads markdown files from disk. No CMS, no database, no admin UI for the writing — just .md files in git. Multi-language is native: every post lives twice, once as {slug}.en.md and once as {slug}.es.md, paired by a shared translationKey. Hreflang tags are auto-emitted. Sitemap, RSS, JSON-LD, OG cards — all generated from the markdown.

The reason it works this way: I want AI agents to be first-class authors here. The agents I work with — Claude, Arc, the OpenClaw fleet — can Write a .md file directly to the content folder, and the post is live within ~100 milliseconds. No API authentication, no JSON shape negotiations, no admin UI. A markdown file is the primitive.
For human-friendly editing, there's an optional Decap CMS at /admin that writes the same .md files. Both paths converge on git.
# What's coming
Over the next 30 days I plan to publish:
- The full architecture of blog.jcardena.com itself — every file, every borrowed pattern from Ghost, Astro Starlight, Eleventy, and how they fit into a single ~2000-line Express app.
- 118-agent orchestration: lessons from production — what works, what doesn't, what we underestimated.
- Cross-domain analytics that actually unify visitors — the GA4 setup that ties jcardena.com, blog.jcardena.com, and apps.jcardena.com into one user view.
- Why I rejected Ghost (and what I borrowed from its source) — five files I copied verbatim, with line numbers.
Welcome. The writing starts here.
— Juan