See history through someone's eyes.
Epoch is an interactive historical visualisation tool. Create a fictional character — give them a name, a birthplace, a lifetime — and discover what historical events they would have lived through. It transforms abstract history into personal narrative by pulling real events from Wikipedia and presenting them in a collapsible, browsable timeline.
- Character creation — name, birth year, death year, and location
- Wikipedia integration — fetches events from year-specific and country-specific Wikipedia articles
- Significance ranking — scores events using Wikidata sitelinks, entity-type detection, named-event prefixes, and link density
- Two-level collapsible timeline — decades collapse to years, years collapse to individual events; the birth decade starts expanded
- Category badges — events are tagged by type (conflict, upheaval, political, disaster, cultural)
- Lifetime summary — top events from childhood, adulthood, and old age
- Oral history — stories the character would have heard from elders at age 15
- Content filtering — strips sports results, malformed markup, citation fragments, and low-quality entries
- API caching — 24-hour TTL with batched requests to respect rate limits
This is a working application. The core loop — create a character, fetch events, browse the timeline — is functional and polished.
- SvelteKit frontend and server-side form actions
- Wikipedia API integration with country-specific and generic fallbacks
- Event parsing, filtering, and significance scoring
- Collapsible timeline with decade/year grouping
- Milestone highlighting (birth year, 18th birthday, death year)
- Lifetime summary and oral history features
- Light warm theme (ivory, saddlebrown, olive) with Playfair Display + Source Sans 3
- Responsive layout for mobile and desktop
- Error recovery (form input preserved on failure, one-click retry)
- Test suite for event filtering and scoring
- Dedicated backend API (currently using SvelteKit server routes)
- Database for persisting characters and sessions
- User authentication and saved profiles
- Framework: SvelteKit 2 with Svelte 5
- Styling: Tailwind CSS 4 + DaisyUI 5
- Data: Wikipedia MediaWiki API, Wikidata API
- Testing: Vitest
- Build: Vite 6
- Deployment: Vercel via
@sveltejs/adapter-vercel
npm install
npm run dev # start dev server
npm run test # run test suite
npm run build # production buildThe app deploys to Vercel using @sveltejs/adapter-vercel. Vercel
auto-detects SvelteKit, so connecting the repository and deploying is enough —
no extra configuration is required. The server-side form action runs as a
Vercel serverless function.
