From 25d720e6e7dd0ae49713e900ab788a84ba3016e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 16 Jul 2026 19:37:14 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.28.53=20=E2=80=94=20a=20To?= =?UTF-8?q?day=20overview=20at=20the=20top=20of=20the=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bundles the daily-digest spine (a single server-built digest read from the overnight insight cache, never a fresh generation) and the Today hero that surfaces it: the health score with an honest provisional/finalised face, the day's lead read, and a short worth-a-look rail of one-tap items. The tiles and charts stay below, unchanged. The Today hero takes the promoted slot when Insights is on, so it never stacks with the legacy opt-in hero. This is the shared foundation the later daily surfaces (morning refresh, an optional daily note) build on — one digest, one card model, one design language. --- CHANGELOG.md | 14 +++++++++++++- docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- src/app/page-client.tsx | 5 +++++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9f88dd99..ccb6a7da2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,19 @@ ## [Unreleased] -## [1.28.52] — 2026-07-16 — Dashboard tiles for more of what you already track +## [1.28.53] — 2026-07-16 — A "Today" overview at the top of your dashboard + +The dashboard opens with a Today view: your health score, the day's lead read, +and a short "worth a look" list — a dose window that's open, an integration to +reconnect, a check-up coming due — each a single tap to the right place. The +familiar tiles and charts sit just below, unchanged. + +It reads the insight that's already prepared overnight, so it loads instantly +and never generates anything on open. When last night's sleep hasn't synced yet, +it says so plainly and fills in the sleep-dependent parts once the data arrives, +rather than showing a stale or empty score. This is the first piece of a single +daily view that later surfaces — a morning refresh, an optional daily note — +will all build on. The dashboard gains tiles for readings that were synced and charted but never had a place on the home strip: heart-rate variability, blood oxygen, breathing diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 84b94a40d..aec0e879c 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: HealthLog API - version: 1.28.52 + version: 1.28.53 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/package.json b/package.json index e3340ba20..2763172e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.28.52", + "version": "1.28.53", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "PolyForm-Noncommercial-1.0.0", "homepage": "https://healthlog.dev", diff --git a/public/sw.js b/public/sw.js index e55614a3e..5bcf17e98 100644 --- a/public/sw.js +++ b/public/sw.js @@ -36,7 +36,7 @@ try { // v1.4.38.4 → v1.4.42. Do not hand-edit; bump `package.json` and rebuild. const CACHE_VERSION = (typeof self !== "undefined" && self.__APP_VERSION__) || - /* @sw-version-fallback */ "v1.28.52"; + /* @sw-version-fallback */ "v1.28.53"; const STATIC_CACHE = `healthlog-static-${CACHE_VERSION}`; const PAGE_CACHE = `healthlog-pages-${CACHE_VERSION}`; // v1.18.6 — read-only data cache for a curated allowlist of safe GET `/api/*` diff --git a/src/app/page-client.tsx b/src/app/page-client.tsx index d358a5a6c..e6300180e 100644 --- a/src/app/page-client.tsx +++ b/src/app/page-client.tsx @@ -799,7 +799,12 @@ export default function DashboardPageClient() { ) : null)} + {/* The digest-driven TodayHero owns the promoted hero slot whenever + Insights is on (Marc sign-off, decision 1). The legacy opt-in + DashboardHero only shows for an Insights-disabled account, so the two + heroes never stack. */} {heroVisible && + !insightsEnabled && (primaryLoading || !heroSnapshot ? ( ) : (