polish: live refresh, schedule calendar, jobs times, real sidebar user #20

Merged
zgaetano merged 1 commit from polish/round-2 into main 2026-05-23 15:18:55 -04:00
Owner

Summary

Round-2 polish addressing operator feedback on issue #13:

  • Recorders / Library auto-refresh — dispatching df:recorders-changed and df:assets-changed events on create/start/stop/delete so the lists update immediately. Library also polls every 4 s while any asset is live/processing (15 s otherwise), so the LIVE badge drops and the thumbnail appears without a manual reload.
  • Sidebar bottom-left no longer pretends "Admin" is signed in when auth is off. /auth/me's synthetic response now derives from LOCAL_OPERATOR / USER / USERNAME env (set LOCAL_OPERATOR=Zac on the API container for an explicit label) and includes synthetic: true; the Sidebar takes me as a prop and surfaces a small auth off hint instead of lying with a hardcoded fallback.
  • Job queue times — replaces the always-empty ETA column with a Time column showing queued / started / done / failed N ago (full timestamp on hover).
  • Schedule calendar — month-grid view (now the default) plotting events on day cells, colored by status. Clicking a day pre-fills the new-schedule modal with a 30-minute window on that day; clicking an event opens the edit modal. List view kept behind a toggle.

Test plan

  • Open Ingest → Recorders, create a new recorder via the modal — list updates without manual refresh
  • Start a recorder, then stop it, then navigate to Library — LIVE badge drops and thumbnail appears within a few seconds
  • Bottom-left sidebar shows OS user (or LOCAL_OPERATOR) with · auth off when AUTH_ENABLED=false; shows real display_name when logged in via session
  • Jobs page: queued/running/done/failed jobs each show a sensible relative timestamp
  • Scheduler defaults to calendar view; clicking an empty day opens the new-schedule modal pre-filled; existing events render as colored chips and open the edit modal on click; prev/next/Today nav works

🤖 Generated with Claude Code

## Summary Round-2 polish addressing operator feedback on issue [#13](https://forge.wilddragon.net/zgaetano/dragonflight/issues/13): - **Recorders / Library auto-refresh** — dispatching `df:recorders-changed` and `df:assets-changed` events on create/start/stop/delete so the lists update immediately. Library also polls every 4 s while any asset is `live`/`processing` (15 s otherwise), so the LIVE badge drops and the thumbnail appears without a manual reload. - **Sidebar bottom-left** no longer pretends "Admin" is signed in when auth is off. `/auth/me`'s synthetic response now derives from `LOCAL_OPERATOR` / `USER` / `USERNAME` env (set `LOCAL_OPERATOR=Zac` on the API container for an explicit label) and includes `synthetic: true`; the Sidebar takes `me` as a prop and surfaces a small `auth off` hint instead of lying with a hardcoded fallback. - **Job queue times** — replaces the always-empty ETA column with a Time column showing `queued / started / done / failed N ago` (full timestamp on hover). - **Schedule calendar** — month-grid view (now the default) plotting events on day cells, colored by status. Clicking a day pre-fills the new-schedule modal with a 30-minute window on that day; clicking an event opens the edit modal. List view kept behind a toggle. ## Test plan - [ ] Open Ingest → Recorders, create a new recorder via the modal — list updates without manual refresh - [ ] Start a recorder, then stop it, then navigate to Library — LIVE badge drops and thumbnail appears within a few seconds - [ ] Bottom-left sidebar shows OS user (or `LOCAL_OPERATOR`) with `· auth off` when `AUTH_ENABLED=false`; shows real `display_name` when logged in via session - [ ] Jobs page: queued/running/done/failed jobs each show a sensible relative timestamp - [ ] Scheduler defaults to calendar view; clicking an empty day opens the new-schedule modal pre-filled; existing events render as colored chips and open the edit modal on click; prev/next/Today nav works 🤖 Generated with [Claude Code](https://claude.com/claude-code)
zgaetano added 1 commit 2026-05-23 15:10:11 -04:00
- recorders: dispatch df:recorders-changed on create/start/stop/delete so the
  list updates immediately instead of waiting for the 10s poll tick
- library: poll every 4s while any asset is live/processing (15s otherwise) and
  listen for df:assets-changed so a stopped recorder's LIVE badge drops and
  the thumbnail appears without a manual refresh
- auth: synthetic /auth/me (AUTH_ENABLED=false) now uses LOCAL_OPERATOR / USER /
  USERNAME instead of hardcoding "Admin", and flags synthetic:true
- shell: Sidebar takes `me` as a prop, drops the misleading "Admin" fallback,
  and surfaces an "auth off" hint when the response is synthetic
- jobs: replace the always-empty ETA column with a Time column that shows
  queued/started/done/failed N ago (full timestamp on hover); widen column
- schedule: new month-calendar view (default) with events plotted on day cells
  by status; clicking a day pre-fills the new-schedule modal with a 30-min
  window on that day; List view kept behind a toggle

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
zgaetano merged commit e8299fb9f6 into main 2026-05-23 15:18:55 -04:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: WildDragonLLC/dragonflight#20
No description provided.