Public status dashboard for TRD Network. Vanilla HTML/CSS/JS, no build step. Hosted on Cloudflare Pages.
- Live health of 4 critical endpoints (
api.trdn.io,api-eu.trdn.io, compute lane, gateway standby) - Region health summary from
/api/region-health-summary - Last 5 worker reputation SBT mints with Basescan links
- Auto-refresh every 60 seconds
All data is read-only and public. No auth, no API keys baked in.
index.html # single page
app.js # fetch + render logic (vanilla JS)
style.css # dark theme matching trdn.io
_headers # Cloudflare Pages headers
wrangler.toml # Cloudflare Pages config
Open index.html in a browser. That's it. The fetches will hit production endpoints directly. If you want a local server to avoid the occasional file:// quirk:
python3 -m http.server 8080
# then visit http://localhost:8080This repo is wired to deploy automatically on push to main.
- Log into Cloudflare → Workers & Pages → Create a Pages project.
- Connect to Git → pick
TRDnetwork/trd-status. - Production branch:
main. - Build settings:
- Framework preset: None
- Build command: (leave blank)
- Build output directory:
/(or leave default — root)
- Save & Deploy. First build takes ~30 seconds.
- Pages assigns
trd-status.pages.dev. Confirm it works. - Custom domain: Pages project → Custom domains → Add
status.trdn.io. Cloudflare adds the CNAME automatically since thetrdn.iozone is in the same account.
git push to main → Cloudflare builds and ships in ~30 seconds. No manual step.
URLs are hardcoded in app.js constants at the top. To change them:
ENDPOINTS[]— the 4 probe URLsREGION_SUMMARY_URL— region-health-summary endpointMINTS_URL— public recent-mints endpointREFRESH_MS— poll interval (default 60s)HEALTH_TIMEOUT_MS— per-probe timeout (default 5s)
The endpoints we hit need to allow CORS from https://status.trdn.io:
https://api.trdn.io/health→ CORS already open (it's a public health endpoint)https://api.trdn.io/api/region-health-summary→ CORS already openhttps://api-eu.trdn.io/health→ CORS already openhttps://trd-cn-backend-production.up.railway.app/health→ CORS already openhttps://trd-cn-backend-production.up.railway.app/api/sbt/mints/recent→ made public + CORS-open intrd-cn-backend/src/routes/sbt-mint.tsas part of this rollouthttps://gateway-standby.trdn.io/health→ relies on Cloudflare Workers' default CORS handling
If a probe is failing with Failed to fetch in the browser console but curl works, it's a CORS gap on the upstream service. Fix it there, not here.
The _headers file sets a strict Content-Security-Policy and basic security headers. Tweak there if you add new fetch destinations.
The Better Stack status page subdomain (trd-network.betteruptime.com, see MONITORING_SETUP.md in the ops repo) can be iframe-embedded into a future section here for 90-day uptime history. Not done yet — keep this dashboard lean for now.
Maintained by DK. Issues / PRs welcome at TRDnetwork/trd-status.