An iPad-friendly dashboard for keeping the pit crew aware of the team's current match, queue timing, alliance color, and upcoming partners.
The display reads a dashboard-specific model from Convex. FRC Nexus sends full event updates to /frc-nexus/webhook; ingestion trims them to the current field match and the configured team's remaining matches, then a reactive Convex query shapes the active event snapshot for the UI. When an update arrives for a new event, its snapshot atomically replaces the previous event's data. The browser only formats timestamps for its local time zone.
The project uses Node 26, pnpm 12, React, TypeScript, and Vite+.
mise install
vp install
vp run devThis starts the Convex function watcher and frontend together. Open the Portless URL shown in the terminal and use landscape orientation for the intended display layout.
Publish the frontend to pit.frc581.com:
vp run deployWrangler must be authenticated to the Team 581 Cloudflare account. The command deploys the pit-display Worker and
attaches the custom domain.
Open the deployed site in Safari, tap Share, then choose Add to Home Screen. The installed app launches in landscape as a standalone display and keeps the frontend available offline; live match data still requires a network connection.
Register this URL as a Live event status webhook in FRC Nexus:
https://hardy-trout-638.convex.site/frc-nexus/webhook
Configure the same shared token as NEXUS_WEBHOOK_TOKEN in the Convex deployment. NEXUS_API_KEY is reserved for later reconciliation pulls; normal live updates use the webhook token.
To pull an event immediately instead of waiting for its next webhook update:
pnpm convex run frcNexus:pullEventStatus '{"eventKey":"demo9705"}'vp check
vp test
vp exec knip
vp run build