✦Overview
Pomodoro is a personal productivity app I built during the mobile development module at school. The method itself is simple: work in focused intervals, rest between them, repeat. But the motivation behind this one was personal.
I tend to work a lot and enjoy it, but that also means I forget to step back. I wanted something clean and native-feeling that would keep me structured without getting in the way. So before this was a school project, it was something I was building for myself.
✦Designed before it was coded
Before writing a line of Flutter, I designed the full UI in Figma. Going through that process first made the implementation straightforward: layouts, transitions, and component boundaries were already decided.
The app uses uses-material-design: false throughout. Every element follows the Cupertino aesthetic, so it feels at home on iOS and macOS without any platform compromise.
✦Beyond the brief
The assignment had a defined scope. I finished it and kept going.
- Live Activities: the timer runs on the Lock Screen and in the Dynamic Island via the
live_activitiespackage, so you always know where you are in a session without opening the app - Local notifications: session end and break end are signaled even when the app is in the background
- Custom audio: a dedicated sound file plays at each transition, managed through
audioplayers - Session history: every completed session is persisted locally via
localstorageso you can look back at your work patterns
✦Architecture
The project is structured in clean layers: models/ for data shapes, services/ for business logic, routes/ for navigation, interface/ for screens, and widgets/ for reusable components. State flows through Provider with RxDart streams where reactivity is needed.
✦Not on the store
The app was built as a student project and was never submitted to the App Store. Publishing requires meeting Apple's review criteria in full and paying the annual developer fee. Neither made sense at this stage.
The code is open-source. The vision is to eventually connect it with a task management layer, closer to what Odoo does for teams, but as a personal, offline-first tool.
✦What I took away
Mobile development clicked for me once I stopped treating it as a different discipline and started thinking about it the same way I think about any product: understand the user (in this case, myself), design before you build, and go further than the brief asks.
