Deep work, tracked and protected.
Pomodoro that adapts. Website blocker, deep-work heatmap, calendar write-back. $29/year flat.
Knowledge workers lose hours per day to context switching. Research from the University of California suggests it takes 23 minutes to re-enter deep focus after an interruption. The average knowledge worker is interrupted every 3 minutes, half of which is self-inflicted (tabs, Slack, Twitter). The Pomodoro technique works — but the tools built around it either look like 2012 Android apps or charge premium prices for analytics a spreadsheet could do.
Free Pomodoro timers are everywhere, but they stop at "timer that rings." They don't block websites. They don't integrate with calendars. They don't show a heatmap of when the user is actually productive. They don't adapt session lengths to the user's proven rhythm. The upgrade path forces users into $9–$15/mo subscription apps (Forest Premium, Flow Pro, Sessions) that bundle features most people won't use.
The wedge is a clean, indie-priced timer with the three features casual users actually want as paid upgrades: website blocking during sessions, streak and heatmap analytics, and calendar write-back so "I did 4 hours of deep work Tuesday" shows up next to meetings. Flat annual pricing beats subscription fatigue. Build once, ship a PWA + browser extension, own the category below the $9/mo price floor.
A PWA Pomodoro timer paired with a lightweight browser extension. User picks a task, sets a session (default 25 min work / 5 min break, adaptive after 2 weeks of data), starts the timer. The extension blocks a user-configurable distraction list during work intervals. Ambient sound library plays optional focus audio. At session end, the completed block is logged and optionally written to Google Calendar as a "Deep Work: {task}" event. Weekly email summarizes total focused hours, best day, longest streak.
Pick task, start
25/5 default; adaptive to your patterns
Deep work protected
Extension blocks distractions; ambient sound on
Log + review
Heatmap, streaks, Google Calendar write-back
The adaptive-session feature is the long-term moat. After two weeks of data, the app computes each user's average productive session length (measured by self-reported focus quality + session-completion rate) and suggests tuned intervals. A user who reliably focuses for 48 minutes gets prompted "try 50/10 this week." That one insight turns a free timer into a $29/year upgrade because it feels personalized.
The brain training and focus app market is projected to reach $130B by 2035 (multiple market reports, Ideabrowser #4076 synthesis). The productivity-app segment inside that is fragmented: Forest has 10M+ downloads on App Store, Flow has 1M+, Be Focused has 500K+. Distribution is app-store discovery plus productivity YouTubers; the TAM includes knowledge workers, students, and creators.
Stage: mature but polarized. Free tier is saturated with minimum-viable timers. Premium tier ($9–$15/mo) is crowded by Forest, Flow, Sessions, Session, Focus Keeper Pro. The open lane is the mid-tier — $29/year flat with serious analytics + blocker + calendar integration, priced to feel like a one-time purchase with ongoing updates. That SKU is under-served.
Four tiers. Free apps (Focus Keeper, Be Focused free) cap at basic timer. One-time-purchase apps (Forest $3.99) lock advanced features. Subscription apps (Flow, Sessions) bundle analytics + blocker at $9–$15/mo. Toggl Track does time tracking but not focus. Your slot: flat $29/year with the three paid features unbundled.
Category leader on mobile, 10M+ downloads, gamified tree-planting metaphor. Upsells to "Forest Pro" ($3.99 one-time) + real tree-planting partnership. Mobile-first, weak desktop/web. No true analytics heatmap.
$3.99 one-time (mobile) + in-app purchases
Mac-first focus app with website blocking, strict mode, session stats. Charges subscription for basic features most users consider table stakes.
$9.99/mo Pro, $79/year Lifetime
Two different products, both mid-tier. Sessions ($4–$8/mo) adds meeting integration; Session by Philippe Lehoux focuses on minimal aesthetic. Neither has a browser extension or calendar write-back.
Sessions $4–$8/mo; Session $4.99 lifetime
Toggl is billable-hours tracking, not focus. Focus Keeper free tier gives timer only. Neither targets the deep-work-with-analytics use case directly.
Toggl $9–$20/user/mo; Focus Keeper free w/ ads
Flat $29/year, PWA + Chrome/Firefox extension, three hero features nobody bundles: website blocker during sessions, adaptive interval suggestions after 14 days of data, Google Calendar write-back. Tagline: "A Pomodoro that learns your rhythm, priced like a Notion template."
Flat annual pricing. Free tier earns the discovery and "tell a friend" engine. Pro covers individuals. Team handles small co-working groups and study squads (a growing Gen Z niche). Annual-billed avoids subscription fatigue; lifetime tier captures one-time-purchase preferences. Costs are tiny — Supabase + Vercel at indie scale runs <$0.10/user/month.
$0
Basic timer, 7-day history, 1 ambient sound, manual intervals only
$29/year
Website blocker, adaptive intervals, full analytics heatmap, calendar write-back, unlimited history, 15 ambient tracks
$79
All Pro features forever, early access to new features, priority support
Infra cost/user
~$0.05/mo
Gross margin Pro
~97%
Target CAC
$5–$12
Free → Pro conv.
4–7%
ARR path: 1K Pro + 100 Lifetime = $36.9K ARR. 5K Pro + 500 Lifetime = $184.5K ARR. At 20K Pro + 2K Lifetime the business is at $738K ARR — achievable via YouTube partnership and productivity-community distribution within 24 months. Lifetime revenue amortized over 3 years; effectively ~$26/year equivalent.
PWA + browser extension + minimal backend. No fancy infra — this is a local-first app with cloud sync. Service worker keeps the timer ticking when the tab backgrounds. Browser extension does the blocking.
App Router; next-pwa for install-to-homescreen. Service worker with periodic-sync API keeps timer accurate when tab is backgrounded. Tailwind + Geist font for the minimal aesthetic.
declarativeNetRequest rules block user-configured domains during active sessions. Extension communicates with PWA via chrome.runtime.sendMessage; session start/stop events flip block rules.
Auth (magic link), sessions table, blocklist table. IndexedDB caches last 30 days locally for instant load; Supabase syncs in background. Free tier covers 10K users easily.
OAuth with calendar.events scope. On session completion, POST an event to primary calendar with title, duration, and task as description. User opts in per-calendar.
Licensed ambient sound library from Epidemic Sound or indie creators; served from CDN. Web Audio API for smooth looping and volume ducking on notification.
Stripe Checkout for annual/lifetime; Billing for renewals. Resend for weekly digest email with heatmap image (generated server-side via satori + react-email).
Copy and paste these into Claude, Cursor, or your favorite AI tool.
Create a Next.js 14 App Router PWA for a focus timer. TypeScript + Tailwind + next-pwa. Features: - / (marketing + demo timer, no auth) - /app (authed: active timer, task input, history, settings) - /app/history (heatmap calendar, streak counter, weekly chart) - /app/blocklist (managed list of distraction domains) - /settings (intervals, sounds, calendar connection) Timer logic: - React state holds endTimestamp; component renders remaining time every 1000ms via setInterval cleared on unmount. - Service worker registers a periodic-sync listener AND an alarms API fallback. When tab is backgrounded, SW posts a message with remaining ms; main thread restores on resume. - On session end: play a chime (Web Audio), show notification via Notifications API, increment DB session counter. Schema (Supabase): - users(id, email, plan ENUM[free,pro,lifetime], stripe_customer_id) - sessions(id, user_id, started_at, ended_at, duration_sec, task, quality_rating 1-5 optional, completed bool) - blocked_domains(id, user_id, domain) - user_preferences(id, user_id, default_work_min, default_break_min, adaptive_enabled, ambient_track, google_calendar_connected bool, google_refresh_token_encrypted) IndexedDB mirrors last 30 days of sessions for offline; sync on reconnect.
Build a Manifest V3 Chrome/Firefox extension that blocks user-configured domains during active focus sessions.
manifest.json:
{
"manifest_version": 3,
"name": "Focus Shield",
"version": "1.0",
"permissions": ["storage","declarativeNetRequest","alarms"],
"host_permissions": ["
Implement two Pro-tier features: adaptive interval suggestions and Google Calendar write-back. Adaptive intervals: 1. After user accumulates 14+ completed sessions, compute: - avg_completion_duration = average ended_at - started_at across last 30 completed sessions - optimal_work_min = round to nearest 5, clamp [15, 90] - suggest if > current default_work_min + 10 OR < - 10 2. Show banner on /app: "Your focused sessions average 47 minutes. Switch to 50/10?" with [Accept] [Dismiss for 30 days]. 3. On accept, update user_preferences.default_work_min. 4. Track acceptance rate as a product metric; re-prompt quarterly. Google Calendar write-back: 1. /api/calendar/connect initiates OAuth with scopes ['https://www.googleapis.com/auth/calendar.events']. 2. Store refresh_token encrypted in user_preferences.google_refresh_token_encrypted (Supabase Vault). 3. On session completion (where completed=true AND user_preferences.google_calendar_connected): - Refresh access token if needed. - POST to https://www.googleapis.com/calendar/v3/calendars/primary/events: { summary: `Deep Work: ${task || 'Focus Session'}`, description: 'Logged by Focus Timer', start: {dateTime: started_at}, end: {dateTime: ended_at}, transparency: 'transparent' } 4. User can toggle per-session write-back with a small checkbox. Default on once connected. Weekly digest email (Sundays 9pm user timezone): - Total focused hours, longest streak, best day, best task, week-over-week delta. - Render heatmap as SVG via satori, convert to PNG, attach to Resend email.
Forest/Flow pricing and user counts referenced from public product pages; verify before marketing claims.
Book a consult and let's turn this idea into your MVP.
Book a Consult (opens in new tab)