# Listen to Wikipedia

- Authors: Stephen LaPorte and Mahmoud Hashemi (Hatnote); based in part on Listen to Bitcoin by Maximillian Laumeister
- Source: https://github.com/hatnote/listen-to-wikipedia
- Commit: 62e4047e3e1019f4b85c20c9c91ba02b2e26c0f3 (master); files from `static/` as published (no build step)
- Licence: BSD 3-Clause (Hatnote) + MIT (Listen to Bitcoin portion), both in ./LICENSE
- Sounds (sounds/celesta, sounds/clav, sounds/swells): ship in the repository with no separate notice; the README says the
  authors prepared them ("We fixed up some of the sounds using Sound eXchange"), so they are covered by the repository LICENSE.
- Bundled libraries (as shipped in the repo): d3 3.1.10 (BSD-3), jQuery 1.9.1 (MIT), howler.js 1.1.25 (MIT),
  reconnecting-websocket (MIT, not used by the replay but kept), seedrandom 2.2 (BSD), jQuery Tags Input 1.3.3 (MIT),
  early noUiSlider (WTFPL/MIT). See ./LICENSE-third-party.txt.
- Vendored files: index.html (original page, kept for reference), css/, js/ (minus the unused buzz.js), sounds/, LICENSE

## Data snapshot (replaces the live websocket)
- Source: Wikimedia EventStreams, https://stream.wikimedia.org/v2/stream/recentchange
- Recorded: 2026-10-29, 600 seconds starting 03:00:53 UTC (3,977 main-namespace edits + 39 new-user sign-ups across the
  43 wikis the page offers; English ≈ 1,180 edits, Wikidata ≈ 2,040)
- Licence: Wikimedia EventStreams data is published under CC0 1.0. Edit summaries are NOT included (only a "revert" marker
  is kept so the original revert labelling still works); IP addresses of logged-out editors are replaced by "(anonymous)".
- File: js/ltw-snapshot.js (`window.LTW_SNAPSHOT = {...}`, a script rather than JSON so it loads without fetch/CORS).
  Recorder: snapshot-tools/record-recentchange.py; field mapping in snapshot-tools/README.txt.

## Added by Web Curio
stage.html, this file, LICENSE-third-party.txt, js/ltw-snapshot.js, js/ltw-replay.js, snapshot-tools/.
js/ltw-replay.js is the documented shim: it defines `window.ReconnectingWebSocket` (loaded right after the original library,
so it replaces it) as an object that replays the snapshot for the requested language with the recorded timing, starting at a
random point and looping every 10 minutes. app.js and the page logic are unchanged.

## Modifications to the original (all in stage.html, made with stage.py)
- strict CSP + sandbox shim; two script tags added after reconnecting-websocket.min.js (snapshot + replay shim)
- Google Analytics snippet removed, and its notice replaced by a note describing the offline replay
- the "Use new backend (HTTPS)" setting removed (it reloads the page on another protocol)
- a small "replay of real edits recorded 2026-10-29 03:00 UTC · offline copy" label added under the title
- The header links (blog, twitter, app) and the per-edit links to Wikipedia are left as in the original.
