// Product Highlight v1.2.0 App Store

PACER

A subscription-free running companion. Route creation, AI coaching, and adaptive training plans built for runners who are tired of paying monthly for features that should just exist.

3
AI Features
0
Subscriptions
1
Developer
Download on App Store →
Pacer app screenshot
01
// The Problem

Paywalled by Design

I kept planning my routes in Google Maps before every run because every running app I tried locked route creation behind a paywall. I hate subscription models. When I got the chance to build anything I wanted for a CS project, this was it.

// Inquiry Question

How do you keep it free and still make it worth using?

How do I build a running app with no subscriptions and no stripped-down free tier, while still making it powerful enough to feel genuinely worth using?

// Why It Mattered

I Was the Target User

Every design decision came from a frustration I'd actually felt. I wasn't guessing who I was building for. That made the research feel natural and the decisions feel obvious. When the problem is yours, you stop second-guessing.

// Sources Used

Real Docs, Real APIs

  • Apple HIG — iOS + watchOS guidelines
  • Capacitor docs — cross-platform native bridge
  • Firebase Firestore — onSnapshot real-time architecture
  • WatchConnectivity framework — sendMessage vs transferUserInfo
  • Mapbox GL JS — route creation and live GPS rendering
  • HealthKit workout session API
  • App Store Review Guidelines — sections 1.4, 5.1.1, 2.5.1
// Source Verification

Tested Against Live Review

I got rejected twice. Once for a missing camera permission key (NSCameraUsageDescription) and once for not having an account deletion flow. Both were researched, fixed, and resubmitted. These guidelines weren't just something I read. They came up in a real review.

02
00 Starting Scope

PWA First

Planned as a Progressive Web App to stay within realistic time constraints. No native tooling, no App Store. Just build and ship.

01 Pivot

PWA → Native iOS

Claude introduced me to Capacitor, which made going native possible without rewriting everything from scratch. It slowed things down early on, but it unlocked the Watch app, HealthKit, and a much better product overall. Totally worth it.

02 Moment

The Map Worked

My classmates thought I was being too ambitious. The moment the Mapbox map loaded with live GPS data, I knew it was going to work. That was the turning point.

Mapbox route screen
03 Pivot

Emoji → Color Scale

The original effort rating used emojis (😴→💀) and it just felt too playful for what I was going for. I swapped it out for a color gradient, green for easy runs and red for max effort. It was a gut call, not user testing. Same function, completely different feel.

Feel rating color scale
04 Fix

Coaching Was Generic

The early coaching responses were generic and honestly not that helpful. Adding the feel rating changed that. It feeds directly into the Claude prompt, so if you rated the run a 5 (max effort), the response focuses on recovery. A 1 means you probably have more in the tank.

05 Rejection

Two App Store Rejections

First rejection was for a missing camera permission key. Second was for not having an account deletion option. I looked both up in the review guidelines, made the fixes, and resubmitted. Getting rejected is just part of shipping something real.

06 Next

What's Not Done Yet

The coaching and training plan features don't fully connect yet, which is the next thing I want to tackle. Social features and nutrition tracking are on the list too. The app shipped. There's still more to build.

03
// A — AI as Build Partner

Claude introduced me to Capacitor, wrote the Swift files for the watchOS app, and figured out the native plugin architecture for the Watch bridge. Without it, this project would have been a lot smaller.

The WatchBridgePlugin (a custom Capacitor plugin that fires JS events to avoid Firebase linking errors in the Watch target) was designed and debugged with AI help. Same goes for the Firebase Cloud Functions powering all three AI features.

Training plans, AI coaching, and the Apple Watch app all would have been cut if I'd worked solo. The vision was always mine. AI just made the execution possible.

W
watchOS app + Swift bridge files
P
WatchBridgePlugin (custom Capacitor plugin)
F
Firebase Cloud Functions for all 3 AI features
X
Xcode error debugging
// B — AI as Product Feature
01
Post-Run Coaching

The first version gave generic running advice. I refined it with structured context about the run, a tone direction, and the feel rating. It re-fetches whenever you pick your feel rating, so the response actually matches how the run went.

AI coaching screen
// Prompt rules Tone: warm, direct, expert — no bullet points
Context: distance, pace, duration, feel rating
Feel 5/5 → emphasize rest and recovery
Feel 1/5 → encourage pushing further
02
Run Name Generation

Prompted with distance, pace, and time of day. The token limit is set to 20 to keep names short. They should sound like something you'd actually want to save.

Run history screen
// Example outputs "Harbor Tempo Loop"
"Dawn Hills Run"
"Lunch Break Five Miler"

Max tokens: 20
03
Adaptive Training Plan

Give it a race goal and a date, and it builds a full plan of up to 20 weeks from your recent run history. Every Monday, a second prompt looks at what you actually completed and how hard it felt, then adjusts the remaining weeks.

Adaptive training plan screen
// Adaptation rules <50% completion → reduce volume 15–20%
Avg effort >4 on easy runs → cut intensity
Avg effort ≤2 → nudge volume up
Output: strict JSON schema → Firestore
04

"AI is an incredible tool as long as you have a good vision. It made things possible that would have taken months on my own."

— Emily Herbert, Developer

Design Language

The design system came straight from this portfolio: dark theme, Bebas Neue, and the #E8F400 accent. Applied to a running app, it ended up feeling clean and sporty. That was the vibe I was going for.

Biggest design decision: swapping the emoji ratings for a color scale. Emojis felt out of place in an app meant to feel focused and athletic. Changing that one thing shifted the whole tone.

I'm most proud of the visual design and the route creation feature, which is the reason I built this in the first place.

What I Learned

AI really does level the playing field. It helped me build things that would have taken months on my own. But the vision still has to come from you. Every call about what felt right, what needed to change, what to cut entirely — that was always mine.

The gap isn't technical anymore. It's knowing what you want to build and caring enough about it to make the right calls.

// Final Deliverables
iOS App Pacer: Running Companion, live on the App Store
Apple Watch App GPS tracking, pause/resume, live iPhone sync
Live Run Tracking Real-time map, pace, splits, and elevation via Mapbox
Route Creation Mapbox-powered. The feature this whole project started from.
AI Post-Run Coaching Personalised to distance, pace, and feel rating
Adaptive Training Plans Weekly adjustments based on completed runs and perceived effort
Run History Feel rating color system, mile splits, full run log
Design System Bebas Neue, IBM Plex Mono, DM Sans with dark and light themes