Commit graph

64 commits

Author SHA1 Message Date
f5969b0001 Admin UI: manage per-app granular capabilities
- AdminRoles: capability sub-toggles under each granted app
- AdminUsers: per-app direct capability grants; role-derived
  capabilities shown read-only as "(role)"
- types: Role.capabilities + Capability interface

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:19:16 +00:00
bababbfc1a Fix dark-theme CSS variables on Roles and Users admin pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 00:31:45 +00:00
fa32ea84ee Add self-registration, role management, and department mapping UI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 00:24:05 +00:00
e9cd40c80a Add Settings admin page and settings service proxy
Wire /admin/settings route and sidebar link; proxy /settings/api/ to the
new settings service at 10.10.10.116. Admin can configure integration
credentials and manage Newbook room ordering from the portal.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 18:56:27 +00:00
affb1368ac Add category grouping to sidebar and dashboard
Sidebar now renders uncategorised apps flat and categorised apps in
collapsible accordion sections; active category stays expanded. Dashboard
groups tiles under category section headings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 18:26:09 +00:00
092c4fda31 Restyle to light content theme with Lucide icons
- index.css: light body (#f4f5f7), white cards, sidebar stays dark navy
- AppIcon.tsx: Lucide icon lookup component for app tiles and nav
- Sidebar.tsx: Lucide nav icons (LayoutGrid, Users, Activity, LogOut)
- Dashboard.tsx: white cards with shadows, coloured Lucide app icons
- AdminMonitor.tsx: light theme throughout, Lucide tab icons,
  better status colours for light backgrounds

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 18:09:51 +00:00
ead0313561 Add vite-env.d.ts so TypeScript knows about import.meta.env
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 17:52:23 +00:00
5dd471c92c Pass force=true on manual refresh to bypass server cache
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 17:50:02 +00:00
87043ba6af Make hotel name configurable via VITE_HOTEL_NAME build arg
Defaults to 'Number Four at Stow'. Replaces hardcoded 'Hotel Number Four'
and 'HNF Manage' in sidebar, login page, and browser title. Other hotels
set VITE_HOTEL_NAME in their /opt/portal/.env before rebuilding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 17:47:47 +00:00
64efa435c8 Replace Kuma iframe with live service health status tab
Uptime tab now polls /deploy/health-status (parallel HTTP checks) and
shows a status grid with response times. Removes broken Kuma sub-path
nginx locations. Auto-refreshes every 30s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 17:34:58 +00:00
b1bf0e3af1 Monitor: Updates tab with git version check and one-click deploy
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 17:04:57 +00:00
ea9dba0c58 Monitor page: Uptime Kuma iframe + deploy log; expose /deploy/ via nginx
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 15:53:05 +00:00
06182363cf Portal: render placeholder instead of recursing when embedded in an iframe
An un-routed app path falls back to serving the portal, which would otherwise
load the whole shell inside itself endlessly. Detect self-embedding and show a
'not available yet' placeholder instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 15:05:50 +00:00
b54081113b Initial commit: portal 2026-07-01 12:09:54 +00:00