Writing

Blog

Notes on building products and the systems behind them.

Putting an LLM in the reply loop

Deterministic checks before the model, labels that can't slide backwards, and an autonomous reply agent that is allowed to ask.

Read the post

Pacing cold email at the moment of sending

Why send capacity is reserved right before the provider call, how campaigns share a mailbox fairly, and why replies, bounces, and unsubscribes always win.

Read the post

Lanes, fan-out, and the job ID that swallowed our retries

Splitting one BullMQ worker into lanes, fanning work out per unit, and the deduplication bug that silently dropped re-scheduled jobs.

Read the post

How CardLift keeps card details on your device

A look at local card storage, passkey authentication, and the encryption keys that connect them.

Read the post