Report 2. Initial Design & Elaboration #
UrTraining #
Authors: Ildar Rakiev, Makar Dyachenko, Salavat Faizullin, Egor Chernobrovkin, Alexandra Starikova, Ilona Dziurava, Anisya Kochetkova
Date: June 2025
Team Members #
| Team Member | Telegram | Email Address | Role |
|---|---|---|---|
| Ildar Rakiev (Lead) | @mescudiway | i.rakiev@innopolis.university | Backend / Design |
| Makar Dyachenko | @index099 | m.dyachenko@innopolis.university | Frontend / Design |
| Salavat Faizullin | @FSA_2005 | s.faizullin@innopolis.university | Backend |
| Egor Chernobrovkin | @lolyhop | e.chernobrovkin@innopolis.university | ML |
| Alexandra Starikova | @lexandrinnn_t | a.nasibullina@innopolis.university | ML |
| Ilona Dziurava | @a_b_r_i_c_o_s | il.dziurava@innopolis.university | PM / Frontend |
| Anisya Kochetkova | @anis1305 | a.kochetkova@innopolis.university | Backend |
Requirements #
User Story and Acceptance Criteria #
| User Story | Acceptance Criteria |
|---|---|
| As a new user, I want to select a coach or trainee role, so that I can access features relevant to my role. | - Role selection is required during registration. - Role-specific features are only available after selecting a role. |
| As a new user, I want to register as a trainee, so that I can start training. | - Registration form tailored to trainees. - Successful registration logs in the user as a trainee. |
| As a new trainee, I want to see an explanation page before the questionnaire, so that I understand its purpose. | - Page includes short info about data collection, estimated time, and a progress indicator. |
| As a new trainee, I want the questionnaire to take no more than 5 minutes, so that I donât waste time. | - Optimized for completion within 5 minutes. |
| As a new trainee, I want to provide my name, so that the system knows how to address me. | - Field âWhat should we call you?â with a brief explanation. |
| As a new trainee, I want to provide basic personal info, so that I receive more relevant plans. | - Fields: gender, age, height, weight. |
| As a new trainee, I want to choose training goals, so that I receive relevant programs. | - Goals: Weight loss, Muscle gain, Endurance, Flexibility, Fitness maintenance, Competition prep, Stress relief. - Can choose up to 2. |
| As a new trainee, I want to describe my experience level, so that plan difficulty matches me. | - Options: Beginner, Intermediate, Advanced. - Also ask: âHow often have you trained in the last 3 months?â with set choices. |
| As a new trainee, I want to specify my training location, so I get suitable suggestions. | - Options: Gym, Home, Pool, Outdoors. |
| As a new trainee, I want to describe my training environment, so the system aligns equipment accordingly. | - Gym: Full center or basic equipment. - Home: Some equipment or bodyweight only. - Pool: No extra questions. - Outdoors: With or without workout stations. |
| As a new trainee, I want to specify workout length, so they fit my schedule. | - Options: Up to 30âŻmin, 30â45âŻmin, 45â60âŻmin, >âŻ60âŻmin. |
| As a new trainee, I want to rate interest in training types, so I get personalized workouts. | - Types: Strength, Cardio, HIIT, Yoga/Pilates, Functional, Stretching. - Rating: 1â5 stars. |
| As a new trainee, I want to indicate health limitations, so I donât risk injury. | - Ask: âDo you have joint/back problems?â and âAny chronic diseases affecting exercise?â - If yes: show a âTell us moreâ field and display disclaimer: âConsult your doctor before starting training.â |
| As a new trainee, I want to navigate questionnaire steps, so I can review/correct answers. | - âBackâ and âNextâ buttons available on all steps. |
| As a new trainee, I want a final confirmation page after the questionnaire, so I know my answers were saved. | - Show confirmation message with summary or success notification. |
| As a new trainee, I want my training plan generated under 15 seconds, so I can begin quickly. | - Plan generation completes in under 15 seconds. |
| As a new trainee, I want my questionnaire progress saved if I leave early, so I can continue later. | - Auto-save and restore questionnaire state. |
| As a new user, I want to register as a trainer, so that I can share my training plans. | - Registration form tailored to trainers. - Successful registration logs in the user as a trainer. |
| As a new trainer, I want to see an explanation page before the questionnaire, so that I understand what is collected. | - Page has a brief explanation, progress indicator, and an estimated time. |
| As a new trainer, I donât want the questionnaire to take more than 5 minutes, so itâs quick. | - Average completion time â¤âŻ5 minutes. |
| As a new trainer, I want to provide my name, so the system knows how to refer to me. | - Field âHow would you like us to call you?â with explanation. |
| As a new trainer, I want to share my work experience, so clients see my professionalism. | - Input for total years of experience and a background description. |
| As a new trainer, I want to enter my age, so users get context. | - Number field with validation (18+). |
| As a new trainer, I want to specify training types I offer, so users know my expertise. | - Multi-choice: Strength, Cardio, HIIT, Yoga/Pilates, Functional, Stretching. |
| As a new trainer, I want to upload certifications, so clients know Iâm qualified. | - Optional file upload: PDF, JPG, PNG. |
| As a trainer, I want to create courses, so I can share my knowledge. | - âCreate Courseâ button opens the course creation form. |
| As a trainer, I want to enter course basic info, so users understand it. | - Form: course name, auto-filled trainer, description. |
| As a trainer, I want to select training types for my course, so users can filter accordingly. | - Multi-select training types; option to add custom types. |
| As a trainer, I want to specify course goal, so users find relevant programs. | - Multi-select up to 2: goals like Weight Loss, Muscle Gain, etc. |
| As a trainer, I want to indicate course location, so users filter by environment. | - Multi-select: Home (with/without equipment), Gym, Outdoors, Pool, Universal. |
| As a trainer, I want to define difficulty level, so users find the right challenge. | - Single-select: Beginner, Intermediate, Advanced, All Levels. |
| As a trainer, I want to indicate course duration (weeks), so users know commitment. | - Dropdown: 1 / 2 / 5 weeks. |
| As a trainer, I want to set weekly training frequency, so users understand schedule. | - Single choice: 1â2, 3â4, or 5â6 times/week. |
| As a trainer, I want to specify session duration, so users know how much time is needed. | - Single choice: up to 30 min, 30â45 min, 45â60 min, >âŻ60âŻmin. |
| As a trainer, I want to define target age group, so I reach the right audience. | - Multi-select: Teens, Young Adults, Adults, Seniors, All ages. |
| As a trainer, I want to set gender orientation of the course, so users know if it suits them. | |
| As a trainer, I want to specify suitability for physical limitations, so those users feel safe joining. | - Multi-select from listed conditions; include âNo adaptationâ for healthy. |
| As a trainer, I want to list required equipment, so users prepare in advance. | - Multi-select from a comprehensive equipment list; âOther â specify.â |
| As a trainer, I want automatic detection of course language, so localization is seamless. | - System auto-detects language (English or others). |
| As a trainer, I want automatic identification of visual content type, so users know what to expect. | - System auto-categorizes visuals (photos, videos, animations, charts, minimal visuals). |
| As a trainer, I want to select feedback options for my course, so users know how to contact me. | - Multi-select feedback options: comments, personal consults, group sessions, chat, or none. |
| As a trainer, I want to pick up to 10 tags, so users can search effectively. | - Multi-select from validated tag list (weight loss, strength, flexibility, etc.), up to 10. |
| As a trainer, I want to see my course performance metrics, so I can track engagement. | - Display average rating, active participants count, number of reviews. |
| As a trainer, I want my certification data to auto-fill in my course, so users see my credibility. | - Auto-fill from profile: certification type, level, specialization. |
| As a trainer, I want my experience data to auto-fill, so clients quickly see my background. | - Auto-fill: years of experience, specializations, number of created courses, average rating. |
| As a trainer, I want to upload training plans, so I can help people train. | - File upload interface for training plan materials (PDF, video, structured data, etc.). |
| As a user on the platform, I want to receive a recommended training plan based on my preferences, so that I donât have to browse manually. | - Onboarding form captures goals, equipment, frequency, duration, restrictions. - Recommendation model suggests top 3â5 relevant plans. - User can view details or skip to catalog. |
| As a user on the platform, I want to view a list of available training plans, so I can choose the best fit. | - Catalog shows plan cover, title, coach name, duration, tags. - Filters: goal, equipment, duration, frequency, difficulty, coach. - Sorting: relevance, newest, most popular, rating. |
| As a user on the platform, I want to open a detailed training plan page, so that I can understand its structure. | - Plan detail includes full description, week-by-week breakdown, expected results, visuals (if available), trainer info, required equipment. - âStart planâ button begins user progress tracking. |
| As a user following a training plan, I want to mark workouts as complete, so that I can track my progress. | - Each session has a âMark as doneâ button or checkbox. - Progress per user and per plan is saved. - Completed session count is displayed (e.g., â3/10 sessions completedâ). |
Backlog #

Design #
Core Application Design #
The core application design can be viewed here. These initial designs form the foundation of the core user experience. Below are the key screens that have been designed so far:
User Questionnaire: A multi-step form where the user answers questions to receive a personalized training program.

Prototype Review Window: Allows users to preview and modify their recommended training programs.


Training Plan Catalog: Displays a list of available training programs when the user clicks on the âCatalogâ tab in the top navigation bar.

Training Card Overview: A detailed view of an individual training plan, including its description, difficulty level, and schedule.

User Flow Diagram #
User flow diagrams for key interactions can be found here: User flow diagram
Frontend #
During Week 2, we implemented several key pages and set up basic routing for the application:
Welcome Page with Role Selection (User / Trainer)
Implemented an entry screen that directs users based on their role.
Welcome Page CommitAuthentication Pages (Signup / Login)
Added user authentication forms for registration and login, with working layout and form validation.
Signup Commit
Login CommitBasic Routing Setup
Established initial routing logic to navigate between the main pages.
Routing CommitUser Questionnaire Page
Created a multi-step form displayed after registration, allowing users to specify preferences for personalized training programs.
Questionnaire Commit
Fronted part is deployed here.
Backend #
Progress during Week 2 was focused on defining the API contract and preparing the backend for upcoming integration with the frontend.
Basic Endpoints with Dummy Data
One to two base endpoints with dummy responses were already implemented last week.
Dummy Data Endpoints CommitCore Business Logic and API Implementation
Added initial backend logic and API endpoints to support MVP features.
Core Logic CommitDatabase Integration
Connected the project to the database and added a guide for working with it.
Database Setup Commit
The following diagram illustrates the current architecture of our application:

Backend part is deployed here.
ML System Design #
Overview #
The ML system consists of two core components:
- Recommendation System: Delivers personalized course recommendations to users
- Image-to-Tracker: Converts exercise images into structured tracking programs
Recommendation System #
Current Approach #
Due to limited initial data, the system employs synthetic data generation for the first iteration model training.
Data Generation Pipeline #
User Data Structure #
- Profile Data: Registration form responses (weight, fitness goals, experience level, etc.)
- Interaction Metadata: User engagement metrics (completed courses, retention rates, activity patterns)
Synthetic Data Generation Process #
User Profile Generation
- Multiple LLMs (DeepSeek, Gemma, LLaMA) generate diverse user profiles
- Prompt engineering with seed phrases ensures profile diversity
- Metadata generation aligned with corresponding user profiles
- Target: 1,000 training examples for baseline model
Course Data Generation
- Multiple LLMs generate the main content of exercises (for gym, swimming or other)
- For each course type (gym, swimming, others) we generate separate training program
- Finally, we align generated courses with coach-provided metadata forms (also generated by LLMs)
Dataset Assembly
- For each user profile + metadata, DeepSeek R1 rearranges the courses (generates optimal course-user pairings for training data)
Model Training
The training process utilizes a bi-encoder architecture to learn meaningful representations of users and courses. It aims to maximize similarity between compatible user-course pairs while minimizing similarity for incompatible ones, enabling effective personalized recommendations through vector similarity search.Architecture:
- Bi-encoder models (e5, bge-m3, or similar embeddings models)
- Separate encoding for user profiles and course descriptions
- Vector generation for both user queries and course documents
Training Objective:
- Contrastive learning approach using triplet, margin, or contrastive loss functions
- Optimize embeddings to place similar user-course pairs closer in vector space

Image-to-Tracker System #
Current Implementation #
The system utilizes open-source visual language models (VLM) to extract structured data from exercise images.
Process Flow:
- Image Processing: Vision-language model analyzes input images
- Text Extraction: Converts visual content to structured JSON format:
[ { "content": "exercise_description" } ] - Tracker Mapping: Each JSON object maps to a dedicated tracker page
Future Development (wonât be included in MVP) #
Data Collection Strategy: - Use images from real coaches to build the dataset - Annotate those images by DeepSeek or assessors - Training pair generation: (image) â (structured_tracker_json)
Users #
To better understand how trainers create and structure their training programs, we asked several of them to share real examples. This research helps us design a more intuitive and relevant upload feature that aligns with their actual workflows.
Below are four examples of training programs provided by different trainers:

It turned out that most trainers write their programs using tables, while one of them prefers to save and structure their programs in Telegram saved messages.
Weekly Progress Report #
During the second week, our team transitioned from planning to early implementation. The primary focus was on expanding the initial requirements, creating design prototypes, and setting up foundational structures for both the frontend and backend.
| Team Member | Contribution Description | Contribution Link |
|---|---|---|
| Ildar Rakiev | Sign page implementation, frontend and backend deploy, architecture of the application | Signin Page Commit, Architecture, Frontend, Backend |
| Makar Dyachenko | Project structure in the frontend repository, welcome page implementation, signup page implementation, basic routing, user questionary page | Welcome Page Commit, Signup Page Commit, Routing Commit, Questionnaire Commit |
| Salavat Faizullin | Core business logic and API implementation, database integration | API implementation, Database Setup Commit |
| Egor Chernobrovkin | Research potential models/algorithms, EmbedderAPI & Docs with ML system design | EmbedderAPI and Docs Pull Request |
| Alexandra Starikova | Start collecting/preparing a dataset, pipeline for generating sport programs via LLM | Pipeline for generating programs Pull Request |
| Ilona Dziurava | Report writing, user stories specification, backlog creation, contacting trainers for training form information | Backlog |
| Anisya Kochetkova | User flow diagram for key interactions, basic endpoints | User flow diagram, Endpoints Commit |
Challenges & Solutions #
One challenge we encountered was ensuring consistency between the frontend and backend specifications. We addressed this by closely aligning on the API contract early and scheduling regular sync meetings between the respective subteams.
Conclusions & Next Steps #
By the end of Week 2, we successfully transformed initial ideas into concrete requirements, established foundational designs, and set up project structures across the frontend and backend. The team now has a shared understanding of both the technical and functional aspects of the project, with wireframes, a prioritized backlog, and initial codebase scaffolding in place.
Looking ahead to Week 3, our focus will shift to MVP development, where we aim to implement core functionality and deliver at least one complete end-to-end user flow. This will involve connecting frontend components to backend endpoints, integrating with the database, and enabling meaningful interactions within the application.
Next Steps for Week 3 #
- Frontend: Connect UI components to real backend data and handle basic user interactions.
- Backend: Implement core business logic and enable database operations for MVP features.
- Database: Finalize schema and ensure it supports the initial set of use cases.
- Authentication: Begin integrating simple user auth flows.
- ML: Train a basic model version and expose an API endpoint.
- Testing & Demo Prep: Ensure the MVP flow is stable enough for an internal demo.
This upcoming sprint will be critical in turning the project from a prototype into a working product.
We confirm that the code in the main branch:
In working condition. Run via docker-compose.