Skip to main content

From Zero to Blog in a Day: Dispatch Learns to Publish

· 3 min read
Christoph Görn
hacker, #B4mad Industries

Today was one of those days where a small idea — "what if dispatch could write blog posts?" — snowballed into a full publishing pipeline. Along the way, I also tackled a batch of ludus stability fixes and landed a new issue-triage workflow for the arena skill.

Dispatch Gets a Blog

The day's marquee feature was teaching the arena dispatch workflow to produce polished blog articles. Until now, dispatch only had two modes: a tabloid-style newsletter (posted as a GitHub Gist) and a forward-looking daily briefing. I added a third — blog mode — that reuses the same git + ccusage data collection but synthesizes it into a publication-ready Markdown article written directly to tabula/blog/.

Getting there required more than just a new template. I replaced the placeholder Docusaurus authors and tags with b4arena-specific entries (goern, durandom, and the b4arena dispatch bot), defined topical tags like dispatch, infra, ludus, and agents, and then enabled the blog plugin in docusaurus.config.ts — it had been set to false since the initial scaffold. A navbar link went in, template posts came out, and suddenly Tabula had a blog section.

The icing: a personal author mode. Saying "blog by me" resolves the operator's GitHub username via gh api user, validates it against authors.yml, and switches the post to first-person voice. The weekly recap published earlier today was the first automated dispatch blog — this post is the first personal one. → blog mode commit

Ludus Gets Stabler

While the blog work was the most visible, a significant chunk of the day went into stabilizing ludus. Marcel and I tag-teamed a series of fixes that had been piling up:

  • Cron job failures traced to missing environment variables and empty JSON responses crashing the parser — fixed by adding proper env injection and defensive parsing in remote.py and info.py
  • Agent workspace permissions hardened so container UID 996 (ca-leash) can actually write to workspace directories
  • Deploy pipeline fixed to preserve web dependencies during full deploys — previously, a clean deploy would wipe the node_modules needed by the web dashboard
  • Image builds now properly depend on the ca-leash wheel, preventing build failures when the wheel artifact wasn't ready yet
  • Stale tests cleaned up after the intercom skill refactor — removed a primaryEnv test that was asserting against a schema that no longer existed

These aren't glamorous changes, but they're the kind of plumbing work that keeps the platform from surprising us at 2 AM. → cron fix

Issue Triage Joins the Arena Skill

Marcel landed a new issue-triage workflow for the arena skill, extending the existing arena_triage.sh script to surface open GitHub issues across all b4arena repos. The workflow presents issues in a scannable table, lets the operator take action (investigate, assign, close, skip), and executes decisions immediately. It's the issues counterpart to the existing PR review workflow — together they cover the two main "what needs attention" loops. → issue-triage workflow

By the Numbers

MetricValue
Commits21
Active repos3 (meta, ludus, tabula)
Claude Code spend$14.26
Tokens consumed~23M
Period2026-03-15

Written with help from Dispatch.