Frontend-only cleanup driven by a UI tech-debt audit. No behavior changes for end users; the bundle shrinks (~51 KB removed) and the theme toggle finally works correctly.
Refactor
- Removed unused
htmx.min.js(4d27249) — was loaded synchronously frombase.htmlon every page but no template ever usedhx-*attributes. 51 KB of vendor JS for zero benefit; the<script>tag and the file itself are gone. - Split
settings.jsinto per-component modules (54bafe5) — three self-contained Alpine components extracted tosettings-notifications.js,settings-deploy.js, andsettings-apikeys.js.settings.jsis now 2651 lines (was 3048, −13%). Cross-module helpers (addDebugLog,showMessage) bridged via a smallwindow.CmSettingssurface. - Added
CertMate.htmltagged-template helper (85f743e) — each${value}interpolation is auto-escaped;CertMate.raw()opts out for pre-rendered fragments. Converts the two largestinnerHTMLsites indashboard.js(stats cards + cert table row) — removes a class of XSS-by-omission risk where a future PR could forget to callescapeHtml()on a user-provided field.
Build hygiene
- Rebuilt
tailwind.min.css(757e14d) — the bundle was months stale and missing ~128dark:*utilities. Most visible symptom: the theme toggle showed both moon and sun icons simultaneously becausedark:hidden/dark:inlinedidn't exist in the bundle. Other silently-broken classes includedsafe-area-bottomandpb-16. Runnpm run css:buildafter touching templates to keep this fresh.
Tests
- Updated
test_static_cspparametrization (33135eb) to match the new module layout: drophtmx.min.js, addsettings-*bundles.
Notes for upgraders
Pure drop-in. No config, schema, or API changes. Containers built from this tag are byte-equivalent in behavior to v2.4.1; only the served frontend assets change.
Full diff: v2.4.1...v2.4.2