-
-
Flows line up tasks and breaks like a day planner, and bigger tasks look bigger.
-
When time's up, say done, almost, or keep going, and Roma learns your real time.
-
Roma lives on your Home and wears whatever you buy with your pips.
-
Meet Roma, a little tomato timer that learns how long things really take you.
-
Roma ripens from green to red on the windowsill while you focus.
-
Roma Plus, powered by RevenueCat, with a 7 day free trial.
Inspiration
I always plan my day like everything takes the time I think it takes. Laundry is "30 minutes." An essay is "an hour." Then the day ends, half the list is still there, and I feel like I failed.
I realized the problem wasn't me. It was my guesses. Most timers only count down, and they never tell you the truth afterwards. I wanted something that quietly learns how long things really take me, so my plans could finally fit my day. And I wanted it to be kind about it. No streaks, no red warnings, no guilt.
That became Roma, a little tomato who sits on your windowsill while you work.
What it does
- Plan with a guess. Pick a tag like Studying, Chores or Work (or make your own), and Roma fills in your usual time.
- Focus while Roma ripens. Roma turns from green to orange to red as the timer runs.
- Keep counting past zero. When time's up, Roma rings and asks Yes, done, Almost, or Keep going. If you stay, the clock counts up, so Roma learns your real time.
- Kind away tracking. Leave the app and Roma becomes a couch potato. The time is noted honestly, with no scolding.
- Flows. Line up tasks and breaks back to back, shown like a day planner where bigger tasks look bigger.
- Pips and a closet. Every 5 minutes of focus earns a pip, and pips buy Roma outfits like a scarf, a daisy and a balloon.
- A garden. Every session of 10 minutes or more grows a tomato.
Over time Roma shows you the gap between what you planned and what really happened. For me it turned out to be roughly
$$\text{real time} \approx \text{my guess} \times 1.4$$
which explained a lot.
How I built it
- SwiftUI and SwiftData for a fully native iOS app. Everything stays on the phone, with no accounts and no tracking.
- RevenueCat for Roma Plus, with one entitlement, one offering, and a monthly subscription with a 7 day free trial.
- WidgetKit and a Live Activity so the timer shows on the lock screen and Dynamic Island.
- Sounds made in code. The ambient rain, café and garden sounds are generated with AVAudioEngine, and the ring sounds were synthesized too, so the app ships no stock audio.
- Art made in code, for now. I'm mostly a coder, but I also draw. I sketched concepts for Roma in pencil on my iPad in Procreate, but finishing them by hand would have taken longer than the hackathon allowed. So for version 1, Roma and the illustrations are built with SwiftUI shapes and simple vector art based on those ideas. That also made every outfit and mood quick to add. My hand-drawn versions are coming in a future update.
Challenges
- My Mac. I'm on an Intel Mac, and the newest Xcode needs Apple silicon, so I had to find the right version just to get started.
- The overtime logic. Counting up past zero sounds simple, but deciding what happens when you leave the app, come back, lock your phone, or forget it running for hours took a lot of careful rules. The clock only counts overtime while you're actually there, and it stops by itself at 3 hours.
- My first App Store submission. Agreements, tax forms, bank details, subscription groups, screenshots in exact sizes, and then an App Review request for more information that sent me back to record a full walkthrough. I learned the whole pipeline in a few days.
- Making it kind. It's surprisingly hard to write an app that tracks your time without ever sounding disappointed in you.
What I learned
- How in-app purchases really work end to end, from App Store Connect to RevenueCat to the paywall.
- That small feedback matters. A button that gently sinks when you tap it, a little dance from Roma, a soft ring. That's what makes an app feel alive.
- That honest data can be gentle. Showing someone the truth about their time can feel helpful instead of judgmental.
What's next
- Smarter suggestions for what fits in the time you have.
- More outfits for Roma, and maybe a few friends for the garden.
Built With
- activitykit
- app-store-connect
- avfoundation
- claude
- ios
- revenuecat
- storekit
- swift
- swiftdata
- swiftui
- usernotifications
- widgetkit
- xcode
- xcodegen
Log in or sign up for Devpost to join the conversation.