Backend, models, and client roles stay the same but are now introduced with stronger pacing and hierarchy.
Three model views, one fitness intelligence story.
This frontend now explains the platform like a product narrative while the Flask routes, model assets, prediction service, analytics payload, and browser-side tools remain unchanged.
The page makes the frontend-only redesign explicit without touching routes, payloads, or inference logic.
Predicts the continuous fitness score. It remains the core estimate later normalized into the practical score shown in the dashboard experience.
Maps the same scaled feature vector into a human-readable band such as Fit, Average, or Unfit without changing endpoint structure.
Groups the user into a lifestyle bucket so the interface can tell a more useful behavior story beyond one isolated score.
How data moves through the system.
1,800 synthetic gym-member records are cleaned, scaled, and encoded during training.
Scikit-learn artifacts are serialized with `joblib` and loaded once when the Flask app starts.
The dashboard sends JSON to `/predict` and receives score, level, lifestyle, validation, planner, and suggestion data.
The analytics page reads precomputed metadata from `/api/analytics` instead of recalculating heavy logic in the browser.
A product-shell view of the stack.
Landing, dashboard, analytics, progress, and health pages now present one cohesive product language without changing any backend code path.
The redesign remains template- and asset-driven, so the Flask layer stays isolated from presentation work.