Work / Cultural Atlas

Cultural Atlas

Proven 2026

A world map, timeline and calendar of cultural events that shows how certain each date and source really is.

Recorded from the running app: search, scrub the timeline to February, list what is active.

What it does

You ask what is happening in a place, or on your dates. The server answers map, timeline, country-by-month and preference-match queries over a catalogue of 1,747 dated occurrences, and a React and MapLibre interface draws the results. Each record carries its evidence state (confirmed, calculated, expected or pending), and the interface shows that state instead of hiding it.

How it runs

  1. Ask what is happening in a place, or on your dates
  2. The server answers map, timeline and calendar queries over the catalogue
  3. The map, activity view and density timeline draw the answer
  4. Every record shows how certain its date and source are
  5. Share the exact view as a link

How it works

Cultural Atlas joins provenance-aware cultural records with real context: climate from Open-Meteo and indicators from the World Bank. A citation is not treated as a fetched source, and a calculated date is not shown as confirmed. The map, the Gantt-style activity view and a canvas density timeline all read the same URL-backed state, so any view can be shared as a link. A measured performance problem was fixed by separating places that never change from dated events.

Skills shown

Data engineering
Joins cultural records with Open-Meteo climate and World Bank indicators, keeping each record’s evidence state.
APIs & backend
A Node server answering map, timeline, country-by-month and preference-match queries.
Testing & QA
A regression test guards the map after a silent bundler change left it blank.
Frontend, 3D & graphics
React, TypeScript and MapLibre map, timeline and calendar views that share URL-backed state.

Worth knowing

  • A citation is not treated as a fetched source: of 1,240 cited sources the system has retrieved 7, and the interface says so.
  • Splitting fixed places from dated events cut each timeline-scrub update from about 816 kB to about 2 kB, and from 30 requests to one.
  • Found a map that rendered nothing because the bundler had broken MapLibre's worker URL without raising an error. The URL is now wired explicitly and a test guards it.
  • With no stated preference there is no ranking. The match view never invents a fake best option.
  • Any view can be shared as a link, because the application state lives in the URL.