From 23cf9a4a78d621762737a3f43e225abcbb40e0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 17 May 2026 12:35:50 +0200 Subject: [PATCH] ux(about): fold About card into the Admin Console MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The About surface (version + license + source links + update check) used to live as its own Settings section and the user-card dropdown exposed it from both desktop and mobile. The three cards collectively get opened once or twice a year, mostly by the operator confirming the running version against the latest release. Move the surface to `/admin/about` and drop the dropdown link from both the desktop sidebar and the mobile top-bar. The public-facing landing at `/about` (credits + MaxMind attribution) stays untouched since it's reachable without a session. The legacy `/settings/about` route still resolves so external bookmarks don't break, but is no longer surfaced in any nav. The existing `` is reused as-is — no markup changes, the component owns its own heading so the admin renderer mounts it without the SectionFrame wrapper. --- messages/de.json | 4 ++++ messages/en.json | 4 ++++ messages/es.json | 4 ++++ messages/fr.json | 4 ++++ messages/it.json | 4 ++++ messages/pl.json | 4 ++++ src/app/admin/[section]/renderer.tsx | 6 ++++++ src/components/admin/admin-shell.tsx | 7 +++++++ src/components/admin/section-slugs.ts | 4 ++++ src/components/layout/sidebar-nav.tsx | 16 ++++------------ src/components/layout/top-bar.tsx | 14 ++++---------- 11 files changed, 49 insertions(+), 22 deletions(-) diff --git a/messages/de.json b/messages/de.json index bdab5ce76..2ac02982f 100644 --- a/messages/de.json +++ b/messages/de.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Gefahrenzone", "subtitle": "Destruktive systemweite Operationen." + }, + "about": { + "title": "Über", + "subtitle": "Version, Lizenz, Quellcode und Update-Prüfung." } }, "carrier": "Anbieter", diff --git a/messages/en.json b/messages/en.json index f05009440..8c948adcd 100644 --- a/messages/en.json +++ b/messages/en.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Danger Zone", "subtitle": "Destructive system-wide operations." + }, + "about": { + "title": "About", + "subtitle": "Version, license, source, and update check." } }, "carrier": "Carrier", diff --git a/messages/es.json b/messages/es.json index 04805cd8c..79fe0560b 100644 --- a/messages/es.json +++ b/messages/es.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Danger Zone", "subtitle": "Destructive system-wide operations." + }, + "about": { + "title": "About", + "subtitle": "Version, license, source, and update check." } }, "carrier": "Operador", diff --git a/messages/fr.json b/messages/fr.json index 8afaf44e1..b73b6cd22 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Danger Zone", "subtitle": "Destructive system-wide operations." + }, + "about": { + "title": "About", + "subtitle": "Version, license, source, and update check." } }, "carrier": "Opérateur", diff --git a/messages/it.json b/messages/it.json index 5485270fa..fa665b2ce 100644 --- a/messages/it.json +++ b/messages/it.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Danger Zone", "subtitle": "Destructive system-wide operations." + }, + "about": { + "title": "About", + "subtitle": "Version, license, source, and update check." } }, "carrier": "Operatore", diff --git a/messages/pl.json b/messages/pl.json index 89e6390c5..b17f4c127 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -2438,6 +2438,10 @@ "danger-zone": { "title": "Danger Zone", "subtitle": "Destructive system-wide operations." + }, + "about": { + "title": "About", + "subtitle": "Version, license, source, and update check." } }, "carrier": "Operator", diff --git a/src/app/admin/[section]/renderer.tsx b/src/app/admin/[section]/renderer.tsx index dd22db0bc..304cbf512 100644 --- a/src/app/admin/[section]/renderer.tsx +++ b/src/app/admin/[section]/renderer.tsx @@ -16,6 +16,7 @@ import type { JSX } from "react"; import { useAuth } from "@/hooks/use-auth"; import { useTranslations } from "@/lib/i18n/context"; +import { AboutSection } from "@/components/settings/about-section"; import { AiQualitySection } from "@/components/admin/ai-quality-section"; import { AssistantSection } from "@/components/admin/assistant-section"; import { CoachFeedbackSection } from "@/components/admin/coach-feedback-section"; @@ -185,6 +186,11 @@ export function AdminSectionRenderer({ ); + case "about": + // v1.4.36 W4e — About section reused as-is from the settings + // surface. The component owns its own heading + cards layout + // so no SectionFrame wrapper. + return ; default: slug satisfies never; return null; diff --git a/src/components/admin/admin-shell.tsx b/src/components/admin/admin-shell.tsx index 65a764c62..d0da17c02 100644 --- a/src/components/admin/admin-shell.tsx +++ b/src/components/admin/admin-shell.tsx @@ -21,6 +21,7 @@ import { Bell, Database, FileText, + Info, KeyRound, Inbox, Plug, @@ -125,6 +126,12 @@ export const ADMIN_SECTIONS: readonly AdminSection[] = [ titleKey: "admin.section.danger-zone.title", icon: ShieldAlert, }, + // v1.4.36 W4e — About / version / update check folded into Admin. + { + slug: "about", + titleKey: "admin.section.about.title", + icon: Info, + }, ] as const; export interface AdminShellProps { diff --git a/src/components/admin/section-slugs.ts b/src/components/admin/section-slugs.ts index 449a07560..d5a20e925 100644 --- a/src/components/admin/section-slugs.ts +++ b/src/components/admin/section-slugs.ts @@ -29,6 +29,10 @@ export const ADMIN_SECTION_SLUGS = [ "app-logs", "backups", "danger-zone", + // v1.4.36 W4e — About / version / update check folded into Admin + // Console. Lives at /admin/about; the legacy /settings/about route + // is unlinked from the user-card dropdown. + "about", ] as const; export type AdminSectionSlug = (typeof ADMIN_SECTION_SLUGS)[number]; diff --git a/src/components/layout/sidebar-nav.tsx b/src/components/layout/sidebar-nav.tsx index 9da47bdc9..8a4249bc0 100644 --- a/src/components/layout/sidebar-nav.tsx +++ b/src/components/layout/sidebar-nav.tsx @@ -8,7 +8,6 @@ import { ChevronsLeft, ChevronsRight, Home, - Info, Lightbulb, LogOut, Monitor, @@ -144,17 +143,10 @@ function SidebarUserSection({ collapsed }: { collapsed: boolean }) { {t("nav.notifications")} - {/* v1.4.33 IW7 — "About" used to live as its own Settings - section but the three small cards inside (identity / links / - update check) collectively get read once or twice a year, so - the top-level slot has been collapsed into this dropdown. The - route stays alive at `/settings/about`. */} - - - - {t("nav.about")} - - + {/* v1.4.36 W4e — About moved into the Admin Console + (`/admin/about`). Admins reach it through the Admin sidebar + and the mobile section strip; non-admin users see the + public `/about` landing instead. */} {themeIcon} diff --git a/src/components/layout/top-bar.tsx b/src/components/layout/top-bar.tsx index 3564e19a3..aa9071014 100644 --- a/src/components/layout/top-bar.tsx +++ b/src/components/layout/top-bar.tsx @@ -3,7 +3,6 @@ import { Bell, ChevronDown, - Info, LogIn, LogOut, Monitor, @@ -95,15 +94,10 @@ export function TopBar() { {t("nav.notifications")} - {/* v1.4.33 IW7 — "About" folded out of Settings into the - user-card dropdown; mobile dropdown mirrors the - desktop sidebar so the entry shows up here too. */} - - - - {t("nav.about")} - - + {/* v1.4.36 W4e — About moved into the Admin Console + (`/admin/about`). The dropdown entry was redundant + for the small audience that still reaches it (admins + only, on the order of once or twice a year). */} {themeIcon}