COMP 3350 · Winter 2026

Train Smarter.
Skip the Planning.

ExerGen generates structured interval workouts tailored to available equipment, muscles, and time—then guides the user through every set.

Ready in seconds
30+
exercises across chest, back, legs, shoulders, arms & core

Project Overview

Vision

ExerGen is an offline Android application that generates structured interval workouts based on available equipment, target muscle groups, and time constraints, then guides and records the workout from start to finish.

Intended Users

Students, intermediate gym-goers, and home fitness users who want structure without rigid pre-written programs—especially those who train in varying environments with different equipment.

Delivery Constraints

  • Java-only · SQLite (no Room)
  • 3-layer architecture + DI container
  • >80% business-layer test coverage
  • Pixel 9 / API 35 baseline

Major Features

Workout Builder

Choose muscle groups, equipment, and intensity. ExerGen generates a balanced routine with customizable work/rest intervals.

Live Workout Mode

Interactive timer with exercise animations, phase transitions, audio cues, and real-time progress tracking through every set.

📈

Statistics Dashboard

Visualize weekly trends, total calories burned, average duration, and session frequency over time.

🔥

Calories Estimation

Per-exercise intensity-based calorie calculation with transparent explanation text so users know estimates are approximate.

📝

Session History

Every completed workout is persisted locally with full details—duration, exercises, sets, and estimated calories.

🏃

Exercise Library

Browse, search, and filter 30+ exercises by muscle group and equipment. Each includes animated demos and instructions.

Product Demonstration

Product Screenshots

Exercise Details

Exercise Fragment

Exercise Library

Exercise Library

Saved Workouts

Saved Workouts Page

Live Workout

Live Workout 1

Workout Summary

Live Workout 2

Stats Dashboard

Stats Dashboard

Workout Builder

Workout Builder 1

Generated Routine

Workout Builder 2

Session Details

Session Details

Interval Timer

Timer

Architecture Summary

Presentation

Fragments, ViewModels, Adapters, Animations

Business

Use Cases, Services, Validation, Domain Exceptions

Persistence

Repository Interfaces, Stubs, Seed Data, SQL Constants

Application / Helper

AppBootstrap (DI), DatabaseHelper, SQLite Adapters, CSVParser

Architecture Evidence

  • Strict layering: No android.* imports in business/ or model/
  • DI via composition root: MainActivity injects all fragment dependencies from AppBootstrap
  • Interface-driven persistence: Business layer depends only on IExerciseRepository, IWorkoutRepository, ISessionHistoryRepository
  • SQLite via AndroidX: SupportSQLiteOpenHelper in application/helper only

Development Postmortem

What Went Well

  • Clean layered architecture from Iteration 1 made SQLite integration straightforward
  • Use-case pattern kept business logic testable and presentation-independent
  • Consistent feature-branch workflow prevented merge conflicts
  • Unit test coverage exceeded 80% for business layer by Iteration 3

What Went Wrong

  • Iteration 1 had tight coupling between models and business validation
  • Early parallel-list design in Workout model caused fragile index-based logic
  • Toolchain drift from course baseline caused out-of-box build failures
  • Some UI fragments accumulated too many responsibilities before refactoring

Iteration 2 Improvement Area

Identified weakness: Tight coupling between domain models and business infrastructure (ValidationHelper dependency, parallel lists, inconsistent enum mapping).

What changed: Introduced WorkoutStep to replace parallel lists, moved enum parsing into domain enums, centralized validation helpers, and enforced use-case boundaries.

Evidence: Unit test coverage jumped from below 30% to above 80%. Model layer became pure with zero business dependencies. EnumMapper reduced to a lightweight translator.

Measurable Outcomes

Unit test files 36
Integration tests 14+
UI/Espresso tests 4 suites
Business coverage >80%
Connected test pass 23/23

Additional Reflections

If Starting Over

We would enforce stricter package boundaries from day one, adopt WorkoutStep as the core data unit immediately, and invest in CI/CD pipelines to catch toolchain drift early.

Lessons Learned

Architecture quality depends as much on team communication as on code quality. Clear issue ownership and pre-implementation discussion prevented most merge conflicts and design inconsistencies.

Outstanding Debt

Some Android imports remain in persistence/ for SQLite adapters. Given another iteration, we would complete the move to application/helper with full regression verification.

Team & Contributions

Member Primary Contributions Technical Skills Gained
Brayden Burak Persistence layer, SQLite schema, filtering/search, exercise data pipeline, timer logic SQLite/AndroidX persistence, database schema design
Heetkumar Patel Architecture refactoring, DI cleanup, calories feature, toolchain alignment, Statistics dashboard, session history Layered architecture enforcement, dependency injection patterns, integration testing
Kalp Joshi Workout builder, Exercise library, exercise animations Android fragment lifecycle, RecyclerView adapters, interval timer implementation
Grover Rocha UI design, documentation, Espresso UI testing Data aggregation services, Android UI/UX design, technical documentation
Minh Do live workout mode, unit tests, code quality JUnit/Mockito testing, enum-driven design, code review practices