Intent
The Eisenhower Matrix planner, rebuilt server-first
Intent
PrioriPlanner earned 4.6 stars helping people prioritize deliberately. Intent is its successor -- the same App Store listing, rebuilt from scratch with a server-first architecture so the product can evolve at deploy speed instead of App Review speed. 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.6-star rating, hundreds of reviews, 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.
Architecture as the Feature
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.
A Decision Log You Can Audit
Fifteen numbered architecture decision records document every major call -- including the ones that were later revised. The repo is its own case study.
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.6-star listing took three 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.
