Cortex Timer
A time tracker that lives in the menu bar and gets out of the way. So I can start the clock before I talk myself out of it.
Toggl in the browser does its job, but every time I want to start tracking, I have to switch tabs, find the project, and pick it again. By the time I'm done, I've forgotten what I was actually working on. I ended up tracking twice a week instead of every day — always from memory.
So I built my own app that lives in the menu bar. One click (or a keyboard shortcut), pick a project, the clock starts. It doesn't pull me out of whatever I'm doing, which is exactly where most trackers fall apart.
This is what it looks like while running. An amber dot in the menu bar, tabular digits, and a popover with the project picker underneath. Nothing more is needed.
Three principles it's built around
Menu bar, not a browser
A 380×520 popover right next to the system clock. Zero context switch. Close it by clicking anywhere else.
One accent = one state
The whole app is deliberately black and white. The amber accent only lights up when the timer is running. I don't read it — I see it.
Speed first
Full-text project search, favourites and recents, description autocomplete from history, keyboard shortcuts everywhere.
Idle & sleep recovery
When I leave the keyboard, the timer knows what to do
A small Rust watchdog inside the app notices when I've been idle for a few minutes — or when the Mac woke up with a running timer. On return it asks. Four buttons, one for each real-life situation. The data stays honest.
You were away for 18 minutes
What should we do with that time?
Timer running since 2:02 PM
- Subtract. Stop the timer at the moment I disappeared and discard the gap. Default for the coffee break I'd never bill for anyway.
- Split. Stop and immediately restart on the same project. The gap in between doesn't count. For a longer absence where I'm coming back to the same work.
- Keep. Leave the whole gap on the timer. When I was genuinely thinking by the window, it was part of the work, not the opposite.
- Assign. Fill the gap with a completely different project. Lunch, meeting, commute — so I have a record of what happened even when I was away from the keyboard.
What it solves beyond a basic tracker
Daily and weekly goals
A thin progress bar at the top shows today 3h 12m / 6h. I know how much is left and how much I've done. Per-project stacked segments.
Pomodoro mode
Optional. 25/5 interval, system notification, a soft sound. For the days when I need rhythm instead of spontaneity.
“Continue last”
Yesterday's entry restarts with one click from the right-click tray menu. Same project, same description. Setting up the next day takes seconds.
Rates and billable flag
Default hourly rate in Settings, read-only per-project effective rate card. Every entry has a billable toggle that feeds the revenue column in Cortex.
Tray with tabular digits
The menu-bar title uses tabular digits and a −1pt baseline offset so it doesn't jitter. Right-click opens the “Continue last” menu.
Global shortcuts
Toggle the popover and full-text search — rebindable in Settings. No need to reach for the trackpad to start the clock.
Design held together by one rule
OKLCH token system, dark mode as home, a single amber accent reserved exclusively for the “running” state. All digits in the menu bar are tabular so the minute doesn't jump. System font stack (SF Pro Text), no Google Fonts. Tailwind v4, zero hardcoded chrome colours. 18/20 on the internal twenty-point audit (accessibility, performance, theming, responsive, anti-patterns).
Under the hood
Tauri 2 shell (Rust) + React 19 + strict TypeScript + Vite + Tailwind v4. State in Zustand (auth, timer), local cache and background queue in SQLite via tauri-plugin-sql. Plugins: autostart, global-shortcut, deep-link, opener, notification, stronghold, store, os, updater, process. Universal binary for Apple Silicon and Intel.
- Tauri 2 (Rust shell + WebView, macOSPrivateApi for transparent popover)
- React 19 + strict TypeScript + Vite
- Tailwind v4, zero hardcoded chrome colours
- Zustand (auth, timer)
- SQLite via tauri-plugin-sql (offline-first + push worker)
- Universal binary: Apple Silicon + Intel
Where it goes next
None of the remaining items block daily use — the MVP already replaced Toggl for me. Ordered roughly by impact, not by size.
- v0.2Now · Working locally for me
- Tracker, idle/sleep recovery, goals, pomodoro
- Rates, billable, sync with Cortex
- Runs via pnpm tauri dev, release pipeline 90% done
- P0Next · Finish distribution
- Migrate Tauri signing key to base64-through-secrets
- First successful v0.2.0 release end-to-end
- Verify auto-updater on a v0.2.1 test build
- P2After that · Desktop UX
- Drag-to-move / resize entries in the Week view
- Quick-add modal with AI parsing
- Pomodoro phase transition notifications
- Keyboard navigation in the project picker
- Long-running timer warning (>8h)
- P3Later · Cross-platform
- Windows — different popover pattern, floating window near tray
- Linux — AppIndicator / StatusNotifierItem
- Mobile companion as a PWA from Cortex (likely out of scope)
- P4–5Dream · Data & integrations
- Calendar overlay — Google events as ghost entries
- Todoist link — active @ofbd tasks in the tracker
- Slack status “In focus” based on the running project
- Reports with totals, billable split, revenue, streaks
Cortex Timer is for the Offbrand team for now. It pairs with our Cortex and I don't plan to ship it anywhere else yet. When it's ready for more people, it'll land here.