The popup text now scrolls inside the card while the buttons stay at the
bottom, so phone visitors see 'Explore the dashboard' right away (it goes
first and full width on narrow screens). The card height uses dvh so the
top edge isn't cut off behind a phone's address bar.
- Status tables: the whole header (column names + filters) sticks as one
block, tucked 1px under the group header, so no gap can open between
the rows; offsets use fractional heights
- Phones/tablets: the filter panel sticks under the group header too, and
is opaque and compact (three filters per row on phones)
- Custom View: fix the group header being pushed over the column header
(it lives inside the view's own scroll box); the column header now pins
to the top of that box on desktop, and the header strip sticks on phones
- All Devices: group title is "All Devices (N)" instead of "Missing
Software", matching the page title count
- Documentation fits the window on desktop: only the article list and the
article scroll; placeholder no longer says "from the left"
- Dialogs sit above the terminal dock so it can't cover their last rows;
page bottom padding follows the dock's measured height
Sideways-scrolling tables only showed a few of the 11 columns at a time on
a phone or iPad. Below 1100px (where the nav already collapses) each row
now renders as a card: the device as the title and every other column as
a labelled line, one card per row on phones and two or more on tablets.
- web/mobile.js copies column names onto cells (data-label) for the cards
and re-applies them as the dashboard re-renders; no-op on wide screens
- Column filters fold behind a "Show filters" button with an active count
- Custom View keeps its sort/filter header as a strip of chips
- Terminal: Follow and the "your actions (simulated)" legend move into the
terminal window's title bar; tabs read "Server" / "Worker" on phones, so
LIVE, the legend and Follow are all visible on small screens
- Add the missing viewport meta tag; phones were rendering the desktop
layout at 980px and shrinking it
- Add web/mobile.css (all rules inside max-width media queries, so desktop
is unchanged):
- data tables keep readable column widths and scroll sideways in their card
- group headers wrap their copy buttons and stay put while tables scroll
- Tracked Devices cards and the Documentation sidebar stack vertically
- modals fit the screen below the fixed nav; Advanced View's three
columns stack and the dialog scrolls as one
- 16px inputs on phones so iOS doesn't zoom on focus
- Terminal bar: compact tabs and a dot-only LIVE indicator on narrow
screens, taller panel in phone landscape, tighter demo dialog
- Replace the text triangle with an SVG chevron so it centers with the label
- Make the "your actions (simulated)" legend dot the same yellow as the
markers on simulated lines
- When live worker output was held back during a visitor's simulated
cycle, print a divider before flushing it so the jump is explained
Remove all environment-specific data and make the dashboard adoptable
anywhere, then add a demo that runs the real PowerShell services.
- Strip cached device data, internal knowledge-base articles and
screenshots, server/site names and the old project notes; replace the
knowledge base with generic sample articles and diagrams
- Move every environment value into Config/usmt-dash.psd1
- Route all infrastructure access in the worker and Get-Software.ps1
through a provider (Providers/SCCM.ps1), with a config-driven asset
inventory view instead of a hard-coded custom class
- Add Providers/Demo.ps1: a deterministic simulated fleet whose
migrations progress in real time, and Demo/New-DemoData.ps1 to seed it
- Server: -Demo makes the API read-only; add get-config and get-logs;
serve static files only from web/, Documentation/ and an allowlist of
Data/ files with a path-traversal guard; gzip large responses
- Mirror both services' console output to Data/Logs via a Write-Host
proxy, and add a terminal panel to the dashboard that streams it
- Demo sandbox (web/demo/demo.js): visitor changes to tags, articles and
images are kept in the visitor's browser and echoed in the terminals;
nothing a visitor does reaches the server
- Vendor marked, highlight.js and html2pdf.js instead of loading CDNs
- Dockerfile and compose file for hosting the demo (Coolify-ready)