Skip to content

JDRV-space/nabu

Repository files navigation

NABU RSVP Demo

Live Demo Rust WebAssembly Leptos

License: MIT PRs Welcome

Uses RSVP (Rapid Serial Visual Presentation) to flash words at configurable speeds. Everything runs client-side, your documents never leave your browser.

Features

  • RSVP engine with adjustable WPM (100-1000)
  • Word grouping: display 1, 3, 5, 10, or 20 words per flash
  • ORP (Optimal Recognition Point) highlighting in amber for faster recognition
  • Document library with IndexedDB storage and AES-GCM encryption
  • Supports PDF, TXT, DOCX, and Markdown
  • Fullscreen mode for distraction-free reading
  • Full keyboard shortcut support
  • Dark theme with void black background and amber accents

Tech Stack

  • Language: Rust
  • Framework: Leptos 0.8 (CSR)
  • Compilation: WebAssembly via wasm-bindgen
  • Build: Trunk
  • Storage: IndexedDB with AES-GCM encryption
  • PDF parsing: pdf.js 4.0
  • DOCX parsing: JSZip 3.10
  • Sanitization: ammonia (XSS prevention)
  • Deployment: Vercel with auto-deploy
  • Typography: Space Grotesk

Quick Start

Prerequisites:

  • Rust (stable)
  • wasm32-unknown-unknown target
  • Trunk
git clone https://github.com/JDRV-space/nabu.git
cd nabu

rustup target add wasm32-unknown-unknown
cargo install trunk

trunk serve

App runs at http://127.0.0.1:8080

For production: ./scripts/build.sh (output in dist/)

Keyboard Shortcuts

Key Action
Space Play/Pause
Left/Right Adjust WPM by 50
Up/Down Adjust WPM by 10
R Restart
F Fullscreen
ESC Exit reader

Project Structure

nabu/
├── src/
│   ├── main.rs              # Entry point
│   ├── components/          # reader, library, settings, controls, upload
│   ├── state/               # Application state and signals
│   ├── storage/             # IndexedDB + encryption
│   └── parser/              # PDF, DOCX, TXT, MD parsing
├── docs/SPEC.md             # Full specification
├── scripts/                 # Build scripts
├── index.html
├── style.css
├── Cargo.toml
├── Trunk.toml
├── vercel.json
└── LICENSE

Security

  • XSS prevention via ammonia
  • AES-GCM encryption for stored documents
  • Magic bytes validation and size limits on uploads
  • Strict CSP headers via Vercel
  • No backend = no server-side attack surface

Contributing

PRs welcome. See CONTRIBUTING.md.

  1. Fork the repo
  2. Create feature branch
  3. Commit changes
  4. Push and open PR

Documentation

License

MIT. See LICENSE.

Author

Juan Diego Rodriguez @JDRV-space

About

Speed reading (RSVP) web app built with Rust, WebAssembly, and Leptos.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors