Intent
The Eisenhower Matrix planner, rebuilt server-first



Intent
PrioriPlanner shipped in 2023 and ran 3 years, earning 4.62 stars across 21 US ratings and 414 feature-request votes. Those reviews wrote the architecture. Intent is its successor on the same App Store listing and the same bundle ID, rebuilt from scratch server-first so the product evolves at deploy speed instead of App Review speed: 11 SPM packages, 15 numbered ADRs, and CI that fails on schema drift. Currently in TestFlight, hardening for public launch.
iOS + Web API
Platform
Solo Developer
Role
Rebuilding Without Losing the Users
The Same-Bundle Bet
Shipping Intent as v3.0.0 of the existing PrioriPlanner listing keeps the 4.62 stars rating, all 21 ratings, and every active RevenueCat subscription -- zero entitlement migration, zero restart on social proof. An engineering decision made for business reasons.
Server-First, All the Way to Auth
The iOS binary ships zero backend SDKs -- not even for sign-in. The client posts credentials to the API, which owns the token exchange. App Store review takes days; a server deploy takes minutes. Every gram of changeable logic lives where it can be hotfixed.
One Contract, Generated Clients
Zod schemas are the single source of truth: they generate the OpenAPI 3.1 spec, which generates the Swift API client. No hand-written DTOs, no drift between TypeScript and Swift, ever.
Migrating Real User Data
Existing users have years of tasks in a local Realm database. A dedicated migration kit reads the legacy store on device, plans an upload, and rehydrates it into Postgres -- a real data-migration path for paying customers, not a fresh-start cop-out.
The Product, and the Architecture Under It
The Matrix Is the Home Screen
Every task lands in a quadrant based on urgency and importance, so prioritizing is the default path instead of a setting nobody opens. The view makes the uncomfortable pattern visible: most people are living in urgent-but-not-important.

Plan the Day, Then Reflect On It
Planning and reflection are separate, deliberate steps rather than an endless list. You choose what today is for, and afterward you look at what actually happened -- the loop the Eisenhower method needs to mean anything.

Deploy-Speed Product Iteration
Validation, premium gating, pricing, and feature flags all live server-side. Product changes ship in a two-minute deploy instead of a multi-day App Review cycle -- the entire reason for the rebuild.
Subscriptions That Survive a Rewrite
Server-authoritative entitlements with RevenueCat as the purchase mechanism: the server subscription mirror wins when reachable, with a deliberate 72-hour offline grace window so paying users are never locked out mid-flight.
Under the Hood
Key Technical Decisions
Server-First Thin Client
iOS owns rendering, navigation, input state, and a presentation cache -- not business rules. The API owns validation, gating, pricing, and copy that App Store review would otherwise freeze for days.
Contract Pipeline
Zod 4 schemas produce OpenAPI 3.1 via z.toJSONSchema(), and the Swift client is generated from that spec. One schema change propagates to both platforms in one commit.
Nightly TestFlight
A cron workflow on self-hosted CI cuts a TestFlight build every night, so the release candidate is always at most a day old.
What I Learned
Ratings Are an Asset With a Bundle ID
The 4.62 stars listing took 3 years to earn. Treating the bundle identifier as the asset it is -- and rebuilding inside it -- preserved what a shiny new listing would have thrown away.
Thin Clients Age Better
Every rule that lives on the server is a rule that never waits for App Review. The discipline of asking "does this HAVE to be in the binary?" changed almost every architecture decision downstream.
Write the Decision Down
ADRs made it safe to revise earlier calls honestly instead of pretending the first answer was right. The log of changed minds is more useful than the log of decisions.
