Skip to content

Staging#821

Merged
accius merged 4 commits intomainfrom
Staging
Mar 24, 2026
Merged

Staging#821
accius merged 4 commits intomainfrom
Staging

Conversation

@accius
Copy link
Owner

@accius accius commented Mar 24, 2026

What does this PR do?

Type of change

  • Bug fix
  • New feature
  • Performance improvement
  • Refactor / code cleanup
  • Documentation
  • Translation
  • Map layer plugin

How to test

Checklist

  • App loads without console errors
  • Tested in Dark, Light, and Retro themes
  • Responsive at different screen sizes (desktop + mobile)
  • If touching server.js: caches have TTLs and size caps (we serve 2,000+ concurrent users)
  • If adding an API route: includes caching and error handling
  • If adding a panel: wired into Modern, Classic, and Dockable layouts
  • No hardcoded colors — uses CSS variables (var(--accent-cyan), etc.)
  • No .bak, .old, console.log debug lines, or test scripts included

Screenshots (if visual change)

accius and others added 4 commits March 23, 2026 21:30
With 5000+ users, each unique DE location generated a separate
heatmap computation (~600 cells of trig). Server was overwhelmed.

- Round DE lat/lon to whole degrees on both client and server —
  propagation doesn't meaningfully differ within 1 degree, and this
  lets nearby users share the same cached result
- Increase server-side heatmap cache TTL from 5 to 15 minutes
- Increase CDN/browser Cache-Control for heatmap from 10 to 15 min
- Frontend also sends rounded coordinates so identical URLs hit
  browser and Cloudflare edge caches

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
HamQTH returns the operator's HOME location (e.g. Greek QTH for
XX9W operator), not where they're currently operating (Macau).
This caused DXpedition callsigns to appear at the wrong location.

Reordered DX location resolution:
1. Grid from spot data (most precise)
2. Grid from comment
3. DXpedition list cross-reference (all, not just isActive)
4. Prefix/CTY.DAT (operating location from callsign prefix)
5. HamQTH (last resort — home QTH)

Previously HamQTH was at step 4 and prefix at step 5, so
HamQTH's home location would override the correct operating
location for every DXpedition without a grid square.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The /api/propagation endpoint was fetching solar flux and K-index
from NOAA on every uncached request (no timeout). With many users
clicking different DX targets, NOAA requests piled up, responses
hung, and the chart intermittently failed to load.

Now uses the same getSolarData() 15-minute cache as the heatmap.
Solar data is fetched once and shared across all propagation
endpoints. Eliminates redundant NOAA round-trips.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ITURHFProp service (proppy-production.up.railway.app) had a 90s
timeout on the hourly endpoint and 15s on the single-hour endpoint.
When the service was down, every DX click hung for 105 seconds
before falling back to built-in calculations.

- Hourly timeout: 90s → 10s
- Single-hour timeout: 15s → 8s
- Added 2-minute negative cache: if ITURHFProp fails, skip it
  for 2 minutes instead of retrying every request
- Built-in model kicks in immediately on failure

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@accius accius merged commit 53fd97a into main Mar 24, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant