Bakes the git short commit hash into the client bundle at build time and
exposes the same info from the server via GET /api/version. The header
displays the loaded build's commit and flags when it no longer matches
what the server is running, so a stale open tab is easy to spot after a
deploy. The Docker build now includes .git so the hash can be resolved
during the image build.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a web app manifest, Workbox service worker (via vite-plugin-pwa),
and placeholder icons so the app can be installed to a home screen /
app window. App shell is precached for offline load; API and upload
requests stay network-only so city data and photos are never served
stale. Desktop browser access is unaffected.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Admins can export all cities, users, links, participants, and photos
as a zip for backups, and restore from one later. Import replaces all
existing data and clears sessions, so the admin has to log back in
afterward.
React/Vite frontend and Express/SQLite backend for tracking visited and
planned cities on a map, with per-city notes, photos, links, and
participant-based sharing between family members. Includes session auth
with admin-managed user accounts, an OSM/Nominatim geocoding proxy, and a
single-image Docker deployment.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>