Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Type of change
How to test
Checklist
server.js: caches have TTLs and size caps (we serve 2,000+ concurrent users)var(--accent-cyan), etc.).bak,.old,console.logdebug lines, or test scripts includedScreenshots (if visual change)