Building agents on the JVM with Embabel
·
Part 1
One Goal Too Many: Learning Embabel's Planner the Hard Way
My first afternoon with Embabel, the JVM agent framework. I added one action too many, the planner quietly stopped early, and a cryptic get(...) must not be null taught me how GOAP, goals, and AgentInvocation actually fit together.
24 Jul 2026
·
8 min read
Learning MongoDB
·
Part 1
Learning MongoDB, one document at a time
Part one of a series: a Spring Boot 4 playground, the embed-vs-reference call that replaces schema normalization, and the Decimal128 default that would have quietly corrupted every price I stored.
15 Jul 2026
·
6 min read
Shipping an AI feature into my own product
·
Part 3
Adding a job description match to my AI Concierge
I added job-description matching to the AI concierge on my career site. It shipped with no new bean, no new table, and no migration — because the leverage was in a seam I'd already built. A design note on shared streaming cores, streamable structured output, and treating a pasted JD as hostile.
13 Jul 2026
·
11 min read
Running the box: Docker, Linux, the JVM
Where does app.jar find its dependencies? The JVM rule hiding in your Dockerfile
Spring Boot's layered jar extraction splits your dependencies from your code for faster Docker rebuilds. But the mechanism that makes the pieces find each other at runtime isn't Spring at all — it's a JVM rule from 1998.
8 Jul 2026
·
5 min read
Shipping an AI feature into my own product
·
Part 1
Ask Zakaria: I bolted a grounded AI chat onto my CV site
Why my career site now answers questions out loud — the graceful-degradation bean, the SSE streaming, the atomic quota race, and the discoverability bug that had nothing to do with code.
2 Jul 2026
·
5 min read
Spring and Java mechanics
Spring Batch 6, Hands-On: A New Engine, a Real Operator, and Stops That Cross JVMs
A code-forward tour of Spring Batch 6 on Spring Boot 4 and Java 25 — the resourceless repository, the new ChunkOrientedStep engine, Spring Framework 7 retry, the CommandLineJobOperator, and how stop and recover actually work under the hood.
28 Jun 2026
·
9 min read
Spring and Java mechanics
Flyway on Spring Boot 4 and Java 25: a silent failure, and what it taught me about modular auto-config
Wiring Flyway into a Spring Boot 4.1 / Java 25 app with a Docker-Compose Postgres - including the Boot 4 auto-config modularization gotcha that makes a missing starter look exactly like a missing library.
28 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
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