Privacy

Accept optional first-party analytics or decline. Functional journey and sound preferences stay on this device.

Read the privacy notice

Open to talks and workshops

Thinking

An engineering publication about AI systems that have to work.

Failures, architecture and experiments from building in production — with the evidence and the limits written down.

Lesson · 2 min read · Oct 2026

Every one of these started with something breaking.

13 Claude Skills I pulled out of building this site

Each one started as something that broke here: a fake crawler, an unused vector index, an API key that ran dry. The checklists I wrote while fixing them are now free downloads.

Most of the value is the order of the checks and the things to stop doing, not the scripts.

Read

Series · 01

The AI Failure Files

Real failures from AI-assisted systems: what broke, why nobody noticed, and the gate that catches it now.

  1. 01Three bugs that shipped in AI-assisted code, and the gates that catch them nowA hook after an early return, a silent embedding wipe, a reranker that vanished with a dead key. None of them were caught by reading the code.

    Lesson · 1 min read · Sept 2026

  2. 02Reindexing has to be triggered, not assumedAlex OS only re-embeds content when the CMS calls its config-refresh route — a seed script that writes straight to the CMS's MySQL database has to call it manually.

    Lesson · 1 min read · Jul 2026

Series · 02

Agent Reality Check

Where agents earn their place, where a deterministic workflow is the better engineering call, and how to tell.

  1. 01What I let Claude Code do, and what I don'tAI as a pair changes what one person can build. It doesn't change who owns the architecture, the review, or the decision to ship.

    Decision · 1 min read · Sept 2026

Series · 03

Inside the Architecture

System decomposition, the trade-offs behind it, and what each decision cost.

  1. 01Content fields are data, not codeBecause content_type_fields and content_items.fields_json are schemaless, adding a field to an existing type never touches existing records.

    Lesson · 1 min read · Jul 2026

  2. 02The CMS keeps the facts, pgvector keeps an optional indexThe CMS's MySQL database is the system of record. pgvector lives in Alex OS's own PostgreSQL database, holds only derived embeddings, and is optional: without it retrieval degrades to keyword scoring.

    Architecture · 1 min read · Jul 2026

Series · 04

Things I Would Build Differently

Retrospectives on design, complexity and delivery: the decisions I would now make the other way.

  1. 01Twenty-two buttons is the same as no guidanceThe first in-editor AI panel had 22 equally weighted actions. Generating features is cheap now; deciding which one to lead with is the work.

    Lesson · 1 min read · Sept 2026

All

Every article

Lesson · 2 min read · Oct 2026

13 Claude Skills I pulled out of building this site

Each one started as something that broke here: a fake crawler, an unused vector index, an API key that ran dry. The checklists I wrote while fixing them are now free downloads.

Lesson · 1 min read · Sept 2026

Three bugs that shipped in AI-assisted code, and the gates that catch them now

A hook after an early return, a silent embedding wipe, a reranker that vanished with a dead key. None of them were caught by reading the code.

Lesson · 1 min read · Sept 2026

Twenty-two buttons is the same as no guidance

The first in-editor AI panel had 22 equally weighted actions. Generating features is cheap now; deciding which one to lead with is the work.

Decision · 1 min read · Sept 2026

What I let Claude Code do, and what I don't

AI as a pair changes what one person can build. It doesn't change who owns the architecture, the review, or the decision to ship.

Lesson · 1 min read · Jul 2026

Reindexing has to be triggered, not assumed

Alex OS only re-embeds content when the CMS calls its config-refresh route — a seed script that writes straight to the CMS's MySQL database has to call it manually.

Architecture · 1 min read · Jul 2026

The CMS keeps the facts, pgvector keeps an optional index

The CMS's MySQL database is the system of record. pgvector lives in Alex OS's own PostgreSQL database, holds only derived embeddings, and is optional: without it retrieval degrades to keyword scoring.

Lesson · 1 min read · Jul 2026

Content fields are data, not code

Because content_type_fields and content_items.fields_json are schemaless, adding a field to an existing type never touches existing records.