Assignments / Assignment 3
Checkpoint 1 due Wednesday, October 28. Checkpoint 2 due Wednesday, November 4. Checkpoint 3 due Monday, November 16. Teams of two or three.
Most screen reader interfaces on the internet, when they are accessible at all, are usually designed by retrofitting screen reader attributes onto an existing visual structure. In this assignment, you will design a non-visual interface from the ground up. The goal of this assignment is to think about usability from a non-visual perspective, and how to think about the affordances of speech and audio (which are not always the same as visual affordances).
Every team will build a non-visual interface for two pages within an online shopping flow. These pages are (1) a search results page (the list of products returned by a query such as “wireless headphones” or “running shoes”), and (2) a product detail page, which shows the full information for a selected product from the list of search results.
Pick your favorite real-world shopping website and run a search on it. Use the results / products listed and recreate that page in your non-visual prototype.
The search results should list products with metadata for each result, which could include things like: title, price, star rating, review count, delivery estimate, and badges such as “sponsored” or “best seller.” Each result should open onto a product detail page, which might includes fields like: title, description, a variant selector for size or color, and a list of reviews.
Unless the site you chose has extremely good accessible design (in which case, you might learn more if you choose a different one), the default screen reader experience might be technically accessible yet still not a very good experience. For example, maybe you have to tab through all of the information in one search result before you can even get to the next one, even if you can tell from the title that it’s not the product you’re looking for.
This assignment asks you to design across three dimensions: structure, navigation, and description.
Structure — how information is grouped together into a hierarchy and organized into a format the screen reader can traverse
Navigation — the ways a user can move around in the structure, whether that’s moving to adjacent content or jumping to important landmarks
Description — what information the screen reader announces at each location, in what order, and how concise or verbose it is
Before you implement anything, sketch your interface’s structure, navigation, and description on paper. For example, you can draw a diagram of the structure, list out the keyboard interactions that define the navigation, and write a script for what gets announced at each location.
Consider these questions as you prototype:
Design document covering structure, navigation, and description
Implement the design as a web interface that you can test with a screen reader.
At the November 4 checkpoint, a running prototype that can be tested. The prototype does not have to be perfect or finished, but there should be a first complete draft of a structure, navigation, and description.
Build your prototype with the starter template. In the template, you will write your design as a list of nodes. Each node is one item a screen reader user can move to, and specifies the description the screen reader will there. The template renders your nodes into a webpage with keyboard navigation.
Clone the repository, or download the ZIP and unzip it.
git clone https://github.com/data-and-design/info-4871-a3-template.git
OR
Download the zip file by going to the repository, clicking the green “Code” button, and clicking the “Download ZIP” link at the bottom of the menu.
The template runs on Node.js version 22.12 or higher. macOS users should open Terminal. Windows users should open PowerShell. Then type:
node --version
If the command prints a version number of 22.12 or higher, such as v24.11.0, Node is ready and you can go to step 3. If you installed Node for Assignment 2, you should be good to go, but check the version anyway just in case.
If the command shows command not found, or prints a version lower than 22.12, download the LTS installer from nodejs.org and run it. Then quit the terminal, open it again, and check the version again.
cd to the folder where you cloned or unzipped the template. For example, if the folder is at ~/jzong/code/info-4871-a3-template, run:
cd ~/jzong/code/info-4871-a3-template
Tip: you can drag the folder from Finder or File Explorer onto the terminal window to paste the path to that folder.
Then run these two commands:
npm install
npm run dev
npm install downloads the code libraries the template needs. You only need to run it once. npm run dev starts the app and prints an address, usually http://localhost:5173. Open that address in your browser.
Leave the terminal window open while you work, because closing it stops the app. Each time you save a file, the page in the browser reloads with your change. Press Ctrl-C in the terminal to stop the app, and run npm run dev again to restart it.
The template starts with a working copy of a sample shopping site’s two pages. Before you change anything, try it with the keyboard:
You can also try it with a screen reader. See this documentation for screen reader-specific configuration.
Open the template folder in a code editor, such as Visual Studio Code. Open src/data.js and replace the two sample products with the search results from the shopping site you chose. You don’t have to copy every single result from the real page, but copy as many results and fields as you need to communicate your design in a realistic way.
Edit these two files: src/pages/results.js for the search results page, and src/pages/product.js for the product page. Each file marks the lines to change with EDIT BELOW THIS LINE and EDIT ABOVE THIS LINE. Leave the rest of each file, and every other file in the template, unchanged.
Each node in those files has up to four fields:
{
id: 'aurora-anc',
description: 'Aurora ANC Wireless Over-Ear Headphones',
children: ['aurora-anc-price', 'aurora-anc-rating'],
navigation: { Enter: 'aurora-anc-page' },
}
These fields match the three dimensions of your Part 1 design:
children list. It contains the ids of the nodes grouped inside this node, in order. Arrow key navigation uses these lists (left/right to move between siblings, up/down to move between parents/children).description text. The screen reader reads this text when the user reaches the node.navigation list of extra keys. Each entry maps a key to the id of a node to jump to when that key is pressed.Work in small steps. Change one thing, save the file, and check the page. You can check your descriptions by reading the page on screen, but test with a screen reader before submitting, because screen readers add additional output to the description.
Code either as a zip file, or a link to a deployed version (e.g. on Github pages).
Give your user task questions and your interface to a classmate from another team. They will work through it with a screen reader and try to answer the questions. Write down which questions they were able to answer and which they could not answer (or answered incorrectly). Iterate on your prototype based on this feedback, and write down what you changed and why.
We will reserve some time for this in class.
Notes on peer user testing and revisions, answering:
This assignment is worth 10 points, divided across the criteria below. Each criterion is graded from its full point value (excellent) down to 0 (not present), with partial credit in between.
| Criterion | Points | Description |
|---|---|---|
| Structure | 2 | Sketches and prototypes address structure, the user task questions are specific and answerable |
| Navigation | 2 | Navigation is fully specified in sketches and prototypes |
| Description | 2 | Descriptions are specified and choices about what to include in which order are justified |
| Build | 2 | Prototype runs and has enough detail for testing |
| Testing and revision | 2 | Written reflections and specific revisions from peer user testing |
Previous: Assignment 2: Accessibility Auditing and Remediation