Inspiration

We noticed something odd about watching videos at 2x speed: we pay more attention, not less. At normal speed, the brain has spare bandwidth and wanders off. At 2x, staying present takes all of it.

Reading is the opposite. Our eyes drift across a sea of words, skip lines, re-read sentences, and our minds wander mid-paragraph. Every jump the eye makes between words is called a saccade, and a page full of text demands hundreds of them.

So we asked: what if reading worked like 2x video? Show one word at a time, in one fixed spot, at a pace that keeps you engaged, and notice when your attention slips.

What it does

Saccade is a Chrome extension that turns any article into a focused, one-word-at-a-time reading experience.

  • Read anything: highlight text and choose Speed read this, or right-click any article and choose Speed read this page. Saccade finds the actual article and skips menus, ads, sidebars, and footers.
  • No eye movement: every word appears in the same place, with one letter (the optimal recognition point) highlighted where your eye naturally lands.
  • Smart pacing: common words like "the" fly by, while rare or long words stay on screen longer. Punctuation and paragraph breaks get natural pauses.
  • Attention tracking: with your webcam, Saccade notices when you look away, close your eyes, or turn to your phone. The page blurs and reading pauses. When you look back, it asks you to continue, rewinds to the start of the sentence, and eases back up to speed.
  • Private by design: all video processing happens on your computer. Nothing is recorded or sent anywhere.

How we built it

Saccade is a Chrome extension written in JavaScript, HTML, and CSS. We designed the product and its behavior, then built it with Claude as an AI coding assistant, testing and refining each feature on our own machines.

Finding the article. We use Mozilla's Readability library (the engine behind Firefox's Reader View) to pull only the main article text from a page, with a fallback that looks for the page's main content area.

Word timing. Each word's display time starts from the base time for the chosen speed and is scaled by how rare and how long the word is:

$$ t = \frac{60000}{\text{wpm}} \cdot F(z) \cdot L(n) \cdot P $$

where \( z \) is the word's frequency on the Zipf scale (about 7 for "the", about 3 for "ubiquitous"), using scores for the 50,000 most common English words from the wordfreq dataset:

$$ F(z) = \min\big(1.6,\ \max(0.8,\ 1 + 0.2\,(5 - z))\big), \qquad L(n) = 1 + 0.08 \cdot \max(0,\ n - 6) $$

\( n \) is the word's length in letters, and \( P \) adds pauses for commas, sentence endings, and paragraph breaks.

Attention tracking. Google's MediaPipe Face Landmarker runs in the browser about 15 times per second, finding hundreds of points on the face. From these we measure head turn, head tilt, gaze direction, and blinks. A two-second calibration learns each person's normal reading posture, so it works with any laptop or camera angle. Reading pauses only after about a second of distraction, so normal blinks don't interrupt you.

Easing back in. After a pause, reading resumes at 60% speed and ramps up over 15 words:

$$ v_k = v_{\text{target}} \cdot \left(0.6 + 0.4 \cdot \tfrac{k}{15}\right) $$

Challenges we ran into

  • False alarms vs. missed distractions. Too sensitive and every blink paused the reader; too loose and it missed us checking our phones. Per-person calibration plus a short grace period fixed this, and live debug numbers let us tune thresholds.
  • Resuming felt rushed. Our first version auto-resumed the instant you looked back, which was jarring. We changed it to wait until you're focused, then ask you to press a key, inspired by Monkeytype's focus screen.
  • Long, rare words flashed by too fast. A word like "countershaded" got barely more time than an ordinary one, so we replaced fixed length tiers with a per-letter formula combined with word frequency.
  • Chrome extension rules. Extensions can't load code from the internet, so we had to bundle the face-tracking model and libraries. We also learned how camera permissions work for extension pages.
  • Knowing when to cut. We built an AI summarization feature, but couldn't make it reliable enough in time, so we removed it rather than ship something shaky.

Accomplishments that we're proud of

  • A reading experience that genuinely feels calmer and more focused
  • Attention tracking that runs entirely on-device, with no data leaving the laptop
  • A minimal interface: just the word, a few quiet icons, and everything else tucked behind a gear

What we learned

This was our first hackathon, and most of our team had never written JavaScript or built a browser extension. We learned how Chrome extensions are structured, how face-landmark models work, and how much good product design comes from testing on yourself and noticing what feels wrong. We also learned to use AI as a collaborator while staying responsible for every design decision.

What's next for Saccade

  • AI summaries for long or jargon-heavy articles, so you can speed-read the key points first
  • Comprehension checks after reading, to measure whether focus tracking improves retention
  • Reading stats, like how long you stayed focused
  • Publishing on the Chrome Web Store so anyone can install it in one click

Built With

Share this project:

Updates

Submission history