Project / Case study

Endless Activity

Less looking. Something worth doing.

A native iOS app I designed and built for the moment you want to do something, but don’t know what. Open it, choose an idea, get on with your day.

Explore the app
Endless Activity Discover deck with a realistic activity and visible save and skip controls
Discover, details, and Saved. Real simulator captures from the working SwiftUI app; these precede the October layout refinements.
My role
Product design + native iOS engineering
Built with
SwiftUI · Swift · bundled JSON
Experience
Native iOS build

“I’m bored” isn’t
a search query.

Search works when you know what you want. I built Endless Activity for the opposite moment: a little free time and no particular plan.

The first screen gives you one doable suggestion. Time, cost, and energy help you decide. Nothing stands between opening the app and the first idea.

A solo-first, offline MVP with 50 curated activities.

From “maybe” to
“let’s try that.”

Explore four moments in the app. Each screen pairs the interaction with the decision behind it.

Endless Activity Discover deck with a realistic activity and visible save and skip controls
Implemented iOS interface · historical simulator capture.

One idea. Two easy answers.

Cook from what you already have. Thirty minutes, indoors, medium energy. Enough context to decide before opening another screen.

The design decision

Swipe right to save, left to skip. Visible buttons and named VoiceOver actions do the same job; a partial drag springs back.

Save and skip advance the deck and persist locally.

The loop,
in 24 seconds.

Discover an idea, look closer, save it, and tune what comes next.

This walkthrough is assembled from verified simulator captures. It shows the implemented screens rather than a continuous gesture recording.

Playback is optional. The selectable screens above cover the same flow.

Small fixes.
A more usable deck.

October refinements address what happens when the content or text size grows.

Let the content set the height.

Content-sized cards and independent scrolling replace the oversized fixed layout. Save and Skip stay visible at every text size.

Keep the next card quiet.

Decorative back layers preserve the stacked-deck feel without letting another activity’s text leak around the active card.

Make the small labels count.

Adaptive secondary text strengthens contrast across Discover, details, Saved, and Preferences.

Implemented 2 October 2026. App and test-target compilation recorded with the iOS 27 SDK; fresh simulator and large-text visual checks remain pending. The captures above show the earlier build.

A playful surface.
A predictable foundation.

Every swipe changes your deck. The source catalog stays intact.

  1. Curated catalog

    50 bundled activities, decoded and validated before use.

  2. Pure ranking

    Practical filters, saved-category and tag boosts, reproducible ordering.

  3. Local state

    SwiftUI deck state and a Codable UserDefaults store for signals and preferences.

Verification

12 unit tests. 7 UI tests.

Recorded full simulator run: 28 June 2026. Catalog, ranking, save/skip, filters, details, and relaunch persistence. October corrections still need simulator re-verification.

Where it stands

A working native MVP, built to run offline.

No App Store release or user-outcome claims. Accounts, live events, booking, and generated activities remain outside v1.

Engineering evidence and tradeoffs

What is protected

  • Fifty bundled activities pass unique ID, unique title, schema, tagging, step-count, and content-quality validation.
  • Twelve unit tests and seven UI tests passed on 28 June 2026 on the iPhone 17e simulator, covering ranking, persistence, swipes, details, filters, Saved, and relaunch state.
  • The June baseline includes an iPhone 17 Pro Max build and standard-size simulator captures. October layout and contrast corrections have recorded iOS 27 compilation; fresh simulator visual and UI verification remains pending.

Deliberate tradeoffs

  • Bundled JSON keeps the app offline; catalog changes require an app update.
  • UserDefaults fits small local signals; it provides no cloud sync.
  • Rule-based ranking is inspectable; it does not learn a behavioral model.
  • Haptic feel and spoken VoiceOver quality still need device-level review.
Talk about the project
MoreCurrent case studies

Explore the other current projects where product thinking is carried through interface, architecture, testing, and release.