Operations
Troubleshooting & FAQ
The handful of issues you are most likely to hit, and how to resolve each.
Forecasts load but the markets are empty
The forecast panels read bundled files, so they work even with no internet. If the market table stays empty, the server cannot reach Polymarket — usually a geo-block on the server's region.
- Test from the server:
curl -s "https://gamma-api.polymarket.com/events?limit=1". A block or empty result confirms it. - Fix by routing the upstreams through a proxy in an allowed region: edit
GAMMA_UPSTREAMandCLOB_UPSTREAMat the top ofserver.jsand restart.
Remember
This affects only the live market columns and order book. Forecasts, percentiles and
predictability come from the static files and are unaffected.
The service won't start
- Check the log:
journalctl -u weather-dashboard -e. - Cannot find module 'express' — run
npm install --omit=devin the app directory. - EADDRINUSE — another process holds the port; change
PORTor stop the other process. - Permission denied on port 80 — either use nginx (recommended) or add
AmbientCapabilities=CAP_NET_BIND_SERVICEto the unit. See Deployment.
nginx shows the default page or 502
- Default page — the site isn't enabled or the default is still linked. Re-check the
symlink and
sudo rm -f /etc/nginx/sites-enabled/default, thensudo nginx -t && sudo systemctl reload nginx. - 502 Bad Gateway — the Node service is down or on a different port. Confirm
systemctl status weather-dashboardand that the unit'sPORTmatches theproxy_passin the nginx config.
A data file 404s in the network tab
That is expected for optional files you have not added (actuals.json,
ensemble.json, per-continent variants). The dashboard requests them, takes the
404, and falls back gracefully. Add the file when you have it.
Login problems
- Credentials rejected — confirm
AUTH_USER/AUTH_PASS(defaults areddacata/Dd329148) and that any.envoverride is correct, then restart. - Logged out after every restart — set a fixed
SESSION_SECRETso the signing key is stable. - Remember the login is cosmetic: being signed out never hides data.
The forecast looks stale
The dashboard shows each forecast file's own fetched_at. If it's old, the
file on the server is old — check the ingestion jobs that write
forecasts.json (and friends) on your pipeline host. Replacing the file is
picked up on the next request without a restart.
Useful commands
systemctl status weather-dashboard # is it running?
journalctl -u weather-dashboard -f # live logs
sudo nginx -t # validate nginx config
sudo systemctl restart weather-dashboard
Forecasting dashboard documentation · Meteo Bulgaria EOOD · 2026