Journal

Notes from the workbench.

Essays and observations from our engagements. Every piece is by someone whose name is on the work.

Engineering · Aug 2026 · 5 min read

SSJS and external APIs: the token hygiene checklist.

HTTPGet, HTTPPost, WSProxy. Every place a bearer token can leak into rendered output. Eight patterns to check for, and how to design the wrapper so the token never touches string concatenation with untrusted data.

Read →

Engineering · Aug 2026 · 5 min read

AMPscript error handling: catching the silent failures.

Try/Catch is real in AMPscript but rarely used well. The Data Extension write that silently writes nothing. The AttributeValue call that returns empty string. Patterns to catch what the runtime hides.

Read →

Product · Jul 2026 · 4 min read

Cloud Pages as internal tools, quietly.

Cloud Pages get pitched as landing pages. The undersold pattern is using them for small internal surfaces the ops team can visit. What good looks like.

Read →

Product · Jul 2026 · 4 min read

Interactive WhatsApp: buttons, lists, carousels.

Meta's rich content types each have a job. Quick replies for a decision. Lists for a menu. Carousels for a choice. What actually converts, and what makes each one feel like an IVR menu instead of a conversation.

Read →

Engineering · Jul 2026 · 4 min read

LookupOrderedRows without the top N trap.

The function reads rows into AMPscript memory. Past a certain row count the render slows, then the send fails. Safer shapes when the data is bigger than the function was designed for.

Read →

Engineering · Jun 2026 · 4 min read

AMPscript or SSJS: an honest decision tree.

The two languages overlap enough to make the choice feel arbitrary. It is not. Here is a decision tree that survives contact with production.

Read →

Engineering · Jun 2026 · 5 min read

AMPscript is a language. Treat it like one.

AMPscript has been dismissed as a template language for a decade. That framing is a mistake with consequences. Here is what treating it like a language actually looks like.

Read →

Engineering · Jun 2026 · 4 min read

Designing around the sixty second Gmail cache.

Gmail refetches dynamic endpoints roughly every minute. What that does to product grids, inventory badges and live pricing, and how to design a data shape that survives it.

Read →

Strategy · May 2026 · 4 min read

Session messages beat templates for anything that matters.

The customer service window is the only surface on WhatsApp where actual personalization lives. Treating it as a fallback for templates is a category mistake.

Read →

Engineering · May 2026 · 4 min read

Getting an AMP sender approved by Gmail.

The Gmail registration form is a workflow, not a formality. What clean sending discipline actually looks like from the reviewer's side.

Read →

Product · May 2026 · 4 min read

AMP4Email in 2026: what actually renders where.

Seven years in, the format has settled into a stable but strange shape. It renders in some inboxes. It vanishes in others. The honest coverage math is where every project decision starts.

Read →

Strategy · Apr 2026 · 4 min read

WhatsApp is the new email. Almost.

Three billion users. Ninety-five percent open rates. It sounds like email done right. Here is where the pitch stops and the reality begins.

Read →

Product · Feb 2026 · 4 min read

Interactive email, finally worth building.

AMP for Email is seven years old. For most of that time, the format was fine and the tools were the problem. That changed.

Read →