Health icon & counter, aligned page chrome, and Stats inbox insights — the dashboard header health link becomes a heartbeat icon with an inline counter (on by default), the dashboard reclaims side whitespace before shrinking columns, config and health share the dashboard's content box (including wide screens), the config header health link now matches the dashboard icon treatment, and Stats gains an Inbox section plus expand/collapse-all with remembered state.
Dashboard header
- new Health as an icon with a counter — the health text link is now an inline SVG heartbeat icon with an inline pill counter (broken/warning bookmark count), styled to match the inbox tab; hidden when healthy, red for broken and amber for warnings (
templates/dashboard.html,dashboard-visual.js,dashboard.css). - new Health link on by default —
showHealthDashboardnow defaults to true for fresh installs and for existing settings missing the key; users who explicitly turned it off keep their choice (models.go,settings_defaults_test.go, frontend defaults). - fix Header spacing — tightened the inbox↔health icon gap so they read as one group, and added an icon-width gap between the page tabs and the inbox tab (
dashboard-inbox.css,dashboard.css).
Dashboard layout
- fix Roomier side margins — the side margin was a percentage of the window (
min(88%, 1600px)), so narrowing the window squeezed the columns first while wide margins stayed. It's now a fixed clamped buffer (clamp(2rem, 6vw, 8rem)) that shrinks as the window narrows, with roomier margins on wide screens so the columns sit closer together. The same content box is shared by the config and health pages so their headers and nav line up (dashboard.css,responsive.css,config-general.css,config-save-sticky.css,health.css). - fix Status row highlight — online/offline/checking bookmark rows now get a consistent left inset (
--bookmark-row-start-pad) and rounded corners, plus extra spacing so the left status bar no longer crowds favicons (dashboard.css,dashboard-bookmark-row.css).
Config → Stats
- new Inbox statistics — a new Inbox section (after Finders) shows current inbox health (total/unread, oldest unread, unread > 30d backlog, tags/notes/previews) and lifetime triage throughput: added / converted / discarded counts, average time to triage, a conversion coverage bar, an added-vs-triaged trend sparkline, and source/domain tables — backed by a durable
data/inbox-stats.jsonaggregate and a new/api/inbox-statsroute (inbox_stats.go,inbox_handlers.go,config-stats.js,templates/config.html, EN/NL/DE/FR). - new Expand all / Collapse all — Stats and Help gained the same Expand all sections / Collapse all sections buttons as General, in the same style and place (
config-stats.js,config-help-search.js,templates/config.html). - new Remembered section state — Stats sections start collapsed and remember which ones you expand across visits via
localStorage(config-stats.js).
Config & health chrome
- fix Aligned margins across pages — config and health now share the dashboard's
1600px+clamp()content box and reset the UA default 8px body margin, so their header and nav links line up with the dashboard and no longer jump when switching pages (config-general.css,config-save-sticky.css,health.css,responsive.css). - fix Config shell alignment on wide screens — above
1600px, config no longer drifts narrower than dashboard/health; the config page shell now uses the same max-width + auto-margin model so all three pages align at every viewport width (config-general.css,responsive.css). - fix Config header icon parity — config header actions now use the dashboard-style heartbeat icon link and count pill styling for health, keep only the health icon + back-to-dashboard link, and drop the extra inbox pill from config header chrome (
templates/config.html,config-general.css,config-setup.js,config.css). - fix Config help titles show & — plain-text help titles like Health & status and Tags & collections rendered a literal
&because they're set viatextContent;&replaced with&in the plain (no-markup) locale strings across EN/NL/DE/FR (markup-bearing strings keep&).
Config fixes
- fix Columns-per-row input — clearing the columns field no longer stores
NaN/null(which blanked the dashboard column layout); the live handler now guards and clamps to 1–6 like the save path (config-settings.js). - fix Device-settings parse crash — the
getDeviceSettingslocalStorage fallback is wrapped in try/catch so corrupt JSON can't crash config init (config-storage.js). - fix Sturdier save flow —
saveChangespicks the right dashboard sync signal from the change scope (structure vs settings) to avoid a redundant full reload, defers clearing the device-local cache until all saves succeed, and read methods surface a clear error on a non-OK response instead of an obscure parse error (config-persistence.js,config-data.js). - fix Safe i18n rendering —
applyTranslationsusestextContentfor plain labels and onlyinnerHTMLwhen a translation carries markup, so a stray<can't be interpreted as HTML while<kbd>/<strong>still render (config-language.js).
Developer & docs
- fix README, MANUAL, CHANGELOG & Config Help — v2026.07.09 release notes.
- fix What's new modal — v2026.07.09 JSON entry.
- fix Cache-bust —
whats-new-v136data version and2026.07-dashboard-release-v104dashboard release token;health-icon-badge-2,inbox-tab-gap-1,stats-expand-collapse-all-1,help-expand-collapse-all-1,stats-collapse-persist-1,wider-margins-1,config-shell-align-1, andconfig-header-icon-links-2asset query strings.