Push to 100 — The Side Project That Actually Made It

Push to 100 — The Side Project That Actually Made It

author: Wesley Matlock read_time: 4 —

💥 Push to 100 — The Side Project That Actually Made It

Some projects start with a pitch.

Some start with a roadmap.

This one started as a half-baked idea buried in my Notes app.

“Build something. Ship it this time.” That was it.

Nothing complicated. Just a scrappy little app to help me do more pushups. But more than that? It was my excuse to learn some new tech and finally follow through on a side project. No bailing. No shiny distractions.

🧠 Built to Learn (And Break Things)

I didn’t plan for this thing to become a crash course in SwiftUI pain points — but that’s exactly what happened.

This was my first real swing at SwiftData, and while the concept is clean, syncing with iCloud turned into a whole mood. Some days, sync would just work. Other days, I’d log a set of pushups and they’d vanish like a ghost in the machine. I rewrote that logic more times than I’d like to admit — async/await everywhere, retry strategies, sanity checks. Nothing like chasing invisible bugs across two devices at midnight.

And yeah, I added subscriptions. Not because I needed them, but because I hadn’t really dug into StoreKit 2 yet and wanted to see what it would throw at me. Answer: a lot. Sandbox testing is a mess, receipt validation gets weird fast, and figuring out entitlements made me feel like I was trying to hotwire my own app.

I built and rebuilt the data model. Swapped navigation stacks midstream. Cursed at a NavigationLink like it owed me money. But it came together.

📦 Somehow… It Shipped

After a couple of false starts in App Store Connect — rejections, stalled builds, “metadata issues” — it finally went through.

And now? It’s real.

📲 Push to 100 on the App Store

I’m not gonna lie, opening that link and seeing the live listing still gives me a weird little dopamine hit. Real icon. Real users. And yes, real crashes (hopefully not many).

⌚ Watch App: Still in the Lab

The watchOS version is in TestFlight, but syncing between phone and watch has been a total headache. It’s the kind of bug that disappears the second you open Xcode to investigate. I’ve been hammering on it with multiple devices, and it’s getting better — but I’m not quite ready to ship that one yet.

Long term, this project’s more than just a workout tracker.

I’m using it as a living sandbox — to test new SwiftUI components, explore SwiftData behavior across updates, and play with whatever Apple throws at us next WWDC. If Push to 100 keeps evolving, it’s because I am too.

🚀 Why This One Mattered

Push to 100 isn’t a side project I made for clout.

I built it because I was tired of not finishing things.

Every dev’s got that pile of dead folders — half-built SwiftUIs, abandoned Combine experiments, sample projects that never made it out of the preview canvas. This time, I wanted something different. I wanted the App Store link. I wanted to feel that tap on “Submit for Review” and actually mean it.

And I did. It’s live. And even though the app is simple, I learned more from it than any course or WWDC session. I got to feel the real edges of SwiftData. I got my hands dirty with StoreKit 2. I fought the sync demons. And I didn’t quit when things got weird.

I’m still not at 100 pushups. But I shipped the app. That counts for something.

Wanna see it?

🛠 Dev Notes: What I Learned Building Push to 100

SwiftUI Architecture

  • Used @Observable, @Environment, and new NavigationStack patterns
  • Designed minimal, adaptive UI that works on iOS and watchOS
  • Focused on modular, testable code without over-engineering

Async/Await in SwiftUI

  • Applied structured concurrency to background tasks and state updates
  • Reduced UI blocking during sync and data fetches
  • Built safer, cleaner flows around async ViewModels

SwiftData + iCloud Syncing

  • Modeled sets, reps, and streaks using SwiftData
  • Dealt with real-world iCloud sync quirks across devices
  • Built fallback and retry logic around state propagation

StoreKit 2 + Subscriptions

  • Set up and tested in-app purchases via StoreKit 2
  • Managed entitlements, sandbox testing, and restore logic
  • Handled edge cases in receipt validation

Xcode Cloud CI/CD

  • Configured automatic builds and TestFlight distribution using Xcode Cloud
  • Used environment variables and build settings for app versioning
  • Caught early regressions by running real builds in parallel with local development

App Store Connect & Release Process

  • Navigated submission/review pipeline solo
  • Created production metadata, screenshots, and builds
  • Learned how to respond to App Review rejections (politely… mostly)

🎯 Bonus: Real-World iOS Dev Stories

I’ve been writing about all the usual SwiftUI chaos — layout bugs, async weirdness, iCloud syncing that gaslights you.

If you’re into that kind of masochism: medium.com/@wesleymatlock

And if you’ve ever shipped a side project of your own? Respect. You know the grind.


Originally published on Medium