Open the atlas on audrlo.com · Standalone site
An interactive 3D explorer with a playable annual timeline from 1776 through 2026, sourced building records, historical maps, aerial photographs, road evidence and architectural landmarks. Dated building coverage is San Francisco; the surrounding Bay Area is navigable.
A black-and-white editorial interface frames the map, with a responsive historical sidebar, source notes and a draggable timeline. The public project uses Georgia and Arial system-font fallbacks; proprietary font software is not included. Building colors retain their data meaning, and the Golden Gate model retains its orange landmark color.
Requires Node.js 22.13 or newer and internet access for map and imagery tiles.
npm ci
npm run devOpen the Local URL printed by the server. The explorer starts in 2026. Play starts from 1776 when at the end, or resumes from the selected year; the restart button always returns to 1776. Choose 1, 2, 4 or 8 years per second. Drag the large bottom timeline, scroll over it to step through years, or type a year. Its histogram can show building dates or road evidence dates.
Play follows a guided route through 15 sourced historical stops, with smooth flights and brief pauses at important openings. Starting in 1800 visits the existing Mission Dolores chapel. Exit guided experience keeps the timeline playing from your chosen viewpoint; moving the camera also releases the guide. Pausing or scrubbing cancels the flight. Reduced-motion preferences are respected.
Drag the map to pan, scroll to zoom, and right-drag to orbit. Camera buttons provide zoom, rotation, north and overhead views; the area menu jumps to neighborhoods and landmarks. Click a building, road or landmark label to read its evidence. The map key switches between construction year and 2025 property use. Layers control uncertain and undated buildings, roads, landmarks, terrain and the historical shoreline.
Historical imagery selects the latest available dated view at or before the selected year. There is no archival layer before 1850. The fourth tab, Historical 3D, overlays the dated building chronology on historical imagery and keeps both dates visible. The 3D aerial view combines 2025 photography, modern terrain, building extrusions and landmark models. Photography does not supply textured 3D façades.
All 32 dates include a locally served, georeferenced overview. Dates dissolve as soon as that preview is ready; sharper remote tiles fade in independently. The outgoing image stays opaque underneath, and scalar opacity changes on rendered frames refresh the terrain texture cache. Rapid scrubbing queues only the latest requested date instead of interrupting a dissolve. The next dated image is prefetched; playback waits for the preview and dissolve, without waiting for fine detail. The caption identifies the image actually displayed. Coverage gaps returned by the city as empty HTTP 204 responses are transparent, rather than reported as broken images. Source tile sizes follow the city catalog (256 or 512 pixels). Successful image tiles are cached in the browser for up to seven days, kept to roughly 384 tiles with batched cache pruning; temporary network and server errors are retried. An unavailable detail service leaves the local preview usable and offers a retry.
For a portable static build without Sites hosting:
npm run build:portable
python3 dist-static/serve.pyThe generated folder includes Open map.command for macOS and a Python 3 server with byte-range support for the local building archives. Keep its terminal open while exploring. Serve the folder through this server rather than opening index.html directly. Building archives, road data, landmark models, 32 historical overviews and 152 core San Francisco terrain tiles are local. Internet access remains required for the reference map, sharp historical detail and terrain outside the cached tiles. MapLibre’s module worker is copied from the installed package before builds. The portable Read Me is generated from current data metadata.
The included vercel.json builds the client as a static Vite site, with the data and map worker served alongside it. It uses npm run build:vercel and publishes dist-static; no Cloudflare runtime or private map key is required.
vercel link --project sf-history
vercel deploy --prod --archive=tgzThis project is currently deployed directly with the Vercel CLI. Automatic GitHub deployments can be enabled after connecting the GitHub account in Vercel.
The same build also supports a trailing-slash mount at /sf-history/. Vite emits relative bundle URLs, and runtime data, downloads, imagery previews, terrain and worker URLs resolve beneath the document directory. The personal-site reverse proxy forwards only /sf-history/ and its descendants to the standalone site.
PMTiles rely on HTTP byte-range responses. Keep the archive paths static and preserve range delivery if changing the hosting configuration. Public font fallbacks are Georgia and Arial; private font binaries and local environment files are excluded from deployment.
- 171,535 unique mapped footprints from Overture's August 19, 2026 release.
- 155,413 footprints with a recorded construction date; 17,184 of those marked uncertain.
- 16,122 undated footprints shown only in the 2026 context view.
- 2025 San Francisco assessor roll, with active parcel crosswalk and condominium grouping; blank parcel keys excluded.
- 156,273 footprints classified by 2025 assessor property use, with 15,262 unclassified. This does not reconstruct historical changes in use.
- Eight institutional landmark-date corrections, plus 343 previously undated Presidio footprints matched to individual construction years in the Presidio Trust inventory.
- 82 buildings rendered with mapped building parts; mapped pyramid and dome roof dimensions approximated with vertical slices.
- 22 construction-period PMTiles archives, including a separate undated archive; 172,623 render features represent the 171,535 unique footprints.
- 32 dated map/aerial layers: 1850, 1859, 1895, 1899, 1915, 1931, 1938, 1947, 1948, 1950, 1956, 1968, 1973, 1980, 1993, 1995, 2009–2015 and 2017–2025. USGS editions/revisions supplement the city imagery service; some sheets cover only part of San Francisco.
- 1,089 segments with dated road evidence: 45 openings, 699 documented operations, 9 completed-by dates, 211 surveys and 125 first map observations. Dashed surveyed plans remain distinct from documented roads. The optional 15,911 current physical centerlines appear only in 2026.
- Seven architectural entries: Golden Gate Bridge, Bay Bridge western and eastern spans, Coit Tower, Palace of Fine Arts, Sutro Tower and the Ferry Building. The East Span changes from the old bridge to its replacement in 2013; models use simplified dimensions and alignments.
- Terrain at vertical exaggeration 1. Nine comparisons with USGS 3DEP differed by less than 1 m (maximum 0.916 m); this is a source comparison, not a citywide survey accuracy certification. The 152-tile cache covers core San Francisco at zoom levels 12–14.
This is a chronology of mapped surviving buildings with selected historical evidence. Demolished buildings and 1906 destruction are not comprehensively reconstructed; the removed freeway traces and former East Span are limited exceptions. Modern footprints and heights do not establish historical shapes. Assessor years may describe renovation or several structures on one parcel; conflicts and potential 1900 placeholders are marked uncertain. The Palace of Fine Arts follows the surviving form rather than each restoration state.
Dated roads appear at their evidence date and remain visible at every map zoom until a documented removal. Green highlights evidence appearing in the selected year. Street names begin fading in at zoom 16, with minor streets at 16.5 and paths at 17; the historical road inventory uses source-record names, which may differ from period names. All 15,911 current physical streets are shown by default in the 2026 context only.
Presidio federal properties often lack city assessor matches. The Trust’s 2002 historic inventory supplies years for 343 footprints, joined through numbered Trust geometry with at least 80% footprint overlap and 50% Trust-polygon overlap, excluding competing matches. These enter between 1862 and 1949. Another 445 overlapping Presidio footprints remain undated; the Officers’ Club is excluded because its surviving adobe core has only a probable 1812–1815 range, not an exact construction year for the modern building. public/data/presidio-dates.json records matches, rejected candidates, sources and limits.
Road openings, transit operation, first mapped evidence and surveyed plans are different date meanings. Current centerlines do not establish the exact geometry of historical streets; removed freeway traces are approximate map readings. Maintenance acceptance dates, including the bulk 1998 ordinance, are not used as construction dates. Most current roads lack verified opening years.
Imagery is a set of dated snapshots, not annual photography. Later photo-revision dates are identified in the imagery metadata. Terrain, nonarchival geography and the shoreline reference do not reconstruct annual changes in grading or landfill. Source-to-source terrain agreement is not independent survey control. The 2026 view is limited by the 2025 assessor roll and imagery; dataset publication dates do not prove every feature is current. Indigenous settlement predates the 1776 colonial start date. Sparse early scenes indicate sparse surviving records, not uninhabited land.
public/data/methodology.json documents sources, matching thresholds, corrected counts, licenses, overrides and caveats. manifest.json lists all 22 PMTiles archives and annual counts. The archives retain original Overture IDs, source datasets, licenses, date and height evidence, and property-use classifications; modern footprint geometry comes from mapped source records.
Detailed downloads under public/data/ are imagery.json and imagery-sources.json (dates, bounds, live tile templates and validation), roads-metadata.json (date meanings and source links), housing-types.json (2025 class definitions and method), landmarks.json (dimensions, history and sources), and terrain-report.json / terrain-index.json (nine comparisons, source limitations and cached tile inventory). These are also available from the in-app sources and layer panels.
Building geometry: Overture Maps Foundation; OpenStreetMap contributors; Microsoft ML Buildings; USGS LiDAR; Esri Community Maps where applicable. The derived building database is offered under ODbL 1.0; retain applicable source obligations. Building dates, city LiDAR, parcels, city imagery and current roads: City and County of San Francisco / DataSF. Historical shoreline: SFPUC public GIS service. Topographic maps: USGS, served by Esri. Modern reference map: OpenFreeMap / OpenMapTiles / OpenStreetMap. Terrain: Mapzen / AWS Open Data, with USGS and NOAA sources. Historical road and landmark sources include SF Planning, SFMTA, USGS, MTC, the Golden Gate Bridge District and other institutions linked in their metadata.
roads-current-map.geojson is a compact rendering copy of every current centerline, preserving exact coordinates and identities while omitting evidence fields already available in the full download. Rebuild it offline with python3 scripts/prepare_road_render.py.
The app uses public services without a private API key and depends on those services remaining available. Historical detail is fetched from the city and USGS/Esri services; locally served overviews provide broad coverage without a complete offline detail cache. Rebuild previews with python3 scripts/prepare_imagery_overviews.py; public/data/imagery-overviews/index.json records projection, source requests, dimensions, coverage and checksums. No Google imagery or photogrammetric mesh is included.
npx tsc --noEmit
npx oxlint app
node --experimental-strip-types tests/timeline.test.mjs
node --experimental-strip-types --test tests/tile-source.test.mjs
node tests/map-style.test.mjs
node tests/periods.test.mjs
node --test tests/roads.test.mjs
node --experimental-strip-types --test tests/road-style.test.mjs tests/road-render.test.mjs
node --experimental-strip-types --test tests/playback.test.mjs tests/imagery-loading.test.mjs tests/imagery-metadata.test.mjs tests/presidio.test.mjs
npm run build:portable
npm run buildData checks reconcile all 251 annual count boundaries, dated/undated totals, uncertainty exclusion and 2025 classification totals. Imagery validation records live responses, coverage and source dates; terrain validation records the 152 cached PNGs and nine comparison points. Test files cover timeline logic, map-style rules and PMTiles range delivery. Run the commands above after changes; this list is not a substitute for a successful build and browser check.
The source includes private Sites configuration in .openai/hosting.json. A configured URL is not proof of publication. The portable build runs independently of Sites hosting.