- Every nav page has its own address (/tracked, /status, /devices, ...);
the logo and name go to the Overview; back/forward work.
- List filters gain an "Only ticked" mode; software columns get a one-click
"devices with only documented apps" pick and an easiest-first sort.
- Overview: the device list uses the dashboard's table header (sticky, with
Excel filters); what opened it is clearly highlighted; locations colored by
how much is done (red to green); stages read red / amber / green.
- Details: one-line title bar; presence and monitors only in Advanced View.
- Presence sweep pings only completed pairs (everything else is pinged by
the sweep itself), hourly and at midnight.
- Custom View scrollbar smaller, in the table header blue.
- Docs: no sideways scroll in the article list; no blank lines around code.
Worker: pings every tracked device on a presence sweep (hourly in business
hours plus midnight) and records last online; inventory reports whether a
device was found in AD and SCCM; monitors from WmiMonitorID; snapshots of
the last reachable state replace "Cached"; newly tracked devices are swept
and published first; totals count source devices only; per-type timing in
Worker-State.
Front end: details dialog shows presence, reasons instead of N/A,
"Waiting for worker...", monitors and snapshot times, and refreshes in
place; Custom View gains Days Offline, Last Online, Found In and monitor
columns; manual pair changes show immediately; sync dialog shows timing by
type. Custom View gets a large scrollbar; "Exactly ticked" filter.
Custom View column drag rewritten with pointer events (replacing native
drag-and-drop): grab a column by its grip or anywhere on its header (a
click still sorts); the real column slides into the slot it would land
in as a translucent striped ghost while a label follows the pointer.
Only the horizontal position decides the slot. Esc cancels; data
refreshes wait until the drop; wide tables scroll near the edges.
Filters:
- List columns (software, tags): "Has any ticked" / "Has only ticked"
toggle - e.g. devices missing only Adobe Acrobat Pro
- Space columns: filter by disk size (221 GB, 442 GB, no reading) plus a
free-space rule (any / at least N GB / less than N GB, default 20); sort
by disk size or by free space (numeric, no reading last); header clicks
cancel these sorts
- Menu controls no longer shrink when the menu is height-limited
- Fix: sorting a software column stopped its filter listing apps
individually (the sort arrow written into the header changed the label
used to recognise list columns)
- "None" (nothing missing) is pinned to the top of the value list, so the
easy devices are one click away
- Software columns get "Documented" / "Undocumented" quick picks that
tick only apps with / without a knowledge-base article; documented apps
are marked in the list
- Custom View: remove Reset Filters / Reset Sort (Clear filters and the
column menus replace them); old saved filters are cleared since nothing
else could clear them
- Custom View column drag: a ghost of the column follows the cursor, the
column being moved is dimmed, and a line shows where it will land
- Custom View header now uses the browser's sticky positioning like the
other tables, so it no longer lags or bounces while scrolling. Because a
sideways-scrolling box prevents sticky headers, the table is clipped and
shifted sideways by a scrollbar pinned to the bottom of the window
(shown only when the columns are wider than the page; trackpad,
shift+wheel and touch swipes drive it too)
- Custom View header on one line like the other tables: drag grip, name,
the combined sort/filter dropdown and copy icon (remove on hover)
- Workbench stack text boxes size to their contents on load and when the
page is shown, not only while typing
- Demo sandbox waits for the worker's first sweep after a container
restart instead of treating every device as unknown
Filters (web/excel-filter.js), modeled on Excel's AutoFilter:
- Every column header gets a dropdown: Sort A to Z / Z to A, Clear Filter
From "<column>", Search, a checkbox list of the column's values with
(Select All) and (Blanks), OK / Cancel. Values come from rows passing
the other columns' filters; filters on several columns combine. Tags
and software lists are split into individual items.
- The button shows a funnel when filtered and an arrow when sorted, and a
"Clear filters (n)" button appears beside the group's copy buttons
- Replaces the old per-column filter row (which also removes the gap
between header and filter rows); hooks the existing filter passes so
global search, counts and worker re-renders keep working
- Menus are fixed-position on <body>, so sticky headers and neighbouring
tables can't cover them; on phones they open as a bottom sheet
- Workbench stacks get the same menus (sorting done client-side)
- Custom View's filter icon opens the same menu
Layout:
- Sticky headers use separated borders so no hairline gap opens
- Phones/tablets: a sticky bar of column chips (with active counts and
"Clear all") opens the filter menus
- Custom View fills the page like the other views on desktop; it still
scrolls sideways when wide, with its header pinned under the group header
- Custom View on phones/tablets: a "Card fields" sheet to choose, order
and remove the fields shown on each card
Demo: first visit puts 6 PCs (one per migration stage) on the Workbench.