Self-hosted font, faster first paint, correct per-theme browser colour, and a longer What's new history — the default font is now bundled instead of loaded from Google Fonts, non-essential promo scripts no longer block the dashboard render, the theme-color browser/PWA chrome matches every theme, shared stylesheets are versioned from one place, and the What's new modal shows the 25 most recent releases.
Performance & privacy
- new Self-hosted Source Code Pro — the default UI font was loaded from
fonts.googleapis.com/fonts.gstatic.comon every page (a render-blocking third-party request, a privacy leak, and broken offline). It's now bundled as two variable-font woff2 subsets (latin + latin-ext, ~55 KB, covering weights 400/600/900) served same-origin, with a newstatic/css/fonts.css@font-face(font-display: swap) and a font preload. Fonts embed in the binary viago:embed. Opt-in non-default presets (JetBrains Mono, Inter, etc.) still load from Google on demand, so their CSP allowances are kept (static/fonts/,static/css/fonts.css,templates/dashboard.html,templates/config.html,templates/health.html,asset_versions.go). - fix Deferred promo scripts — eight discovery/tour promo scripts (promo-placement, promo-registry, search/grid-keyboard/g-jump/smart-collection/feature promos, tips-catalog) were render-blocking despite not being needed for first paint; they now
defer, moving ~106 KB off the critical path and dropping render-blocking scripts from 77 to 69 (templates/dashboard.html).
Theme & appearance
- fix Per-theme
theme-color— the mobile browser bar and PWA chrome were hardcoded to two colours (light vs dark), so every other theme showed the wrong colour.theme-loader.jsnow syncs the<meta name="theme-color">tag to the resolved--background-primaryon apply, on theme change, and onDOMContentLoaded; the static template value is only a first-paint fallback. Applies to dashboard, config, and health (theme-loader.js,templates/dashboard.html,templates/config.html,templates/health.html).
What's new
- new 25-release history — the What's new modal now shows the 25 most recent releases instead of 7. The newest still loads first and the rest lazy-load on scroll (each its own JSON + skeleton), so open stays fast (
whats-new-modal.js).
Dashboard
- fix Quieter status pings — a status ping to an unreachable or slow bookmark rejects at the network layer (Safari surfaces it as
TypeError: Load failed), which is an expected outcome — the bookmark is simply marked offline — but it logged viaconsole.errorand showed up as a red console error. Timeouts (AbortError) and networkTypeErrors now log viaconsole.warn;console.erroris kept only for genuinely unexpected errors. Behaviour is unchanged (status.js).
Under the hood
- fix Centralized CSS cache-busting — shared stylesheets across dashboard/config/health were linked without a
?v=token (or with different tokens per page for the same file), so releases couldn't reliably invalidate them. All are now versioned from onepageAssetVersionsfield per file, so one bump invalidates a file everywhere; no stylesheet is served unversioned on the three pages anymore (asset_versions.go,templates/dashboard.html,templates/config.html,templates/health.html). - fix Release-token test —
TestSharedAssetVersionsMatchWhatsNewStubpinned an exact dashboard release token and drifted red on each bump; it now matches the token by pattern while still failing if the token is removed (asset_versions_test.go). - new Dev Makefile —
make buildrebuilds the Docker image and brings the container online in the foreground (live logs, Ctrl-C stops); alsobuild-clean,up,down, andlogstargets. Kept offmainlike the other dev-only files, viamerge=oursin.gitattributesand the prune list inscripts/release-to-main.sh(Makefile,.gitattributes,scripts/release-to-main.sh).
Developer & docs
- fix README, MANUAL, CHANGELOG & Config Help — v2026.07.10 release notes; What's new history wording updated from 7 to 25 releases.
- fix What's new modal — v2026.07.10 JSON entry.
- fix Cache-bust —
whats-new-v138data version and2026.07-dashboard-release-v105dashboard release token;whats-new-25-visible-1modal script,ping-quiet-network-errors-1status JS,theme-color-meta-1theme JS,self-hosted-scp-1fonts, and centralized shared-CSS asset query strings.