Take-Home Design Exercise · UX/UI Design · 2025
Registration flow for a health services app designed for non-digital-native users. Two days, end-to-end, from research to hi-fi prototype.
01 The Brief
This project was a take-home design exercise completed over two days as part of a company interview process. The brief asked for a registration flow for a U.S. health services app, with one defining constraint: most users are not digitally native. That constraint shaped every decision in the project, from information architecture to visual hierarchy. Designing for this audience is not primarily a usability challenge. It is a trust challenge.
02 Research
The two-day scope did not allow for primary user research. In response to this constraint, I structured the research phase around explicit assumption documentation, analogous studies, and established frameworks to define the problem space before moving into design. The objective was to ensure that every design decision could be traced back to a specific user need or behavioral insight, rather than relying on aesthetic judgment alone.
Prior to any design work, I documented my assumptions about non-digital-native users in order to interrogate them rather than rely on them uncritically. Each assumption was evaluated against the brief and analogous research, and either incorporated into the design rationale or discarded. User goals were derived directly from the brief and informed the hierarchy of features throughout the flow.
Before opening Figma, I completed a Product Design Canvas to establish the full project context: the product goal, the audience, the conditions of use, the design constraints, and the criteria for success. This exercise surfaced the KPIs that would later validate design decisions: registration completion rate, time to sign-up, bounce rate per screen, and user satisfaction post-flow.
The persona, Maria Thompson, is a 63-year-old retired school teacher in Ocala, Florida. She uses a smartphone for messaging and occasional browsing, has low-to-moderate digital confidence, and manages chronic health conditions that require regular medical attention. Her primary goal is to book appointments independently without needing to call or visit a clinic. Maria represents the most common, and most commonly underserved, user type for this kind of health services platform.
The complete user journey spans seven stages, from the EasyMed landing page through to appointment booking. Design work was scoped to the registration and initial onboarding flow, in line with the brief. Mapping the full journey before scoping ensured that handoff points between stages were accounted for and that nothing critical was excluded from the registration design.
Eight onboarding flows were analyzed across healthcare, insurance, wellness, and SaaS categories to identify interaction patterns, accessibility approaches, and UX decisions relevant to a low-confidence user audience. Each app was reviewed and annotated in Figma across four categories: Accessibility Research Notes Interaction Future Feature
03 Aligning Goals
Business objectives and UX goals were mapped before any information architecture decisions were made. In a healthcare context, these two sets of priorities tend to align more closely than in other product categories, but the friction points remain distinct. Documenting both explicitly ensures the design does not optimize for conversion metrics at the expense of user trust, or prioritize user comfort in ways that compromise the data requirements the platform depends on.
04 Lo-Fi Wireframes
Low-fidelity wireframes were developed for all five screens before moving to high-fidelity design, covering both desktop and mobile breakpoints. Each wireframe was annotated directly with research notes, interaction decisions, and accessibility considerations. This phase was used to validate layout logic and screen scope before committing to visual design.
Email is the primary registration input on desktop, where users are more likely to have it accessible. On mobile, the primary input shifts to phone number, aligning with the device in the user's hand and the behavioral patterns of the target audience.
Account verification is handled via SMS code. On most mobile devices, the operating system offers to auto-fill the verification code, reducing manual input and the risk of users switching between apps. All input fields display a persistent label above the field in addition to placeholder text, supporting legibility for users with low digital literacy.
A persistent progress bar at the top of each form screen communicates completion status and reduces perceived task length. Form inputs are positioned on the right side of the layout, with labels on the left, consistent with left-to-right reading direction. The number of inputs per screen is kept minimal to reduce cognitive load across a multi-step flow.
The insurance questions screen uses only drop-down selectors. Limiting the screen to a single input type reduces the number of interaction patterns the user must learn and minimizes the risk of input errors. The single-column layout is maintained for consistency with the rest of the flow.
The Q&A onboarding step captures the user's medical specialty preference before they reach the appointment booking screen. This input is used directly to pre-filter available doctors, creating a seamless transition from registration into the core product experience.
05 High-Fidelity Design
High-fidelity screens were developed in Figma for both desktop and mobile, using the component library and variable system built for this project. Each screen is annotated inline with rationale covering layout decisions, interaction states, and accessibility considerations. The design is built as a system, not a collection of individual screens.
On using Lovable.ai: The EasyMed landing page and appointment booking section, which fall outside the registration scope defined by the brief, were generated using Lovable.ai. This allowed the available design time to be focused on the core registration flow. The use of AI generation tools for out-of-scope sections is a considered decision, not a shortcut: it preserved design capacity for the work the brief was actually evaluating.
The registration screen presents email as the primary input on desktop, with clearly labelled secondary options for phone number, insurance ID, and Medicaid ID. The primary input adapts to the device context: on mobile, phone number is elevated as the primary path. Providing multiple registration routes from the first screen prevents drop-off caused by users not having their email address immediately accessible.
The registration screen uses a large photographic image of an older adult rather than a medical illustration or abstract icon. The visual choice was deliberate: before a user reads a single word or fills a single field, the image communicates that this product was designed for someone like them.
Account verification is presented as a modal overlay positioned over the registration screen rather than as a full page transition. The user retains visual context of where they are in the flow, reducing the likelihood of interpreting the verification step as an error or an unexpected navigation event.
On the demographic and insurance screens, form inputs are positioned on the right side of the layout with labels on the left. This arrangement aligns with left-to-right reading flow, ensuring users process the field label before reaching the input. For users who are slower to read or unfamiliar with form conventions, this reduces scanning errors and re-reading.
A brief privacy statement is displayed inline on the registration screen, visible before the user begins filling any fields. Links to the full Terms of Use and Privacy Policy are present but visually subordinate. Surfacing the privacy commitment at the start of data collection, rather than at the end, addresses the trust barrier before it becomes a reason to abandon the flow. Terms and Privacy Policy links are there, but subordinate.
06 Prototype
Rather than building the prototype through frame duplication and linear connections, I used Figma prototype variables to drive component state changes across the flow. Variables control input field behavior (password visibility toggle, email placeholder state), button enable and disable states, and form logic. This approach allows a single set of frames to simulate multiple user scenarios, reducing prototype maintenance and more closely reflecting how the front-end implementation would function.
Within the two-day timeframe, the prototype covers the registration and verification screens. The variable architecture and component state logic are fully established. Extending the prototype to cover the remaining screens requires additional connection work, not structural changes.
Figma prototype variables panel. Variables control input field states and button behavior across the registration and verification screens, including password visibility, email placeholder population, and button enable/disable logic.
Upon completing registration, users are directed to the appointment booking section, which represents the primary goal of the entire flow. The video below shows the Lovable.ai prototype of this section, included to provide a complete view of the end-to-end user journey within the scope of the exercise.
07 Component System
All interface elements in the high-fidelity design are built as Figma components with documented variants, interaction states, and auto-layout. The library is structured for development handoff: a developer opening the file can identify component behavior, state logic, and intended usage without additional documentation. Annotations within the file follow a color-coded format consistent with the research phase: pink for accessibility, green for research notes, blue for interaction, and orange for future features.
| Component | Variants & States |
|---|---|
| Input Fields | Default / Focused / Filled / Error / Disabled / Info. Label always visible above the field. Never relying on placeholder text alone. |
| Buttons — Primary | Default / Hover / Focused / Disabled. Green fill, white text. The one action you want the user to take. |
| Buttons — Secondary | Default / Hover / Focused / Disabled. Outlined. Present as an alternative, not competing for attention. |
| Buttons — Tertiary | Default / Hover / Focused / Disabled. Text-only. For actions that don't need visual weight: "Skip", "Learn more". |
| Buttons — Account | Default / Hover / Focused / Disabled. Used for the alternative sign-in options: phone number, insurance ID, Medicaid ID. |
| Progress Bar | Skippable / Non-skippable variants. Active, complete, and inactive step states. Always visible at the top of form screens. |
| Specialty Selector | Default / Selected / Active. Used in the Q&A step. One tap selects a doctor type and advances the flow. |
| Radio Buttons | Unselected / Selected. Insurance questions and preference screens where a single answer is required. |
08 Design System: Variables
The design system is structured around Figma Variables organized in three tiers. Primitive tokens hold raw values: spacing increments, color hex codes, and font specifications. Semantic tokens assign purpose to those values, mapping them to specific UI roles such as error states, button surfaces, and border colors. Components reference semantic tokens rather than primitives directly, ensuring that a change at the token level propagates consistently across the entire system.
Grid columns, breakpoints (320–640px), and the full font spec: size, line height, letter spacing, family, weight.
Raw values only: spacing from 6px to 60px, button stroke weights, the base color palette. No meaning attached yet.
This is where intent gets attached. Background/primary maps to a color. Button/primary/surface/hover maps to a specific shade. Every interactive state across all four button types is covered.
Open Sans was selected as the primary typeface for its legibility at small sizes, clean cross-device rendering, and neutral character appropriate for a healthcare context. It is used across all functional UI elements: form fields, labels, body copy, and navigation. Playfair Display is used selectively for display text and brand moments where warmth and visual distinction are needed. The pairing maintains clarity throughout the interface while avoiding a purely clinical aesthetic.
The palette is anchored by EasyMed's brand green, chosen to communicate health and approachability without the clinical coldness common in blue-dominant healthcare interfaces. The dark forest green provides visual weight and credibility at the brand level, while lighter tones are used for surfaces and accent states. All colors are implemented through the semantic token layer, ensuring every usage is intentional and traceable to a specific UI role.
09 Reflections
A two-day design exercise produces decisions, not validations. The work below distinguishes between what is grounded in established research and sound UX rationale, what would require usability testing to confirm, and what would be approached differently given more time.
Like my thinking?