Goodreads Dashboard

A client-side reading dashboard built from your Goodreads library export CSV. Pages read by year, reading calendar heatmap, top authors and series, longest books, rating distribution, recency lag between publication and reading, and more.

Your file never leaves the browser. The CSV is parsed and aggregated entirely in WebAssembly running locally — there is no server upload, no account, no analytics on the file contents.

How to Play

Export your library from Goodreads, then drop the CSV into the page:

  1. Go to goodreads.com/review/import.
  2. Click Export Library and wait for the CSV.
  3. Open this lab and select the downloaded goodreads_library_export.csv.

The dashboard renders instantly. Screenshot whichever section you like.

How It's Built

A single Rust crate compiled to WebAssembly:

  • goodreads-dashboard — parses the CSV with the csv crate, aggregates with plain Rust, and renders HTML using maud templates.
  • wasm-bindgen — exposes a single render_dashboard(csv: &str) -> String function. The page's JS is ~15 lines: read the file, call into WASM, set innerHTML.
  • No bundler, no TypeScript, no npm. The page is hand-written HTML, CSS, and a tiny ES-module init script alongside the compiled .wasm artifact.
Play