Skip to main content

Intent

The Eisenhower Matrix planner, rebuilt server-first

The Problem

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

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.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.

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

Architecture as the Feature

01

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.

02

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.

03

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.

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.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.

Next ProjectSee more projects →
ProAct

ProAct

AI-powered migraine prediction that learns your patterns