FITNESS APP

TrainUp

TrainUp

An end-to-end mobile fitness app, designed around three real people with no gym, no time, and no experience. I took it from user personas and user flows to a full design system and high-fidelity screens, with accessibility built in from the start.

An end-to-end mobile fitness app, designed around three real people with no gym, no time, and no experience. I took it from user personas and user flows to a full design system and high-fidelity screens, with accessibility built in from the start.

Case Study

UX/UI Design

Mobile

Accessibility

B2C

MY ROLE

UX/UI Designer

UX/UI Designer

TOOLS

Figma · Photoshop · Affinity

Figma · Photoshop · Affinity

TYPE

Concept Project

Concept Project

the brief

A fitness app built around the person, not the gym

A fitness app built around the person, not the gym

TrainUp was designed to remove the barriers between people and their next workout. No gym required, no experience needed. The goal was simple: a mobile app that adapts to real people with real constraints, and makes starting easy.

TrainUp was designed to remove the barriers between people and their next workout. No gym required, no experience needed. The goal was simple: a mobile app that adapts to real people with real constraints, and makes starting easy.

the problem

Built for the fit. Not for everyone else

Built for the fit. Not for everyone else

Most fitness apps are made for people who already know what they’re doing. Everyone else is left to figure it out alone: the beginner scared of being judged, the parent with 20 minutes and no babysitter, the retiree who wants to move but doesn’t know how.

There’s no shortage of fitness content. What’s missing are apps built around the person using them. Their time, their equipment, their goals, their body.

Most fitness apps are made for people who already know what they’re doing. Everyone else is left to figure it out alone: the beginner scared of being judged, the parent with 20 minutes and no babysitter, the retiree who wants to move but doesn’t know how.

There’s no shortage of fitness content. What’s missing are apps built around the person using them. Their time, their equipment, their goals, their body.

How might we make a fitness app so personal and easy to use that the hardest part is the workout itself, not finding it?

How might we make a fitness app so personal and easy to use that the hardest part is the workout itself, not finding it?

the research

What’s out there, and what’s missing

What’s out there, and what’s missing

This project started with three people close to me: an older woman who has never been inside a gym, a busy mom with almost no time for herself, and me, with some equipment at home and a full schedule. Three very different needs, and the same problem: nothing out there was built for any of them.

This project started with three people close to me: an older woman who has never been inside a gym, a busy mom with almost no time for herself, and me, with some equipment at home and a full schedule. Three very different needs, and the same problem: nothing out there was built for any of them.

APP

PRIMARY FOCUS

GAP IDENTIFIED

Nike Training Club

Nike Training Club

Beautiful UI

Beautiful UI

Gym-focused, overwhelming

Gym-focused, overwhelming

MyFitnessPal

MyFitnessPal

Calorie tracking

Calorie tracking

Workouts are secondary

Workouts are secondary

Strong Workout

Strong Workout

Experienced lifters

Experienced lifters

Not beginner friendly

Not beginner friendly

7 Minute Workout

7 Minute Workout

Quick workouts

Quick workouts

Rigid, one size fits all

Rigid, one size fits all

Fitbod

Adaptive workouts

Adaptive workouts

Complex, expensive

Complex, expensive

Home Workout App

Home Workout App

Home exercises

Home exercises

Doesn't adapt to user goals

Doesn't adapt to user goals

Not one app asked who you were before telling you what to do. They assumed your equipment, your experience, your time, and your goals. TrainUp asks first.

Not one app asked who you were before telling you what to do. They assumed your equipment, your experience, your time, and your goals. TrainUp asks first.

APP

PRIMARY FOCUS · GAP IDENTIFIED

Nike Training Club

Beautiful UI · Gym-Focused, Overwhelming

Strong Workout

Experience lifters · Not beginner friendly

7 Minute Workout

Quick workouts · Rigid, one size fits all

Fitbod

Adaptive workouts · Complex, expensive

Home Workout App

Home exercises · Doesn't adapt to user goals

MyFitnessPal

Calorie Tracking · Workouts are secondary

the users

Three people. Three completely different needs

Three people. Three completely different needs

TrainUp wasn't designed for the average user. It was designed for three very specific people the fitness industry keeps forgetting.

TrainUp wasn't designed for the average user. It was designed for three very specific people the fitness industry keeps forgetting.

Alex, 30 · Full-time worker Fitness enthusiast

MOTIVATION

Build muscle and stay active

FRUSTRATION

Endless options, no clear starting point

CONSTRAINT

Under 30 mins · basic equipment · no gym

Sarah, 35 · Part-time retail worker, mother of two

MOTIVATION

Energy and strength to be present for her family

FRUSTRATION

Fitness plans feel complicated and hard to maintain

CONSTRAINT

Unpredictable schedule · early morning or late night only

Linda, 67 · Retired teacher, grandmother

MOTIVATION

Stay mobile and independent for her grandchildren

FRUSTRATION

Gym feels intimidating · fears injury from wrong exercises

CONSTRAINT

No gym · basic equipment · needs low-impact guidance

the PROCESS

Designing around the person, not the feature

Designing around the person, not the feature

I didn’t start with how TrainUp should look. Every decision started with a person, a problem, and one question: what’s the simplest way to solve this?

I didn’t start with how TrainUp should look. Every decision started with a person, a problem, and one question: what’s the simplest way to solve this?

Feature prioritization: deciding what to cut

I had a lot of ideas at the start: a custom workout builder, advanced filters, calorie tracking, meal plans, and social features. I checked each one with the same question: does this help someone work out, or does it make them think more?


I cut the custom workout builder. Adding and removing exercises by hand creates the same decision fatigue TrainUp was meant to solve. I removed calorie tracking, because it isn’t relevant to everyone and it adds complexity. And I cut the social features, because competition is the opposite of what Linda and Sarah need.


Every feature I removed made TrainUp better.

Custom workout builders, advanced filtering, calorie tracking, meal planners, and social features. Each idea was evaluated against one question: Does this help the user work out, or does it make them think more?

The custom workout builder was cut. Giving users the ability to manually add and remove exercises introduced the same decision fatigue TrainUp was designed to eliminate. Calorie tracking was removed — not relevant to all users and directly contradicts the frictionless philosophy. Social features were cut — competition is the opposite of what Linda and Sarah need.


Every removed feature made TrainUp stronger. Subtraction was the design process.

Custom workout builders, advanced filtering, calorie tracking, meal planners, and social features. Each idea was evaluated against one question: Does this help the user work out, or does it make them think more?

The custom workout builder was cut. Giving users the ability to manually add and remove exercises introduced the same decision fatigue TrainUp was designed to eliminate. Calorie tracking was removed — not relevant to all users and directly contradicts the frictionless philosophy. Social features were cut — competition is the opposite of what Linda and Sarah need.


Every removed feature made TrainUp stronger. Subtraction was the design process.

Onboarding

Onboarding

Seven screens, one question each, so nobody feels overwhelmed.

Seven screens, one question each, so nobody feels overwhelmed.

Before users see a single workout, TrainUp learns who they are: their goal, fitness level, available time, equipment, how often they want to train, preferred days, and reminders. It asks one question at a time, using progressive disclosure.

One question per screen was a deliberate decision. A single form with seven fields would feel like a gym intake form. Cold, intimidating, and easy to abandon. One question at a time feels more like a conversation.

Every screen has a Skip option, so users are never forced to answer. I wanted people to feel in control from the first tap. If an app respects you before you even start, you’re more likely to trust it.

The last screen says: “You’re all set! We’ve built a personalized workout experience just for you.” After seven quick questions, the user goes into the home screen feeling ready, not nervous about where to start.

Before users see a single workout, TrainUp learns who they are: their goal, fitness level, available time, equipment, how often they want to train, preferred days, and reminders. It asks one question at a time, using progressive disclosure.

One question per screen was a deliberate decision. A single form with seven fields would feel like a gym intake form. Cold, intimidating, and easy to abandon. One question at a time feels more like a conversation.

Every screen has a Skip option, so users are never forced to answer. I wanted people to feel in control from the first tap. If an app respects you before you even start, you’re more likely to trust it.

The last screen says: “You’re all set! We’ve built a personalized workout experience just for you.” After seven quick questions, the user goes into the home screen feeling ready, not nervous about where to start.

Home screen: designed to build habits

Home screen: designed to build habits

Workout library & filters: more control when you need it

Workout library & filters: more control when you need it

The workout library gives users access to every workout in the app. But too many options without structure creates the same overwhelm TrainUp was built to avoid.

The filters let users narrow workouts by duration, equipment, goal, and level, separate from what they chose during onboarding. Because life changes every day. Alex has 45 minutes on Saturday but only 15 on Tuesday. Sarah’s baby slept badly, so she needs something lighter. Linda’s knee hurts, so she needs to skip lower body workouts.

The workout library gives users access to every workout in the app. But too many options without structure creates the same overwhelm TrainUp was built to avoid.

The filters let users narrow workouts by duration, equipment, goal, and level, separate from what they chose during onboarding. Because life changes every day. Alex has 45 minutes on Saturday but only 15 on Tuesday. Sarah’s baby slept badly, so she needs something lighter. Linda’s knee hurts, so she needs to skip lower body workouts.

On the home screen, I keep choices to a minimum to reduce cognitive load. In the library, the filters are there for users who want more control. That’s progressive disclosure: the right information at the right moment.

The workout card: information architecture

The workout card: information architecture

Three pieces of information. That’s all a user needs to decide if a workout is right for them.

Time, equipment, and body area are visible before a single tap. Everything else was left out on purpose. I removed calories, and replaced detailed muscle groups with simple body areas: Full Body, Upper Body, Lower Body. Clear enough for a beginner, still useful for someone experienced.

The save button gives users control. They can build their own collection without leaving the page they’re browsing. The goal is that someone can look at a card for three seconds and think: I have time for this, I have the equipment, this is right for me.

Three pieces of information. That’s all a user needs to decide if a workout is right for them.

Time, equipment, and body area are visible before a single tap. Everything else was left out on purpose. I removed calories, and replaced detailed muscle groups with simple body areas: Full Body, Upper Body, Lower Body. Clear enough for a beginner, still useful for someone experienced.

The save button gives users control. They can build their own collection without leaving the page they’re browsing. The goal is that someone can look at a card for three seconds and think: I have time for this, I have the equipment, this is right for me.

Three seconds to decide. That’s the information architecture of TrainUp in one card.

The workout detail: know what’s coming before you start

The workout detail: know what’s coming before you start

Before a single rep, users know exactly what they’re getting into: the exercise list, equipment, estimated time, and goal. All visible before they commit.

The Start Workout button stays fixed at the bottom. Always visible, never rushed. Users can read, get ready, and tap when they’re ready. It’s a small pause before starting, on purpose, because it helps people start with confidence.

Before a single rep, users know exactly what they’re getting into: the exercise list, equipment, estimated time, and goal. All visible before they commit.

The Start Workout button stays fixed at the bottom. Always visible, never rushed. Users can read, get ready, and tap when they’re ready. It’s a small pause before starting, on purpose, because it helps people start with confidence.

Informed users are confident users.

The workout screen: designed for the real world

The workout screen: designed for the real world

Most app screens are designed for someone sitting at a desk. This one was designed for someone on a yoga mat, in a backyard, or in a living room with a baby nearby. Phone on the floor. Sweaty hands. Sun on the screen.

Every decision came from that physical reality.

Most app screens are designed for someone sitting at a desk. This one was designed for someone on a yoga mat, in a backyard, or in a living room with a baby nearby. Phone on the floor. Sweaty hands. Sun on the screen.

Every decision came from that physical reality.

Designed for real life, not the ideal scenario.

The cancel modal: ethical UX

The cancel modal: ethical UX

When users try to stop a workout, most apps use guilt. “Are you sure you want to quit?” “You’re so close!” Dark patterns pretending to be motivation.

TrainUp’s cancel modal says: “Break time... or one more rep? 🔥” Two options: Keep Going or Stop Workout. No shame, no manipulation.

The user decides. The app offers a gentle push, not a guilt trip.

When users try to stop a workout, most apps use guilt. “Are you sure you want to quit?” “You’re so close!” Dark patterns pretending to be motivation.

TrainUp’s cancel modal says: “Break time... or one more rep? 🔥” Two options: Keep Going or Stop Workout. No shame, no manipulation.

The user decides. The app offers a gentle push, not a guilt trip.

An app that respects you when you’re struggling is an app you come back to.

Workout complete: the reward

Workout complete: the reward

Every habit needs a reward. The workout complete screen is where that happens.

It shows active time, the streak, and one encouraging message: “Consistency wins. Great work today.” No calories burned, no percentage completed. Just the fact that you showed up and finished. That’s what matters.

A button to the progress screen keeps the momentum going for users who want to track their progress.

Every habit needs a reward. The workout complete screen is where that happens.

It shows active time, the streak, and one encouraging message: “Consistency wins. Great work today.” No calories burned, no percentage completed. Just the fact that you showed up and finished. That’s what matters.

A button to the progress screen keeps the momentum going for users who want to track their progress.

The reward is showing up. Everything else is secondary.

Progress screen: celebrating consistency

Progress screen: celebrating consistency

Not everyone is motivated by numbers. Some people just need to see that they’re showing up.

The monthly calendar uses the same flame icons as the home screen streak, so the visual language stays consistent across the whole app. Milestone messages celebrate consistency, not performance.

Linda doesn’t need to know her heart rate. She needs to know she’s doing it.

Not everyone is motivated by numbers. Some people just need to see that they’re showing up.

The monthly calendar uses the same flame icons as the home screen streak, so the visual language stays consistent across the whole app. Milestone messages celebrate consistency, not performance.

Linda doesn’t need to know her heart rate. She needs to know she’s doing it.

Consistency first. Performance is optional.

Empty states: small details that matter

Empty states: small details that matter

Empty states are where many apps give up. A blank screen with no guidance is a dead end.

The Saved Workouts empty state has a barbell illustration, a friendly message, and one clear CTA: “Browse Workouts.” Instead of a dead end, the user gets a next step. They’re never stuck.

Empty states are where many apps give up. A blank screen with no guidance is a dead end.

The Saved Workouts empty state has a barbell illustration, a friendly message, and one clear CTA: “Browse Workouts.” Instead of a dead end, the user gets a next step. They’re never stuck.

The details nobody notices are the details that make everything feel right.

the PIVOT

When the right color was the wrong choice.

When the right color was the wrong choice.

The original primary color for TrainUp was orange. It communicated energy, warmth, and motion, which felt right for a fitness brand. It felt alive. It felt like movement.

Then came the accessibility audit.

A WCAG contrast check showed a critical failure. Orange buttons with white text scored 2.02:1, far below the 4.5:1 minimum for WCAG AA. And it’s not just a number. It’s a real problem for real people: sunlight glare, low screen brightness outdoors, users with visual impairments.

TrainUp was designed for everyone. A color that leaves people out goes against everything the product stands for.

The original primary color for TrainUp was orange. It communicated energy, warmth, and motion, which felt right for a fitness brand. It felt alive. It felt like movement.

Then came the accessibility audit.

A WCAG contrast check showed a critical failure. Orange buttons with white text scored 2.02:1, far below the 4.5:1 minimum for WCAG AA. And it’s not just a number. It’s a real problem for real people: sunlight glare, low screen brightness outdoors, users with visual impairments.

TrainUp was designed for everyone. A color that leaves people out goes against everything the product stands for.

The solution was Deep Blue-Grey (#36454F). Professional, calm, and strong. White text on Deep Blue-Grey scores 9.90:1, which meets WCAG AAA, the highest level.

Orange didn’t disappear. It became the accent color, used for highlights, streaks, and moments of energy across the app. It still brings warmth and motion. It just doesn’t carry the responsibility of accessibility anymore.


Function won over aesthetics. The best design decision in this project was changing something I loved.

The solution was Deep Blue-Grey (#36454F). Professional, calm, and strong. White text on Deep Blue-Grey scores 9.90:1, which meets WCAG AAA, the highest level.

Orange didn’t disappear. It became the accent color, used for highlights, streaks, and moments of energy across the app. It still brings warmth and motion. It just doesn’t carry the responsibility of accessibility anymore.


Function won over aesthetics. The best design decision in this project was changing something I loved.

the solution

The finished product

The finished product

The research, the personas, the color pivot, and every feature I decided to cut all led here.

A fitness app built around real people, their time, their space, and their level. You don’t need a gym or any experience to start.

View Prototype

the ecosystem

One brand, three connected products

One brand, three connected products

Most portfolio projects are a single deliverable. TrainUp is three products designed to work together as one system.

Most portfolio projects are a single deliverable. TrainUp is three products designed to work together as one system.

The connection

The brand identity is the foundation. Every color, typeface, and design decision in the app and the store comes from it. So TrainUp isn’t three projects with the same name. It’s one ecosystem with three ways in.

The brand identity is the foundation. Every color, typeface, and design decision in the app and the store comes from it. So TrainUp isn’t three projects with the same name. It’s one ecosystem with three ways in.

How they work together

A user downloads TrainUp and starts working out at home. Over time, they want better equipment. The store is the next step, organized around the same goals the app already knows about them.

Or a user finds TrainUp through the store, and the app becomes their next step. Each product leads to the other, which helps keep users that one product alone might lose.

A user downloads TrainUp and starts working out at home. Over time, they want better equipment. The store is the next step, organized around the same goals the app already knows about them.

Or a user finds TrainUp through the store, and the app becomes their next step. Each product leads to the other, which helps keep users that one product alone might lose.

The visual system

The app, the store, and the brand share the same colors, typography, and design language. Moving between the app and the store feels like the same place. That’s the design system doing its job.

The app, the store, and the brand share the same colors, typography, and design language. Moving between the app and the store feels like the same place. That’s the design system doing its job.

This is product thinking at the system level.

the REFLECTION

What TrainUp taught me

What TrainUp taught me

What I'm Most Proud Of

What I'm Most Proud Of

The restraint.

TrainUp could have been overwhelming. The feature list started long: custom workout builders, social features, calorie tracking, meal plans. I cut every one of them. They were interesting ideas, but they didn’t help the person using the app.

I kept asking myself: would I actually use this? Would Sarah? Would Linda? If the answer wasn’t yes, the feature was gone.

Everything left in the app is there because a real person needed it.

TrainUp could have been overwhelming. The feature list started long: custom workout builders, social features, calorie tracking, meal plans. I cut every one of them. They were interesting ideas, but they didn’t help the person using the app.

I kept asking myself: would I actually use this? Would Sarah? Would Linda? If the answer wasn’t yes, the feature was gone.

Everything left in the app is there because a real person needed it.

What I’d do differently

What I’d do differently

The onboarding flow was the decision I was least sure about.

Seven questions felt like the right number. Enough to personalize the experience without overwhelming people before they even start. But that decision was based on instinct, not real data.

Would a first-time user give up at question four? Would Linda feel intimidated? Would Alex skip it all to get to the workouts faster?

Without real users going through that flow, every onboarding decision was an educated guess. If I could go back, I would test it with five real people before building anything else.

The onboarding flow was the decision I was least sure about.

Seven questions felt like the right number. Enough to personalize the experience without overwhelming people before they even start. But that decision was based on instinct, not real data.

Would a first-time user give up at question four? Would Linda feel intimidated? Would Alex skip it all to get to the workouts faster?

Without real users going through that flow, every onboarding decision was an educated guess. If I could go back, I would test it with five real people before building anything else.

What’s next

If TrainUp were a real product, the first step would be simple: get it into real hands as fast as possible.

I’d launch a free MVP with ads. Not because the design is unfinished, but because no amount of design thinking on my own can replace hundreds of users with different goals, fitness levels, and lives.

Real feedback leads to better versions. That’s how a product keeps improving.

If TrainUp were a real product, the first step would be simple: get it into real hands as fast as possible.

I’d launch a free MVP with ads. Not because the design is unfinished, but because no amount of design thinking on my own can replace hundreds of users with different goals, fitness levels, and lives.

Real feedback leads to better versions. That’s how a product keeps improving.

TrainUp started as a personal problem. It became a product for everyone the fitness industry keeps forgetting. That’s still the goal.

hello@ivanrojas.design

Designed & built by Ivan Rojas

© 2026

hello@ivanrojas.design

Designed & built by Ivan Rojas

© 2026

hello@ivanrojas.design

Designed & built by Ivan Rojas

© 2026