prop/assets
Graham McIntire 578b4ede86 Serve /contacts/map payload via HTTP endpoint, parallel hydrate
- Add ContactMapController serving /api/contacts/map with pre-gzipped
  JSON from Microwaveprop.Cache. Browsers handle Content-Encoding: gzip
  natively; payload drops from 5.7 MB raw to 1.5 MB on the wire (73%).
  Cache TTL 10 min, invalidated on contact insert alongside the other
  contact-map cache keys.
- Move contact map payload out of the LiveView's initial HTML entirely.
  Shell renders with the filter chrome (count + band list); the hook
  fetches contacts from the HTTP endpoint in parallel with map init.
  This also avoids Phoenix.Socket's 64 KB frame limit (push_event would
  have required chunked transfer or a global frame size bump).
- Parallelize ContactLive.Show hydrate: five independent DB loads
  (weather, solar, hrrr_path, terrain, iemre) now run concurrently via
  Task.async + Task.await_many. Total latency drops from sum(each) to
  max(each), cutting contact show hydrate time roughly 5x.
2026-04-12 13:10:51 -05:00
..
css Fix backfill stat overflow and select text alignment 2026-04-12 09:31:51 -05:00
js Serve /contacts/map payload via HTTP endpoint, parallel hydrate 2026-04-12 13:10:51 -05:00
vendor Add contact detail map, elevation profile chart, and UI improvements 2026-04-01 12:34:03 -05:00
tsconfig.json Convert all JavaScript to TypeScript with type annotations 2026-04-11 16:59:28 -05:00