Case study 03 · E-commerce

Clothes shopping, without sighted help

An e-commerce platform for women with visual impairments. Colour, size, fabric and the bag all work from the first key press.

  • Keyboard first
  • WCAG 2.1 audit
  • React · Vite
e-commerce · Chunky Knit Jumper
Product page for the Chunky Knit Jumper at £49.99: Cream colour and size M selected, and a green confirmation reading Chunky Knit Jumper in Cream, size M, added to your bag. Press B to view your bag.
01 · The challenge

E-commerce sites are built to be looked at

For a screen reader user, a swatch with no name, a filter that only works on hover or a checkout that times out is a locked door.

Colour with no nameA swatch that is only a colour cannot be chosen without sight.
Hover, or nothingFilters and menus that need a pointer never reach a keyboard.
A photo, and no feelDescriptions skip fabric, texture and fit, so the garment stays invisible.

These are design failures, not a property of visual impairment. Prati et al. on sites that pass a checklist and still fail their users.

e-commerce · Chunky Knit Jumper
Product page with the jumper, named colours Cream and Grey, and sizes written as words.
$781.5bnglobal fashion e-commerce market in 2023
4navigation categories, to keep sequential browsing short
52pxminimum height of Add to bag, the largest target on the page
0hover-only controls, timeouts or auto-advancing carousels
02 · Research

Designing for Maya

Persona card for Maya, 29, teacher, registered blind since birth, using NVDA on a laptop and VoiceOver on iPhone. Quote: I know what I like — I just want to buy it without needing someone else’s help.
Persona built from research on blind and low-vision online shoppers.

I know what I like — I just want to buy it without needing someone else’s help.

  • Age 29
  • Teacher
  • Blind since birth
  • NVDA · VoiceOver

She loves clothes and often needs sighted help to finish a purchase. Six requirements could not be dropped.

  1. Everything works by keyboard alone: no hover, drag or mouse.
  2. Every colour has a plain-English name, not just a swatch.
  3. Descriptions cover fabric, texture, fit, weight and sizing.
  4. A skip link bypasses repeated header content.
  5. Every control has a descriptive accessible name.
  6. A short, linear purchase with no time limits.

What gets in the way

  • Missing alternative text
  • Hover-only colour selectors
  • Filters the keyboard cannot reach
  • Descriptions that never mention fabric or fit

What the interface must do

  • Work from the keyboard alone
  • Name every colour in words
  • Describe fabric, texture and fit
  • Keep the purchase short and linear
03 · Design decisions

Accessibility as the design, not a layer on top

Filter by principle or source to see what each one changed.

Skip to content first

The first Tab stop on every page jumps past the header, so it is not read again on each page.

WCAG 2.4.1

Colours as radio buttons

Colour and size are radio groups, not dropdowns: every option is visible and says its name, like “Colour Cream, currently selected”.

WCAG 4.1.2Samreen

Announced, not moved

Adding to the bag is confirmed through a live region while focus stays on the product. Jumping to the bag was rejected because it breaks browsing.

WCAG 4.1.3H1 Visibility

Blocked until ready

Add to bag will not proceed without a size, and says exactly what is missing and how to fix it.

H5 PreventionH9 Recovery

Descriptions that replace the photo

About, Material, Fit, Origin, Delivery and Returns sit in labelled rows, each with its own Hear button. Material adds a close-up of the knit.

Nicoson & Ha-Brookshire

Four categories

All, Tops, Dresses and Bottoms. When you cannot scan a menu, every extra option costs another announcement.

Hick

The biggest target wins

Add to bag is full width and at least 52px tall; colour and size options are 44px.

Fitts

Reading order equals decision order

Name, price, colour, size, Add to bag, then the details. The DOM follows the order in which people decide.

WCAG 2.4.3Prati et al.

A keyboard guide with a voice

One toggle adds a shortcut bar (H for home, B for the bag) and speaks each control’s name, role and state as it gains focus.

H7 FlexibilityH10 Help

Dark mode and larger text

Two header toggles on every page. Dark mode switches to white on black; large text raises every font size one step.

WCAG 1.4.61.4.4

Colour is never the only signal

Swatches have names, errors have words, and the bag count lives in the Bag button’s label, not only in a badge.

WCAG 1.4.1

One structure everywhere

Header, breadcrumb, content, actions: the same order on every page, so the mental model holds.

H4 ConsistencyPrati et al.
04 · Try it

Hear the product the way Maya does

Use Tab to move into the product, then the arrow keys to choose. The output panel shows what a screen reader announces, using the product’s own labels and messages. Try Add to bag before choosing a size.

Chunky Knit Jumper

£49.99

Colour
Size

Items in bag: 0

Screen reader output

    Turn on Voice to hear each announcement with your browser’s speech engine.

    05 · The product

    Browse, choose, bag: every step spoken

    Skip to main content focused at the top of the page.
    Skip linkFirst Tab jumps to the content
    Clothing listing with four categories and a product card.
    BrowseArrow keys move through products
    Product page with colours named Cream and Grey, and written sizes.
    ChooseNamed colours and sizes
    Confirmation that the jumper in Cream, size M, was added to the bag.
    AddConfirmation spoken on the page
    Bag with colour, size and quantity written out, and Place order.
    BagReview, then place the order
    The same product page in dark mode with larger text.
    Dark modeOne toggle, the whole page
    e-commerce · All clothing
    All clothing page: header with search, four category filters, Increase text size, Dark mode and Keyboard guide toggles, a Bag button, and a product card for the Chunky Knit Jumper with colour names and a View product button.
    Browse

    A header that does the work

    Search, four categories and three accessibility toggles sit in one header that is identical on every page.

    • Each card announces its name and price
    • Arrow keys move between products; Enter opens one
    • Colour names written out, not just shown
    06 · Dark mode and large text

    One toggle, the whole interface

    Both settings update a single set of CSS custom properties, so every page changes together. Drag the handle, or focus it and use the arrow keys.

    Standard mode: white background, near-black text and lavender accents.
    Dark mode with large text: black background, white text, lighter lavender accents and larger type.
    StandardDark mode + large text
    07 · Design system

    From wireframe to verified contrast

    The product went from a three-screen wireframe to a high-fidelity bag, then into code.

    Grey low-fidelity wireframes linked by arrows: a Tops listing with a speaker icon; a product page for a Red Short Sleeve Shirt with sizes, other colours, Add to bag and speaker icons; a second product view showing a knit fabric close-up; and a bag page with size, quantity, remove and checkout.
    Low fidelity · FigmaThree screens (listing, product and bag) with Read Aloud on each, a written fabric description, and a second product view that swaps the photo for a fabric close-up. Audio was part of the structure from the start.

    A soft lavender and white palette avoids the loud brand colours of mainstream fashion sites, which add visual noise for people with residual vision. Contrast below is calculated live with the WCAG formula.

    Body text
    #1A1A2E on white
    Helper text · Home › Your bag
    #6B6B7B on white
    Add to bag
    White on #534AB7
    Dark mode text
    White on black
    Dark mode accent
    #A09AFF on black
    Dark mode · Add to bag
    Black on #A09AFF
    System sansThe platform’s own sans-serif, following Samreen’s advice for screen reader users
    3pxLavender focus ring with a 3px offset, visible on white and on black
    20pxBetween colour, size and Add to bag, so zones are never pressed together
    1 Tab stopPer toolbar or radio group; the arrow keys move within it
    UML class diagram for Interface 3 with I3Provider at the root, I3Layout, page classes, hooks and data models.
    Architecture: I3Provider shares accessibility and bag state; useRovingTabIndex, useFocusAnnouncer and useReadAloud handle arrow-key movement, spoken focus and Read Aloud.
    08 · Evaluation

    Checked against the standard, not yet with its users

    Not yet tested with screen reader users. This is the most important gap in the project: research shows that some barriers only appear when people who use NVDA, JAWS or VoiceOver every day try the product. The checks below are a WCAG 2.1 audit and a heuristic review.

    WCAG 2.1 checks for Interface 3
    CriterionWhat the product doesResult
    1.1.1 Non-text content · APhotos on the listing, the product page, in the bag and in the Material row have alt text naming the item and colourMet
    1.4.1 Use of colour · AColour options have text labels, errors have words, and success is announcedMet
    1.4.3 Contrast · AAEvery text pair measured on every screen: at least 4.9:1 in standard mode (body text 17.1:1, buttons 6.9:1) and at least 7.6:1 in dark mode, which also meets AAAMet
    2.1.1 Keyboard · ABrowsing, choosing, the bag and placing an order all work without a pointerMet
    2.4.1 Bypass blocks · ASkip to main content is the first focusable element on every pageMet
    2.4.3 Focus order · AName → price → colour → size → Add to bagMet
    2.4.7 Focus visible · AAA 3px lavender ring on every control: 3.8:1 against white, 5.6:1 against blackMet
    4.1.2 Name, role, value · AColour and size are radio groups; each option has a name and a checked stateMet
    4.1.3 Status messages · AAAdd to bag is confirmed in an assertive live region; quantity changes and the order confirmation are polite. Focus never movesMet
    09 · Reflection

    What I would do next

    Test with screen reader users

    Run sessions with people who use NVDA, JAWS and VoiceOver daily, across browsers, to confirm every announcement is clear.

    Connect the full checkout

    Place order currently goes straight to a spoken thank-you. A labelled delivery and payment form is already built; connecting it completes the journey.

    Grow the catalogue

    The prototype has one fully described product. More items would test filtering, search and browsing at realistic scale.

    Prototype every screen

    Only the bag had a high-fidelity prototype. Designing the listing and product pages first would have allowed earlier review.

    Bring in AI, carefully

    Recommendations by fabric, fit, warmth and occasion, and spoken search, were planned but descoped for time. They would follow Amershi et al.: transparent and easy to override.