Clanker Support

The Clanker Support Journal · Est. 2026

Field notes on AI support

Announcements, practical guides, and the engineering decisions behind a support widget that answers from your docs — and knows when to step aside.

Engineering·10 min

We diffed our marketing site against our codebase. Six claims didn't survive

We put the homepage in one tab and the repo in the other and checked every falsifiable sentence against the code that would have to make it true. Six claims failed, one page undersold us, and an adversarial re-pass caught overclaims we wrote during the honesty pass itself. Every fix shipped in one public pull request.

Jul 26, 2026Read →
Engineering·10 min

Two messages, one sequence number: the concurrency bug that never threw

An escalation marker and the AI reply it interrupted landed in the same conversation with the same sequence number. No exception, no log line, both inserts succeeded, and the thread quietly rendered out of order. This is the read-then-write bug that passes every test, the three-part fix whose deploy order is the point, and the five-second code search that tells you whether your codebase has it too.

Jul 26, 2026Read →
Engineering·11 min

'Additive columns are always safe' is wrong on Drizzle, Prisma, and preview deploys

Everyone agrees an additive column is the one schema change that can't hurt you. Then a one-line ALTER TABLE on our user table turned out to be capable of 500ing every authenticated request — because Drizzle projects every mapped column, Better Auth reads the user table on every session check, and preview deploys skip migrations. Here is the two-PR discipline we ship our riskiest schema changes with, and the one column we keep out of the ORM entirely.

Jul 20, 2026Read →
Engineering·8 min

We set a cache trap for our own support agent — in our own llms.txt headers

URL knowledge sources are snapshots, and everyone knows snapshots go stale. What we missed is that the refresh itself can be served by any CDN cache between the crawler and the origin — so "Recrawl → success" can silently re-store the pre-deploy content. The trap on our own site was set by our own cache headers.

Jul 20, 2026Read →
Engineering·13 min

Our AI support agent doesn't use RAG — here's the math

Clanker Support has no vector database. We put the entire knowledge base into the system prompt on every request, and for KBs measured in kilobytes, the math says that's the right call.

Jul 11, 2026Read →
Engineering·13 min

We moved our SaaS backend to workerd and every Node SDK broke

The Resend SDK, the Stripe Node SDK, and Better Auth's passkey plugin all got cut from our workerd build — each over something the package dragged in, not code we call. Here is each casualty, the fetch-and-crypto.subtle code that replaced it, and an honest accounting of whether it was worth it.

Jul 11, 2026Read →
Engineering·12 min

Everything that broke while shipping an embeddable AI widget

A support widget runs inside a DOM you don't control. Here's every way host pages broke ours — :empty selectors, 62.5% root font-sizes, null currentScript — and the rule we extracted from each fix.

Jul 11, 2026Read →
Engineering·1 min

Why we built on LLM Gateway instead of calling OpenAI directly

Our reasoning for using a model abstraction layer from day one — and why it's already paid off twice.

May 10, 2026Read →
Engineering·1 min

The case for self-hostable AI support

Why open architecture matters for tools that sit between you and your customers.

Apr 28, 2026Read →