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 postPacing 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 postLanes, 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 postHow 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