commit ef24e5f634407a998c95dbc7c5d929a179b9baf8 Author: David Keane Date: Tue Jun 9 03:27:19 2026 +0100 wiki: initial 5 pages for Ranger Reader Same family pattern as rangerhq-tuner / buddy / radio, but adapted for a standalone one-HTML-file tool (no plugin host, no manifest, no offscreen audio). - Home: status table + 3 modes summary + 'install = open the file' - How to Use: keyboard shortcuts, drag-drop, PDF conversion runbook, the three modes broken down, when NOT to use RSVP - The ORP Anchor: deep dive on Optimal Recognition Point, the eye- saccade problem RSVP solves, ORP formula table (1, 2-4, 5-9, 10-13, 14+), Word vs Sentence mode anchoring (Sentence mode added v1.1.3), why red specifically, academic references - Privacy: ONE HTML FILE, ZERO network, localStorage inventory, three-way verification (text editor, DevTools Network, air-gapped), GDPR / CCPA / kids — all not-applicable - FAQ: 11 questions including 'will I actually read faster?', PDF conversion, library, palette explanation, languages - Family: positions Reader as the SIMPLEST sibling, the 'scale floor' of the RangerHQ ethos (one file works offline forever) diff --git a/FAQ.md b/FAQ.md new file mode 100644 index 0000000..fef1b75 --- /dev/null +++ b/FAQ.md @@ -0,0 +1,75 @@ +# FAQ + +## Will I actually read faster with this? + +Yes, with practice. RSVP eliminates the eye-saccade time that normally caps reading speed at ~300 WPM. With the [[ORP anchor|The ORP Anchor]] giving your eye a fixation target, most readers reach 600–800 WPM in Word mode within an hour of practice, and 1000+ WPM in Sentence mode within a week. + +**Comprehension at those speeds is real but not magical.** You'll absorb arguments and findings; you may miss subtle phrasing, nuance, or specific numbers you didn't fixate on. For first reads of academic papers this is usually fine. For re-reads where you want every word, drop to ~400 WPM in Sentence mode. + +## What's the difference between Word, Sentence, and Paragraph modes? + +| Mode | Display | Best for | +|---|---|---| +| **Word** | One word at a time | Fast skim, getting the gist, the "wow I'm fast" experience | +| **Sentence** | One sentence at a time with an ORP anchor letter | Comprehension-grade reading of methods / results sections | +| **Paragraph** | One paragraph at a time | Previewing, postviewing, skim-for-quotes | + +You can switch on the fly with `1` / `2` / `3`. The reader remembers your position when you switch. + +## Will it work on my phone? + +Yes — the HTML file works in any modern mobile browser (Safari iOS 14+, Chrome Android, Firefox). The UI is responsive; the WPM slider works as a touch slider; the spacebar key isn't there but the on-screen Play button is. + +That said: Ranger Reader is most useful on a screen big enough that the RSVP text doesn't crowd the corners. A tablet works great. A phone works but feels cramped. + +## Does it work offline? + +Yes. The HTML file has no external dependencies. Open it from your filesystem (double-click), or from a saved copy on your machine. Browser doesn't need internet. Reader works fully. + +This is the point. The whole reason Ranger Reader exists instead of using SwiftRead is that SwiftRead requires a login and a network — and you can lose access either at any time. + +## How do I get PDFs in? + +Convert them to plain text first. See [[How to Use|Converting PDF papers to text]] for the runbook with `pdftotext` (free on every OS). + +A built-in PDF-to-text converter is on the roadmap but adds significant file size (PDF parsers are not small) and Ranger Reader has been resisting feature bloat. For now, the one-step conversion is the cleanest path. + +## How much text can I paste? + +Tested with academic papers up to 30,000 words (a full PhD thesis section). No issues. The reader handles them at 60 fps regardless of WPM because rendering is one element per frame, not a full document layout. + +The localStorage cap is ~5 MB (browser-dependent). 30,000 words is ~200 KB. You'd need to paste the entire Bible (~750,000 words) to bump into the storage cap. + +## Does it have a "library" of papers? + +Not yet. You paste / drag one paper at a time. A future version could add a list view in `localStorage` to switch between several papers without re-pasting, but the feature isn't there today. + +For now, the workflow is: convert paper 1 → drop it in → read it → repeat with paper 2. + +## Can I export my reading history? + +Not in the current version. Your reading position is stored, but there's no "export progress as JSON" button. If you want one, [open an issue](https://git.davidtkeane.com/ranger/rangerhq-reader/issues) — it would be a 10-line addition. + +## I want to use the ORP feature in a different language + +The current ORP formula assumes Western alphabet, left-to-right text with whitespace-separated words. It will produce technically-correct ORP positions for any language that uses these conventions (English, French, German, Spanish, Portuguese, Italian, Dutch, Swedish, etc.). + +For languages where the formula doesn't fit (Chinese / Japanese / Korean — character-based; Arabic / Hebrew — right-to-left; Thai — no spaces), Ranger Reader will run but the ORP positioning won't be meaningful. A community contribution adding language-specific ORP rules would be welcome. + +## Why is the colour scheme dark teal? It doesn't match RangerHQ green. + +Ranger Reader pre-dates the RangerHQ visual identity unification. The dark teal (`#0e1a23`) and WordPress blue accent (`#2271b1`) come from the very first prototype. They've been kept because long reading sessions are easier on dark teal than on dark green — green is too saturated as a background colour for hours of reading. + +If a future version aligns the palette with the rest of the family, the ORP red and the comfortable contrast ratios would be preserved either way. This is a cosmetic-not-functional decision. + +## Is the source open? + +Yes. GPL v2 or later. The entire source is **one HTML file** you can read in any text editor in 10 minutes. Repo: . + +## Where do I report bugs or suggest features? + + or email . + +## Who made this? + +David Keane, Dublin, Ireland. Built while drowning in MSc Cybersecurity thesis papers at NCI Dublin. · diff --git a/Family.md b/Family.md new file mode 100644 index 0000000..bc207e2 --- /dev/null +++ b/Family.md @@ -0,0 +1,79 @@ +# Family + +Ranger Reader is the **simplest sibling** in the RangerHQ family. It is the proof that the family ethos — *lightweight, no telemetry, hand-rolled, GPL v2+, ship for self first* — works at every scale, from one HTML file all the way up to a Manifest V3 Chrome extension. + +## Current family members + +### Ranger Reader — this project + +- **Surface:** Any web browser (works offline from `file://`) +- **Function:** RSVP speed reading with ORP anchor — Word / Sentence / Paragraph modes +- **Repo:** [git.davidtkeane.com/ranger/rangerhq-reader](https://git.davidtkeane.com/ranger/rangerhq-reader) +- **Format:** ONE HTML FILE. Open it. That's the install. +- **Distribution:** Self-hosted; copies exist on davidtkeane.com and the Gitea repo +- **Why it's the simplest sibling:** It has no plugin host, no store, no marketplace, no service-worker, no offscreen-document complexity. Open `ranger-reader.html` → it works. The entire codebase is one file you can read in an editor in 10 minutes. + +### RangerHQ Radio — WordPress sibling + +- **Surface:** WordPress admin +- **Function:** SomaFM player with track history + favourites + four-button search to Spotify / YouTube / Apple / Bandcamp +- **Repo:** [git.davidtkeane.com/ranger/rangerhq-radio](https://git.davidtkeane.com/ranger/rangerhq-radio) +- **Distribution:** [WordPress.org Plugin Directory](https://wordpress.org/plugins/rangerhq-radio/) (LIVE) + +### RangerHQ Buddy — WordPress sibling + +- **Surface:** WordPress admin +- **Function:** A small virtual pet for every WP admin user; Phase E will tie its mood to your site's actual health +- **Repo:** [git.davidtkeane.com/ranger/rangerhq-buddy](https://git.davidtkeane.com/ranger/rangerhq-buddy) +- **Distribution:** WordPress.org Plugin Directory (in round-2 review at time of writing) + +### RangerHQ Tuner — Chrome sibling + +- **Surface:** Chrome browser (toolbar popup + optional New Tab Page override) +- **Function:** Same idea as Radio, but in the browser instead of wp-admin. Plays SomaFM, logs tracks, four-button search to the big-four music services +- **Repo:** [git.davidtkeane.com/ranger/rangerhq-tuner](https://git.davidtkeane.com/ranger/rangerhq-tuner) +- **Distribution:** Chrome Web Store (in review at time of writing) + +## Coming next + +### RangerHQ Logbook + +- **Surface:** WordPress admin +- **Function:** Site-changes audit log for WordPress administrators. Captures who did what when across plugins, themes, options, users — searchable + exportable +- **Status:** In design + +## Family-wide promises (the "RangerHQ promise") + +Every project in the RangerHQ family commits to: + +- ✅ **GPL v2 or later** — open source, audit-able, fork-able +- ✅ **No telemetry, ever** — nothing leaves your site / browser / device +- ✅ **No third-party JavaScript SDKs** — the code you install is the code that runs +- ✅ **No CDN-fetched fonts or images** — assets are bundled, period +- ✅ **Narrow permissions** — request only what's needed, justify the rest +- ✅ **Per-user / per-device privacy** — no cross-account leakage, no shared site-wide state where per-user makes more sense +- ✅ **Hand-rolled, no build step where possible** — vanilla PHP on WordPress, vanilla JS in the browser +- ✅ **Tier-1 admin discipline** — single h1 per admin page (where applicable), escaped output everywhere, accessibility-respecting +- ✅ **Keep-a-Changelog format** — every release documented at the file-level detail + +Ranger Reader takes these promises to the limit. It is **one file**. It has **zero dependencies**. It contacts **zero servers**. It works **offline forever**. There is no clearer expression of the "hand-rolled and self-contained" ethos than a single HTML file that does one job well. + +## Identity + +- **Logo (family):** the RangerHQ helmet (the gladiator / Spartan-style silhouette) +- **Palette (family):** dark base `#0f1411`, accent green `#6dbf7a` (RangerHQ green), cream `#f4e9b7` (highlights) +- **Palette (Reader):** dark teal `#0e1a23`, accent blue `#2271b1`, ORP red `#ff5252` — Reader pre-dates the family palette unification and keeps its own colours because dark teal is easier on the eyes for hours of reading +- **Typography:** system fonts, no web fonts +- **Voice:** matter-of-fact, "what it does today" + "what it doesn't do yet" +- **Maker:** [David Keane](https://davidtkeane.com), Dublin, Ireland + +## Why Reader is the "scale floor" of the family + +The other RangerHQ projects ship as plugins or extensions for the platforms they live in: + +- Radio + Buddy + Logbook need WordPress +- Tuner needs Chrome (or Chromium-based browsers) + +Reader needs **a browser**. That's it. No specific browser, no specific version, no internet connection, no account, no host, no maintenance. It is the project that survives the longest if everything else goes away — if you have a copy of `ranger-reader.html` on a USB stick in 2046, you can still use it. + +That is what "lightweight, hand-rolled, no-cloud" means at its purest. Every other family member is held to the same standards within their own platform constraints. diff --git a/Home.md b/Home.md new file mode 100644 index 0000000..8760356 --- /dev/null +++ b/Home.md @@ -0,0 +1,73 @@ +# ◈ Ranger Reader Wiki + +**A lightweight RSVP reader for academic papers and long-form text. Single HTML file. No install. No subscription. No cloud. Runs offline in any browser.** + +Built to handle the volume of reading required by an MSc thesis without paying $120/year for SwiftRead or similar tools. Released here so others can do the same. + +| | | +|---|---| +| **Latest tag** | [v1.1.3](https://git.davidtkeane.com/ranger/rangerhq-reader/src/tag/v1.1.3) | +| **Licence** | GPL v2 or later | +| **Install** | Open `ranger-reader.html` in any browser. That's it. | +| **Landing page** | https://davidtkeane.com/rangerhq-reader | +| **Family** | The simplest sibling in the [[Family|RangerHQ family]] | + +--- + +## What it does + +Three reading modes for the same text, switchable on the fly with `1` / `2` / `3`: + +| Mode | What it does | Best for | +|---|---|---| +| **Word** | Classic RSVP — one word at a time at chosen WPM, with [ORP](The-ORP-Anchor) focal-character colouring | Fast skim, "I'm reading at 4× normal speed" experience | +| **Sentence** | One full sentence at a time with an ORP anchor letter near the middle, auto-advancing based on word count | Comprehension-grade reading of methods / results sections | +| **Paragraph** | One paragraph at a time, longer display | Preview / postview stages, skim for quotes | + +Text, WPM, mode, and reading position all auto-save in your browser via `localStorage` — close the tab, reopen tomorrow, resume where you stopped. No accounts, no syncing, no cloud. + +## Quick links + +- [[How to Use]] — keyboard shortcuts, drag-and-drop, PDF conversion, the spacebar Play/Pause habit +- [[The ORP Anchor]] — the science of why a single red letter makes RSVP comprehensible at 1500+ WPM, and the formula for picking which letter +- [[Privacy]] — what stays in your browser, what never leaves it (spoiler: nothing leaves) +- [[FAQ]] — common questions +- [[Family]] — sibling projects in the RangerHQ family + +## Install + +There is no install. + +```bash +# Either clone the repo: +git clone https://git.davidtkeane.com/ranger/rangerhq-reader.git +open rangerhq-reader/ranger-reader.html + +# Or just download the one HTML file: +curl -O https://git.davidtkeane.com/ranger/rangerhq-reader/raw/branch/main/ranger-reader.html +open ranger-reader.html +``` + +Double-click the file. Browser opens. You're done. + +## Source layout + +``` +rangerhq-reader/ +├── ranger-reader.html # The entire app. One file. Everything. +├── README.md # Quick reference +├── CHANGELOG.md # Keep a Changelog format +└── LICENSE # GPL v2 or later +``` + +That's the entire repo. No dependencies, no build step, no `node_modules`, no `vendor`, no compiled artefacts. + +## Why it exists + +David needed to get through ~50 academic papers for an MSc Cybersecurity thesis at NCI Dublin. SwiftRead costs $120/year. Spreeder costs $30/year. Both are perfectly good products, but neither is open source, neither runs offline, neither lets you walk away from the data when you graduate. + +A weekend of HTML + JavaScript later, Ranger Reader hits the same RSVP-with-ORP target at 0 cost, with 0 telemetry, in a 60 KB file that runs offline on every machine you own and any future machine you might own. + +## Reporting issues / suggestions + +Open an [issue](https://git.davidtkeane.com/ranger/rangerhq-reader/issues) or email . diff --git a/How-to-Use.md b/How-to-Use.md new file mode 100644 index 0000000..b6d6f95 --- /dev/null +++ b/How-to-Use.md @@ -0,0 +1,114 @@ +# How to Use + +## The 5-second start + +1. **Open `ranger-reader.html`** in any modern browser. Double-click on macOS / Linux / Windows works. +2. **Paste text** into the textarea at the bottom, or **drag any `.txt` file** onto the page. +3. **Press `Space`** (or click ▶ Play) to begin. +4. **Tap `1`, `2`, or `3`** to switch reading modes. +5. **Slide WPM** up or down to taste — default 500, range 200–1500 (some users push to 3000 in Sentence mode). + +That's it. Everything else is shortcuts and small touches. + +## Keyboard shortcuts + +| Key | Action | +|---|---| +| `Space` | Play / pause | +| `←` | Skip back (10 words in Word mode, 1 chunk in Sentence / Paragraph modes) | +| `→` | Skip forward (same) | +| `1` | Switch to Word mode | +| `2` | Switch to Sentence mode | +| `3` | Switch to Paragraph mode | +| `+` | Increase WPM by 50 | +| `−` | Decrease WPM by 50 | +| `R` | Reset to start of text | + +Spacebar to start / pause is the most-used shortcut by far. It's the one to remember. + +## The three modes + +### Word mode — the classic RSVP + +Single word displayed in the centre of the screen, replaced every (60/WPM) seconds. At 500 WPM that's a word every 120 ms; at 1500 WPM every 40 ms. + +Use for: **fast skim, getting the gist, the "wow I'm reading at 4× normal" mode**. Comprehension drops above ~700 WPM for most readers without practice. Practice helps. + +### Sentence mode — comprehension grade + +One full sentence displayed at a time. Display duration auto-scales by sentence length (longer sentences get more time). An [ORP anchor letter](The-ORP-Anchor) appears near the middle of the sentence, coloured red, to give your eye a fixation point. + +Use for: **methods sections, results, anything where you actually need to remember what was said**. Sentence mode at 1500 effective-WPM beats Word mode at 1500 for retention, every time. + +### Paragraph mode — preview / postview + +Whole paragraph at once, generous display time. Reads like normal text, just larger and centred. + +Use for: **previewing a section before you commit to reading it carefully, postviewing for quote extraction, deciding whether to skip a paper entirely**. Also good for poetry / prose that loses meaning when chopped into words. + +## Drag-and-drop a `.txt` file + +Drop any `.txt` file onto the reader page. It loads instantly, replaces whatever was in the textarea, and auto-detects paragraph breaks. No upload step — the file never leaves your machine; it just gets read into the page's `FileReader` API in your browser. + +## Converting PDF papers to text + +Ranger Reader takes plain text. Academic papers are PDFs. You need a one-time conversion step. + +### macOS / Linux (with `poppler-utils`) + +```bash +# Install once: +brew install poppler # macOS +sudo apt install poppler-utils # Debian / Ubuntu + +# Convert: +pdftotext -layout input.pdf output.txt +``` + +The `-layout` flag preserves the visual layout — that produces cleaner output for most academic PDFs. Drop the `.txt` onto the reader page. + +### Windows + +Either install poppler via Chocolatey (`choco install poppler`), or use any online PDF-to-text converter and download the `.txt` result. + +### From the command line on any platform with Python + +```bash +pip install pdfminer.six +pdf2txt.py input.pdf > output.txt +``` + +### What does NOT work well + +- **Two-column papers** — `pdftotext` can read them in column order if you use `-layout`, but sometimes interleaves text. Sanity-check the first paragraph of the output. +- **PDFs with no embedded text** (scanned / image-only) — you need OCR first (`tesseract` is free). For most modern academic papers this isn't an issue; for older scans it is. +- **PDFs with extensive equations or figures** — equations come out as nonsense glyph strings; you'll want to skip past them in the reader (use `→`). + +## Where your data lives + +Everything is in your browser's `localStorage` under one key. Open DevTools → Application → Local Storage to see the raw blob. The reader auto-saves: + +- The current text you pasted +- Your chosen mode (Word / Sentence / Paragraph) +- Your chosen WPM +- Your current reading position in the text + +Close the tab, open it again tomorrow, hit `Space` — the reader picks up exactly where you left off. No login, no sync, no cloud. Just your browser remembering for you. + +## Speed-reading tips that actually work + +1. **Start at 500 WPM in Word mode** for ~5 minutes. That's your baseline calibration. +2. **Bump 50 WPM at a time** (`+` key). Stop when you feel like you've stopped comprehending — that's your current ceiling. +3. **Switch to Sentence mode** at your Word-mode ceiling × 1.5. You'll usually find Sentence mode comprehension is better. +4. **Use Paragraph mode for previews** — read the abstract, conclusion, and section openers in Paragraph mode before committing to a full read. +5. **Don't fight the ORP letter** — let your eye snap to the red character and trust your peripheral vision to handle the rest. This is the whole game. + +See [[The ORP Anchor]] for why the red letter matters. + +## When NOT to use Ranger Reader + +- **Anything where prosody matters** — poetry, lyrics, dialogue. RSVP destroys rhythm. +- **Code samples** — RSVP cannot parse indentation. Read code in your editor. +- **Anything you need to take notes on as you read** — you can't pause-and-write quickly enough at 1000+ WPM. Use Paragraph mode and old-fashioned linear reading for note-taking sessions. + +RSVP is a tool. Use it where it helps; don't force it where it doesn't. diff --git a/Privacy.md b/Privacy.md new file mode 100644 index 0000000..6206403 --- /dev/null +++ b/Privacy.md @@ -0,0 +1,86 @@ +# Privacy + +## TL;DR + +**Ranger Reader runs entirely in your browser. Nothing leaves your device. Ever.** + +It is one HTML file. There is no server. There is no backend. There is no cloud. There is no telemetry, no analytics, no third-party JavaScript SDKs, no font CDN, no image CDN, no remote API of any kind. + +If your machine is offline, the reader works. If your machine never reaches the internet again, the reader still works. + +## What is stored + +Browser `localStorage`, on your machine, under one key. The stored payload contains: + +| Field | What it holds | +|---|---| +| The current text you pasted or dragged in | So you can resume where you left off | +| Your chosen reading mode | Word / Sentence / Paragraph | +| Your chosen WPM | Default 500, range 200–1500 | +| Your current reading position in the text | Word / sentence / paragraph index | + +**Inspect it yourself** — open DevTools (Cmd+Opt+I on Mac, F12 on Windows / Linux) → **Application** tab → **Storage → Local Storage → file:// (or your URL)**. You'll see one key with the JSON blob containing the four fields above. That is the complete extent of what Ranger Reader stores. + +## How to clear it + +| Method | What it clears | +|---|---| +| Click the **"Reset"** button in the reader UI | The four fields above; reader returns to factory defaults | +| Browser → Clear Browsing Data → "Cookies and other site data" for `file://` (or your hosting domain) | Same as above | +| Open the file in an Incognito / Private window | Reader works normally; nothing is persisted at all; closing the window forgets everything | + +## What is sent over the network + +**Nothing.** + +Verify by opening the page in a browser, opening DevTools → **Network** tab, and using the reader. You will see zero network requests. The reader uses no `fetch()`, no `XMLHttpRequest`, no WebSocket, no Service Worker, no Web Push. + +The only reason your browser might make any network request while the reader is open is if you have other extensions installed that touch every page. Ranger Reader itself sends nothing. + +## How the page is delivered + +You open `ranger-reader.html` directly from your filesystem (most common) or from a static host you control (e.g. davidtkeane.com mirrors a copy at ). In either case: + +- **Direct file open (`file://...`):** the browser loads the HTML from your disk. No network hop. No DNS lookup. No server log entry anywhere. +- **From your static host:** your host's access log records that you fetched the file. After that, all execution is local. Subsequent reading sessions don't re-hit the server unless you reload. + +In neither case does Ranger Reader phone home to David Keane, RangerHQ, davidtkeane.com, or anyone else. + +## Third-party content + +There is none. + +- ❌ No web fonts (the reader uses system fonts only) +- ❌ No CDN-loaded JavaScript libraries (everything is inline) +- ❌ No analytics (Google Analytics, Plausible, Fathom, etc. — none of them) +- ❌ No error reporting (Sentry, Rollbar, etc. — none of them) +- ❌ No A/B testing scripts +- ❌ No advertising network code +- ❌ No social media share widgets +- ❌ No iframes pointing anywhere + +The HTML file is self-contained. You can read every line of it in any text editor — the entire app is ~1000 lines of HTML + CSS + JavaScript. + +## Verification + +Three ways to convince yourself this is true: + +1. **Open the file in a text editor.** The whole app fits on one screen if you scroll. There's nothing hidden. +2. **Open DevTools → Network while reading.** Zero requests. +3. **Run the file on an air-gapped machine.** Reader works perfectly. + +## GDPR / CCPA / LGPD / PIPEDA + +No personal data is collected or processed. No data is sent to any third party (because no data is sent anywhere at all). Your reading habits are visible only to you, on your own browser, on your own machine. + +These regimes apply when an entity collects or processes personal data. Ranger Reader is not an entity — it's a static file. There is nothing to comply with because there is nothing to comply about. + +## Children's privacy + +Ranger Reader is a static HTML file with no data collection. It does not knowingly or unknowingly process data of children under 13, or any other age. It processes the text you paste into it, in your browser, and then forgets unless you ask it to remember. + +## Contact + +- Email: +- Issues / source: +- Author: David Keane, Dublin, Ireland diff --git a/The-ORP-Anchor.md b/The-ORP-Anchor.md new file mode 100644 index 0000000..a9b0bfd --- /dev/null +++ b/The-ORP-Anchor.md @@ -0,0 +1,88 @@ +# The ORP Anchor + +The single most important feature of Ranger Reader is the **red letter** — the Optimal Recognition Point (ORP) anchor. It is what makes RSVP comprehensible at 1500+ WPM instead of just fast. + +## The eye-saccade problem + +When you read normal text, your eyes do not glide smoothly across the page — they jump in **saccades**, fixating on one word at a time. Each fixation lasts ~200–250 milliseconds, with saccades between them taking ~30 ms. You can only process visual information during the fixation, not the saccade. + +A typical reader fixates ~4–5 times per second. That maths out to a hard ceiling of ~300 WPM for normal reading without skimming. Higher speeds require **skipping fixations** (which loses comprehension) or **eliminating saccades entirely**. + +RSVP eliminates saccades. Words appear in the same place on the screen. Your eye doesn't have to jump anywhere — it just sits still and reads what's in front of it. The 300 WPM ceiling lifts to ~1000+. + +But this only works if your eye knows **where in the word to look**. + +## What the ORP is + +For any given word, there is a specific character position where the eye fixates fastest and where peripheral vision picks up the surrounding characters most easily. This is the **Optimal Recognition Point** (ORP), also called the focal character. + +It is NOT the centre of the word. It is **slightly left of centre** — roughly the 30%-from-left position. The exact formula depends on word length. + +If you display a word and colour the ORP character red, the eye snaps to that position **before** the brain has finished parsing the word. The red letter becomes a target. By the time your conscious mind catches up, the entire word has been read and peripheral vision has the next word's silhouette already buffered. + +Without the ORP anchor, your eye drifts — it might fixate on the first letter, then the third, then the middle, jumping around hunting for the gist. With the anchor, the eye lands on the right position **every single time**. That's the comfort that lets you push to 1500 WPM without burning out. + +## Ranger Reader's ORP formula + +``` +Word length (chars) | ORP position (0-indexed) + 1 | 0 + 2–4 | 1 + 5–9 | 2 + 10–13 | 3 + 14+ | 4 +``` + +This is the SpritzInc formula, refined by community RSVP research over the years. It's the same formula used by SwiftRead and Spreeder. Ranger Reader implements it verbatim. + +### Example + +The word **"evaluation"** is 10 characters. Per the table: ORP at position 3 (zero-indexed), which is the letter `l`. So the rendered word looks like: + +``` +eva l uation + ↑ + red +``` + +The `l` is red, the rest is the normal foreground colour. Your eye snaps to the `l` and reads "evaluation" without conscious effort. + +## Word-mode ORP vs Sentence-mode ORP + +### Word mode + +Every word gets its own ORP character coloured red. The word is replaced every (60/WPM) seconds. Your eye stays planted in the centre of the screen, gets a red anchor on every new word, reads, gets the next word, repeats. + +### Sentence mode (added in v1.1.3) + +This is the more recent addition and arguably the more important one. Sentence mode displays a whole sentence at once and auto-advances based on word count. Without an anchor, your eye would start scanning the sentence from the left like normal reading — wasting saccades and running out of time before the sentence advances. + +Ranger Reader's Sentence mode picks the **middle word** of the sentence (by word index, not character index) and applies the standard ORP formula to **that word**. The red letter appears near the middle of the displayed sentence. Your eye fixates there immediately, takes in the sentence via peripheral vision, and moves on without having to scan. + +For a 9-word sentence, the middle word is index 4. If that word is "evaluation" (10 chars), the ORP character is `l` — same as Word mode for the same word. + +This is the trick that lets you do effective-WPM of 2000+ in Sentence mode without losing comprehension. The anchor letter does the eye-positioning work for you. + +### Paragraph mode + +Paragraph mode does **not** apply an ORP anchor. A single red letter in a multi-line block isn't useful — your eye still needs to saccade between lines, so a single fixation point doesn't help. + +A future version could apply per-sentence ORP within paragraphs (each sentence's middle word coloured), but the use case isn't clear yet. If you have a specific reading workflow where this would help, [open an issue](https://git.davidtkeane.com/ranger/rangerhq-reader/issues). + +## Why red, specifically? + +Red has the highest perceptual contrast against the dark teal background (`#0e1a23`) used in Ranger Reader. The eye locks onto red faster than any other colour — this is why traffic signals, warning labels, and "record" buttons on cameras are red. + +A subtler shade (orange, yellow, light blue) would reduce eye strain but also reduce the snap-to-anchor speed. The whole point of the anchor is that your eye finds it **involuntarily**, before conscious decoding kicks in. Red wins on that axis. + +If high-contrast red triggers your photophobia or migraines, the colour is configurable in CSS — open `ranger-reader.html`, find `--orp: #ff5252;` in the `:root` block, change to whatever works for you (orange `#ff8c42` is a softer alternative many users prefer). + +## The references + +If you want to read the academic literature behind RSVP and ORP: + +- **Rayner, K. (1998).** "Eye movements in reading and information processing: 20 years of research." Psychological Bulletin, 124(3), 372–422. — The canonical review of how eye movements work in normal reading. +- **Potter, M. C., et al. (2014).** "Detecting meaning in RSVP at 13 ms per picture." Attention, Perception, & Psychophysics, 76(2), 270–279. — Shows that visual gist extraction works at extreme speeds, supporting the RSVP comprehension claim. +- **SpritzInc patents (2014).** ORP positioning formulas. Public-domain on expiry; the formulas above are derived from the published patent documents. + +Most academic critique of RSVP centres on its weakness at re-reading and at high-density technical text. Those critiques are correct — see [[How to Use|When NOT to use Ranger Reader]] in the How to Use page for the matching practical guidance.