Skip to main content

Intent

The Eisenhower Matrix planner, rebuilt server-first

Intent screen 1
Intent screen 2
Intent screen 3
The Problem

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

My Role
iOS DevelopmentAPI DesignArchitectureProduct
Process

Rebuilding Without Losing the Users

01

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.

02

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.

03

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.

04

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.

Key Features

The Product, and the Architecture Under It

01

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.

The Matrix Is the Home Screen
02

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.

Plan the Day, Then Reflect On It
03

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.

04

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.

Technical Deep Dive

Under the Hood

Built With
Swift 6SwiftUITCANext.jsSupabaseZodOpenAPIRevenueCatPostHog
iOS (TCA)Next.js APISupabase

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.

Learnings

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.

Next ProjectSee more projects →
ProAct

ProAct

AI-powered migraine prediction that learns your patterns

High Agency

Forengineerswhowantmorecontrolovertheirwork,theirincome,andtheirtime.

One essay a week from the apps I am actually shipping: the decision, the code, and the part that did not work.

Subscribe