🕐 Reading time: 3 minutes

In pill #24 I told the story of how this site was born: some forty hours of «vibe coding» with Claude Code, and on 26 May javapills.com was online, version 0.4.0. There I called it "essential": home, search and an "about me" page. On 10 June I released version 1.0.0 – and of "essential", looking at the Changelog, little remains. This pill is a sort of second episode: what changed in two weeks and how you work when the enhancements are built through intense evening sessions with the AI at your side.

📌 The promised enhancement: the database arrives

In #24 I wrote: «the temptation to slip a DB in there remains [...]». It didn't last long: from 1.0.0 the articles live on a PostgreSQL database provided as a managed service by Fly.io, the same platform the site runs on: one command (fly postgres attach) and the app finds its instance connected, without me having to handle backups, updates or machines by hand. Publishing a new pill no longer requires a redeploy, an upload via the admin API is enough – protected by a key, of course. The layered architecture paid off here too: article loading was already isolated in a single cohesive class (Single Responsibility Principle), so there was only one point to abstract. I just had to extract an interface from it (Dependency Inversion Principle) and provide two implementations: the database loader, alongside the classpath one. That way I could add the new loading strategy without modifying the rest of the application (Open/Closed Principle) – for its consumers the change was completely transparent.

📌 Reading has become more comfortable

The most visible part is the reading experience, which grew one release at a time:

📌 The archive is navigated, not just scrolled

With 25 pills under my belt, the paginated list wasn't enough anymore. Now every tag is a link that opens all the related articles, and every season has its own dedicated page with the pills in sequence. Under the hood it's all pre-computed in a cache at startup: no grouping per request. The idea remains «keep everything in memory»: after all it's still a personal blog and the weight of the articles is in the order of a few KB.

On the side: the Changelog page reachable from the version number in the header, a serious pass of SEO – structured data and sitemap – and a long series of refinements for smartphones, because that's where a good part of the visits comes (will come?) from.

📌 The About is reborn in Vue

Under the LinkedIn post of the previous article, a former colleague threw out a «come on, dive into FE 😄», telling me he'd switched to Vue after years of React: «nice and simple». My reply: «with the excuse of the little site I could dig a bit into FE! but I don't see myself making the jump entirely and cursing while trying to centre a div 🤣». A week later, I reimplemented the About page in Vue: interactive tabs, an animated stats counter, a filter on the skills. And on the same page came the Contact me section – which delivers an email straight to my domain – and the downloadable CV in a printable version (which reuses the same data as the About page).

📌 Six releases in fifteen days

The surprising number is tied to the release frequency: six releases in fifteen days, working only in spare moments. This is where vibe coding shows its best side: it's not just about writing code quickly, but about cutting down the cost of starting and finishing an enhancement. The friction between "it would be nice to have clickable tags" and "the tags are clickable in production" shrank to one or two evenings – review and tests included: even for a personal «little project» like this one my quality standards stay high (branch coverage gate >80%).

I've shortened the idea → production cycle so much that the real discipline, now, is resisting the temptation to add things just because they're cheap. With 1.0.0 I can say the project stops being a construction site and starts being, finally, a place. And now that publishing no longer requires a deploy... I've run out of excuses not to publish new articles!

See you at the next pill! (maybe I'll get back to writing something technical, who knows) ☕