FinalSet Fitness: Engineering a Modern Tracker

A deep dive into the product architecture, design decisions, and development process of a production-level iOS application.

The Problem

Most fitness applications on the market suffer from one of two problems: they are either incredibly bloated with unnecessary social features and generic routines, or they lack the robust data-tracking capabilities required by serious lifters. I wanted an application that removed friction from logging sets while providing enterprise-grade analytics on volume and macro-nutrients.

My Role

As the sole creator of FinalSet Fitness, I was responsible for the entire product lifecycle. This included acting as the Product Manager to define the MVP, the UI/UX Designer to craft the interface in Figma, the Database Architect to design the schema in PostgreSQL, and the Lead Engineer to build, test, and deploy the application using React Native.

Product Planning & UI/UX

The design philosophy centered around "zero-friction during the workout." I mapped out user flows that minimized taps between completing a set and logging it. The interface utilizes a deep dark mode aesthetic, specifically designed to be easy on the eyes in dimly lit gym environments, while using vibrant accent colors to denote success states and rest timers.

Database Architecture

The backend is powered by PostgreSQL via Supabase. The relational model is designed to handle complex queries efficiently. Key architectural decisions included:

  • Normalized Schemas: Separating Workout templates from logged Workout sessions to allow users to modify historical data without affecting future routines.
  • Row Level Security (RLS): Ensuring that users can only query and mutate their own fitness data, providing robust privacy at the database layer.
  • Real-time Sync: Utilizing Supabase's real-time capabilities to ensure data is synced instantly across devices.

Tech Stack

The application leverages a modern, scalable technology stack:

  • Frontend: React Native with Expo for cross-platform potential, written in strict TypeScript.
  • Backend: Supabase (PostgreSQL, Auth, Storage).
  • Monetization: RevenueCat for robust subscription management.
  • State Management: Context API and optimized local state for immediate UI feedback.
  • Design: Tailwind CSS (NativeWind) for styling and Figma for prototyping.

Development Process & Challenges

Adopting an Agile approach, I built FinalSet in two-week sprints. One of the most significant technical challenges was handling offline support. Gyms often have poor cellular reception. I implemented a local caching strategy that allows users to log their entire workout offline, queueing the mutations to sync with Supabase once connectivity is restored.

Another challenge was integrating RevenueCat for Apple subscriptions. Handling webhooks for subscription renewals, cancellations, and trial conversions required careful synchronization between RevenueCat's servers and my PostgreSQL database to ensure user access was always accurate.

Key Lessons Learned

Building FinalSet taught me that software engineering is as much about managing scope as it is about writing code. It reinforced the importance of writing clean, maintainable TypeScript, as technical debt compounds rapidly in solo projects. Most importantly, it proved that a well-designed data layer is the foundation of any successful application.