Java · Spring · Thymeleaf
I build backends with Java and Spring.
I’m a software engineer working on backends with Java and Spring. This blog is where I write down what I learn along the way — the patterns that hold up, the places I trip, and the reasoning behind a technical choice.
Type to search — try java, spring boot, microservices
ReleaseFlow
Turn merged pull requests into human-reviewed release notes: rules before AI, one note per audience, and immutable once published.
Recent posts
showing 4 of 14-
ReleaseFlow: securing a multi-tenant app that takes webhooks from strangers
Part 3 of the ReleaseFlow series: tenant isolation on one PostgreSQL schema, webhooks trusted only after the HMAC matches, AES-256-GCM secrets bound to their owner, CSRF never disabled, and metrics that never reveal a tenant.
-
ReleaseFlow: AI suggests, people decide
Part 2 of the ReleaseFlow series: classification rules always beat the AI, every change costs one request, the database guarantees review, and a release note becomes immutable the moment it is published.
-
Building ReleaseFlow: from merged pull requests to release notes
Part 1 of the ReleaseFlow series: the release-note problem, why I chose a single-module modular monolith, building one vertical slice at a time, and using PostgreSQL itself as a durable queue.
-
Building ItemForge: an open-source custom item system for Minecraft in Java
The engineering story behind ItemForge: from YAML configuration to resource packs, a multi-version Paper strategy, and an AI layer designed to fail safely.