The Disability Design Lab storefront shown on a laptop and a phone, beside the lab's hand drawn mark, on an amber background

Disability
Design Lab

Where this started

A store you enter through the task, not the taxonomy

A concept store for adaptive tools (grips, openers, fasteners, writing aids), organized by the daily challenge they solve rather than by product category. My midterm for SI 407 at the University of Michigan School of Information, designed against an assigned visual direction of "Experimental & Raw." The catalog and prices are invented for the project; the design system behind them is not.

Timeline
Fall 2026
Role
UX/UI DesignerDesign Systems
Type of Work
Class ProjectEcommerce
Tools
FigmaFigma SlidesFigma Make
Skills
Design SystemsDesign TokensResponsive DesignAccessibility

Adaptive tools are usually sold the way hardware is sold: by category, by material, by brand. But nobody wakes up needing a silicone grip. They wake up unable to open a jar. I am designing for adults whose grip, reach or dexterity has changed, from arthritis, tremor, stroke or using one hand, and for the people buying on their behalf: family caregivers and occupational therapists. I had no user research for this project, so I assumed that group skews older and that a lot of them have some vision loss too, and designed for low vision reading from the start rather than treating it as a pass at the end. Those are assumptions, and I have labelled them that way everywhere on this page rather than dressing them up as findings.

How might I design a store where someone whose grip has changed can find a tool by naming the task that got hard?

What I think about this stageThe brief said "Experimental and Raw", and my first instinct was to make everything rough, including the buttons. That is the trap. Rough chrome reads as personality; a rough control reads as broken, and for an audience with low vision it reads as nothing at all.So the aesthetic lives entirely on the parts you do not have to operate.I think most of the visual work I am proud of came out of that one line being drawn early.

The three decisions that shaped everything else

  1. 01

    Browse by daily challenge, not product category

    Four challenges lead the homepage and the nav: Opening Containers, Getting Dressed, Writing & Drawing, Navigating Your Workspace. My assumption is that people arrive naming the task that stopped working, not a product type. Shop all is still there, as the second way in.

  2. 02

    Two typefaces, two jobs

    Atkinson Hyperlegible sets everything a shopper has to read. The Braille Institute drew it to separate the characters low vision readers confuse. Space Grotesk is limited to headings and short labels, so the aesthetic never touches the sentence someone reads to decide whether a tool fits their hand.

  3. 03

    Raw on the chrome, clean on the content

    Every hand drawn mark sits on the chrome (card outlines, chips, dividers, the rule under a heading), and each stroke is genuinely wobbled geometry drawn in two offset passes. NN/g warns that neobrutalism can strip the affordances that signal what is a control, so the controls and the copy stay conventional.

Final design

Eight pages, two breakpoints, one set of rules

Every frame is real Auto Layout and sets all three variable modes, so the 393px column is the desktop page reflowing rather than a second drawing of it. Click any screen for the full length.

What I think about this stageDrawing the mobile screen separately is the shortcut everybody takes, and it is how the two versions start disagreeing about what the product is. Making the 393px frame the same frame, reflowing, costs more up front and is the reason these eight pages stayed consistent while I changed my mind about the catalogue three times.If the phone layout is a second drawing, it is a second product.

  • Homepage at 1512px, leads with the four challenges

    Homepage

    Leads with the four challenges

  • Catalogue at 1512px, filter sidebar, grid three wide

    Catalogue

    Filter sidebar, grid three wide

  • Product detail at 1512px, variant chips, stepper, disclosures

    Product detail

    Variant chips, stepper, disclosures

  • Quick view at 1512px, a modal on a dimmed page

    Quick view

    A modal on a dimmed page

  • Shopping cart at 1512px, line items beside a running total

    Shopping cart

    Line items beside a running total

  • Checkout at 1512px, no account required

    Checkout

    No account required

  • Order confirmed at 1512px, same arithmetic as the cart

    Order confirmed

    Same arithmetic as the cart

  • 404 at 1512px, the hand drawn mascot, between the fours

    404

    The hand drawn mascot, between the fours

The same eight at 393px

  • Homepage at 393px, reflowed to a single column
    Homepage
  • Catalogue at 393px, reflowed to a single column
    Catalogue
  • Product detail at 393px, reflowed to a single column
    Product detail
  • Quick view at 393px, reflowed to a single column
    Quick view
  • Shopping cart at 393px, reflowed to a single column
    Shopping cart
  • Checkout at 393px, reflowed to a single column
    Checkout
  • Order confirmed at 393px, reflowed to a single column
    Order confirmed
  • 404 at 393px, reflowed to a single column
    404

Click through it

The same screens rebuilt in Figma Make as a working site: real navigation, a cart that adds up, a checkout that submits. It loads on click, so nothing from Figma runs until you ask for it.

Hosted by Figma, so it can be slow to wake up. Open it in its own tab instead if it does not appear.

The design system

Five collections, nothing hardcoded

Primitives hold the raw values, and nothing in a screen points at them if a token exists. Tokens alias the greyscale into surfaces, borders, text and radii, with a Light and a Dark mode. Semantics resolve the same ten names into a different family per mode. Typography and Responsive Variables carry the breakpoints. Everything below is the file's real contents, switch the modes and the values change the way they do in Figma.

  • 141variables, five collections
  • 1,928bound color uses
  • 0pasted hex values
  • 44pxminimum target, every button

Collection 01 · 67 variables · 1 mode

Primitives

Five families, each a full 50–950 scale, plus a small set of raw numbers for spacing and radius. Nothing in a screen is allowed to point here once a token or a semantic exists for the job.

What I think about this stageA design system is only worth the trouble if you are strict about the layer rule, and being strict is annoying every single time. Pointing a card at a raw hex takes two seconds and pointing it at a token takes a minute of naming. I kept doing the slow one, and the payoff was that switching the whole file to Dark mode was one setting rather than a day of work.Discipline early is just speed later, spent in advance.

Cobalt Indigo

Primary. Every action, link and selected state.

  1. 50#e8eaf9
  2. 100#d3d6f3
  3. 200#a3aae6
  4. 300#7683da
  5. 400#455dcb
  6. 500#2c3d8a
  7. 600#243274
  8. 700#1a255b
  9. 800#111a43
  10. 900#0a1131
  11. 950#050921

Amber

Secondary. Attention only: badges, tape, the rule under a heading.

  1. 50#fdf5ef
  2. 100#fcefe4
  3. 200#f9dac0
  4. 300#f5c99f
  5. 400#f2b46b
  6. 500#e9a443
  7. 600#b67f32
  8. 700#895f24
  9. 800#5b3e15
  10. 900#342208
  11. 950#201203

Greyscale

Everything else. Surfaces, borders and all four text roles alias into this.

  1. 0#ffffff
  2. 50#efeff2
  3. 100#e0e1e6
  4. 200#bfc0ca
  5. 300#9fa2b1
  6. 400#7c8094
  7. 500#525564
  8. 600#444754
  9. 700#353740
  10. 800#26272e
  11. 900#1b1c20
  12. 950#191a1f

Green

Reached only through Semantics, in its Success mode.

  1. 50#e9faf4
  2. 100#d9f5e6
  3. 200#b0e9d0
  4. 300#8fdfbd
  5. 400#6ad4a3
  6. 500#6ad099
  7. 600#469d71
  8. 700#367b58
  9. 800#205038
  10. 900#10291d
  11. 950#07120c

Red

Reached only through Semantics, in its Error mode.

  1. 50#fcecf0
  2. 100#f8dae0
  3. 200#f0acbb
  4. 300#ed8b9d
  5. 400#eb6c80
  6. 500#e24d6c
  7. 600#dc3341
  8. 700#a12330
  9. 800#67161c
  10. 900#3a0a10
  11. 950#170206

Collage & raw values

Three loose paper colors for the torn collage wordmark, plus the numbers the radius tokens alias into. Value/full is 10,000, which is a pill at any size.

  1. Cream#e8e0c9
  2. Peach#efd6cd
  3. Blue-grey#d2dee6
  1. Value/null · 0
  2. Value/4
  3. Value/8
  4. Value/12
  5. Value/16
  6. Value/24
  7. Value/32
  8. Value/full · 10000

Collection 02 · 22 variables · Light / Dark

Tokens

The greyscale, aliased into the four jobs a neutral actually does, with a second mode that flips the whole ramp. The footer is the one place Dark is used in anger. It carries Tokens: Dark at the component level, which is what makes it dark wherever it is placed.

Surface/default · Text/title

Weighted Grip Pen

Text/body, a wider barrel steadies the line.
Surface/default · Text/title

Weighted Grip Pen

Text/body, a wider barrel steadies the line.
Greyscale/Surface
TokenAliases toResolves to
defaultGreyscale/0Greyscale/950#ffffff#191a1f
subtleGreyscale/50Greyscale/900#efeff2#1b1c20
elevatedGreyscale/200Greyscale/800#bfc0ca#26272e
disabledGreyscale/300Greyscale/700#9fa2b1#353740
invertedGreyscale/950Greyscale/0#191a1f#ffffff
Greyscale/Border
TokenAliases toResolves to
defaultGreyscale/200Greyscale/700#bfc0ca#353740
disabledGreyscale/300Greyscale/600#9fa2b1#444754
darkerGreyscale/400Greyscale/500#7c8094#525564
Greyscale/Text
TokenAliases toResolves to
titleGreyscale/950Greyscale/0#191a1f#ffffff
subtitleGreyscale/700Greyscale/200#353740#bfc0ca
bodyGreyscale/500Greyscale/100#525564#e0e1e6
captionGreyscale/600Greyscale/300#444754#9fa2b1
negativeGreyscale/0Amber/950#ffffff#201203
disabledGreyscale/100Amber/900#e0e1e6#342208
Radius, identical in both modes
TokenAliases toShape
sharpValue/null
xsValue/4
smValue/8
mdValue/12
lgValue/16
xlValue/24
xxlValue/32
roundedValue/full

Collection 03 · 10 variables · 4 modes

Semantics

Ten names that mean different colors depending on the mode a node is in. An indigo button and an amber badge are the same Surface/default. The difference is one mode set on the node, which is why a brand color change is a mode switch rather than a sweep.

Add to cartONE-HANDEDText/label in Primary
Add to cartONE-HANDEDText/label in Secondary
Add to cartONE-HANDEDText/label in Success
Add to cartONE-HANDEDText/label in Error
VariablePrimarySecondarySuccessError
Surface/subtleCobalt Indigo/100Amber/100Green/100Red/100
Surface/lightCobalt Indigo/400Amber/400Green/400Red/400
Surface/defaultCobalt Indigo/500Amber/500Green/500Red/500
Surface/darkerCobalt Indigo/600Amber/600Green/600Red/600
Border/subtleCobalt Indigo/100Amber/100Green/100Red/100
Border/lightAmber/400Cobalt Indigo/400Green/400Red/400
Border/defaultCobalt Indigo/500Amber/500Green/500Red/500
Border/darkerCobalt Indigo/600Amber/600Green/600Red/600
Text/labelCobalt Indigo/500Amber/500Green/500Red/500
Text/whiteGreyscale/0Greyscale/0Greyscale/0Greyscale/0

Collection 04 · 32 variables · Mobile / Tablet / Desktop

Typography

Sixteen published text styles, each bound to a font-family, font-size and line-height variable rather than carrying its own numbers, so switching the mode changes the variables underneath, not the styles. All sixteen are below, set in the real faces, including the six steps no frame ended up needing. A scale with holes in it is not a scale.

  • Heading/H1Page headline48.83 / 63.48 px58.59 / 76.17 px70.31 / 91.4 px

    Find it by the task

  • Heading/H2One step under H1no frame uses it39.06 / 50.78 px46.88 / 60.94 px56.25 / 73.13 px

    Browse by challenge

  • Heading/H3Section headline31.25 / 40.63 px37.5 / 48.75 px45 / 58.5 px

    Opening Containers

  • Heading/H4Price25 / 32.5 px30 / 39 px36 / 46.8 px

    $22.00

  • Heading/H5One step over H6no frame uses it20 / 26 px24 / 31.2 px28.8 / 37.44 px

    What comes in the box

  • Heading/H6Product title, disclosure rows16 / 20.8 px19.2 / 24.96 px23.04 / 29.95 px

    Weighted Grip Pen

  • Paragraph/P1One step over P2no frame uses it25 / 37.5 px30 / 45 px36 / 54 px

    A store you enter through the task, not the taxonomy.

  • Paragraph/P2Standfirst, long descriptions20 / 30 px24 / 36 px28.8 / 43.2 px

    A wider barrel and a weighted base steady the line.

  • Paragraph/P3Body copy, the default reading size16 / 24 px19.2 / 28.8 px23.04 / 34.56 px

    Works with either hand. Dishwasher safe.

  • Label/L1Eyebrows, chips, stepper text12.5 / 18.75 px15 / 22.5 px18 / 27 px

    GRIP SIDE

  • Label/L2Badges, option-group captions10 / 15 px12 / 18 px14.4 / 21.6 px

    ONE-HANDED

  • Label/L3The smallest label stepno frame uses it8 / 12 px9.6 / 14.4 px11.52 / 17.28 px

    DISHWASHER SAFE

  • Button/B1The largest button stepno frame uses it21.88 / 32.82 px26.25 / 39.38 px31.5 / 47.25 px

    Add to cart

  • Button/B2The middle button stepno frame uses it17.5 / 26.25 px21 / 31.5 px25.2 / 37.8 px

    Add to cart

  • Button/B3The size every real button uses14 / 21 px16.8 / 25.2 px20.16 / 30.24 px

    Add to cart

  • Annotation/A1Eyebrows and counts only, never a sentence20 / 24 px24 / 24 px28.8 / 24 px

    tested by the people who need it

Il1 0O

Atkinson Hyperlegible

Everything a shopper has to read. The Braille Institute drew it to separate the characters low vision readers confuse. The reading face is doing real work here, not setting a mood.

Aa Gg

Space Grotesk

Headings and short labels only, where words are set large and read in a glance and the quirks cost nothing.

4 left · $22

Caveat

The annotation voice: eyebrows, counts, a price on a card. One style, bound to the P2 size variable, and barred from body and heading copy.

Collection 05 · 10 variables · Desktop / Tablet / Mobile

Responsive Variables

The whole collection, breakpoints as data. The three Nav/ booleans are what collapse the nav, so the mobile nav is the same component in a different mode rather than a second component.

VariableDesktopTabletMobile
max-width1512768393
section-max-width1384682.66361
horizontal-margin643216
vertical-margin1206440
section-gap483216
footer-min-width14878.9338.54
Nav/Logofullfulllogomark
Nav/has-linkstruefalsefalse
Nav/has-nav-buttonstruefalsefalse
Nav/has-menu-iconfalsetruetrue

The kit · 12 components

Components

Five of these (the chip, stepper, form field, section head and divider) exist to make the hand drawn treatment instanceable instead of decorative. The accessibility rules live here too: every Button variant carries a 44px minimum height, and rebinding one label color took the amber button from 2.13:1 to 8.15:1 across all sixteen frames at once.

Four variant sets

  • The Button component set, showing filled, outlined and text buttons across default, hover, pressed, focused and disabled states

    Button

    60 variants · Type × State × Style

  • The Product Card component set in its default, hover, sold out and on-sale states

    Product Card

    State = Default / Hover / Sold Out / On Sale

  • The nav bar component set in its menu-closed and menu-open variants

    Nav Bar

    Menu = Open / Closed

  • The dark Footer component with four link columns

    Footer

    Component level Tokens: Dark

Eight singles

  • The Option Chip component in its default and selected states, each with a hand drawn outline

    Option Chip

    State = Default / Selected

  • The Challenge Card component, a hand drawn framed tile for one daily challenge

    Challenge Card

    Single component

  • The Section Head component: a handwritten eyebrow above a title with a hand drawn amber underline

    Section Head

    Single component

  • The Form Field component: a label above a hand drawn input outline

    Form Field

    Single component

  • The Quantity Stepper component with minus and plus controls either side of a count

    Quantity Stepper

    Single component

  • The Rough Divider component: a single hand drawn horizontal rule

    Rough Divider

    Single component

  • The logo component set: the full lockup and the icon mark on its own

    Logo

    Type = Full / Mark

  • The Stick Figure component set: a hand drawn figure facing straight, left, right and up

    Stick Figure

    Stick Figure = Straight / Left / Right / Up

Where it landed, and what I would change

The thing I would take into any project after this one is that accessibility is cheaper when it is a constraint than when it is a correction. Picking Atkinson Hyperlegible and a 44px minimum target on day one cost me nothing; retrofitting either would have meant redrawing every screen. What I am missing is the part I could not do in a semester. None of this has been in front of a person whose grip has actually changed, and until it has, the whole organizing idea is a well argued guess. That is the first thing I would fix if this were real.