Shipped · Product builder · Personal project · 2026

How I shipped a cross-platform Pomodoro before I could build native apps

Pomo started from an open-source web Pomodoro. I forked it into Android, macOS, and a PWA, and wired Notion tasks so focus sessions attach to real work, without platform-engineer experience.

  • Flutter
  • PWA
  • Notion
  • Android
  • macOS

Problem

I wanted a cross-platform Pomodoro (macOS, Android, PWA) tied to Notion tasks when I did not have the coding experience to ship native apps the usual way. Off-the-shelf timers were either single-platform or disconnected from my task list.

Metrics

  • One Flutter codebase for Android, macOS (menu bar + floating timer), and a web PWA
  • Notion task database plus hourly timeline so sessions log against real tasks, not a nameless clock
  • Webhook hooks for Home Assistant ambient light, kept from the upstream OSS timer

Decisions

  1. Start from recoskyler's open-source Pomo instead of writing a timer from scratch, then add platforms and Notion.
  2. Keep Notion writes behind a shared access code on the web PWA. Recruiters should not need my task database.
  3. Ship GitHub as the public CTA. Prod /focus/ is owner-gated; there is no ungated Vercel preview with mock data (unlike Health Hub).

Outcomes

  • Daily driver across Android, macOS, and the PWA: start a lap, pick a Notion task, log the hour.
  • Hourly tracker and activity tags sync between the PWA and the macOS app through the configured Notion timeline database.
  • Public artifact is the OSS repo. Live /focus/ stays on Rawshn private nav.

I wanted a cross-platform Pomodoro (macOS, Android, PWA) tied to Notion tasks when I did not have the coding experience to ship native apps the usual way. Pomo started from recoskyler’s open-source web timer (webhooks, themes, Home Assistant RGB). I forked it, added Android and macOS shells, and wired a Notion task database so a lap is not anonymous minutes.

Live demo: public GitHub (rawshn97/pomo). Prod /focus/ is access-gated for Notion (access code). There is no ungated Vercel preview with mock data, so hiring CTAs go to GitHub, not /focus/.

GitHub →

Public fork. No access code.

What I added

  • Platforms: Android, macOS (menu bar, floating timer, launch at login), and a web PWA served for me at /focus/.
  • Notion: task picker plus hourly timeline. Work sessions attach to tasks I already track.
  • Webhooks: still fire RGB payloads so Home Assistant can match the timer ring.

I do not publish install counts. The receipt is that I run it every workday, and the code is public.

← All projects