Back to Projects
Back to Projects
MOBILE FITNESS SYSTEM

AthletIQ

A sophisticated SwiftUI gym companion designed to gamify progressive overload, manage multi-week templates, and visualize strength growth metrics.

github.com/Thet9354/AthletlQ
AthletIQ Workout Logs Showcase

The Thesis & The Problem

Logging sets and weights during a high-intensity workout is a chore. Gym-goers frequently abandon tracking apps mid-workout because typing digits and navigating nested menus while out of breath introduces heavy mental friction.

AthletIQ was built to solve this exact bottleneck: an ultra-premium SwiftUI workout logger engineered around a "2-tap logging" mechanism. By leveraging pre-predicted weight defaults, persistent workout state caches, and intelligent swipe gestures, users can register an entire set in under two seconds.

Core UX Philosophy (Dynamic States): Rest timers should not feel passive. When a user logs a set, AthletIQ launches a dynamic visual countdown bubble utilizing iOS 16+ Live Activities. The timer ticks quietly on their lock screen, pulsing gently through haptics when it is time to load the next bar.

Design Thinking: Premium Gold Glassmorphism

Prototyping a workout dashboard that inspires athletic focus:

  • Tactile Physical Dialers: Instead of opening the keyboard to type numbers, AthletIQ features spring-loaded rotational dials to adjust weights, mimicking premium gym equipment selectors.
  • SwiftData State Synchronization: Relational workout models (Workouts → Exercises → Sets) are structured in a clean, query-efficient SwiftData model. Database updates run on background contexts to avoid UI frame-drops.
  • Intelligent Progressive Overload Guides: The interface highlights previous performance targets as ghost text behind input cells, quietly prompting the user to lift 1kg more or complete one additional rep.

Workout Database Schema (SwiftData Model)

Below is a model representation of our relational exercise database model using SwiftData schemas:

import Foundation import SwiftData @Model final class WorkoutSession { @Attribute(.unique) var id: UUID var name: String var startedAt: Date var endedAt: Date? @Relationship(deleteRule: .cascade) var loggedExercises: [LoggedExercise] = [] init(name: String) { self.id = UUID() self.name = name self.startedAt = Date() } } @Model final class LoggedExercise { var id: UUID var exerciseName: String var targetMuscle: String var sets: [ExerciseSet] = [] init(exerciseName: String, targetMuscle: String) { self.id = UUID() self.exerciseName = exerciseName self.targetMuscle = targetMuscle } } @Model final class ExerciseSet { var id: UUID var weightKg: Double var repsCount: Int var isCompleted: Bool init(weightKg: Double, repsCount: Int) { self.id = UUID() self.weightKg = weightKg self.repsCount = repsCount self.isCompleted = false } }

Technical Achievements

  1. Dynamic Set Predictions: Utilizes simple local regression algorithms to guess your target weights for the next set based on your historical volume logs, minimizing input friction.
  2. Non-blocking UI Rendering: All chart renderings and database queries execute asynchronously, maintaining 120Hz ProMotion animations on supported iPhones.
  3. Haptic Rest Signals: Uses specialized Core Haptics patterns that vibrate distinct pulses when rest intervals complete, keeping users focused without audible alarms.