Error tracking (Sentry)
A vendor-neutral facade lives inapp/src/observability/:
initObservability()(called inmain.tsx) initialises Sentry only whenVITE_SENTRY_DSNis set. The SDK is dynamically imported, so the default telemetry-off build never downloads it.ErrorBoundary.componentDidCatchforwards caught render errors viacaptureException().sendDefaultPii: falseno IP or user identifiers collected.
SENTRY_AUTH_TOKEN + SENTRY_ORG + SENTRY_PROJECT, vite.config.ts enables @sentry/vite-plugin to upload hidden source maps, then deletes them from dist/ so they symbolicate Sentry stacks without being served publicly. Without those variables, no maps are generated or shipped.
RUM / Core Web Vitals
reportWebVitals() streams LCP / INP / CLS / FCP / TTFB plus app-specific timings via track():
track() routes to (a) a VITE_RUM_ENDPOINT beacon if set and (b) Sentry breadcrumbs. RUM is active when either a DSN or a beacon endpoint exists, sampled by VITE_RUM_SAMPLE_RATE.
The timing marks are also mirrored read-only to window.__OTP_PERF__ a handy devtools probe and the signal the E2E tests wait on. See Performance & E2E.
Synthetic monitoring
synthetic-monitor.yml exercises the live serving plane the same way a browser does:
http-smoke every 30 min
scripts/smoke_cdn.sh manifest 200, a sample parquet 200, the live site 200, version present, freshness within 90 days. Cheap (curl only). The direct guard against a 404-parquet incident.onnx-liveness daily
app/scripts/synthetic_check.mjs loads the live ONNX in headless Node and runs one real inference, asserting finite output.secrets.ALERT_WEBHOOK is set, failures also POST a Slack/Discord-compatible message. Set vars.PROD_SITE_URL to include the live-site check.
SLOs
Freshness is intentionally non-paging: the dataset updates per F1 season, so an older manifest is usually correct. It surfaces as a warning to review, not a page.
Operator setup
- Create a Sentry (or GlitchTip) project; set
VITE_SENTRY_DSNas a build env var. - (Optional) Set
SENTRY_AUTH_TOKEN/SENTRY_ORG/SENTRY_PROJECTfor source-map upload. - (Optional) Stand up a RUM beacon endpoint; set
VITE_RUM_ENDPOINT. - Set
vars.PROD_SITE_URLso the synthetic monitor checks the live site. - (Optional) Set
secrets.ALERT_WEBHOOKfor push alerting on monitor failure.
app/.env.example for every variable.
Performance & E2E
Bundle-size budget, Playwright E2E, and coverage thresholds.
Deployment
Release pipeline and rollback the process observability guards.