diff --git a/src/pages/settings/UsersSettingsPage.tsx b/src/pages/settings/UsersSettingsPage.tsx
index 2d18213..de75c2e 100644
--- a/src/pages/settings/UsersSettingsPage.tsx
+++ b/src/pages/settings/UsersSettingsPage.tsx
@@ -1,12 +1,52 @@
+import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
-import { ArrowLeft } from "lucide-react";
+import { ArrowLeft, ListChecks } from "lucide-react";
import AccountCard from "../../components/settings/AccountCard";
import LicenseCard from "../../components/settings/LicenseCard";
import DocsContent from "../../components/settings/DocsContent";
+import { getPreference } from "../../services/userPreferenceService";
+import {
+ ONBOARDING_CHECKLIST_HIDDEN_KEY,
+ showChecklist,
+} from "../../services/onboardingService";
+import { logError } from "../../services/logService";
+
+// Getting-started checklist preference, for its re-show button (#352).
+// `dismissed` = the preference was "1" at mount, the button is offered;
+// `restored` = the button was clicked and the preference removed, so a
+// confirmation line replaces it; `shown` = nothing to offer.
+type ChecklistPreference = "unknown" | "shown" | "dismissed" | "restored";
export default function UsersSettingsPage() {
const { t } = useTranslation();
+ const [checklistPref, setChecklistPref] = useState
("unknown");
+
+ useEffect(() => {
+ let cancelled = false;
+ (async () => {
+ try {
+ const value = await getPreference(ONBOARDING_CHECKLIST_HIDDEN_KEY);
+ if (!cancelled) setChecklistPref(value === "1" ? "dismissed" : "shown");
+ } catch (e) {
+ // Informational control: without the preference, keep it out of the way.
+ if (!cancelled) setChecklistPref("shown");
+ logError("Settings: failed to read the checklist preference", e);
+ }
+ })();
+ return () => {
+ cancelled = true;
+ };
+ }, []);
+
+ const handleShowChecklist = async () => {
+ try {
+ await showChecklist();
+ setChecklistPref("restored");
+ } catch (e) {
+ logError("Settings: failed to show the checklist", e);
+ }
+ };
return (
@@ -38,6 +78,25 @@ export default function UsersSettingsPage() {
{t("settings.users.sections.userGuide")}
+ {(checklistPref === "dismissed" || checklistPref === "restored") && (
+
+
+ {t("settings.users.onboarding.label")}
+ {checklistPref === "dismissed" ? (
+
+ ) : (
+
+ {t("settings.users.onboarding.confirmation")}
+
+ )}
+
+ )}