Building this site in public
BuildCV: I shipped a free CV builder — no account, no paywall, no server-side data
I got annoyed at 'free' CV builders that paywall the download button, so I built one that is actually free: a guided wizard with a live A4 preview, French and English, and a PDF that never touches my server. Here is the product thinking, the architecture, and the near-outage a code review caught.
21 Jul 2026
·
6 min read
Spring and Java mechanics
Aggregate Roots in Spring Data JDBC: The Delete-Boundary Rule
Spring Data JDBC takes DDD aggregates literally. Here's a one-question rule for drawing aggregate boundaries — and how to avoid N+1 once you have them, verified against the real generated SQL.
5 Jul 2026
·
6 min read
The Model Context Protocol, hands on
Building an MCP Tool with Spring Boot AI
How I turned Apache Kafka into a set of tools an AI client can call — using Spring AI's MCP server, a handful of @Tool methods, and one ugly-but-necessary servlet filter.
28 Jun 2026
·
5 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
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
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