Waypoint adds the four content-UX features readers actually want — a reading progress bar, an estimated read time, an auto-built table of contents, and a smooth scroll-to-top — in one lightweight script. It scans your headings and word count automatically. No config, no four conflicting plugins.
A thin bar tracks how far through the article a reader is — updated on every scroll burst, throttled with one requestAnimationFrame so it never janks. Color, height, and top/bottom position are customizable on a license.
Waypoint counts the words in your article and divides by reading speed — 238 WPM by default, the average adult pace — to inject an honest "min read" line near the top. Set the WPM to match your audience on a license.
Waypoint scans the page's h2 and h3 headings and builds a table of contents from them — no manual list, no anchors to maintain. Float it to the side or inline it at the top; the current section highlights as you read.
A floating button fades in once a reader scrolls past the fold and smoothly returns them to the top in one tap. It lives in a Shadow-DOM bubble so it can't be styled — or broken — by your theme's CSS.
When a reader hits ~98% of the article, Waypoint fires a waypoint:complete DOM event with the read minutes and word count — a clean hook for analytics, gamification, or a "you finished it" nudge.
Pure HTML/CSS/JS, zero dependencies, no build step, rAF-throttled and prefers-reduced-motion-aware. The floating chrome lives in a Shadow DOM. Drop it on WordPress, a static site, Webflow — anything that renders a <script> tag.
One <script> tag with defer, plus optional data-* attributes for theme color, bar position, and your license key. No build step, no config required.
It finds your article container automatically (article → main → common post-content classes), then reads its h2/h3 headings and word count — no markup to add.
A progress bar tracks their scroll, a "min read" estimate shows near the top, the auto table of contents follows along, and the scroll-to-top button is one tap away.
Tune the bar's color, data-bar-position, and height, override the WPM, and listen for the waypoint:complete event to feed your analytics.
Free gives every reader a progress bar and an honest read-time estimate. A license adds the auto ToC, scroll-to-top, customization, and the reading-complete event.
Waypoint locates your article container by trying article → main → [role="main"] → common post-content classes → <body>, then scans that container for h2 and h3 elements to build the table of contents and counts its words for the read-time estimate. No anchors, no manual list, no markup to add. If your theme uses a different wrapper, point it at the right one with data-content-selector.
No. The floating chrome — the progress bar, scroll-to-top button, and floating ToC — lives in a Shadow DOM, so its styles are completely isolated from your page and your page's CSS can't reach in and break it. The read-time line and the inline ToC are injected into the light DOM on purpose, so they inherit your article's typography and flow with the content. It's vanilla JS with zero dependencies, so there's nothing to clash with.
No. The free tier renders a reading progress bar and an estimated read time forever — those two always render, no key required. A license adds the auto table of contents, the scroll-to-top button, bar customization, the WPM override, and the waypoint:complete event.
Read time is words divided by reading speed, defaulting to 238 words per minute — the average adult pace — with a one-minute floor. It's an honest estimate, not a guarantee, because everyone reads differently. On a license you can override the WPM (clamped 80–1000) to match a slower or more technical audience.
It's pure vanilla JS, no dependencies, served from Cloudflare's edge. The scroll handler is requestAnimationFrame-throttled with passive listeners — one frame per scroll burst updates the bar, the scroll-top visibility, and the active heading together. It also respects prefers-reduced-motion, turning smooth scrolls into instant jumps and killing transitions for readers who ask for that.
Yes. window.Waypoint exposes a JS API — Waypoint.refresh() re-scans headings and recomputes the read time after a client-side route change, and calls made before the script loads are queued and flushed on init. There's also Waypoint.scrollTop() and Waypoint.getReadTime().