Scholarly interactive web atlas for Periklean Athens with a static frontend (app/) and canonical GIS data (data/).
data/: source of truth for geometry and evidence metadata.app/: Vite + React + TypeScript + MapLibre app.archive/: superseded assets and earlier exports.BUILD_GUIDE.md: implementation handoff and roadmap.
cd app
npm install
npm run devThe app copies GeoJSON and source metadata from ../data into app/public/data before dev/build.
cd app
npm run copy-data
npm run validate-data
npm run typecheck
npm run buildvalidate-dataenforcesdata/schema/feature.schema.jsonagainst everydata/layers/*.geojsonfeature.- Build fails if validation fails.
- Static hosting cache headers are configured in
app/public/_headersfor/data/*and/tiles/*.
Every feature in every layer must include:
id(kebab-case string, unique within layer)name(display string)kind(semantic feature type)confidence(high | medium | low | working)source_ids(string[]; may be empty only when confidence isworking)
- Author or update geometry in QGIS (
data/qgis/periklean_athens_basemap.gpkg). - Export GeoJSON to
data/layers/<layer_name>.geojsonin EPSG:4326. - Ensure each exported feature includes required properties and valid
source_ids. - If needed, add new sources to
data/source_register.csvwith stablesource_id. - Run:
cd appnpm run validate-data
- Wire the layer in app code:
- add filename mapping in
app/src/data/loadLayers.ts - add source/layer style in
app/src/map/layers.ts - add toggle UI (if thematic) in
app/src/ui/LayerToggle.tsx
- add filename mapping in
- Data normalization and schema enforcement are in place.
- App scaffold, layer rendering, feature panel with citations, confidence legend, and guided-tour controls are implemented.
- Day 2 baseline uses hosted Carto Positron as the basemap.
- PMTiles basemap is intentionally deferred to Phase 2.
- Connect repository.
- Set root directory to
app. - Build command:
npm run build - Build output directory:
dist - Ensure
app/public/_headersis included in build output for cache-control rules.
- Connect repository.
- Set base directory to
app. - Build command:
npm run build - Publish directory:
app/dist(ordistif base directory isapp). app/netlify.tomlis included with defaults.