jcardena.com Blog Why I built blog.jcardena.com
145 posts
EN ES

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.

Why I built blog.jcardena.com
Why I built blog.jcardena.com

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

Why I built blog.jcardena.com
Why I built blog.jcardena.com

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:

  1. 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.
  2. 118-agent orchestration: lessons from production — what works, what doesn't, what we underestimated.
  3. 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.
  4. 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