Component Showcase

Mobile App In development

Your attention does not stop at the laptop lid. The mobile app is the third surface: an Android build that tracks where your phone time goes, carries the same shift with you, and settles it against the same day the browser and the desktop are writing to.

🚧 Nothing on this page is installable. The mobile app is in active development and has no public release. Cards are marked Built in app where the screen or service exists and runs in the current Android build, and Planned where it is specified but not yet written. The phone frames render the app's declared design language, which the shipped build has not fully adopted yet - it currently draws an older ad-hoc palette. Treat every frame as intent, not as a screenshot.

Component library

15 screens & services · 7 built · 8 planned

The mobile app inverts the extension's problem. In the browser Tabatha has to ask what you are doing, because a tab cannot tell it; on a phone the OS already knows, and the hard part is deciding what that means - forty minutes in a messaging app is either work or it is not, and only the shift you are on can say which. So the built half is almost entirely machinery: a native usage monitor, the categorizer ported from the desktop, and an offline-first sync stack that prefers your own network over the internet. The planned half is where the product actually becomes Tabatha rather than a screen-time report - above all the Focus Hub, which is the whole point and is not written yet.

clocked out
9:41▮▮▮ 82%
Thursday
Good morning
00:00:00
Not clocked in
Today
Top app
🏠Dashboard
⚙️Settings
clocked in
13:22▮▮▮ 61%
Thursday
Good afternoon
04:12:38
Since 09:02
Today
Messages38m
🏠Dashboard
⚙️Settings
🏠
Dashboard In development
The app's landing screen: a greeting that reads the clock, the shift timer ticking live, and the day's headline numbers. The button set is the state - Clock In alone when you are out, Break and Clock Out once you are in.
● Built in app · runs today
tabatha-mobile · src/screens/Dashboard/DashboardScreen.tsx
13:24▮▮▮ 61%
Settings
Account
Signed in with Flux
Permissions
Usage access Granted
Notification
Detailed style
🏠Dashboard
⚙️Settings
⚙️
Settings In development
Four groups: account, sync, permissions, and notification style. Usage access is the one that matters - without it the app is inert, so its state is surfaced as a granted/missing chip with a direct route to the system screen rather than buried in a help page.
● Built in app · runs today
tabatha-mobile · src/screens/Settings/SettingsScreen.tsx
Tabathanow
Clocked in · 4h 12m
Messages · 38m today
4:12
🔔
Persistent notification In development
A foreground-service notification that survives a swipe-away, with working Clock In / Out / Break / End Break actions - so the common case never needs the app opened at all. Starting and stopping a focus from here, and the minimal-vs-detailed style switch, are specified but not built.
◐ Partly built · clock actions work, focus actions planned
tabatha-mobile · modules/tabatha-usage-monitor · NotificationActionReceiver.kt
📱UsageStatsManagerAndroid OS
⚙️UsageMonitorService - foreground, survives swipeKotlin
🔗TabathaUsageMonitorModule → event busExpo module
🏷Categorizer → local SQLiteTypeScript
📱
Usage monitor In development
A custom native module, because no off-the-shelf one does this: a foreground service reading Android's usage stats, surviving swipe-away, and pushing app sessions up into the JS side through an event bus. This is the mobile equivalent of the desktop's window monitor, and it is the reason the app needs the permission it asks for.
● Built in app · runs today
tabatha-mobile · modules/tabatha-usage-monitor/
Category
coding
communication
browsing
media
productivity
social
gaming
system
unknown
🏷
Categorizer In development
Around eighty rules mapping an Android package name to a category, ported from the desktop companion's Rust engine so a day reads the same whichever device produced it. Two category palettes currently exist in the mobile specs and they disagree; this card renders the one the design language declares.
● Built in app · runs today
tabatha-mobile · src/services/categorizer/defaultRules.ts
💾Local SQLite - the source of truth, always written firstoffline-first
↓    try nearest first
📶 LAN bridge - finds your desktop over mDNS, syncs directpreferred
↓    no desktop on this network
☁️Cloud relay - realtime fallbackfallback
🔄
Hybrid sync In development
The most opinionated thing in the mobile build. Writes land in local SQLite first and always, so the app is fully usable on a plane. When it reconciles it looks for your own desktop on your own network over mDNS and talks to it directly - the cloud is the fallback, not the default. Your day does not need to leave the building to add itself up.
● Built in app · runs today
tabatha-mobile · src/services/{HybridSyncBridge,LANBridge,CloudRelay}.ts
active focus
13:22▮▮▮ 61%
Focus
Now
Q1 Report
18:42
🎯 Focus · 25 min preset
🏠Dashboard
🎯Focus
⚙️Settings
queue · funnel stages
13:25▮▮▮ 60%
Queue
🎯 Focus · Q1 Report P1
📋 Todo · Learning React
⚡ Addressing · Email triage
📥 Unsorted · Vacation planning
🏠Dashboard
🎯Focus
⚙️Settings
🎯
Focus Hub In development
The screen that would make this Tabatha rather than a screen-time report: an active focus with its timer, a queue carrying the same six funnel stages the extension uses, priority, and duration presets. It is specified in detail and identified in the app's own docs as the single most important missing piece. None of it is written yet - this frame is drawn from the spec, deliberately as a wireframe rather than a finished screen.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)
18:04▮▮▮ 44%
ActivityToday ▾
09:02 · coding
idle · 14m
10:40 · communication
11:15 · browsing
break · 18m
13:41 · productivity
🏠Dashboard
📊Activity
⚙️Settings
📊
Activity timeline In development
A vertical day where block height is real duration, gaps are drawn as gaps rather than quietly closed up, and a toggle swaps the timeline for a category breakdown. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · AI_STUDIO_INSTRUCTIONS.md (spec)
18:06▮▮▮ 44%
Analytics
31h
This week
6
Day streak
🏠Dashboard
📈Analytics
⚙️Settings
📈
Analytics In development
Stat cards, weekly bars, and streaks - the phone-sized cut of what Work Shifts does in the browser. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)
18:09▮▮▮ 43%
Tasks+ New
✏️ Q1 charts P1
✏️ Rewrite onboarding copy P3
✅ Ship updater fix
swipe a row to stage or defer
🏠Dashboard
📋Tasks
⚙️Settings
📋
Tasks & projects In development
Swipe actions, a bottom-sheet composer, funnel chips, and a link out to the task's Asana record. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)
13:22▮▮▮ 61%
⚠ Also clocked in on Desktop
04:12:38
Since 09:02 · 18m break
🕐 Recent stints
🏠Dashboard
Shift
⚙️Settings
Shift controls In development
A full-screen clock with recent stints and - the part that earns the screen - a banner when another device already has you clocked in, which is exactly the ghost-stint problem the browser side had to solve. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)
collapsed bubble
🎯
expanded card
Now
Q1 Report
18:42 Pause
🫧
InBar floating widget In development
The InBar's Android answer: a system overlay bubble that floats above every app, collapsing to a circle and expanding to show the current focus and its timer. Needs the overlay permission. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)
9:38▮▮▮ 84%
📱
Let Tabatha see your app usage
Android keeps this behind a system screen. Without it the app cannot track anything.
Welcome › Usage access › Notifications › Sign in › Ready
👋
Onboarding In development
Five steps, of which one is load-bearing: usage access lives behind a system screen Android will not let an app grant for you, so the flow has to explain why before it sends you there. Signing in is skippable - the app works offline. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile · FEATURES.md (unchecked)
8:14▮▮▮ 97%
Thursday, 16 July
Good morning
Top 3 today
1 · Q1 Report
2 · Email triage
3 · Learning React
📅 09:30 standup · 14:00 review
Yesterday · 6h 04m · 4 focuses
🌅
Morning Kickstart In development
A first-unlock-of-the-day sheet: three priorities, what the calendar holds, how yesterday went, and one button that starts the shift and the first focus together. The Gatekeeper's idea moved to the moment a phone actually has - the first unlock. Specified; no implementation.
○ Planned · not yet built
tabatha-mobile-2 · DESIGN_ADDENDUM.md (spec)