Home

Writing

AI engineering notes from shipped work.

Benchmarks, implementation notes, and security boundaries from building with large language models, retrieval, MCP, and production AI systems.

when an API test fails, find the boundary first

A non-2xx response does not identify the fault; classify the test driver, request contract, application, provider, and environment before you patch the API.

api · backend · testing · nestjs

August 29, 2026 (1w ago)

check model compatibility before tuning VRAM

A local model can fit in VRAM and still fail before loading when the runtime does not support its file architecture.

local-ai · gguf · model-evaluation · cuda

August 25, 2026 (1w ago)

voice activity detection belongs in the turn-taking protocol

A browser voice interface needs separate boundaries for detected speech, committed text, quiet time, and model interruption.

speech · browser-ai · vad

August 24, 2026 (1w ago)

Why a passing Vercel build is not deployment proof

A deployment gate for Node ESM functions, server-sent events, browser roles, and storage that disappears between serverless invocations.

vercel · serverless · typescript · testing · observability

August 18, 2026 (2w ago)

Why an AI workflow needs an evidence ledger

A PostgreSQL-backed execution model that pins workflow versions, records side effects, and keeps human review and release evidence auditable.

ai systems · workflows · postgresql · governance · reliability

August 4, 2026 (1mo ago)

Running OpenRouter coding models through Claude Code

How I routed Claude Code through OpenRouter, selected coding models, and made the setup practical on Windows.

openrouter · claude-code · coding-agents · windows

July 26, 2026 (1mo ago)

Learning WebGL through a fragment shader

What I learned from treating the canvas as a programmable surface instead of a place to draw DOM-like objects.

webgl · glsl · shaders · frontend

July 25, 2026 (1mo ago)

How a language model chooses its next token

Trace next-token generation from transformer concepts to a small word model that runs on the browser CPU.

llm · attention · webgpu · shaders

July 19, 2026 (1mo ago)

Review MCP servers for tool boundaries and credential risks

A practical MCP server review method based on protocol boundaries, authority, schemas, credentials, and safe defaults.

mcp · security · agents · backend

July 11, 2026 (1mo ago)

Set up Stripe subscriptions in a Next.js SaaS app

A practical Stripe subscription design that uses Checkout, webhooks, the customer portal, and a small local cache.

stripe · payments · nextjs · saas

April 19, 2026 (4mo ago)

Gemma 4 moves agent workflows onto edge devices

What Google's Gemma 4 and LiteRT-LM release means for tool-using agents on phones, laptops, browsers, and small edge devices.

edge ai · gemma · local models · agents

April 2, 2026 (5mo ago)

Qwen3.5-9B on an RTX 4060: Ollama vs. llama.cpp

A local Qwen3.5-9B benchmark on an RTX 4060 laptop, with measured throughput from Ollama and llama.cpp.

local ai · benchmarking · llama.cpp · ollama

March 31, 2026 (5mo ago)

Why this blog exists

Practical engineering notes about AI, backend systems, product decisions, and the work behind the final result.

writing · engineering

June 18, 2024 (2y ago)