// project · frontline-atlas

Frontline Atlas

A thousand years of battles in the Czech lands, on the maps of their time. Georeferenced period maps on a time slider, a battle timeline from 1000 to 1945, and hour-by-hour stories with units read off contemporary situation maps — every position cited.

Historical mapsMilitary historyCzech landsFree sign-up

Opening to the public — sign-up is free. How the UXO layer is computed: UXO heatmap methodology →

Note: this page is an AI-generated summary of the project. The product, the code, and the data behind it are real — the prose isn't hand-written.

// why

I just like old war maps. I'm a Czech engineer and old military maps are my hobby: hand-coloured situation maps, battle plans, survey sheets. They're beautiful and dense with information, but they sit in archives as flat images, one at a time, with no sense of when.

The Czech lands, where I'm from, have been fought over for a thousand years. I wanted one place where I could drag a slider and watch that history happen on the maps people actually drew at the time, not on a modern reconstruction.

// look

Frontline Atlas homepage: Watch a thousand years of battles unfold on the maps of their time
The front page, with a live Austerlitz preview behind the headline — 124 battles, 10 eras, 256 georeferenced sheets and plans.
Battle timeline set to 1420, Hussite Wars, with a heatmap of battles across Bohemia
The battle timeline, 1000–1945. Heatmaps show where and when the fighting clustered; scrub era by era or zoom to day by day.
Austerlitz 1805 story at 09:00 on 2 December 1805, unit symbols over a period situation map
Austerlitz, 2 December 1805, 09:00 — 38 unit positions read off contemporary situation maps. Liberation 1945 does the same with 14 units on 6 May 1945.
Pressing play on Austerlitz.
UXO desk study view: heatmap of historical indicators across Czechia with a site-check panel and disclaimer
The indicative UXO desk study: click a site, pick a radius, export a PDF. The disclaimer comes first, on purpose.

// what it does

  • Period maps on a time slider. 256 georeferenced sheets and plans; the map under the cursor changes as you move through time.
  • Battle timeline, 1000–1945. 124 battles across 10 eras, with heatmaps and insights.
  • Animated stories. Austerlitz 1805 and Liberation 1945, with units read off contemporary situation maps.
  • Your place in history. Type a town or address and see what happened there, and nearby, across the centuries.
  • Indicative UXO desk study. Battles, front lines, fortifications and 30 cited air raids summarised for a site, with PDF export.
Disclaimer: the UXO view is an indicative historical desk-study layer, not a UXO risk assessment. It only aggregates the sourced historical events in the atlas. Absence of a score does not mean absence of ordnance. Consult a qualified UXO specialist before any intrusive ground works.

// sources and honesty

Nothing on the map without a source. Every unit position links back to the map it came from. Between two sourced positions the app interpolates movement so the animation is smooth, and labels it as interpolated. Where there's no source, there's no unit.

  • MZK Kramerius / IIIF — scanned period maps
  • OpenHistoricalMap (CC0) — historical borders
  • Wikidata — the battle catalogue
  • Library of Congress — US 12th Army Group situation maps, 1945
  • USMA — situation maps for Austerlitz 1805

// stack

how it's built
  • TanStack StartThe app, on Cloudflare Workers
  • Cloudflare R2Scanned sheets and data layers
  • PMTilesOne file per layer, byte-range requests, no tile server
  • Mapbox / MapLibreMap rendering and the time slider on top
  • milsymbolMilitary unit symbols for the animated stories
  • GeoParquet pipelineTurns the sources into the layers the app serves

Same tile trick as map tiles without a tile server.

// status

  • Running at atlas.davidbroza.dev — opening to the public, with free sign-up.
  • Next stories: the Somme (WW1), Normandy 1944, and Hradec Králové 1866. Same rules: period maps, cited positions, interpolation labelled.