diff --git a/html/admin.html b/html/admin.html index 470e610..cb84d95 100644 --- a/html/admin.html +++ b/html/admin.html @@ -34,12 +34,12 @@ /* Every container admin.js paints a table into is a scrollport of its own, so a sticky header always has something to stick to rather than sliding up behind the app bar. Same rule as console.css's .tscroll. */ - #comments-admin, #audit-admin, #notif-box, #usage-admin, #projects-table, #defmem-table{ + #comments-admin, #audit-admin, #notif-box, #usage-admin, #activity-admin, #projects-table, #defmem-table{ overflow:auto; max-height:min(70vh,640px); overscroll-behavior:contain; } /* If admin.js wraps its table in its own .tscroll, the outer box steps aside so one table never ends up with two scrollbars. */ #comments-admin:has(.tscroll), #audit-admin:has(.tscroll), #notif-box:has(.tscroll), - #usage-admin:has(.tscroll), #projects-table:has(.tscroll), #defmem-table:has(.tscroll){ + #usage-admin:has(.tscroll), #activity-admin:has(.tscroll), #projects-table:has(.tscroll), #defmem-table:has(.tscroll){ overflow:visible; max-height:none; } /* Comment text and audit detail are the two columns you are actually here to @@ -53,7 +53,7 @@ border:1px solid var(--border-strong); border-radius:0; margin-bottom:var(--s3); } @media (max-width:900px){ - #comments-admin, #audit-admin, #notif-box, #usage-admin, #projects-table, #defmem-table{ + #comments-admin, #audit-admin, #notif-box, #usage-admin, #activity-admin, #projects-table, #defmem-table{ max-height:none; } } @@ -175,7 +175,41 @@
Click refresh to load.
- + +
+

Activity & usage

+
Who is using the suite, which tools, and how often — recorded server-side on every + sign-in and page open, kept indefinitely. Filter below, or export a CSV: raw (real usernames) for + internal use, or sanitized (each user replaced with a stable, non-reversible id) for feeding into + Power BI or another external reporting tool without carrying real identities.
+
+ + + + + + + + +
+ +
Loading…
+
+ + +
+ +
+ +

Usage logs

Engagement recorded by both tools — the work package creator and the SOP wizard — diff --git a/html/admin.js b/html/admin.js index f339bd1..e1a5934 100644 --- a/html/admin.js +++ b/html/admin.js @@ -24,6 +24,7 @@ function reveal(){ loadNotifications(); loadComments(); loadAudit(); + loadActivity(); loadUsage(); } function showDenied(){ @@ -189,6 +190,19 @@ async function loadProjects(){ banner.style.display='none'; _adminProjects = json; renderProjects(); + populateActivityProjectFilter(); +} + +// The activity project filter reuses the same project list the Projects card +// already fetched — no second /api/projects call just to fill a