Skip to content

sami-29/speeedy

Repository files navigation

Speeedy

Open-source RSVP speed reading app for focus, comfort, and measurable progress.

Speeedy is a local-first reading product that helps users read faster with RSVP (Rapid Serial Visual Presentation) and ORP (Optimal Recognition Point) alignment, while also supporting accessibility, benchmarking, analytics, profile sharing, and offline use.

speeedy.pages.dev


Why Speeedy exists

Traditional reading is slowed down by constant eye movement across lines of text. Speeedy reduces that overhead by presenting words in a fixed focal area so the eyes stay still and the brain can process text faster.

It is not just a basic word flasher. It is a full reading system with:

  • a custom RSVP engine with adaptive timing
  • deep reading personalization
  • accessibility-focused display modes
  • reading benchmarks and progress tracking
  • local-first persistence with no account required
  • profile sharing and installable PWA support

What is RSVP and ORP?

RSVP (Rapid Serial Visual Presentation) displays words one at a time in the same place on screen, reducing saccadic eye movement.

ORP (Optimal Recognition Point) is the letter position within a word where recognition is fastest. Speeedy aligns words to that pivot so the eye does not have to search for the word's center every time.


Key Features

Core reading engine

  • RSVP playback with one-word
  • ORP alignment for every displayed word
  • Smart speed that adapts timing based on word complexity
  • Sentence, paragraph, and contextual pause weighting
  • Speed ramp to ease readers into faster sessions
  • Resume from saved progress with lookback context
  • Keyboard-first controls — Space, Arrows, R, Escape, ?

Reading customization

  • 100–1600 WPM control
  • Font size, font family, letter spacing, and font weight controls
  • Pivot offset adjustment
  • Pause view modes (focus / context / full-text)
  • Punctuation handling options
  • Peripheral context ghost words
  • ORP guide markers
  • Bionic reading mode
  • Quote and aside colorization
  • Seekable progress bar — click or drag to jump to any position

Accessibility and focus

  • Dyslexia mode with OpenDyslexic-style presentation, adjusted spacing, and font weight control
  • Irlen-style tinted overlays (peach, mint, parchment) with adjustable opacity
  • RTL-aware reading support for Arabic, Hebrew, and other RTL scripts
  • Ambient white, pink, and brown noise with crossfade loop
  • Click-synchronized reading sounds with pitch control
  • Countdown before playback
  • Pomodoro timer with focus/break/long-break phases, progress ring, session tracking, and auto pause/resume integration

Content ingestion

  • Paste text directly
  • Import documents: PDF, DOCX, DOC, TXT, Markdown, RTF, HTML, CSV, ODT, EPUB
  • Shared reading links for hash-based text sharing
  • Local document library with resume support and deduplication

Progress, tracking, and growth

  • Reading baseline benchmark with 10-question comprehension quiz
  • Average WPM tracking and improvement measurement
  • Session history with source title, WPM, words read, duration
  • Daily word counts and 14-day activity chart
  • Current streak and best streak
  • Reading goals and daily progress bar
  • WPM trend sparkline chart

Profile and sharing

  • Local profile system with name, emoji, and avatar image
  • Profile export/import as .speeedy backup files
  • Shareable public reading profile links with privacy opt-in
  • Share cards for stats and self-promotion

Product and platform features

  • Installable PWA with offline-friendly caching
  • Local-first architecture — reading data stays in IndexedDB, no account required
  • Open-source codebase
  • Learn page explaining RSVP, ORP, and reading science with interactive demos
  • Donation/support page with crypto wallets, QR codes, and supporters wall
  • In-app changelog and project support routes

Product Surfaces

Speeedy is more than a single reader screen. The app includes:

  • Marketing / landing page with animated feature storytelling
  • Main app intake page with file upload and text paste
  • Reader screen with full settings panel
  • Stats dashboard with charts and session history
  • Profile page with library management and data portability
  • Benchmark test for baseline WPM + comprehension measurement
  • Learn / science page with educational content
  • Share view for public stat cards
  • Donate/support page
  • Changelog page
  • Privacy and terms pages

Tech Stack

Frontend

  • Lit — web components (light DOM)
  • TypeScript — strict mode throughout
  • Vite — dev server and production bundling
  • Tailwind CSS v4 — utility-first styling
  • DaisyUI v5 — theme and UI component primitives
  • Motion — landing-page and learn-page animations
  • Lucide — icon set

Parsing and document support

Browser platform and utilities

Quality and developer tooling


Architecture Overview

src/
├── components/     Lit pages, UI elements, overlays, and product surfaces
├── config.ts       Project-level constants and public links
├── data/           Benchmark passages and other static content
├── models/         Shared TypeScript interfaces and types
├── services/       Engine, parsing, storage, profile, stats, theme, audio
└── utils/          Events, icons, and text helpers

Key implementation files:


Getting Started

Prerequisites: Node.js 20+ and pnpm

# Clone and install
git clone https://github.com/sami-29/speeedy.git
cd speeedy
pnpm install

# Start dev server
pnpm dev

# Run tests
pnpm test

# Lint
pnpm lint

# Build for production
pnpm build

# Preview production build
pnpm preview

Scripts

  • pnpm dev — start local development server
  • pnpm build — type-check and build production bundle
  • pnpm preview — preview the production build locally
  • pnpm lint — run Biome checks on source files
  • pnpm lint:fix — auto-fix Biome issues where possible
  • pnpm test — run unit tests once
  • pnpm test:watch — run Vitest in watch mode

Testing

Unit tests (Vitest):

E2E tests (Playwright):

Run E2E tests: pnpm e2e (requires the dev server to start automatically).


PWA and Deployment

Speeedy is configured as an installable PWA with cached static assets and auto-updating service worker behavior.


Analytics

Speeedy uses Umami (cookieless, privacy-first) for anonymous usage analytics. The tracking script in index.html points to the official Speeedy Umami instance.

If you self-host or fork this project, remove or replace the analytics script tag in index.html:

<!-- Remove or replace this with your own Umami instance -->
<script defer src="https://cloud.umami.is/script.js" data-website-id="YOUR-ID-HERE"></script>

To remove analytics entirely, delete that <script> tag. Speeedy functions identically without it — no features depend on Umami being present.


Versioning

This project follows Semantic Versioning:

  • MAJOR (1.x.x) — breaking changes to data or public behavior
  • MINOR (x.1.x) — new backwards-compatible features
  • PATCH (x.x.1) — fixes and polish

See CHANGELOG.md for the full release history.


Contributing

See CONTRIBUTING.md for setup instructions, code style, and PR guidelines.


License

MIT — free to use, modify, and distribute.

About

Free, open-source, local-first RSVP speed reader for PDFs & EPUBs. Fixed focal point to reduce eye strain, OpenDyslexic + Irlen support, built-in stats and benchmark. No accounts, no tracking, fully offline.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors