911realtime.org

July 15, 2026 Β· View on GitHub

An update to 911realtime.org is coming for the 25th anniversary of the September 11, 2001 attacks (September 11, 2026). Stay tuned for more details.

A project to collect multimedia from the September 11 attacks and synchronize it into a common media player, so the day can be experienced as it unfolded β€” in real time, across television, radio, pagers, and the web.

🚧 Try the beta: A preview of the version 2 rewrite is live at https://beta.911realtime.org. Come explore it, and if you run into bugs or have ideas, please file an issue β€” your feedback helps shape the anniversary release.

About

This repository is the version 2 rewrite of 911realtime.org: a Mac OS 8-style desktop, built on the Classicy component library, that presents synchronized period media inside a nostalgic, era-appropriate interface. It is a pnpm monorepo:

PackageDescription
packages/frontendThe Vite + React + TypeScript desktop app and its applications
packages/backendMedia/EPG data seeding and generation scripts
packages/toolsSupporting tooling (e.g. media ingestion)

Setup

Prerequisites

The toolchain versions are pinned in mise.toml:

  • Node 25, pnpm 10 (also Go 1.25 and Python 3.12 for the tools package)

If you use mise, mise install will provision everything. Otherwise install Node and pnpm manually.

Running the app

From the repository root:

pnpm install
pnpm dev          # starts the frontend dev server

Then open http://localhost:5173 in your browser.

Other root scripts:

ScriptPurpose
pnpm buildType-check and build the frontend for production
pnpm testRun the frontend test suite (Vitest)
pnpm lintLint the frontend (ESLint)
pnpm setupSeed the backend data store
pnpm db:gen-epgGenerate the Electronic Program Guide data

Local vs. published Classicy

The frontend depends on the published classicy package by default. If you are also developing Classicy itself, you can link a local build. From packages/frontend:

pnpm use:local       # link a locally built classicy
pnpm use:published   # remove the link and install from npm

Applications

The desktop includes the following apps. Click any desktop icon or use the Apple menu to open them.

Finder

The classic Mac OS file browser for the desktop's virtual file system. Double-click Macintosh HD to browse into Documents, which holds 49 archived newspaper front pages from September 11, 2001 and a photo archive from the International Center of Photography.

PDF Viewer

Opens PDF documents in place β€” used to read the archived newspaper front pages under Documents β†’ Newspapers.

Picture Viewer

Opens image files in place β€” used to view the International Center of Photography archive under Documents β†’ Photos.

Movie Player

A QuickTime-style movie player for video files opened from the Finder.

Browser

A retro web browser powered by the TimeMachine Web Proxy. Fetches archived snapshots of websites from the Wayback Machine and renders them in a Mac OS 8-style browser window with back/forward navigation, visited-link memory, and a favorites bar.

Requires the TimeMachine proxy β€” see TimeMachine Proxy Setup below.

News

A news reader that displays historical news entries. Supports thumbnail and full-article views with pagination.

EPG

An Electronic Program Guide rendered as a scrollable channel/time grid, displaying show titles, descriptions, and icons in a classic TV guide layout.

TV

A multi-channel streaming TV player. Displays a scrollable strip of video thumbnails at the bottom; clicking a channel expands it to fill the main area. All streams stay mounted to preserve playback state.

Radio Scanner

A live audio scanner that tunes through period radio stations on a synchronized timeline, with a waveform visualizer. Audio rides its own opt-in stream and keeps playing across browser tab switches.

Pager Decoder

A live POCSAG/FLEX pager message decoder. Connects to a pager index feed, streams decoded messages in real time, and supports filtering by address, source, and message content.

Newsgroups

A Usenet newsgroup reader with a collapsible group tree, search, sorting, and on-demand message bodies β€” browse archived discussions as they appeared on the period internet.

Controls

A remote-control panel for navigating the synchronized media timeline (stepping forward and back through the day) and adjusting playback settings.

BlueBox (Infinite Mac)

Embeds Infinite Mac β€” a browser-based emulator running Mac OS 8.1 on a Quadra 650 β€” inside a Classicy window.


TimeMachine Proxy Setup

The Browser app requires the TimeMachine Web Proxy to be running locally. It is managed via Docker Compose through the frontend package scripts.

Prerequisites: Docker with Compose support.

cp packages/frontend/.env.example packages/frontend/.env   # review and adjust settings if needed
pnpm --filter @rt911/frontend proxy:up                      # build and start the proxy

The proxy starts on http://localhost:8765. Once it is running, open the Browser app and enable the proxy under File β†’ Settings β†’ Enable TimeMachine Proxy.

To stop or restart it:

pnpm --filter @rt911/frontend proxy:down     # stop
pnpm --filter @rt911/frontend proxy:cycle    # restart

Configuration

Configured via packages/frontend/.env (copied from .env.example):

VariableDefaultDescription
TIMEMACHINE_PORT8765Host/container port the proxy listens on
LISTENER0.0.0.0Bind address inside the container (must stay 0.0.0.0)
ARCHIVE_TIME20010911000000Wayback Machine timestamp to retrieve (YYYYMMDDHHmmss)
URL_PREFIXhttps://web.archive.org/webArchive source base URL
CORS_ORIGINhttp://localhost:5173Allowed origin β€” must match your dev server address
CACHE_ENABLEDtrueCache fetched pages
CACHE_DIR/app/cacheCache directory inside the container
HOST_CACHE_DIR(unset)Host path to persist the cache; leave unset for a Docker volume
CACHE_CLEAR_TOKENdev-tokenToken for the cache-clear endpoint β€” change for shared deployments

Variables prefixed with VITE_ (e.g. VITE_PROXY_HOST, VITE_MEDIA_STREAM_URL) configure the browser client and are read at build time. See .env.example for the full list.


Current Media Status

Currently, we have the following data stored on our CDN for use in the app.

FolderObjectsSize
Videos6,632,5964.03 TiB
Audio7388.84 GiB
Thumbnails392,6401.38 GiB
Playlists96917 MB
Images2,14252.3 MB
Subtitles1,03030.7 MB
TV Guide242.25 MB

Sponsorship

Hivelocity

Hosting for this project is generously provided by Hivelocity, a provider of bare-metal dedicated servers, cloud, and colocation across 40+ global data centers.


3D Aircraft Models

The Flight Tracker's 3D mode renders each flight with a model matching its airframe. All models are used under free licenses, with thanks to their authors (processing pipeline and full provenance: scripts/aircraft-models/):

AircraftAuthorLicenseSource
Airbus A320 (generic fallback)PHILdesignCC-BY 4.0Thingiverse
Boeing 737-800Jonah AshtonCC-BY 4.0Thingiverse
Boeing 757-200Liam Gathercole, Skyop, Isais Prestes; reworked by Juuso TapaninenGPL-2.0+FlightGear FGAddon
Boeing 767-300ERRTicknorCC-BY-SA 3.0Thingiverse
Boeing 777-300ERJevan YuCC-BY 4.0Thingiverse
Boeing 727Bogdan Deac (yuppy)GPL-2.0Thingiverse
Boeing 717 (DC-9/MD-80 family)A. C. (Adcoff72)CC-BY 3.0Thingiverse
McDonnell Douglas DC-10Reean24, after "DC10" by manilov.apCC-BY 4.0Thingiverse
Airbus A319 / A321P6619CC-BY-SA 3.0Thingiverse
Bombardier CRJ-200FredepoCC-BY 3.0Thingiverse
Embraer ERJ-145XRRTicknorCC-BY 3.0Thingiverse
Fairchild-Dornier 328JET (ATR-42 stand-in)A. C. (Adcoff72)CC-BY 3.0Thingiverse
Gulfstream G550 (business jets)GiddiCC-BY 3.0Thingiverse
Douglas DC-3pumpkinhead3dCC-BY 3.0Thingiverse

Models were decimated and re-oriented for use as map markers; the Boeing 727 and 757 are format conversions (OBJ/AC3D β†’ STL) and remain under the GPL. Per-model license metadata is also served alongside the assets at maps/aircraft/models.json.


Special Thanks

  • Chris Wooster
  • Sergey Kochergan
  • Kori Stephens
  • Alison L. Roberts
  • Ryan M.
  • Richard Harms
  • Marina Harper
  • Matt MG Herron
  • Will Harris
  • Tristan Warsaw
  • Michael Locher
  • Ruthalas
  • James Wendel
  • Adil Majid
  • Jason Smith
  • Adros
  • Nikita Rogozov
  • Will Riches
  • Alana Malone
  • Cameron Murphy
  • Florence Arsenault
  • Brian Witt
  • Robinson Collado
  • LΓ©on Spaans
  • Ben Romberg
  • Adam Garst
  • Greg
  • Tolu
  • David
  • Gus Gordon
  • Andrew Poirier
  • Ty Satrang
  • Carla Fuentes
  • Laura M. Macklin Baglien