From NetBeans to Claude Code
I document the rapid evolution of tooling for my web app, with a focus on Java. I highlight how changes in “tooling” co-occurred with an evolution of my tech stack and the wider development environment.
That’s the opening scene: my coding environment as a solo Java web developer over the last 15 years (look Ma, no JetBrains!).
2010–2025: NetBeans all the way
- Code editor, refactoring, Git interface, debugger, Maven builds and executions: all from inside NetBeans
- Frontend: JSF + PrimeFaces
- Backend: Jakarta EE
- Microservices: none at first, then Javalin since 2022
- OS for dev: Windows
- OS for prod: Debian
- DevOps: PuTTY, WinSCP (and pushing to Git from NetBeans)
- AI-assisted coding: since 2023, copy-pasting code into ChatGPT and Gemini
Summer and Fall 2025: removing PrimeFaces, JSF, and Jakarta EE — htmx + Javalin all the way
This happened through a series of logical steps (the first ones are retraced in a previous post):
- I wanted to improve the UI of my app, but PrimeFaces makes CSS customization painful. What if I removed PrimeFaces and styled JSF components directly? ChatGPT would help a lot.
- But JSF components live in
.xhtmlfiles, which can’t be previewed in ChatGPT’s canvas. The constant back-and-forth-copy-pasting between NetBeans and ChatGPT, adapting XHTML to HTML and vice versa was a drag (and I did spend time doing it). - Do I really need JSF components at all, or could I just use native HTML with htmx to interact with Jakarta EE? Probably yes. Let’s go htmx + Alpine on the frontend.
- But if I don’t use JSF, do I still need Jakarta EE? Maybe Jakarta MVC would suffice? Let’s try the slimmer option.
- But wait: why keep Jakarta MVC at all? If it’s mainly for session management, does that justify an entire framework? I could learn via ChatGPT how to manage sessions directly in Javalin (CSRF and all).
- I ended up removing Jakarta EE entirely and using Javalin end-to-end for the backend.
November 2025: Cursor, the tipping point
At this stage, I was no longer relying on JSF or Jakarta EE: a break from 15 years of habits! I now depended heavily on copy-pasting code into ChatGPT or Gemini for advice, and for full rewrites from Jakarta EE logic to Javalin.
It became so impractical. I was zipping entire source folders just to give enough context to a conversational interface. It worked, but it was silly.
The obvious alternative: what if an AI tool could edit my source files directly on my machine, exploring the context as needed, without browser copy-paste gymnastics?
I had heard of Cursor, but the $20/month made me hesitate. This is a side project with zero revenue, and I was already paying:
- $20/month for Gemini
- $20/month for ChatGPT
- $50/month for server costs (yes, that’s a big server)
I tried free alternatives: aider and Zed, and found them disappointing. Eventually, I caved and added another $20/month for Cursor.
And… whoosh. Cursor is in a different category. You ask, it codes correctly, across the codebase. It just works. My recent re-architecture helped: htmx + Javalin is simple enough that models reason effectively over it.
My workflow changed radically in a few weeks:
- giving instructions to Cursor
- keeping NetBeans open to check compiler errors, stop microservices, rebuild and relaunch
- copy-pasting error traces into Cursor and asking it to “fix it”
- virtually no hand coding 😮
Yes, vibe coding. Did I miss manual coding? Not at all. I enjoy focusing on architecture and design decisions instead of minute implementation details.
But after a few weeks, another friction appeared: why manually copy error traces, or stop/restart services, if Cursor already has access to my machine?
December 2025: Claude Code
Yes, two tipping points in two months.
Just like for Cursor, I had seen very positive feedback about Claude Code. So I posted a question on Hacker News, asking whether Claude Code was meaningfully different or better than Cursor. The replies were few but very positive, even with this direct comparison with Cursor.
So during the Christmas break, I spent another $20/month on Claude Code 😭. After the change I had lived with Cursor and that I thought were huge already, it forced me to change 15 years of habits:
- From Windows to Linux for development. I couldn’t get Claude Code working on Windows (my fault probably, and I can’t install WSL on my machine), so I installed it on my Debian server and effectively moved my codebase there. Psychologically difficult: I’m not an IT-trained developer, and “Windows for dev, Linux via PuTTY for prod” already felt geeky enough*. Going full Linux felt risky. But it worked out.
- Not using NetBeans or an IDE to code I now connect over SSH with Cursor to connect to Claude on the server. Cursor can show and edit files, but I rarely do manual edits.
Claude Code delivers: with proper guidelines it can stop, rebuild, and restart my microservices; read logs and use them as context; navigate directories; grep, sed, push: whatever is needed. Contrary to Cursor it takes full advantage of having access to the file system and the command line. Friction is almost gone. I give instructions and they get executed. It writes tests (so does Cursor to be fair), which was a sore point in my practice.
January 2026: the third tipping point
(Sorry for the exaggeration but it really felt like it.)
A few days ago, I remembered ConnectBot, an Android SSH app I had installed years ago and never used. Could I “vibe code” on the go?
Yes. Easily.
I now do it for real. The setup was trivial. I can test results of my feature additions directly on the browser of my phone by visiting the dev version of nocodefunctions.com (ssl certificate warnings for now, add an exception). When something breaks, I report it to Claude, ask for a fix, and keep walking.
Money, money, money
Spending $80/month on AI-assisted coding is not sustainable for me:
- I downgraded ChatGPT from Plus ($20) to Go ($4), since I no longer use it for coding.
- I cancelled Cursor.
Next steps
As I wrote earlier, switching tooling (even shiny AI tooling) is initially a productivity drain.
Since this summer, I’ve been in near-constant tooling transition, eating up the few weekly hours I have for this project.
So I hope Google’s antigravity will flop and won’t justify another switch away from Claude Code :-) That way, I can finally focus on better UI, better UX, and new features for nocodefunctions.com.
* Thanks to Miguel Biraud for introducing me to PuTTY and Linux back then. Your help was transformative.
About Me
I’m an academic and independent web app developer. I created nocode functions, a point-and-click tool for exploring texts and networks. Try it out and let me know what you think. I’d love your feedback!
- Email: analysis@exploreyourdata.com
- Bluesky: @seinecle
- Blog: Read more articles on app development and data exploration.