feat(web): regroup admin navigation and settings into intuitive sections

Reorganize the admin sidebar into Overview / Content / Automation /
Users / System so media pipeline tools no longer hide under Users and
Settings is not buried in a seven-item Server grab-bag. Group the flat
13-tab admin settings page into Server / Media / Connections / Data
sections, and split the Integrations tab into dedicated Subtitles
(search providers + AI translation) and Watch Providers (Trakt/Simkl
OAuth) pages, leaving Integrations for one-off keys like MDBList. All
routes and ?tab= ids are unchanged so deep links keep working.

Extract the shared grouped-rail markup used by the admin sidebar, admin
settings nav, and user settings nav into a SideNav component, and
remove the orphaned admin-settings PluginsSettings page (superseded by
/admin/plugins).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Quick
2026-06-09 14:23:10 -04:00
co-authored by Claude Fable 5
parent 2c714e4ef2
commit 89f005dfa8
13 changed files with 878 additions and 1449 deletions
+13 -5
View File
@@ -54,32 +54,40 @@ function renderSidebar() {
}
describe("AdminSidebar", () => {
it("includes a Sections link in the manage navigation", () => {
it("renders the grouped navigation sections", () => {
const markup = renderSidebar();
for (const section of ["Overview", "Content", "Automation", "Users", "System"]) {
expect(markup).toContain(`>${section}<`);
}
});
it("includes a Sections link in the content navigation", () => {
const markup = renderSidebar();
expect(markup).toContain('href="/admin/sections"');
expect(markup).toContain(">Sections<");
});
it("includes a Maintenance link in the server navigation", () => {
it("includes a Maintenance link in the system navigation", () => {
const markup = renderSidebar();
expect(markup).toContain('href="/admin/maintenance"');
expect(markup).toContain(">Maintenance<");
});
it("includes a Recommendations link in the server navigation", () => {
it("includes a Recommendations link in the automation navigation", () => {
const markup = renderSidebar();
expect(markup).toContain('href="/admin/recommendations"');
expect(markup).toContain(">Recommendations<");
});
it("includes a Marker History link in the users navigation", () => {
it("includes a Markers link in the automation navigation", () => {
const markup = renderSidebar();
expect(markup).toContain('href="/admin/marker-history"');
expect(markup).toContain(">Marker History<");
expect(markup).toContain(">Markers<");
});
it("renders the build identifier in the footer", () => {