My first iOS Fitness app - FitAssist


Intro
I’ve been writing code for about 15 years now, ever since I kicked off my first project. My debut in the mobile world came in 2014 with an Android music player—a passion project that sparked my love for app development. These days, I spend most of my professional life building web applications, but mobile apps remain my hobby. There’s something thrilling about the process—it’s different from web dev yet familiar enough that skills are transferable between these 2 worlds.
Sport, though, is my other passion. As a CrossFit athlete and fitness enthusiast, I’m no stranger to workout timers and the grind of tracking progress. I’ve always been fascinated by how technology can elevate that journey, turning sweat and reps into data-driven growth. I also used an app called “Start WOD Timer” in my workouts and wanted to improve some things there. That curiosity led me to "FitAssist," my first iOS app. It’s not just a tool—it’s a personal experiment in trying to pack many fitness tools into one app. I’d already experimented with pose recognition using YOLOv11 for a previous article, and I am looking forward to seeing that functionality in my fitness app someday.
I love a challenge, and learning Swift felt like the perfect one. After years of web projects, diving into Apple’s ecosystem was daunting but exciting—a chance to try something new and flex both my developer muscles and my fitness nerd brain. "FitAssist" was born from that spark, a mix of passion, code, and a little bit of grit. I wanted to make a useful app that would accompany your fitness exercises and help with tracking, posture, recommendations and so on, like a good assistant for your workouts.
Diving into iOS Development
Stepping into iOS development wasn’t entirely uncharted territory for me. With 15 years of coding experience, I’m no stranger to compiled languages or the mixes of threads and asynchronous code—skills obtained from some of the Android development and years of web projects. My Android experience gave me a solid foundation: I knew how to structure an app, deal with build systems, and optimize for mobile. But iOS? That was a fresh canvas, and Swift was the brush I’d never picked up before.
What surprised me was how familiar SwiftUI felt. As someone with deep React experience, I spotted the inspiration right away—declarative UI, component-based design, and state management. It was like meeting an old friend in a new city. Still, the Apple ecosystem was a bit of a new world. However, developer support was great! Enrolling in the Apple Developer Program resulted in an error with a recommendation to contact support. It turned out that their address recognition system didn’t get the correct address from my Ontario driver’s license. So, I submitted a support ticket—and within minutes, my phone rang. Apple’s support team walked me through it, checked my account, and suggested swapping in a different document. I re-submitted and successfully enrolled! Their responsiveness surprised me in the best way.
But before that, I leaned on Apple’s beginner tutorial for app development ("Scrumdinger" app at developer.apple.com). It covers a big variety of topics: covering architecture, components, and best practices with a clarity that even a seasoned dev can appreciate. I dove into Xcode, started piecing together "FitAssist," and felt the thrill of seeing my first SwiftUI views render. This was my playground now, and I was ready to build.
Building the Core: The MVP Takes Shape
When I started on "FitAssist," I looked to an app I’d used a ton: Smart WOD Timer. It’s a solid tool for CrossFit workouts: clean UI, reliable countdowns, and a simple setup.
But here’s the thing: you probably can’t build something totally new in fitness apps. What you can do is grab solid ideas and make them better. That’s where my MVP began. I wanted a workout timer that felt more flexible, inspired by the actual timer we use at the CrossFit gym. It’s generic enough to handle any workout: CrossFit WODs, Interval trainings, running - not locked into one style.
For the config, I went with a fresh approach: configurable and adapts to whatever you’re training.
The timer itself? It shows what matters mid-workout—time, rounds, a lap button to mark progress—without cluttering your focus. I kept the UI simple and responsive.
Open the app, and you’re ready to sweat - quick load and no screen-hopping to start. That was my rule: instant, practical, no distractions.
I also played with the Health Storage API to pull in pulse data, and draw a graph with it, using SwiftUICharts.
HealthKit permissions seemed tricky at first, but I figured it out, and seeing heart rate tied into the app felt like a win. Coding it in Swift turned out to be exciting once I got rolling. This MVP wasn’t perfect, but it was mine—a fitness tool I’d actually use.
Also, I created a landing page for this project using lovable.dev.
I was so impressed with that service. It helps you make amazing things in just a few prompts and allows you to connect the custom domain and backend database with Supabase. The best thing - you own the code, it all gets pushed to your GitHub repo.
Just as an experiment, I was able to create a dark / light mode button, tied to the system settings, in about half an hour. With just a few prompts and then fixing some styles after.
I used some code assistants, mostly Grok, to write the app code because Grok has many free features. But that is a topic for another article with a code assistant comparison.
The Road Ahead: Planned Features and Lessons Learned
"FitAssist" is just getting started, and I’ve got big plans. Right now, I’m working on a running feature - tracking distance, pace, and location, all plotted on a map. It’s gotta be smooth and useful, something I’d rely on for my own runs. But here’s the deal: handling location and Health data means security’s non-negotiable. I’m not about letting that stuff leak. So, I think I should keep everything on the user’s device using SwiftData, with iCloud sync as an option. It’s all local, all private, data never goes to any external server. I want "FitAssist" to be “privacy first,” because that’s how I’d want my own data treated.
Later, I want to bring in computer vision algorithms with pose recognition and movement detection. Picture this: I prop my phone up, and it films me doing a handstand, then breaks down the move: form, balance, the line. I could re-watch it, tweak my technique. Also, it would be great to have rep counts or feedback on back squats. Similar to what I did and described in my previous article, where I was experimenting with YOLOv11.
Another feature I’m thinking about is a workout generator. Pick your intensity, gear, and favorite moves, and let it generate a custom plan, based on common and well-known WODs, structuring it with warmup - main workout - cooldown and stretch.
Building this MVP taught me a ton—Swift’s features, Apple’s ecosystem, and how to make things work there. FitAssist isn’t just an app - it’s my main hobby project and a sandbox for blending my passions: code and fitness. I am looking forward to implementing many cool ideas. The road ahead is wide open, and I’m ready to run with it.
You can download the app completely free from the AppStore:
https://apps.apple.com/ca/app/fitassist-workout-assistant/id6743733478
Subscribe to my newsletter
Read articles from Alexander Polev directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
