generated from CubeCraft-Creations/Tracehound
[CUB-176] Central hub frontend: React + TypeScript + Tailwind monitoring UI #25
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Imported from Linear: CUB-176
Linear URL: https://linear.app/cubecraft-creations/issue/CUB-176/central-hub-frontend-react-typescript-tailwind-monitoring-ui
Description
Goal
Build a responsive React/TypeScript/Tailwind web interface that displays all connected cameras as cards with live battery, storage, and recording state. Include start/stop buttons and a log viewer.
Why
Joshua (and potentially 1-2 others) need a simple, at-a-glance view of all cameras during concerts and marching band shows. The UI must work on a laptop for live shows and optionally on a Raspberry Pi kiosk.
Scope
Tech Stack
Acceptance Criteria
Acceptance Evidence
Imported Linear metadata
Imported Linear comment from CubeCraft Creations at
2026-05-27T01:51:54.012Zon CUB-176:⚠️ CI FAILURE — 3+ days stale
PR: #15
Failing check:
CI/CD / buildAssigned to: Rex
Action: Investigate build failure, push a fix.
Imported Linear comment from CubeCraft Creations at
2026-05-25T13:52:06.268Zon CUB-176:⚠️ CI failure on PR — action required
PR: #15
REPO: remote-rig
FAILING CHECK: CI/CD / build (Failing after 8s)
ASSIGNED TO: Rex
ACTION: Investigate CI failure, push a fix.
Failure has persisted since May 23 (~2 days).
Imported Linear comment from CubeCraft Creations at
2026-05-24T13:51:01.360Zon CUB-176:⚠️ CI failure on PR — action required
PR: #15
REPO: remote-rig
FAILING CHECK: CI/CD / build (Failing after 8s)
ASSIGNED TO: Rex
AGE: ~17 hours (since 2026-05-23)
ACTION: Investigate CI failure, push a fix.
Imported Linear comment from CubeCraft Creations at
2026-05-23T14:38:43.181Zon CUB-176:CUB-176 — Complete ✅
PR: #15
Branch:
agent/rex/CUB-176-central-hub-frontendCommit:
dd5ffe9Deliverable Summary
Built the full RemoteRig central hub frontend as a React 19 + TypeScript + Tailwind Vite app:
Components delivered:
Validation:
Imported Linear comment from CubeCraft Creations at
2026-05-23T14:38:15.729Zon CUB-176:✅ CUB-176 — Frontend implementation complete
Branch
agent/rex/CUB-176-central-hub-frontend(based ondev)Commit
dd5ffe9— CUB-176: central hub frontend — camera grid, start/stop controls, history viewerPR
#15
Changed files (7)
src/App.tsxsrc/components/CameraCard.tsxsrc/components/HistoryViewer.tsxsrc/components/CameraCard.test.tsxsrc/components/index.tssrc/services/api.tssrc/types/index.tsValidation
tsc -bcleanAcceptance Criteria
useSSEhookGET /api/v1/cameras/{id}Imported Linear comment from CubeCraft Creations at
2026-05-23T14:31:30.847Zon CUB-176:⚠️ Stall alert: no specialist update in >2h. Otto execution loop will re-dispatch at next tick.
Imported Linear comment from CubeCraft Creations at
2026-05-23T14:29:57.688Zon CUB-176:🚀 Otto: picked up CUB-176 — routing to Rex (frontend, React, TypeScript, Tailwind).
Imported Linear comment from CubeCraft Creations at
2026-05-20T22:49:34.999Zon CUB-176:⚠️ Otto evidence gate / decomposition note
Rex run did not complete cleanly; it failed before posting required evidence. I verified there is currently no
agent/rex/CUB-176-central-hub-frontendbranch and no open PR inCubeCraft-Creations/remote-rig, so CUB-176 cannot move to In Review.This issue is also too broad for one atomic dispatch. The right path is to advance the existing smaller RemoteRig frontend issues instead:
Moving this parent/composite UI issue out of the active mutex and dispatching the first atomic frontend slice next.
Imported Linear comment from CubeCraft Creations at
2026-05-20T22:30:22.429Zon CUB-176:🔧 Otto dispatch — CUB-176 → Rex
Picked up CUB-176 as the next actionable Todo after skipping blocked epic parent CUB-119.
Task: Central hub frontend: React + TypeScript + Tailwind monitoring UI
Project: RemoteRig
Specialist: Rex (frontend / React / TypeScript / Tailwind)
Branch:
agent/rex/CUB-176-central-hub-frontendfromdevEvidence gate before In Review:
Rex should implement the camera grid, live status updates, start/stop controls, history/log viewer, and responsive laptop/kiosk layout.
Imported Linear comment from CubeCraft Creations at
2026-05-20T21:28:19.914Zon CUB-176:🔧 Otto heartbeat mutex correction — moving CUB-176 back to Todo
CUB-200 is already In Progress and was updated at 2026-05-20 21:18 UTC. Per the Otto execution model, only one issue may be In Progress at a time.
CUB-176 is not stale (last dispatch/update was 2026-05-20 21:07 UTC), but it is lower priority than urgent CUB-200. Moving CUB-176 back to Todo so it can be re-picked after the active In Progress slot clears.
Routing note for next pickup: Rex — React/TypeScript/Tailwind frontend task.
Imported Linear comment from CubeCraft Creations at
2026-05-20T21:07:41.991Zon CUB-176:📤 Dispatching CUB-176 to Rex.
Imported Linear comment from CubeCraft Creations at
2026-05-20T21:07:35.904Zon CUB-176:⚠️ Stall detected by Otto at 2026-05-20 21:03 UTC. Re-dispatching.
Imported Linear comment from CubeCraft Creations at
2026-05-20T20:33:11.228Zon CUB-176:⚠️ Stall alert: no specialist update in >2h. Otto execution loop will re-dispatch at next tick.
Imported Linear comment from CubeCraft Creations at
2026-05-20T20:21:29.922Zon CUB-176:📤 Dispatching CUB-176 to Rex (React/TypeScript/Tailwind frontend for RemoteRig monitoring UI).
Imported Linear comment from CubeCraft Creations at
2026-05-20T20:20:27.211Zon CUB-176:⚠️ Stall detected by Otto at 2026-05-20 20:15 UTC. Re-dispatching.
Imported Linear comment from CubeCraft Creations at
2026-05-20T20:04:37.566Zon CUB-176:📤 Dispatching CUB-176 to Rex (React/TypeScript/Tailwind frontend for RemoteRig monitoring UI).
Imported Linear comment from CubeCraft Creations at
2026-05-20T20:03:15.942Zon CUB-176:⚠️ Stall detected by Otto at 2026-05-20 20:00 UTC. Re-dispatching.
Imported Linear comment from CubeCraft Creations at
2026-05-20T18:14:39.974Zon CUB-176:📤 Dispatching CUB-176 to Rex.
Central hub frontend: React + TypeScript + Tailwind monitoring UI
The backend (CUB-175) is already Done. Build a responsive camera monitoring UI:
Key requirements:
Tech: React 19, TypeScript, Tailwind CSS, Vite
DoD: Branch URL, commit hash, screenshot of UI running against backend
Imported Linear comment from CubeCraft Creations at
2026-05-19T23:37:47.178Zon CUB-176:Dispatching to Rex: Frontend — React + TypeScript + Tailwind monitoring UI for the Central Hub.
Context: Central hub frontend scaffold is in place (CUB-194). This task covers building the actual monitoring UI.
DoD: Code on a feature branch with validation (build passes) posted to this Linear issue.
Branch naming:
agent/rex/CUB-176-central-hub-frontendImported Linear comment from CubeCraft Creations at
2026-05-19T21:33:04.027Zon CUB-176:⚠️ Stall check — CUB-176 → Todo
No agent comment since 2026-05-18 (~24h stale). Moving In Progress → Todo to restore the single In Progress mutex.
Reason: CUB-197 (also RemoteRig) is currently the active In Progress issue, freshly dispatched. CUB-176 will be re-picked next tick when an In Progress slot opens.
Note: This issue is a React frontend task — route to Rex on re-dispatch.
Imported Linear comment from CubeCraft Creations at
2026-05-19T20:30:27.747Zon CUB-176:⚠️ Stall alert: no specialist update in >2h. Otto execution loop will re-dispatch at next tick.
Imported Linear comment from CubeCraft Creations at
2026-05-19T20:03:11.452Zon CUB-176:🚀 Otto: picked up CUB-176 — routing to specialist.
Imported Linear comment from CubeCraft Creations at
2026-05-18T21:29:38.422Zon CUB-176:🔧 Otto stall check action — Moving CUB-176 to Todo due to stall
No agent comment since creation. Per stall check protocol, moving from In Progress → Todo to restore the In Progress mutex.
Note: CUB-114 (Pi 5 kiosk, Pip) is the current active In Progress issue.
Imported Linear comment from CubeCraft Creations at
2026-05-18T21:18:00.229Zon CUB-176:React Frontend Design — RemoteRig Monitoring UI
Platform
go:embedcompiled frontend)Architecture
Real-time Updates
The frontend connects to the SSE endpoint (
/api/v1/events/stream) on load.Event types handled:
camera_status→ updates the camera card in the gridcamera_offline→ turns card gray, shows "OFFLINE"camera_online→ restores cardrecording_event→ brief flash animation on the affected cardNo polling — the SSE connection is the single source of truth for live state.
Color Coding
Start/Stop All
A single "Start All" or "Stop All" button sends the appropriate REST call to each camera. The backend handles fan-out via MQTT. The frontend shows a brief loading state during the fan-out.
Responsive Breakpoints
TypeScript Types
File Structure
API Client (typed fetch calls)
Key Design Decisions