Pepinillo.
Productivity without ceremony.
Just what you use every day.
A productivity app that doesn't ask you to learn it. Open, pick the task, start the Pomodoro. That simple.
Today
Built with judgment, not a checklist.
Every module answers a real use case. No decorative features that look great in the demo and get in the way day-to-day.
Configurable Pomodoro
Adjust focus length, short and long breaks. Link a task to the session and focus on one thing.
Tasks with priority
List with priorities, due dates, and subtasks as checklists. Search and filter by state: pending, done, today, overdue.
Calendar view
Organize your tasks by date. Tap a day and see what you need to do. No friction, no nested menus.
Honest stats
Dashboard with real activity, averages, and focus hours. No gamification, no stressful streaks.
Timer + Stopwatch
When you don't need Pomodoro, use the configurable countdown or the stopwatch. Everything in one app.
Themes and personalization
Automatic light/dark, customizable colors. The Premium version unlocks extra themes and multi-device sync.
Decisions that mattered.
The problem
Productivity apps are full of features nobody uses. Nested menus, labels, gamification, day streaks. All so you open the app, not so you work. 70% of Pomodoro apps are abandoned in the first week because they ask for setup before letting you work.
The stack decision
Android: Kotlin + Jetpack Compose. Not Flutter, because I needed WorkManager for background timers, Room for local persistence, and Material You for native system integration. iOS: Swift + SwiftUI. Not React Native because Live Activities and Dynamic Island have no cross-platform equivalent.
Offline-first by necessity
Pepinillo works without internet. Your data lives in Room (Android) or SwiftData (iOS). No server, no sync, no login. This was a design decision: a productivity app should not depend on the network to function. The tradeoff: no cross-device sync in the free version.
Timers that survive the background
The hardest problem: a 25-minute Pomodoro cannot die when the user minimizes the app. On Android, WorkManager with Foreground Service keeps the timer alive. On iOS, it is a combination of Background Tasks plus the alarm sounds even when the app is closed. Both platforms require completely different logic.
Notifications that do not bother
Pomodoro notifications: only when a session ends. No push marketing, no "did you do your Pomodoro today?". On Android, WorkManager schedules the exact alarm. On iOS, UserNotifications with Critical Alerts for the timer. The difference: iOS requires explicit permission for Critical Alerts, Android does not.
iOS: Live Activities and Dynamic Island
On iOS 17+, the timer appears in Dynamic Island and Lock Screen via Live Activities. This requires WidgetKit, ActivityKit, and a completely different architecture from the normal timer. The tradeoff: more visibility for the user, more complexity for the developer. Only worth it if the timer is the core of the app.
Android: Material You and Wear OS
Android benefits from Material You: dynamic colors that adapt to the user wallpaper. Wear OS extends the timer to the watch — session control without taking out the phone. Jetpack Compose makes the UI adapt to small screens without duplicating code.
Performance and real metrics
Cold start: < 400ms on both platforms. Memory: < 30MB with active timer. Crash rate: < 0.5% (Firebase Crashlytics). Battery: < 2% per hour of active Pomodoro. These metrics are measured on real devices, not emulators.
What I learned
Less is more when every element has a purpose. The most-used app is the one you do not have to think about to open. Jetpack Compose let me iterate the design five times without rewriting logic. SwiftUI taught me that Apple platforms have strong opinions — and sometimes it is better to follow your own.
Try it today.
Free, no accounts, no annoying ads. Open and use.
Need something similar?
If you liked this app and want one for your industry or your idea, let's talk. I build things like this every day.