
Pomodoro App: Solo Uni Project, Grade 1.3
The Assignment
For the ENIA module in my third semester, we were tasked with building a desktop application using Java and JavaFX. The project was solo — no team to rely on — and the grading criteria emphasized both functionality and code quality.
I chose to build a Pomodoro timer. The Pomodoro Technique — 25 minutes of focused work followed by 5-minute breaks — is something I actually use. Building a tool I'd use myself kept motivation high throughout the project.
Why JavaFX
JavaFX isn't the trendiest UI framework, but it's remarkably capable. Scene Builder provides visual layout editing, CSS handles styling, and FXML separates structure from logic. For a desktop application with moderate complexity, it's a solid choice.
The development environment required some setup, especially on Apple Silicon. Java 21 with Corretto and JavaFX 23 took some configuration, but once running, the development experience was smooth. VSCode with the Java extension handled everything from compilation to debugging.
Building the Timer
The core functionality seems simple: count down from 25 minutes, notify the user, then count down from 5 minutes. But the details matter. What happens if the user minimizes the window? How do notifications work across different operating systems? How do you handle pause and resume without drift?
I implemented the timer using Java's animation framework rather than raw threads. This kept the UI responsive and the timing accurate. The display updates every second, but the underlying timer tracks milliseconds for precision.
User Experience Decisions
A Pomodoro timer should be unobtrusive when running but impossible to miss when it's time for a break. I designed the UI to be minimal during countdown — just the timer and basic controls — but prominent when transitioning between states.
Sound notifications work alongside visual ones. The completion sound is distinct but not jarring. Users can customize the work and break durations, and their preferences persist between sessions.
The Result
The project earned a 1.3 — one of the best grades in the course. More importantly, I built something I actually use. Every time I start a focused work session, I use my own Pomodoro timer.
The project demonstrated that unfamiliar technologies become familiar through use. Java wasn't in my comfort zone, but completing this project expanded that zone. That's the real value of academic projects: they push you into territory you wouldn't explore on your own.