Add server-side dismiss persistence and SuperAdmin onboarding progress page

Progress widget dismiss now POSTs to Dashboard/DismissProgressWidget, writing
GuidedActivationDismissedAt to the DB so the widget stays hidden across devices
and cache clears (localStorage alone wasn't enough). BuildShopProgressWidgetAsync
suppresses the widget server-side when AllDone + dismissed.

New SuperAdmin page at /OnboardingProgress shows the activation funnel across
all tenant companies: wizard status, chosen path, milestone progress bar, key
dates (first job/quote, first invoice, workflow completed, widget dismissed),
and a status badge (Not Started / In Progress / Complete / Dismissed). Nav link
added under Users & Activity in the Platform Management sidebar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-29 09:23:20 -04:00
parent 73df72ab97
commit 8de9cd04b8
6 changed files with 311 additions and 1 deletions
@@ -38,6 +38,14 @@
dismiss.addEventListener('click', function () {
widget.style.display = 'none';
try { localStorage.setItem(DISMISSED_KEY, '1'); } catch (e) { }
// Persist server-side so dismissal survives cache clears and other devices
var token = document.querySelector('input[name="__RequestVerificationToken"]');
if (token) {
fetch('/Dashboard/DismissProgressWidget', {
method: 'POST',
headers: { 'RequestVerificationToken': token.value }
}).catch(function () {});
}
});
}
}());