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.
COMP 3350 · Winter 2026
ExerGen generates structured interval workouts tailored to available equipment, muscles, and time—then guides the user through every set.
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.
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.
Choose muscle groups, equipment, and intensity. ExerGen generates a balanced routine with customizable work/rest intervals.
Interactive timer with exercise animations, phase transitions, audio cues, and real-time progress tracking through every set.
Visualize weekly trends, total calories burned, average duration, and session frequency over time.
Per-exercise intensity-based calorie calculation with transparent explanation text so users know estimates are approximate.
Every completed workout is persisted locally with full details—duration, exercises, sets, and estimated calories.
Browse, search, and filter 30+ exercises by muscle group and equipment. Each includes animated demos and instructions.
Fragments, ViewModels, Adapters, Animations
Use Cases, Services, Validation, Domain Exceptions
Repository Interfaces, Stubs, Seed Data, SQL Constants
AppBootstrap (DI), DatabaseHelper, SQLite Adapters, CSVParser
android.* imports in business/ or
model/
MainActivity injects all fragment dependencies from
AppBootstrap
IExerciseRepository,
IWorkoutRepository,
ISessionHistoryRepository
SupportSQLiteOpenHelper in
application/helper only
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.
| Unit test files | 36 |
| Integration tests | 14+ |
| UI/Espresso tests | 4 suites |
| Business coverage | >80% |
| Connected test pass | 23/23 |
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.
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.
Some Android imports remain in persistence/ for
SQLite adapters. Given another iteration, we would complete the
move to application/helper with full regression
verification.
| 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 |
Build instructions, SDK requirements, and test commands
Detailed layer breakdown and package structure
Product vision, target audience, and success criteria
Iteration reflections, velocity chart, and improvement evidence
Browse the full public repository on GitHub