13 posts
- 10 min read
LDAP Authentication Bypass: The Empty Password Bug That Logs Anyone In
An LDAP authentication bypass lets anyone log in when the bind is not done with the user's own credentials. Why empty-password logins work, and how to fix it.
security · ldap · authentication · spring
- 14 min read
HTTP QUERY (RFC 10008): The Method That Finally Fixes GET vs POST for Search
QUERY is now a published HTTP standard. Here is what it actually does, what happened when I sent real QUERY requests from curl and Java 21, what the Spring source says about handling one, and whether you should use it yet.
http · api-design · java · spring
- 15 min read
How to Fact-Check a Whole Paragraph with an AI Agent (Python + OpenRouter)
Build the second phase of Trinetra: an AI agent that extracts every claim from a paragraph, fact-checks each one, and renders a Claims Atlas. Plus the model-choice lesson that turned a wrong verdict into a right one.
AI Agents · Python · OpenRouter · Tavily
- 13 min read
RAG Basics in Spring AI: Retrieval, the Assembly Trap, and When Retrieval Lies
Building retrieval-augmented generation in Spring AI with Gemini and an in-memory vector store. The four dependencies nobody warns you about, the embedding auth gotcha, and a real example of similarity search ranking the wrong document first.
Java · Spring AI · Gemini · RAG
- 14 min read
Spring AI Provider Portability: Running One App on Gemini and OpenRouter
How portable is Spring AI really? I ran the same triager code against Gemini and OpenRouter to find out where the abstraction holds and where it leaks. Maven profiles, the ambiguous-bean trap, and the difference between two kinds of portability.
Java · Spring AI · Gemini · OpenRouter
- 14 min read
Spring AI Tool Calling: Let Gemini Query Your Database in Java
How to give Gemini real tools with Spring AI's @Tool annotation, backed by an actual database. Two tools, one model deciding which to call, and the schema-mismatch gotcha that shows up the moment you test it for real.
Java · Spring AI · Gemini · Tool Calling
- 17 min read
Build an AI Agent in Python from Scratch with Gemini and Tavily (2026)
Step-by-step Python tutorial: build a fact-checking AI agent in ~150 lines using Gemini 2.5 Flash function calling and the Tavily Search API. No LangChain, no LangGraph. Working code on GitHub.
Python · AI Agents · Gemini · Tavily
- 14 min read
Spring AI Structured Output: Typed Java Records from Gemini in One Line
How Spring AI's .entity() method turns Gemini's text responses into typed Java records. No manual JSON parsing, no schema by hand, no retry loops. Working code, real schema output, and the nested-record gotcha.
Java · Spring AI · Gemini · Structured Output
- 11 min read
Spring AI + Gemini Tutorial: Your First API Call in Java (2026)
Build a working Spring AI integration with Google's Gemini API in under 30 lines of Java. Free tier, no credit card, real gotchas included.
Java · Spring AI · Gemini · Spring Boot
- 10 min read
Custom Scalar Types in GraphQL Micronaut: A Working Guide
How to build custom scalar types (DateTime ISO 8601, numeric strings, decimals) in a Micronaut GraphQL application using Coercing and GraphQLDataFetchers — with working code.
GraphQL · Micronaut · Java · Backend
- 7 min read
Stop Prompting Claude Like It's Google
Most people type into Claude the same way they type into Google. Here's why that fails — and the mental shift that fixes it.
Claude · AI · Developer Tools · Productivity
- 7 min read
Why I Switched from Create React App to Next.js
After years of CRA, I finally made the jump. Here's what I learned, what I missed, and why I'm not going back.
Next.js · React · Developer Experience
- 2 min read
The Underrated Power of Reading Time on Your Blog
A tiny UX detail that builds trust with readers before they've read a single word.
UX · Blogging · Writing