An interactive map, burial locator, and tour guide for Albany Rural Cemetery.
Open the application · Search burial records · Explore the cemetery map
Visitors can search a 97,457-record burial index, locate graves on an interactive map, and explore the cemetery through tours.
| Destination | What visitors can do |
|---|---|
| Search Tours | Find and open a curated tour. |
| Cemetery Map | Explore cemetery roads, sections, tour stops, and selected graves. |
| Burial Locator | Search burial records and open their mapped locations. |
FAB is the shared Albany Grave Finder web app. It owns the map, data delivery,
and deep-link contract. FABFG is a thin native shell around those hosted
destinations; it must not recreate the web app’s map or search state.
- React 19
- Vite 8
- MapLibre GL JS 6
- plain semantic HTML and CSS
- a Web Worker for the 97,457-record burial index
- Bun tests, Vitest/jsdom component tests, and Playwright browser tests
There is one map renderer and one burial source path. The checked-in
src/data/Geo_Burials.json is the source of truth; public/data/Search_Burials.json
is its generated runtime delivery artifact. Map overlays use the checked-in
boundary, roads, and sections GeoJSON directly.
Requirements:
- Node 22.12 or newer from
.nvmrc - Bun 1.3.8 from
package.json
bun install
bun run doctor
bun run startVite serves the app at http://localhost:5173/fab/. No Python image server or geospatial Python environment is required.
bun run start: run the Vite development serverbun run lint: run ESLint, Oxlint complexity checks, and project-specific lint rulesbun run test: run Bun unit/data tests and Vitest component testsbun run test:e2e: run the Playwright product flowsbun run build: generate tour aliases and builddist/bun run build:data: regenerate tour matches, the compact burial index, and map boundsbun run check: run the local release-quality gatebun run release:check: verify SemVer and changelog metadata
The query string is the route contract:
| Destination | view value |
Purpose |
|---|---|---|
| Search Tours | tours |
Find and open a curated tour |
| Cemetery Map | map |
View the cemetery, tour stops, sections, and pinned graves |
| Burial Locator | burials |
Search the generated burial index |
Additional parameters are q, section, tour, and record. Old packed
share links remain readable, but new links use the smaller record contract.
Load the same hosted app in FABFG with embed=fabfg. The native shell owns the
tabs, and the web app does not draw a duplicate navigation bar:
?view=tours&embed=fabfg?view=map&embed=fabfg?view=burials&embed=fabfg
Use Search Tours, Cemetery Map, and Burial Locator for the native tab labels. Keep the ARCE website as a separate external action.
The map uses provider tiles instead of repository-built orthophoto exports:
- one muted OpenStreetMap reference map over Esri World Hillshade
- road names and Notables Tour landmarks drawn above the basemap in local fonts
- local cemetery boundary and roads above the terrain context
- section boundaries and numbers on request, with section taps always available
Provider attribution stays visible. The design follows figure-ground and visual
hierarchy guidance: the basemap recedes, cemetery structure reads next, and the
active burial or tour stop is dominant. See docs/cartography.md.
Source-of-truth files:
src/data/Geo_Burials.jsonsrc/data/ARC_Sections.jsonsrc/data/ARC_Roads.jsonsrc/data/ARC_Boundary.json- tour datasets declared in
src/features/fab/tours.js
Generated files:
public/data/Search_Burials.jsonsrc/data/TourMatches.jsonsrc/data/TourBiographyAliases.jsonsrc/features/map/generatedBounds.js
Run bun run build:data after source-data changes. Do not hand-edit generated files.
The old local ortho exports, GeoParquet copy, and PMTiles experiment are retired. They have been removed from the repository and are not part of the runtime.
main is the only long-lived branch. CI installs with the frozen Bun lockfile,
runs lint/tests/build/browser checks, uploads dist/, and deploys GitHub Pages.
The app is served under /fab, so use import.meta.env.BASE_URL for public assets.
GitHub Pages is repository-controlled. Promotion to albany.edu/arce remains a
separate institutional operation. A green repository build does not prove that
host or the installed iPhone wrapper has been updated.
Start with: