User Story

iOS App in a Day

One developer. One AI session. A full native iOS app—
auth, offline, CarPlay, sleep timer—from expo init to done.

Active
March 11, 2026 · Chris Park · Built with Amplifier
Starting Point

The web app was done

Ridecast turns articles, PDFs, and URLs into podcast episodes for your commute. The web version—Next.js, Prisma, PostgreSQL, AI scripting and TTS pipeline—was working. What it didn’t have was a native app.

The question wasn’t whether to build a native app. It was whether one person could build a real one—not a WebView wrapper, not a prototype—in the same week the web app shipped.
Scope

Not a prototype. A real app.

Native Audio Stack
React Native Track Player (RNTP) with smart resume, position persistence, queue management, and skip-forward/back. Not an embedded web player.
Offline-First
SQLite database, background sync engine, download manager, offline banner. Works on the subway. Works on a plane.
CarPlay
Browsable library from the car dashboard. Graceful fallback when CarPlay isn’t available. This is a commute app—it had to work in the car.
March 11, 2026

How the day unfolded

12:48 AM
First commit. Web app polish—queue support, sleep timer, expanded player metadata, library filters. Wrapping up loose ends before the big build.
Afternoon
Design doc and 20-task implementation plan written. Then: expo init. The native build starts.
Commit by commit
Clerk auth → API client → SQLite layer → sync engine → download manager → Library screen → audio player → Home screen → Expanded Player → Upload modal → Processing screen → Car Mode → Settings → CarPlay → empty states → episode versioning → offline support.
9:44 PM
Last commit. TypeScript errors resolved. 20 native features shipped.
Under the Surface

The parts that aren’t screens

Screens are the visible output. The real work is the infrastructure underneath them.

SQLite + Sync Engine
Episodes, playback state, and downloads stored locally. Background sync pulls from the server. Download manager handles queuing and storage. The app works without a network.
Audio Player Core
RNTP integration with PlayerProvider context, smart resume (picks up where you left off), position persistence across app restarts, and queue management with auto-advance.
Auth + API Layer
Clerk authentication with Apple OAuth, token caching, and a typed API client covering upload, process, generate, library, and playback endpoints.
14 Test Files
Tests for the API client, database layer, sync engine, downloads, player, library filter, home helpers, and every major component. Not a demo.
By the Numbers

March 11, 2026

54
Commits
12:48 AM – 9:44 PM
118
Files Changed
+37,313 / −5,211 lines
20
Native Features
Scaffold to offline-ready
The morning was web app polish. The native app build was afternoon to evening.
The Insight

Building an app
is a day’s work now

Not because the tools got easier. Because the bottleneck moved. The constraint used to be typing speed, API familiarity, boilerplate. Now it’s taste—knowing what to build and when to stop. The mechanical work compresses to nothing. The decisions are what take time.

One Day

Everything delivered on March 11

7 Screens
Home, Library, Expanded Player, Upload, Processing, Settings, Car Mode. Each with real state management, error handling, and loading states.
4 Infrastructure Layers
Clerk auth with Apple OAuth. SQLite database. Background sync engine. Download manager with queue. None of these are visible. All of them are required.
3 Hard Integrations
RNTP audio with smart resume and position persistence. CarPlay with browsable library. Offline mode with connectivity detection and sync-on-foreground.
This is a sprint planning meeting’s worth of tickets. A team would estimate it at 4–6 weeks. It was an afternoon.
Sources

Research Methodology

Data as of: March 15, 2026

Feature status: Active

Research performed:

Gaps: Feature count of 49 and session count of 18 are from the AI session’s own summary and were not independently verified per-session. The “afternoon” native build start is inferred from commit ordering (design docs precede expo init) — exact clock time not captured. Line counts include package-lock.json (19,723 lines).

Primary contributor: Chris Park — 292/292 commits (100%)

The bottleneck
moved.

It used to be typing. Now it’s taste.

Built with Amplifier
github.com/microsoft/amplifier
More Amplifier Stories