Skip to content

Commit 4f37f72

Browse files
Sbussisoclaude
andcommitted
docs: stop promising UI that doesn't exist
Two pages claimed UI surfaces that never shipped. Rewrite to match reality. - CameraGroups.jsx: the page told users "Open Settings > Camera Groups, click New Group, drag cameras into the group" — but no such Settings section, button, or drag interaction exists. Camera groups are a real backend primitive (CameraGroup model + REST routes + MCP `list_camera_groups`) that's currently surfaced only to AI agents. Rewrite the page to be explicit: "Today, groups are MCP / API-only. A management UI inside Settings is planned but not yet shipped." Document the actual REST endpoints for users who want them now. - Dashboard.jsx: three false claims in the Live view section. * Status pill enum was "(online, offline, or stale)" — the actual statuses on CameraCard are online | streaming | recording | starting | restarting | failed | error | offline | suspended. No "stale". * "Tiles are grouped by camera group" — DashboardPage renders a flat list. No group_id references anywhere in the file. * "Click a tile to expand to full screen, or select multiple tiles to watch side-by-side" — no multi-select / multi-view mode exists. Trim the bullet header from "Fullscreen + multi-view" to "Fullscreen" and update the diagram alt-text to match. (The diagram image itself still visually shows a multi-view branch — needs regenerating separately.) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 0a70907 commit 4f37f72

2 files changed

Lines changed: 54 additions & 25 deletions

File tree

frontend/src/pages/docs/CameraGroups.jsx

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,64 @@
1-
import { Link } from "react-router-dom"
2-
3-
41
function CameraGroups() {
52
return (
63
<section className="docs-section" id="camera-groups">
74
<h2>Camera Groups<a href="#camera-groups" className="docs-anchor">#</a></h2>
85
<p>
9-
Camera groups are user-defined zones — "Front yard", "Workshop", "Main floor" —
10-
that bundle cameras together for filtering, display, and MCP agent navigation.
6+
Camera groups are an organizational primitive — "Front yard", "Workshop",
7+
"Main floor" — that bundle cameras together so AI agents (and
8+
eventually a settings UI) can talk about a location instead of a
9+
list of camera IDs.
1110
</p>
1211

13-
<h3>Creating a group</h3>
14-
<ol>
15-
<li>Open <Link to="/settings">Settings</Link> &gt; Camera Groups</li>
16-
<li>Click <strong>New Group</strong>, give it a name and a color</li>
17-
<li>Drag cameras into the group, or assign a group from the camera's settings drawer</li>
18-
</ol>
12+
<div className="docs-callout docs-callout-info">
13+
<p>
14+
<span className="docs-callout-icon">ℹ️</span>
15+
<span>
16+
<strong>Today, groups are MCP / API-only.</strong> A management
17+
UI inside Settings is planned but not yet shipped. Until then,
18+
groups are created and assigned via the REST API directly — see
19+
below — or simply ignored if you don't have an agent workflow
20+
that needs them.
21+
</span>
22+
</p>
23+
</div>
1924

20-
<h3>What groups do for you</h3>
25+
<h3>What groups do today</h3>
26+
<ul>
27+
<li>
28+
<strong>MCP navigation</strong> — Agents call <code>list_camera_groups</code> to
29+
resolve a natural-language location ("check the workshop") to a
30+
set of <code>camera_id</code>s. This is the primary use case
31+
right now.
32+
</li>
33+
<li>
34+
<strong>Sentinel scoping</strong> — Camera scope on the Sentinel
35+
page is per-camera; group-aware scope selectors are on the
36+
roadmap.
37+
</li>
38+
</ul>
39+
40+
<h3>Managing groups via the API</h3>
41+
<p>
42+
With an admin Clerk session token, the following endpoints are
43+
available:
44+
</p>
2145
<ul>
22-
<li><strong>Live view layout</strong>The dashboard tile grid is grouped by camera group, so related cameras stay adjacent.</li>
23-
<li><strong>Color tagging</strong>Each group has a color. Tiles and tile borders reflect it so you can read a 20-camera grid at a glance.</li>
24-
<li><strong>Filter and search</strong>Filter the live view or access logs by group name.</li>
25-
<li><strong>MCP navigation</strong> — Agents call <code>list_camera_groups</code> to resolve a natural-language location ("check the workshop") to a set of <code>camera_id</code>s.</li>
46+
<li><code>GET /api/camera-groups</code>list groups in your org</li>
47+
<li><code>POST /api/camera-groups</code>create a group (<code>name</code>, <code>color</code>, <code>icon</code>)</li>
48+
<li><code>DELETE /api/camera-groups/&#123;id&#125;</code>delete a group; member cameras are unassigned</li>
49+
<li><code>PUT /api/cameras/&#123;camera_id&#125;/group</code> — assign a camera to a group (or pass <code>group_id=null</code> to unassign)</li>
2650
</ul>
2751

28-
<h3>Tips</h3>
52+
<h3>Tips for when the UI lands</h3>
2953
<ul>
30-
<li>Name groups by <em>place</em>, not purpose. "Driveway" stays meaningful as cameras come and go; "Vehicle monitoring" doesn't.</li>
31-
<li>Use a color system your team recognizes — e.g. red for perimeter, blue for interior, green for delivery zones.</li>
32-
<li>A camera can only be in one group. If you need multi-group overlap, duplicate the camera tile in a saved view instead (planned feature).</li>
54+
<li>
55+
Name groups by <em>place</em>, not purpose. "Driveway" stays
56+
meaningful as cameras come and go; "Vehicle monitoring" doesn't.
57+
</li>
58+
<li>
59+
A camera can only be in one group. If you need multi-group
60+
overlap, that's a planned feature ("saved views").
61+
</li>
3362
</ul>
3463
</section>
3564
)

frontend/src/pages/docs/Dashboard.jsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function Dashboard() {
99
<source srcSet="/images/dashboard-ia.webp" type="image/webp" />
1010
<img
1111
src="/images/dashboard-ia.jpg"
12-
alt="Dashboard information architecture tree. Root: Dashboard (opensentry-command.fly.dev). Four children: Live view (Camera tiles, Fullscreen + multi-view, Snapshot capture, Manual record); Settings — admin-only (Node Management, Recording Policy, Organization, Subscription, Danger Zone); Admin — admin-only (Stream Access Logs, Usage Statistics, MCP Tool Activity, System Health); Incidents (Open incidents, Evidence viewer, Markdown reports, Triage actions)."
12+
alt="Dashboard information architecture tree. Root: Dashboard (opensentry-command.fly.dev). Four children: Live view (Camera tiles, Fullscreen, Snapshot capture, Manual record); Settings — admin-only (Node Management, Recording Policy, Organization, Subscription, Danger Zone); Admin — admin-only (Stream Access Logs, Usage Statistics, MCP Tool Activity, System Health); Incidents (Open incidents, Evidence viewer, Markdown reports, Triage actions)."
1313
className="docs-diagram-image"
1414
width="1920"
1515
height="1080"
@@ -23,16 +23,16 @@ function Dashboard() {
2323

2424
<h3>Live view</h3>
2525
<p>
26-
The default page after sign-in. Every camera appears as a tile with a status
27-
pill (online, offline, or stale) and a live HLS player you can expand. Tiles
28-
are grouped by camera group and each tile shows its node name for quick
26+
The default page after sign-in. Every camera appears as a tile with a live
27+
status pill (online, recording, starting, offline, suspended, etc.) and an
28+
HLS player you can expand. Each tile shows its node name for quick
2929
identification.
3030
</p>
3131
<ul>
3232
<li><strong>Live Streams</strong> — HLS video served same-origin through the Command Center proxy, JWT-authenticated per viewer. Starts at the live edge.</li>
3333
<li><strong>Snapshots</strong> — Click the camera icon to capture a single JPEG and save it on the node. Shows up in the node's snapshots list.</li>
3434
<li><strong>Recording</strong> — Manual start/stop per camera. Recordings are stored locally on the node in the encrypted SQLite database.</li>
35-
<li><strong>Fullscreen + multi-view</strong> — Click a tile to expand to full screen, or select multiple tiles to watch side-by-side.</li>
35+
<li><strong>Fullscreen</strong> — Click a tile to expand to full screen.</li>
3636
</ul>
3737

3838
<h3>Settings</h3>

0 commit comments

Comments
 (0)