Dario Codipietro

Case study · 2021 · Lead Product Designer

VAHA: Community and gamification

As Lead Product Designer at VAHA, I designed community and gamification features for the smart mirror and its companion app, aimed at retention across live and on-demand classes.

Role
Lead Product Designer
Team
product team
Shape
One workshop, three tile sets, one component library
Nine class tiles for the VAHA mirror in columns for coming up, live and on demand, with a member count on the first row, one friend's invitation or challenge on the second and the same from five friends on the third.

Context

VAHA made a smart mirror for at-home training, a connected device that streamed live, encore and on-demand classes and offered training plans, with a companion app for members. In June 2021 the team had a new reactions feature, and live reactions were about to launch.

The aim was retention. A note on the workshop board, linked to the flow zone on Csikszentmihalyi’s diagram, says gamification would help users reach that state and come back.

01Workshop

Framing the workshop

I ran a gamification strategy workshop on engagement and retention in June 2021, my first month at VAHA, from a Miro board I set up for it. The board opens with a primer in four frames: Csikszentmihalyi’s flow model, the basics of a gamified experience, the main tools and Bartle’s player types.

The basics split a gamified experience into motivation, mastery and triggers. The triggers follow Fogg’s behaviour model: a facilitator for users who are motivated but lack the ability, a spark for users who are able but not motivated, and a signal for users who have both. The main tools are reward systems, challenges, storylines and competition.

Tearing down Strava, Duolingo and Reddit

The teardown grouped screens from Strava, Duolingo and Reddit by mechanic, among them Strava’s clubs, challenges and leaderboards, Duolingo’s streaks, XP, leagues and lightning rounds, and Reddit’s community awards and avatar customisation. Some labels use the primer’s words, such as a spark for a surprise gift box. Notes on the board ask what VAHA’s regular wins would be, given how well Duolingo’s frequent rewards for small wins work, and record that a challenge mechanic very close to Strava’s was already under consideration.

Ideating by player type

Ideation ran twice, a warm-up and then the full board, under four questions, the first “What will hook them in?” and the last “What will keep them coming back?” The columns are Bartle’s four types, each with a short profile, such as curious and not competitive for explorers. The full board holds 36 ideas, among them challenges that progress with a movement (50 squats, then 100), leaderboards across live and on-demand classes, a “join me” invite, a workout together with a fresh leaderboard, face-offs on camera in live classes and points to spend in a VAHA shop.

Dot voting the backlog

The same 36 ideas then went to a dot vote to prioritise the backlog, with the result laid out on the board in two columns.

Of the 36 ideas, 19 got votes, among them challenges that progress with a movement, streaks, levels, badges of honour on the profile, leaderboards across live, encore and on-demand classes, the “join me” invite, seeing who is active, success stories, kudos on friends’ activity, and rewards with points to spend in the shop.

Among the 17 without votes were content unlocked by level, special-occasion badges, notifications that set a timed challenge, face-offs on camera, a community championship, chat, sharing to social media and the workout together.

The board holds no UI, but several of the voted ideas are drawn in two Figma files, Community and Components, and so is the workout together, which got no votes. Neither file is dated.

02Tiles

Social states on the class tile

The mirror and the app list classes as tiles, each with the class photography, the level, the title, the length, the start time and the language, and a tag for encore or live. In the Community file, headed New Tiles, I drew seven social states on that tile for classes coming up, live and on demand: two or more members in the class, one friend or several inviting you, one friend or several already in it, no one in it, and, for classes coming up only, a workout together with the friends you invited.

On demand, an invitation from a friend becomes a challenge, and the member count and the friends in class drop out. The Mobile frame has the same states on the app’s smaller tile, and the copy on both is in German and English.

Mobile tiles. The calendar control, on demand only on the mirror, also appears on classes coming up in the app.

Open in Figma ↗ Get password →

Friends’ activity on the mirror

A second tile type on the mirror shows which class friends are in right now, with a line such as a friend meditating and a live dot on each avatar. I drew four cases for how the names and avatars fit: one friend, two names and avatars on one line, names wrapping under the avatars, and a large group cut to nine avatars and three names, with a count for the rest. The community tag that carries the member count, the friends line and the invitation on the class tiles is one component, with four statuses in up to four sizes.

Mirror friends activity. Each row is labelled with the rule it tests, on the same meditation class.

Open in Figma ↗ Get password →

Community tags. Two versions of the member count, an icon with a number and a count of members, then the friends line and the invitation, from small to extra large.

Open in Figma ↗ Get password →

03Components

Badges and streaks

Achievements are earned for minutes, workouts, live classes and streaks. A badge in progress is grey, with an orange stroke round its edge for the progress and a line for what is left, such as 120 to go, and an earned badge turns gold and carries its date. Records such as a top day or a top month are silver and bronze medals.

Each category has upcoming, in-progress and done states, and records run by day, month and year. Minutes, workouts, streaks, records and live classes each have a five-keyframe unlock animation, and in the streak animation the grey shield turns into a silver medal with a scatter of sparks.

Achievements panel. The minutes badge is a stopwatch, the workouts badge a hexagon and the streak badge a shield, and See all opens the full set.

Open in Figma ↗ Get password →

Comparing minutes with friends

The friends comparison is a chart of cumulative minutes across the month, with the member’s line against the previous month, the VAHA average and anyone they add. It has week and month views, the month’s total and the next target. People are added from a panel that ranks members by total minutes, with a search by name and filters for location, gender, age group, fitness level and goals.

Friends chart. Each line ends in an avatar, the member’s own with the minutes so far, and anyone added can be removed from the legend.

Open in Figma ↗ Get password →

Stories and the class card

Stories have a rail of friends’ stories with unread, read, publishing and published states, a viewer with reactions and view counts, and a camera with icons for text, colour, drawing, stickers and music. The capture flow has a second entry from a class, and that version adds a “Just worked out” card for the class to the photo.

A friend’s story. Five reactions under the photo, a clap and a drop of sweat among them, with the likes and views down the side.

Open in Figma ↗ Get password →

A story from a class. The photo shows the mirror mid-class, with the class card attached and a class tag at the top.

Open in Figma ↗ Get password →

One library for the mirror and the app

The designs in this study draw on one Components file, a UI library built with variant properties for status, type, size and timeframe. It has 13 card types, among them a mirror tile, a mobile tile, a friends activity tile and a story card. The metatags for live, encore, language and level, the live-status dots, the add toggle and the avatars, single and stacked, come in up to four sizes. There is also an on-screen keyboard for the mirror in three versions, current, updated and quick wins, filters for classes by level, duration, instructor, equipment and body part, and a VAHAButtons set.

Outcome

The components became part of the design system I built for VAHA, and both prototypes in the profile access test were built from them.

I ran the workshop in my first month at VAHA and handed the designs over when my contract ended in January 2022.

Get the Figma password

Enter your work email to get the password.

Contact

Get in touch

Product design lead across research, design systems and handover, with coding agents in the loop. Contract, outside IR35, or a permanent lead role.

Available
Now
Location
London, remote or hybrid, UK and EU
Right to work
UK settled status, EU citizen
  • RolesLead Product Designer, Principal Product Designer, Design Engineer
  • Experience10+ years
  • ScopeResearch, design systems, prototyping, handover, QA with agents
  • LanguagesEnglish, Italian, Spanish
  • Email[email protected]
  • LinkedInlinkedin.com/in/dariocodipietro

Professional profile

Copy into your coding agent

Skills

  • Product design, end to end
  • UX and interaction design
  • Visual design and motion
  • Prototyping in Figma and code
  • Design systems at scale
  • User research and testing
  • A/B testing and analytics
  • Strategy and discovery
  • AI product design
  • Design to code, with agents
  • Accessibility, WCAG 2.2 AA
  • Leadership and mentoring

Platforms

iOS, Android, responsive web, smart TV and connected devices

Sectors

  • AI products
  • B2B SaaS
  • Consumer apps
  • Streaming, media and sport
  • Health, wellness and food
  • Legal tech
  • Telecoms and utilities

Tools

  • Figma
  • FigJam
  • Figma Make
  • Claude Design
  • Framer
  • Axure RP
  • Storybook
  • Claude Code
  • Cursor
  • Codex
  • MCP
  • GitHub
  • Linear
  • Jira
  • Confluence
  • Notion
  • Miro
  • Prolific
  • Lyssna
  • Maze
  • PostHog
  • Amplitude

Send a message

Tell me about the role and when it starts, and I will reply by email.