The reading layer that knows when to stay off.

A dyslexia-friendly reading layer for the web. Designed, specced, and shipped to the Chrome Web Store.

Role Designer & product lead
Year 2026
Scope 3-week shipped project
Type Shipped product

Overview

Lexa is a dyslexia-friendly reading layer for the web, live on the Chrome Web Store, built to Manifest V3 and already past v1. I designed every screen and wrote the full spec, and shipped it solo in about three weeks rather than letting it stall as a prototype.

Switch it on and the article you're reading gets restyled in place: better font, more space between the lines, a shorter line length, a calmer background. The rest of the site stays exactly how it was.

The Problem

Dyslexia is a decoding problem. It doesn't change how well someone reads or thinks, just how hard it is to get the letters off the page. And most of the web isn't built with that in mind. Tight line spacing, long lines that go on forever, low-contrast greys, fonts picked for branding rather than for being readable. Even small fixes help: more space, shorter lines, a font designed for legibility.

There are tools out there already. Reader modes strip a page back to plain text but ignore the dyslexia-specific stuff. Dyslexia extensions go the other way and restyle everything, which means the second you open a code editor or a design tool, they break it. So the actual hard part isn't picking a good font or the right line height. It's deciding where the tool shouldn't run.

Why this matters
Who else does this
Design principles
How it works
Built for reading
Using it
Selected screens
On a real page
The skip list
Where it breaks
From spec to ship

Outcome

Lexa shipped, and that's the part that matters most to me. It's live on the Chrome Web Store, built to Manifest V3, and already past v1 — a real product people can install, not a prototype that stalled in Figma.

The decisions that held up were made before any screens. Deciding early that Lexa should stay off on code editors, design tools, and dashboards meant the skip list was part of the system from day one, not bolted on later. Same with keeping one visible toggle and everything else behind a gear. Both of those shaped every screen downstream.

The weakest part is article detection. Finding the main content on a random page is genuinely hard, and the content script still gets it wrong on cluttered pages. It's the part I iterated on most after v1 and it's still not fully solved. I didn't appreciate how messy real web pages are until the extension was actually running on them.

The missing piece is testing with people who actually have dyslexia. Everything here came from research and first principles, not from watching someone try to read with it. That's what the next version needs.

← All work Next project →