09-Jul-2026 — Simpler site-hosting configuration behind the scenes #304

build 760commit 4c8294e


fly: collapse per-environment Fly tokens to a single apiKey (#304)

Each environment carried two Fly token fields: an app-scoped deploy apiKey and a separate org-scoped metricsToken, with the metrics code falling back through metricsToken || apiKey. That split was never a requirement - one org token per environment does everything (deploy, restart and read metrics).

Remove metricsToken entirely and resolve a single flyio.apiKey:

Incidental fix: isIntegrationWorkerAvailable() previously required a metricsToken the worker never had, so it always returned false; it now checks apiToken && appName.

The staging config.environments doc has been consolidated to match: metricsToken removed from all 16 environments and, for the five that were split (ashford, canterbury, ekwg, medway, stag-walkers), the org token promoted metricsToken -> apiKey. Deployed apps keep working and adopt the single-token shape on their next normal deploy.

perf+fix(server+admin): stop area GeoJSON loads pinning 512MB machines, disable clear-all-forwards at zero (#304, #278)

What this fixes

Visiting System Settings for anything at all (staging-lite's case: adding OS maps API keys) instantiated every tab component on page load, so the area-map sync component's ngOnInit fired its preview-districts call, which parsed the 13.9MB bundled areas.geojson into ~170MB of cached heap (raw copy + full-resolution WGS84 district index) for 10 idle minutes. On a 512MB machine that pushed memory to the cap during an unrelated email session. Sites that never use area maps paid the full cost on every visit.

What you'll see

Technical notes