NextpatchJava ships a new version every six months. I kept telling myself I'd read the release notes...
Java ships a new version every six months. I kept telling myself I'd read the release notes "someday".
Then I found myself in an interview, staring at a switch with pattern matching, and realised I was three versions behind and didn't even know it.
So I built NextPatch.
A tiny daily habit for working Java developers:
Think language-learning app, but for not going rusty as a developer.
Since Java 22 you can mark a variable you have to declare but won't use with a single character. Fill in the blank:
int total = 0;
for (Order ❓ : orders) {
total++;
}
Answer
_, the unnamed variable (JEP 456). It says "I need the variable, not its value". It works in loops, in catch (Exception _), in lambdas and in record patterns.
There are three of these on the landing page that you can solve without an account.
What's included
A few things I learned building it
Since this is dev.to, here's the part under the hood:
No code sandbox, on purpose. Running untrusted user code safely is a whole product in itself. Instead, every challenge is graded deterministically on the server: token matching, string validation or option checking. The solution is never sent to the client. It keeps grading instant and the infrastructure tiny.
Eating my own dog food on the stack. It runs on Java 25 + Spring Boot 4 with virtual threads turned on (spring.threads.virtual.enabled=true). The workload is almost all I/O, which is exactly where Loom pays off.
Boring architecture, happily. It's a Thymeleaf monolith with server-side sessions (form login + Google OIDC + remember-me), plus a small JSON API called with fetch. No SPA, no JWT for auth. For a solo project that has been a real productivity win.
It runs on a Raspberry Pi. Production sits on a Pi at home, published through a Cloudflare Tunnel. No open ports and no cloud bill so far.
i18n of content is harder than i18n of UI. Translating a challenge must change the words and never its shape: same number of options, same order, same blanks. Otherwise it grades wrong without throwing any error. Lesson learned.
It's in beta
Things may break. If you try it, I'd genuinely love feedback:
--> NextPatch, free and all features included.