Developer
9de2d5b8d2
feat(frontend): slice 8 — remove MUI/@emotion deps + update REQUIREMENTS
...
Web UI rework. Final slice.
- Remove from package.json: @mui/material, @mui/icons-material,
@mui/x-data-grid, @emotion/react, @emotion/styled (zero consumers
remain in src after slices 1-7b; grep-verified).
- Update docs/REQUIREMENTS.md (+63 lines): single design system
(shadcn/ui + Tailwind v4 + lucide-react), thin-dashboard observability
model (no in-app charts; Grafana deep-links), TanStack tables
(visibility-only parity), reconciled IA (Backups top-level nav;
Media at /media with /applications redirect), repurposed chart-*
status cues, removed deps list.
- Note: AGENTS.md 'node --test tests' invocation is a pre-existing
broken command (treats tests/ as a module); correct form is
'node --test' (auto-discover, 5/5 pass) — verified identical at
pre-rework baseline ef5311b .
Gate: build + lint + vitest (23/64) + node --test (5/5) green.
Web UI rework complete.
2026-06-17 18:52:27 +00:00
Developer
3dc1b31fc3
feat(frontend): slice 7b — Media on TanStack Table (server pagination)
...
Web UI rework. Completes the DataGrid migration (7a + 7b):
- pages/Media.tsx off @mui/x-data-grid + @mui/material onto DataTable:
15 locked columns (title/series/season/episode/type/year/runtime_min/
size/bitrate/hdr/video/resolution/date_added/library/path);
enablePagination + manualPagination + rowCount from queryResult.total;
page state (pageIndex/pageSize) -> offset/limit into useMediaQuery;
onRowClick -> navigate('/files?path=...') preserved; stable path-derived
getRowId so selection survives server paging; column-visibility toggle.
Hard rule honored: NO sorting, NO resizing (visibility-only).
- Migrate Media shell (Select/Input/Progress/Card/grid/Typography/Tabs).
- Media component tests (column set + row-click nav).
- Harness fix: polyfill ResizeObserver in test/setup.ts — jsdom lacks it
and Radix primitives (Select/ScrollArea/etc.) reference it; was causing
cross-test failures once Media pulled shadcn Select into the pool.
Gate: build + lint + test green (23 files / 64 tests).
2026-06-17 18:33:59 +00:00
Developer
e8b0f1144b
feat(frontend): slice 7a — DataTable wrapper + FileBrowser (TanStack Table)
...
Web UI rework. Highest-risk slice, part 1 of 2:
- New components/ui/data-table.tsx: generic TanStack Table wrapper on the
shadcn Table primitive. Controlled rowSelection/columnVisibility/
pagination, optional selection column (stopPropagation on cell click),
row-click, column-visibility dropdown, manual-pagination support.
Hard rule honored: NO getSortedRowModel, NO column resizing/sizing.
- Migrate pages/FileBrowser.impl.tsx off @mui/x-data-grid + @mui/material
onto DataTable: 5 columns (type/name/ext/size/modified), row-click ->
ffprobe preview preserved, column-visibility toggle, no pagination.
- DataTable + FileBrowser component tests (RED->GREEN).
Gate: build + lint + test green (22 files / 58 tests).
2026-06-17 18:02:47 +00:00
Developer
04f2e59c92
feat(frontend): slice 6b — Users compose dialog + 9 icons (finish Users)
...
Web UI rework. Completes the Users migration (6a directory + 6b compose):
- Compose dialog off @mui: shadcn Dialog family + Input (subject) +
Textarea (html body) + Separator + Label; IconButton -> Button ghost
- 9 @mui/icons-material -> lucide-react: Close->X, AttachFile->Paperclip,
FormatBold->Bold, FormatItalic->Italic, Link->Link,
FormatListBulleted->List, MailOutlined->Mail, Send->Send,
DeleteOutlined->Trash2
- Rich-text compose parity: markup insertion, attachments (FormData),
queue-status polling, send via useSendUserMessage
- UsersPage.impl.tsx now has ZERO @mui imports
Gate: build + lint + test green (20 files / 46 tests).
2026-06-17 16:18:49 +00:00
Developer
1e23c07a20
feat(frontend): slice 6a — Users directory surface + drawer (shadcn)
...
Web UI rework. Slice 6a (force-split; 6b = compose dialog next):
- UsersPage.impl.tsx directory surface off @mui: shadcn Table family +
Checkbox + Badge (status: success=chart-2/destructive/secondary) +
Avatar + Tooltip + Progress + Alert/Button/Stack/Typography
- MUI Drawer -> shadcn Sheet side="right" for user detail drawer
(buildUserDrawerModel rendering preserved)
- Selection-across-pagination + search/filter parity preserved
- Compose-dialog MUI subset (Dialog/TextField/Divider/IconButton +
9 icons) intentionally LEFT for slice 6b
Gate: build + lint + test green.
2026-06-17 14:36:07 +00:00
Developer
b6da7df7f9
feat(frontend): slice 5 — migrate Settings + Actions to shadcn/Tailwind
...
Web UI rework. Form-heavy pair (controlled useState parity, no form lib):
- pages/Settings.tsx off @mui: monitoring-machine CRUD, SSH-key mgmt,
SSH test/validation feedback, danger-zone reset (ConfirmDialog), tabs
- pages/Actions.tsx off @mui: saved-task editor, machine selection,
run history, tabs
- Both reuse migrated shared components (SectionCard/SelectionRailCard/
TabbedCard/HoverEditButton/ConfirmDialog/DialogFooter) as before
- Behavioral tests added (mocked hooks; no live SSH)
Gate: build + lint + test green (19 files / 39 tests).
2026-06-17 13:47:57 +00:00
Developer
c721f0dece
feat(frontend): slice 4 — migrate Dashboard + Applications to shadcn/Tailwind
...
Web UI rework.
- Migrate pages/Dashboard.tsx off @mui (shortcut CRUD dialogs, machine
switcher, BackupDashboardWidget mount; shortcuts reuse ConfirmDialog/
DialogFooter from slice 2)
- Migrate pages/Applications.tsx shell off @mui (tabs + library counts);
keeps <Media/> child intact (Media.tsx still MUI, deferred to slice 7
with its DataGrid)
- Behavioral tests for both pages
Gate: build + lint + test green.
2026-06-17 13:15:51 +00:00
Developer
77c6b62ee2
feat(frontend): slice 3 — Backups cluster migration + nav/IA
...
Web UI rework.
- Migrate BackupAlertsTable, BackupJobsTable, BackupRunsTable,
BackupsPage, BackupDashboardWidget off @mui (shadcn Table + Badge
severity variants: success=chart-2, warning=chart-3, destructive)
- App.tsx IA: Backups now top-level nav (DatabaseBackup icon);
Media surface primary at /media; /applications -> /media redirect
in both route trees (mirrors /monitoring -> /observability)
Gate: build + lint + test green.
2026-06-17 12:53:36 +00:00
Developer
109e74db41
feat(frontend): slice 2 — migrate 11 shared components to shadcn/Tailwind
...
Web UI rework. Shared-components slice (drift prevention):
- Migrate SectionCard, SelectionRailCard, TabbedCard, MetricCard,
DiskSpaceCard, HoverEditButton, DialogFooter, ConfirmDialog,
LibraryOverview, NowPlaying, SessionActivityPanel off @mui
- HoverEditButton: MUI IconButton + EditOutlined -> Button + lucide Pencil
- Status mapping uses the success Badge variant (chart-2) for healthy
- Exported APIs preserved so consuming pages still compile (no page edits)
- 11 behavioral Vitest component tests added
Gate: build + lint + test green.
2026-06-17 12:33:47 +00:00
Developer
dd778d8850
feat(frontend): slice 1 — foundation for MUI->shadcn migration
...
Web UI rework (openspec/changes/web-ui-rework). Foundation slice:
- Add @tanstack/react-table; remove orphaned recharts, d3
- Vendor shadcn primitives: tabs table dialog input label checkbox
switch progress separator avatar textarea dropdown-menu scroll-area
- Add Vitest + @testing-library/react + jsdom harness; npm test script
- Delete no-op theme.ts shim; remove getAppTheme references
- Smoke test proves the harness
Gate: build + lint + test green.
2026-06-17 12:11:05 +00:00
Developer
53dcd16735
feat(observability): persist standalone stack data and expose ports via env
...
- Switch docker-compose.observability.yml from named volumes to host
bind mounts under OBSERVABILITY_DATA_ROOT, defaulting to
./observability-data.
- Make all service ports configurable via environment variables
(PROMETHEUS_PORT, LOKI_PORT, ALLOY_PORT, GRAFANA_PORT,
ALERTMANAGER_PORT, NODE_EXPORTER_PORT).
- Add VITE_GRAFANA_URL handling to ObservabilityPage so Grafana links
point to the configured standalone instance.
- Update docs/observability-runbooks.md with the env variable table,
reachable-web-UI table, and backup/restore instructions for the new
host-directory layout.
2026-06-16 15:37:41 +00:00
Developer
e783d2c07b
refactor(observability): decouple Grafana from Manage
...
- Replace embedded Grafana iframes in ObservabilityPage with external
Grafana link cards. Grafana URL is configurable via VITE_GRAFANA_URL
(frontend) or GRAFANA_URL (backend env exposed to frontend build).
- Remove the grafana scrape job from monitoring/prometheus/prometheus.yml
so the main Prometheus stack no longer depends on Grafana.
- Pass GRAFANA_URL through docker-compose.yml and docker-compose.dev.yml.
2026-06-16 15:20:26 +00:00
Developer
e2ad731b5f
feat(observability): add Prometheus/Grafana/Loki/Alertmanager/Alloy stack and remove legacy Monitoring UI
2026-06-16 13:44:35 +00:00
alex
615e02e970
fix(frontend): make dark mode toggle actually work
...
The dark mode button was toggling React state but never applying it to the
DOM. Add a useDarkMode hook that:
- Persists the preference in localStorage
- Defaults to the OS prefers-color-scheme on first visit
- Adds/removes the 'dark' class on <html> to trigger CSS variable overrides
Also add dark-mode color overrides for all Tailwind v4 theme variables in
index.css.
Co-authored-by: openhands <openhands@all-hands.dev >
2026-06-11 21:50:13 +02:00
alex
43e132971b
Build new shell layout with left sidebar (el-3po)
2026-05-12 11:08:33 +02:00
alex
a748512d22
test: verify backup monitoring implementation
2026-05-11 21:57:31 +02:00
alex
322b3d1a3b
feat(backups): wire up routes, nav, dashboard widget, and docs
...
- Add /backups route and navigation tab in App.tsx
- Add BackupDashboardWidget to Dashboard page
- Document backup monitoring feature in REQUIREMENTS.md
2026-05-11 21:54:50 +02:00
alex
a7a66ff370
feat(frontend): add backup monitoring UI components
...
Add BackupJobsTable, BackupRunsTable, BackupAlertsTable,
BackupDashboardWidget, and BackupsPage components for
backup monitoring dashboard.
2026-05-11 21:52:04 +02:00
alex
36e5d85a82
feat: add backup monitoring TanStack Query hooks
2026-05-11 21:46:10 +02:00
alex
f4085228f9
feat: add backup monitoring API client
2026-05-11 21:44:53 +02:00
alex
921914255b
feat: add backup monitoring TypeScript types
2026-05-11 21:43:17 +02:00
alex
3718045d7b
refactor(actions): unify add button placement with outline variant in list footer
2026-05-11 19:12:13 +02:00
alex
4940466054
fixes and improvements
2026-05-11 19:05:59 +02:00
alex
2a84553575
feat(settings): redesign SSH keys section with two-column layout
...
Refactor SSHKeyManager to match app layout pattern:
- List of SSH keys on the left (SelectionRailCard)
- Key details and form on the right (SectionCard)
- Add selectedSSHKeyId state to Settings component
- Click a key to select and populate the form
- New key button to create a new key
- Shows fingerprint and public key for selected key
- Delete button moved to the right panel
2026-05-11 18:54:00 +02:00
alex
8b26cd4fe0
fixes and improvements
2026-05-11 17:31:20 +02:00
alex
80d38ed86d
fixes and improvements
2026-05-11 17:00:46 +02:00
alex
67a619e148
fixes and improvements
2026-05-11 16:27:07 +02:00
alex
7c704fc290
fixes and improvements
2026-05-11 15:45:59 +02:00
alex
019664ac78
feat: enable automaticSilentRenew for OIDC token refresh
2026-05-07 23:40:10 +02:00
alex
befddf93ce
fix: pass jellyfin/jellyseerr secrets via get_machine_config and add placeholder for set fields
2026-05-07 23:39:59 +02:00
alex
26a30a5572
fixes and improvements
2026-05-07 22:24:08 +02:00
alex
a85c9a0df4
Fix collector warm-up and add enable toggle to MachineEditor
2026-05-07 21:43:13 +02:00
alex
6bf1cdd845
fixes and improvements
2026-05-07 21:09:43 +02:00
alex
3934893099
Auto-start collectors when saving machines
2026-05-07 21:09:05 +02:00
alex
02f6617f71
Validate SSH when saving machines
2026-05-07 20:59:23 +02:00
alex
dd7b8f133c
fixes and improvements
2026-05-07 18:58:38 +02:00
alex
84dc2bd2f6
Add SSH connection validation for settings
2026-05-07 18:31:49 +02:00
alex
1d1f052d18
Add hybrid app version labels
2026-05-07 15:17:31 +02:00
alex
efc9b247c7
fixes and improvements
2026-05-07 13:48:10 +02:00
alex
bba23165ab
fixes and improvements
2026-05-07 12:34:16 +02:00
alex
016e3255f5
Add missing frontend and backend files
2026-05-06 23:46:08 +02:00
alex
b789034bbe
fixes and improvements
2026-05-06 23:37:19 +02:00
alex
b0d84399ab
fixes and improvements
2026-05-06 21:25:12 +02:00
alex
5277f21577
fixes and improvements
2026-05-06 16:33:02 +02:00
alex
d8d80867ce
now supports multi machine monitoring
2026-05-06 15:09:15 +02:00
alex
8f0a9650b0
refactor frontend and backend modules
2026-05-04 22:57:57 +02:00
alex
e0e461502b
ui improvements
2026-05-04 22:25:23 +02:00
alex
87149026c7
fixed bugs in auth for frontend
2026-05-04 21:48:06 +02:00
alex
ff17a98c63
fixed bugs in auth for frontend
2026-05-04 21:44:34 +02:00
alex
3ea1bab3d7
small design changes
2026-05-04 20:20:54 +02:00