Inspiration
Most fitness apps assume life will stay perfectly on schedule. In reality, that is exactly why so many people quit. A user misses one workout because of work, low energy, or soreness, and suddenly the plan no longer fits their week. What should feel supportive starts to feel punishing.
We built FlexFit to be the opposite of a rigid training app. Instead of locking users into a fixed multi-week program, FlexFit adapts week by week to the user’s real context: how many days they can train, how they are feeling, what equipment they have, and how their recent workouts actually went. The goal is simple: users should never feel like they have “fallen behind.” The plan should meet them where they are.
How we built it
FlexFit is built as a mobile-first web app with a React 18 + TypeScript frontend powered by Vite. We used Tailwind CSS and shadcn/ui to create a polished, app-like interface with a strong focus on clarity, speed, and touch-friendly interactions. Key flows such as onboarding, weekly check-in, plan viewing, workout tracking, and post-workout feedback are implemented as focused screens in a single-page application.
For the training experience itself, we built a custom interactive muscle map component that supports front and back body views, highlighted training zones, and post-workout muscle feedback. We also created a workout tracking flow that lets users log sets, monitor progress during a session, and quickly capture movement-quality feedback after exercises.
On the AI side, we designed a lightweight FastAPI backend that acts as a stateless proxy between the frontend and OpenAI. The backend exposes focused AI endpoints for plan generation, post-workout feedback, analysis, and weekly summaries. Plan generation is streamed back to the frontend in real time using server-sent events, which allows users to see the AI reasoning unfold instead of waiting behind a loading spinner.
For persistence, we deliberately kept the product lightweight: all user data is stored in localStorage, including profile data, weekly check-ins, plans, workouts, and feedback history. That let us move fast without building authentication, database models, migrations, or CRUD infrastructure, and spend more time on the adaptive experience itself.
Challenges we ran into
One of the biggest challenges was deciding how the system should react when different feedback signals conflict. A user might complete all planned sets, but also report that a movement felt awkward or painful. We had to design a clear priority model so that the AI behaves in a trustworthy way, with safety signals and explicit user feedback taking priority over raw completion data.
Another major challenge was building an interactive muscle map that felt intuitive on mobile. It had to be visually clear, responsive to touch, support both training highlights and feedback input, and still feel lightweight enough to fit naturally into the overall product flow.
We also spent a lot of time on UX pacing. Adaptive fitness products only work if feedback stays low-friction. Asking for too much input makes the experience feel like homework; asking for too little weakens personalization. Balancing signal quality with speed was one of the most important design problems in the project.
Finally, streaming AI reasoning in a way that feels helpful rather than robotic was more difficult than expected. The output had to sound like a coach making decisions, not a machine listing parameters.
Accomplishments that we're proud of
We are proud that FlexFit delivers a complete adaptive training loop rather than just a static mockup. A user can go through onboarding, complete a weekly check-in, receive a generated plan, log a workout, submit post-workout feedback, and use that data to influence future planning decisions.
We are also proud of the streaming plan generation experience. Showing the reasoning in real time makes the app feel far more transparent and premium than a typical “Generate Plan” button followed by a spinner. It gives users visibility into why the system is making certain decisions.
The interactive muscle map is another standout achievement. It adds both visual appeal and practical value by helping users quickly understand training focus and communicate muscle-level feedback in a more natural way than filling out text fields.
Architecturally, we are proud of how much we achieved with a minimal stack. By using localStorage for persistence and a thin AI backend for inference only, we were able to keep the system focused, fast to build, and aligned with hackathon priorities.
What we learned
We learned that adaptive products are only as good as the quality of the feedback they collect. Completion data is useful, but explicit user feedback is far more valuable when it comes to making safe, personalized decisions. If a user says something felt wrong, the system has to take that seriously.
We also learned how much perceived product quality is shaped by interaction design. Streaming AI responses, smooth state transitions, and visual feedback loops can make the experience feel dramatically more intelligent and engaging, even when the underlying waiting time stays the same.
Another big lesson was that simplifying architecture creates room for better product design. Avoiding unnecessary backend complexity gave us time to invest in the parts users actually notice: interaction quality, adaptability, and trust.
Most importantly, we learned that fitness adherence is not just a programming problem. It is a behavioral design problem. Users do better when the plan adapts to real life instead of making them feel guilty for being human.
What's next for FlexFit
The next step is to deepen personalization over time. We want FlexFit to build a stronger memory of each user’s training patterns so the AI can make smarter decisions across multiple weeks, not just the current one.
We also want to expand the analytics layer with clearer progress views, such as training volume trends, strength changes, and muscle balance over time. That would help users see evidence of progress, not just follow instructions.
On the product side, cloud sync and account support would make the experience more practical across devices, while wearable integrations could unlock richer recovery signals and more passive data collection.
Finally, we want to push the coaching experience further with more contextual recommendations, better exercise substitution logic, and a stronger end-of-week reflection flow so FlexFit feels less like a planner and more like a real adaptive training partner.
Log in or sign up for Devpost to join the conversation.