The Model Context Protocol, hands on
Field notes: running my Fastmail inbox over MCP
Field notes from wiring Fastmail's MCP server into an AI client and pointing it at my real inbox — the search syntax worth memorising, plus the two gotchas (deferred schemas, and stage-vs-commit on calendar events) that cost me a few minutes.
25 Jun 2026
·
5 min read
Traces, Tempo and the LGTM stack
An intro to TraceQL: how to actually query traces in Grafana Tempo
TraceQL has a tiny surface area but a few sharp edges. Here is the mental model — span scopes, the spanset, aggregates, and structural operators — that makes it click and stops the silent zero-result queries.
24 Jun 2026
·
6 min read
Traces, Tempo and the LGTM stack
Manual tracing in Spring Boot with OpenTelemetry: @WithSpan, hand-built spans, and the traps in between
Wiring OpenTelemetry into Spring Boot 4 — the annotation way and the manual Tracer way — plus the context model that ties them together and the gotchas that cost me time (a silent @WithSpan, http/protobuf vs gRPC, and Docker's 'is a directory').
23 Jun 2026
·
6 min read
Security and privacy, in practice
Docker secrets: the delivery channel is the whole game
Five ways to hand a secret to a Docker container, ranked by who can read it back out. The source is just plumbing - environment variable vs file is what actually decides your exposure.
20 Jun 2026
·
5 min read
Working with Claude Code
I Turned My Website Into a Design System for Claude
I love how my site looks, so I taught Claude to build with it — extracting a live React app into a real design system on claude.ai/design, verified component by component.
19 Jun 2026
·
7 min read
Building this site in public
Verifying a domain in Google Search Console — the DNS TXT gotcha
A Domain property covers your apex and every subdomain from a single DNS TXT record — if you place it right. Here is the split-field mistake that fails the first verify, and the one command that catches it before you click.
17 Jun 2026
·
4 min read
Spring and Java mechanics
Spring MVC Won't Throw ConstraintViolationException (Here's What It Throws Instead)
Three validation mechanisms wear one annotation vocabulary in Spring MVC. Only one hands you a ConstraintViolationException — the rest give you Spring's own web exceptions. Here's the map, with live proof.
14 Jun 2026
·
5 min read
Building this site in public
llms.txt: robots.txt for the age of AI agents
AI agents are a new kind of reader, and they don't want your rendered HTML. llms.txt is a tiny Markdown convention that hands them a clean index instead. Here's what it is, why it matters now, and how I wired it into my own Spring Boot site, with one URL path serving two different files by host.
14 Jun 2026
·
5 min read
Building this site in public
One Spring Boot jar, two hosts: a gated SPA and a public blog
How I added a public, server-rendered blog to a login-gated CV site without a second app or container — one jar, two hostnames, and a host-dispatch filter.
14 Jun 2026
·
3 min read