Operator
Cadence
A calm, keyboard-first way for founders to spend time the way they intend — and the full-stack platform behind it.
A production SaaS built as a single Turborepo monorepo — web app, native desktop client, browser extension and admin console, all from one shared core. Behind a security-hardened Postgres backend (~100 tables, ~213 stored procedures, row-level security on every one) runs a fault-tolerant, offline-capable timer engine, a multi-provider planning layer that drafts each operator’s day, and an MCP server that lets outside agents act on their work. Built on Next.js 16, React 19 and Supabase.
A day, as the product runs it
Operator Cadence isn’t a task list — it’s a loop. Each day is drafted, run as a timed sequence, tracked against goals, and picked back up exactly where it was left. That cycle is the spine the whole platform is built around.
Domain › Loop › Category ›Next Action — the data model that recursively cycles, so an operator always resumes rather than restarts.
Everything, as a spec sheet
| Frontend | Next.js 16 App Router · React 19 · TypeScript 5.9 strict · Tailwind CSS v4 |
| Server state | TanStack Query v5 — server-side prefetch & hydration across ~188 data hooks, single query-key factory |
| Client state | Zustand v5 — ~40 focused stores, several persisted through a safe-storage layer |
| Backend | Supabase — Postgres 17, Auth, Realtime, Storage · a “fat-database” of ~213 RPCs, migrations-only |
| Security | Row-Level Security on ~100 tables · SECURITY INVOKER functions · AES-256-GCM secrets · HMAC agent keys |
| Intelligence | Anthropic · OpenAI · Gemini behind one router — BYOK, SSE streaming, per-feature config & usage metering |
| Agent API | Model Context Protocol server + token-scoped REST · granular per-agent read/write permissions |
| Native | Tauri v2 (Rust) desktop shell · WXT browser extension · installable PWA with offline background sync |
| Scheduling | Two schedulers — Postgres pg_cron (15 jobs) + Vercel Cron (11 jobs), circuit-breaker guarded |
| Payments | Stripe — idempotent webhooks, subscriptions, add-ons, referrals · Google Calendar · Resend · Web Push |
| Quality | Playwright E2E (seeded + scratch users) · Vitest units · TypeScript strict · ESLint 10 flat config |
What we’re proud of
The parts an operator never sees — and the reasons the platform stays calm under real use.
A fault-tolerant timer engine
The signature subsystem: a ~2,400-line reducer state machine tracking time against goals across sequences of work. Optimistic updates roll back from the server; actions that happen offline queue to IndexedDB and drain via a Service-Worker background sync; a single global tick and Realtime + BroadcastChannel keep every tab and device in step.
A backend that carries its own logic
A deliberate “fat-database”: ~213 Postgres functions and ~111 triggers hold the transactional business rules, with route handlers as thin authenticated wrappers. Row-level security on ~100 tables, append-only audit logs, and a documented hardening campaign — every function flipped to INVOKER, every search-path pinned, EXECUTE revoked from anon.
A planning layer that drafts the day
The Daily Guide assembles real context — loops behind their goals, overdue actions, live calendar, and energy patterns learned from the operator’s own history — then casts the model as a chief of staff and returns a validated, machine-parseable plan. One router spans three providers with bring-your-own-key, streaming, quotas and cost tracking.
An open door for agents
An MCP server and a token-scoped agent API let outside AI agents read and act on an operator’s loops and actions — gated by granular per-agent read/write permissions and HMAC-hashed keys. Agent dispatch is bounded by concurrency and pending-invocation limits, with a watchdog that sweeps stale work.
Built to scale calmly
The highest-volume tables — time entries and activity logs — are partitioned, RLS enforced on the children. A performance-audit series dropped dead indexes and added materialized rollup caches so dashboards read pre-aggregated data. Two schedulers, async email & agent queues, rate limits and circuit breakers keep load in hand.
One codebase, four surfaces
A Turborepo monorepo ships web, desktop, extension and admin from a shared @opcadence/core — the typed queries, Zod schemas and timer math that keep every surface behaving identically. The frontend is server-components-first with prefetch-and-hydrate, so pages arrive without client fetch waterfalls.
Where the platform meets people
The operator’s console
~30 feature areas and ~180 route handlers — dashboard, loops, sequences, calendar, inbox, reports and a deep settings tree. Keyboard-first: a ⌘K command palette, global search and multi-key chords.
Native shell & floating timer
A thin Tauri v2 (Rust) frame that loads the web app — no fork — adding a frameless always-on-top timer, system tray and a global show/hide shortcut. Pre-release build.
Capture from anywhere
A WXT + React 19 extension that drops any page straight into the Inbox with its source, so a stray idea never breaks the operator’s focus.
A hardened back office
A separate console with its own auth — argon2 hashing, TOTP 2-factor, append-only audit logs and support impersonation with cascade cleanup.
Time, made legible
Recharts dashboards — goal-vs-actual, allocation and trends — plus a dnd-kit calendar timeline with ghost blocks and a kanban board for triage.
The front door
A separate static Next.js site on a bespoke design system — a “stateless-first” build where only six files ship client JS, with generated OG images, full JSON-LD and end-to-end UTM attribution.
The headline numbers
Figures verified against the codebase. The desktop client is a pre-release build; a React Native mobile app referenced in internal docs is not yet built. Deployed single-region on Vercel + Supabase — “scale” here means partitioning, rollup caches and rate limiting, not a bespoke cluster.
OPERATOR CADENCE · FULL-STACK PRODUCTIVITY PLATFORM