🕐 Reading time: 4 minutes

A little meta moment: this pill is about the very project it's part of. The Pills finally have a home – javapills.com is online (well, you're inside it!) and gathers all the articles published so far.

I built, documented and deployed this little project in some forty hours, alongside Claude Code (the Claude Opus 4.7 model), Anthropic's terminal agent (Pro plan). On "vibe coding" – a term that's become unavoidable by now – I'll come back later: first let's start with the concrete stuff.

There's a small luxury in having a personal space besides LinkedIn: a place where you can treat yourself every now and then to a longer article, less of a "pill" and less compressed by the limits of a post. This is the first, so grab a coffee. ☕

📌 The stack: simple by choice, not out of laziness

At the base there's Spring WebFlux, the framework that gave life to this rubric, with Thymeleaf for rendering the pages. I wanted something simple, where Java was in charge: after all, I was born a backend dev. The articles are static Markdown files (CommonMark), loaded into memory at startup: no database. With a couple dozen articles it wasn't needed, and I didn't want to add complexity. Keeping everything in memory also gives, by the way, a nice response speed. Underneath, we have a clean layered architecture: lean controllers → a rendering layer → a logic layer → an article loader; all of it resting on my reactive-toolkit, a library for structured logging, error handling and more...! (a library that I hope, one day, to be able to make open source).

The temptation to slip a DB in there remains, and it would be useful for loading new articles without redeploying. But with a frequency of one article a month (if that), dictated more by "having something to say" than by a calendar, I wrote myself a little bash deploy script and for now I've left it at that. If one day the number of articles grows, and I hope it does, I'll add it as a future enhancement.

📌 Quality, security and going live

On quality, no compromises: JaCoCo gate at 85% line and 80% branch, but the real line coverage runs around a crazy 98%. On why branch coverage matters more than the total percentage, I talked about it in pill #23. On the security front, a SecurityHeadersFilter adds CSP, X-Frame-Options, X-Content-Type-Options & co. on every response. For going live I chose Fly.io, which made the deploy really light and immediate – Docker container, build and release done by hand from my PC (no CI, for now) – and in front of it I put the javapills.com domain with Cloudflare for CDN, TLS, forced HTTPS and HSTS.

📌 The details, even though I come from the backend

The interface is deliberately essential – also because, let's be honest, front-end isn't exactly my trade 😅 – but "essential" doesn't mean "neglected":

In short: home, search and a section about me – the essentials, indeed. Plus a small JSON REST API for the catalogue, because certain backend-dev habits never die!

📌 What vibe coding is (and isn't) and its numbers (more or less)

Let's get to the how. Vibe coding doesn't mean switching off your brain and accepting whatever comes out of the model. It means shifting your role: less time typing, more time deciding and reviewing. And as I'd already told in pill #21, the final result never comes from a brilliant, snappy prompt, but from a great many micro-iterations with the AI: it's a slightly slower pace, but one that gives you back control of the process.

An honest note: I don't have a precise count of the tokens used. With a subscription like Claude Pro, usage is measured as a percentage of the limits – session and week – not in tokens, and that number simply isn't exposed. What I can say is that, even while "pushing" quite hard across several sessions, I never exceeded the plan's limits: the ceiling is probably hit when you unleash agents that burn tokens massively, not by guiding the process step by step as I did. Because yes, I wanted to validate every output: the iteration is slower, but it gives you more control and, surprise surprise, it also makes you learn more, a bit of Thymeleaf here, a bit of Cloudflare there. As I'd told in pill #9, I delegated well-defined problems to the AI without losing control of the design decisions.

📌 After forty hours, a few conclusions

First of all, a space that's truly mine – easy to consult, to archive and, why not, to use as a business card. Then a thought: vibe coding isn't magic and doesn't replace the craft. The AI writes at an absurd speed, but the decisions that make the difference – how to structure the code, where to stop, what matters for security, which details to take care of – remain, for now, human. But it's precisely that "for now" that's the point: given the right context, the AI is already capable of analyses that often surpass those of the average individual. The more this technology spreads, the more real seniority will shift: less towards writing the solution, more towards knowing how to validate it and how to guide it according to your own style.

See you at the next pill! ☕