FlowOS

A native iOS + macOS super-app that surfaces the shape of your day — briefings, anchors, saves, and captures on one adaptive canvas.

Swift SwiftUI SwiftData Notion API HealthKit XcodeGen

The problem

Productivity tools optimize for throughput — more tasks, done faster, tracked tighter. But a life lived across surfaces doesn’t fragment neatly into a task list. My morning brief lived in email, my priorities in Notion, my reading in X bookmarks, my stray thoughts on scraps of paper. Every morning I reassembled the day from five apps. And the things that matter most — health, relationships, creativity — never fit the throughput frame at all. I wanted one place that gathered the whole day and still felt native to the devices I actually use.

The approach

FlowOS v2 collapses the morning scramble into a single adaptive surface. Instead of a tab bar, it surfaces what’s relevant: the briefing when you wake, your anchors through the day, the evening signal at night. The briefings themselves are generated once — by a Python signal suite — and stored as Notion artifacts, so the app just reads and renders them natively. Crucially, you act from the briefing: checking an anchor writes straight back to Notion, a high-priority kanban task sits one tap inside the shape of your day, a saved article opens inline. The six domains — Health, Wealth, Creativity, Clarity, Exploration, Relationships — are still the spine, now drawn as recency-weighted rings that read as balance rather than a raw score.

FlowOS on iPhone in dark mode — the Today surface: greeting, the morning-briefing card, today's anchors with inline quick-add, and the six-domain balance rings

How it works

SwiftUI drives the interface across iPhone, iPad, and Mac from a shared codebase. On iPad and Mac the surface splits into two panes — the day’s column beside the briefing reader; on iPhone it folds into a single adaptive column with the briefing as a card. SwiftData holds the canonical anchor history on-device (CloudKit is intentionally off — cloudKitDatabase: .none), and a single NotionSyncService is the only sync mechanism — pulling on launch, pushing dirty anchors and pulse back to Notion. Dedicated services fetch the live surfaces through a Cloudflare Worker proxy: the morning and evening briefings, Saves (X bookmarks), and Captures. A PatternEngine computes the domain balance, and adaptive notifications pick their moment instead of firing on a fixed timer. XcodeGen generates the project from project.yml so the repo stays diff-friendly. Notion stays the source of truth for the wider ecosystem — the macOS Widgets, the Vi3 Signal email suite, and the legacy web companion all read the same databases.

FlowOS on iPad — the two-pane surface: the living day column (anchors, domain rings, Saves, Captures) beside the full morning briefing with weather, priorities, yesterday's scorecard, and what shipped

Results

  • One adaptive surface — briefings, anchors, domain rings, Saves, and Captures on a single canvas, no tab-hopping
  • Morning + evening briefings read natively — generated once as Notion artifacts, then acted on in place
  • Act from the briefing — check anchors → Notion, promote a kanban priority, open a save without leaving the page
  • Saves + Captures — a read-later feed from X bookmarks and a quick-capture inbox that feeds the daily intake loop
  • Native iPhone + iPad + macOS from one SwiftUI codebase, SwiftData on-device, Notion as the single sync backbone — on TestFlight at build 142
FlowOS morning briefing — the briefing reader: weather, a sports section, and the Shape of the Day with a carried-forward anchor and a kanban-linked priority you can act on
FlowOS Saves — the read-later surface: X bookmarks pulled into a triage list with unread and starred states, ready to open or clear

The point was never to do more. It’s to open one surface in the morning and see, clearly, the day you’re actually living — and who it’s shaping you into.