ProjectsGymsight

A Clean, Test-Driven Approach to Mobile Fitness Tracking

Gymsight is a gym tracker app I built as a side project to expand on my mobile development skillset, explore Clean Architecture patterns, and practice Test Driven Development in a production setting. Designed with Flutter and Dart, the app combines beautiful UI with robust engineering practices, deployed to both iOS and Android with a fully automated CI/CD pipeline.

Gymsight Gallery

Gymsight began as a personal side project; part fitness tool, part engineering playground. I wanted to sharpen my Flutter knowledge, keep up with mobile app development practices, and experiment with decisions like offline-first architecture, Clean Design patterns, and TDD in a real-world product. The result was a polished mobile fitness tracker, shipped to both the App Store and Google Play, used by myself and a community of fitness enthusiasts.

The app enables users to log workouts, build templates, and analyze their progress over time. Features include workout scheduling, rest timers with push notifications, consistency tracking via calendar views, analytics on PRs and progress, and the ability to share templates with friends or clients. It also supports creating multi-week or multi-month programs, custom exercises, and syncing data across devices. A dashboard summarizes stats, reminders, and workout history, all wrapped in a clean, dark-mode-friendly UI.

On the technical side, Gymsight was built with Flutter and Dart, using BLoC state management for predictable, scalable UI flows. I chose an offline-first design so workouts are stored locally, syncing to Firebase for cloud backup and multi-device support. The app also uses Firebase Authentication for user management and RevenueCat for handling subscriptions and paywalls.

A major focus was on Clean Architecture and Test Driven Development. By strictly applying these principles, I created a modular, easily maintainable codebase where dependencies could be swapped without major rewrites; for example, moving from Amazon Cognito to Firebase Auth, or removing a custom API in favor of offline-first storage. All features followed the red-green-refactor cycle, ensuring stable releases and full test coverage.

To support rapid development and stable releases, I set up CI/CD with CodeMagic, automating builds and deployments to both stores. TestFlight and Android dev builds allowed me to validate features early, while automated test pipelines ensured reliability. This workflow made it easy to experiment, release confidently, and maintain quality even as a solo developer.

Gymsight represents the kind of project I enjoy most: a practical tool that I can use myself, while also being a proving ground for modern engineering practices, architectural rigor, and production-ready mobile app development.

FAQs about Branding

What was the benefit of using Clean Architecture?

Clean Architecture provided a strict separation of concerns, which made the app modular, maintainable, and easy to extend. It allowed me to swap services (like moving from Cognito to Firebase Auth) without restructuring the core app, which would have been far harder in a less disciplined setup.

Why did you choose Flutter for this project?

Flutter allowed me to build and maintain a single codebase for both iOS and Android, while still producing highly polished, performant UIs. As someone who enjoys mobile work but wanted to avoid managing two separate platforms, it was the perfect fit.

How did you apply Test Driven Development (TDD)?

I followed the red-green-refactor cycle for all features, writing failing tests first, implementing the minimum logic to pass, and then refactoring. These tests were integrated into the CI/CD pipeline so every feature shipped with confidence.

What role did CI/CD play in the project?

CI/CD with CodeMagic automated the full release process: branch builds, test runs, and deployments to TestFlight and Google Play. This removed manual steps, reduced release errors, and let me ship frequently with confidence.

How did you manage subscriptions and monetization?

I used RevenueCat to handle subscription management and paywall logic. It provided a clean, cross-platform solution for handling billing, freeing me from the complexity of managing App Store and Google Play subscriptions directly.

Tools of Choice

FLUTTER
FIREBASE
OPENAI
SENTRY

© 2025 Brady Edgar. All rights reserved.