ux(about): fold About card into the Admin Console

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 `<AboutSection>` is reused as-is — no markup changes,
the component owns its own heading so the admin renderer mounts it
without the SectionFrame wrapper.
This commit is contained in:
Marc-André Bombeck committed 2026-05-17 12:35:50 +02:00
1 parent d2bad6943c
commit 23cf9a4a78
11 files changed
+49 -22

No files matched your search

+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+4
View File
@@ -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",
+6
View File
@@ -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({
<DangerZoneSection />
</SectionFrame>
);
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 <AboutSection />;
default:
slug satisfies never;
return null;
+7
View File
@@ -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 {
+4
View File
@@ -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];
+4 -12
View File
@@ -8,7 +8,6 @@ import {
ChevronsLeft,
ChevronsRight,
Home,
Info,
Lightbulb,
LogOut,
Monitor,
@@ -144,17 +143,10 @@ function SidebarUserSection({ collapsed }: { collapsed: boolean }) {
{t("nav.notifications")}
</Link>
</DropdownMenuItem>
{/* 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`. */}
<DropdownMenuItem asChild>
<Link href="/settings/about" className="cursor-pointer">
<Info className="mr-2 h-4 w-4" />
{t("nav.about")}
</Link>
</DropdownMenuItem>
{/* 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. */}
<DropdownMenuSub>
<DropdownMenuSubTrigger>
{themeIcon}
+4 -10
View File
@@ -3,7 +3,6 @@
import {
Bell,
ChevronDown,
Info,
LogIn,
LogOut,
Monitor,
@@ -95,15 +94,10 @@ export function TopBar() {
{t("nav.notifications")}
</Link>
</DropdownMenuItem>
{/* 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. */}
<DropdownMenuItem asChild>
<Link href="/settings/about" className="cursor-pointer">
<Info className="mr-2 h-4 w-4" />
{t("nav.about")}
</Link>
</DropdownMenuItem>
{/* 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). */}
<DropdownMenuSub>
<DropdownMenuSubTrigger>
{themeIcon}