Museum Time Machine is a full-screen art and poetry time portal. Pick a year from 1000 to 2000 and the page shifts into that era with museum artwork, period-matched poetry, ambient audio, historical context, an art inspection lens, poem reading mode, and a random walk through time.
- Full-screen era artwork from The Met, Art Institute Chicago, Harvard Art Museums, and curated fallbacks.
- Fast artwork previews, contained background framing, and a detail placard for inspecting the selected work.
- Period poetry from PoetryDB for later eras, plus curated named medieval poets for the 1000s through 1400s.
- Per-session author history so a visitor does not keep seeing the same poet.
- Timeline controls, keyboard navigation, random walk mode, and responsive layouts for desktop, tablet, and mobile.
- Ambient radio lookup through Radio Browser, with graceful silence if no stream is available.
- Era-matched typography, page aging, dust particles, vignette, speech synthesis reading mode, and a museum-themed favicon.
The app uses PoetryDB where it has reliable public-domain coverage. The 1000s through 1400s use a curated corpus because PoetryDB has very thin medieval coverage.
| Years | Source Strategy |
|---|---|
| 1000s-1400s | Curated named medieval and early Renaissance poets |
| 1500s | PoetryDB author pool |
| 1600s | PoetryDB author pool |
| 1700s | PoetryDB author pool |
| 1800s | PoetryDB author pool |
| 1900s-2000 | PoetryDB public-domain early modern pool |
The current author and curated poem configuration lives in src/data/eraConfig.ts and src/lib/timeMachine.ts.
Poem reading currently uses the browser Web Speech API: window.speechSynthesis with SpeechSynthesisUtterance. The app creates one utterance per poem line, prefers an en-GB voice when the browser provides one, falls back to any English voice, and highlights each line as it is spoken.
Current narration settings:
| Setting | Value |
|---|---|
| Voice | Browser en-GB voice if available, otherwise any English voice |
| Rate | 0.86 |
| Pitch | 0.92 |
| Volume | 0.9 |
| Reading behavior | Line-by-line with active-line highlighting |
Possible upgrades:
- Add an in-app voice picker from the browser's installed voices.
- Add era presets for rate, pitch, accent preference, and reading style.
- Add sliders for rate, pitch, and volume.
- Use true pause and resume with
speechSynthesis.pause()andspeechSynthesis.resume(). - Add optional cloud TTS for consistent cinematic narration across devices.
/api/artworktries The Met, Art Institute Chicago, Harvard Art Museums, then curated artwork fallbacks./api/poemserves curated early poetry first for 1000-1499, otherwise fetches era-matched PoetryDB authors and falls back to curated poems./api/audiosearches Radio Browser for an HTTPS station that fits the active era.
npm install
npm run devOpen the local URL printed by Next.js. The usual local URL is:
http://127.0.0.1:3000
npm test
npm run typecheck
npm run lint
npm audit --omit=dev
npm run build
npm run e2eThe app is Vercel-ready as a standard Next.js App Router project:
npx vercel deploy --prod --yesProduction URL:
https://museum-time-machine.vercel.app
