tl;dr
Oakling helps Bay Area parents discover family activities and coordinate playdates inside trusted circles. It started as a curated resource site, became a coordination PWA, and shipped as a native SwiftUI iOS app. Each pivot sharpened the same insight: parents don't struggle to find things to do — they struggle to get from "anyone free?" to "see you there."
3
products to find the real problem
481+
curated activities
70+
organic users before going native
The problem — discovery is easy, coordination is hard
Parents already know what they'd love to do with their kids. But group texts get buried, schedules clash, and there's no shared place to actually plan. And underneath the logistics is the real barrier: 1 in 3 parents won't allow a playdate when another family has different screen-time rules. Reaching out to unfamiliar families carries a social cost most parents won't pay.
“Parents don't struggle to find things to do. They struggle to get from "anyone free?" to "see you there." That's a coordination problem, not a content problem.”
Three products, one problem
Plai
validated the audience — parents of young kids showed up and browsed. But engagement revealed the wrong job-to-be-done: they didn't need more information about activities.
Playdates
(a Lovable + Supabase PWA) proved the coordination need was real — 70+ organic users created events and shared invite links. But the open invite-link model mismatched how trust actually works, and the codebase accrued heavy debt.
Oakling
is the native rebuild where the trust model finally fit.
The highlight — open invites vs. Trusted Circles
| Open invite links (Playdates) | Trusted Circles (Oakling) | |
|---|---|---|
| Trust | Comes after the interaction | Built into the structure |
| Works for | Existing friend groups | Building new family connections |
| Coordination | Share a link, anyone joins | Plan inside a group you've vetted |
| Platform | Web PWA | Native iOS |
The rebuild — SwiftUI, and killing 40% of the code
The decision to go native was a full rewrite, not an incremental port.
~40% of the Lovable codebase was dead or duplicated
A full SwiftUI rebuild keeping only the clean patterns, with direct Supabase REST calls — no SDK, no inherited debt.
First results were slow
External Places + LLM calls dominated time-to-first-paint. Fix: a cache-first architecture — a Supabase suggestions table keyed by city and age bucket with a TTL; cache hits render instantly while a background refresh runs; cache misses show a skeleton while an Edge Function fetches.
Content goes stale fast
An evergreen model (a park is always a park; seasonal items get flagged off, never deleted) plus a Friday 5pm rule that shows After-School ideas before 5pm and Weekend ideas after.
The App Store gauntlet
The first submission was rejected — a crash in the share-via-text flow plus a missing account-deletion option. Fix: patched both, built an account-deletion flow with a Supabase edge function for cascading cleanup, wrote detailed review notes, attached screen recordings, and resubmitted. Approved. (The share-via-text flow was the weak link — it's currently disabled, awaiting a clean rebuild rather than a patch.)
Results — by the numbers
| Metric | Value |
|---|---|
| Products to find the real problem | 3 (Plai → Playdates → Oakling) |
| Organic users before native | 70+ (PWA era) |
| Curated activities | 481+, hand-picked and illustrated |
| Dead code removed in rewrite | ~40% of the Lovable codebase |
| Stack | SwiftUI · Supabase REST · App Store Connect |
| Status | Shipped — live on the App Store, oakling.app |
Key Takeaways
- 1The real problem hides behind the obvious one — the job wasn't discovery, it was trust.
- 2Trust is architectural — a permission model builds it, a privacy policy doesn't.
- 3Each pivot should sharpen, not restart — progressive reduction beats starting over.
- 4Cache-first is a UX decision — perceived speed is part of the product.
- 5Validate the hard problem before building the easy layer — a few weeks of parent interviews would have surfaced the coordination insight sooner.
Tools I like
Circle invitations — inviting other families into a Circle for coordinated planning.
Profile photos and personalization.
A clean rebuild of the share-via-text flow — the one that caused the rejection deserves a proper redesign, not a patch.
Bay Area growth — Berkeley, Oakland, Alameda, San Francisco.
Circle invitations — inviting other families into a Circle for coordinated planning. Profile photos and personalization. A clean rebuild of the share-via-text flow — the one that caused the rejection deserves a proper redesign, not a patch. Bay Area growth — Berkeley, Oakland, Alameda, San Francisco.
