mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-14 14:40:52 +00:00
chore(release): rebrand release artifacts as v1.4.14 (patch, not minor)
The v1.5.0 release was redirected to v1.4.14 because it is bugfix-heavy with only additive features, so semver-patch is the correct increment. Rename the v15-* audit notes and the v15-1 backlog accordingly, and log the docs/landing rebrand (commits 06bc616 docs, 92c6588 landing) under Phase 9 in STATE.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
badd380272
commit
f0d53fb25c
4 files changed
+125
-24
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# v1.5 Performance Audit — Production
|
||||
# v1.4.14 Performance Audit — Production
|
||||
|
||||
**Status**: phase-4 of the v1.5 marathon
|
||||
**Status**: phase-4 of the v1.4.14 marathon
|
||||
**Measured against**: `https://healthlog.bombeck.io` (`/api/version` → `1.4.13`)
|
||||
**Measured at**: `2026-05-09T14:14:48Z` → `2026-05-09T14:15:27Z`
|
||||
**Tool**: standalone Playwright + Chromium 1217 driver, `PerformanceObserver`
|
||||
@@ -98,13 +98,13 @@ dynamic-imports firing in parallel.
|
||||
|
||||
## Treemap-flavoured grouping
|
||||
|
||||
| group | KiB (uncompressed est ×3 or measured) | notes |
|
||||
| -------------------------------------------- | ------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Recharts (per page that uses it) | ~108 KiB | by far the heaviest single dep; v1.5 candidate for replacement. v1.4.6 already moved `HealthChart`/`MoodChart` to `next/dynamic`, but `/insights` still imports the Scatter primitives eagerly. |
|
||||
| Framework (Next.js + React + TanStack Query) | ~71 KiB | unavoidable baseline |
|
||||
| Radix primitives + app-router shell | ~52 KiB | unavoidable baseline |
|
||||
| Shared app code (i18n, auth-shell, layout) | ~37 KiB | unavoidable baseline |
|
||||
| Per-page app code | 13–20 KiB | within budget |
|
||||
| group | KiB (uncompressed est ×3 or measured) | notes |
|
||||
| -------------------------------------------- | ------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Recharts (per page that uses it) | ~108 KiB | by far the heaviest single dep; v1.4.14 candidate for replacement. v1.4.6 already moved `HealthChart`/`MoodChart` to `next/dynamic`, but `/insights` still imports the Scatter primitives eagerly. |
|
||||
| Framework (Next.js + React + TanStack Query) | ~71 KiB | unavoidable baseline |
|
||||
| Radix primitives + app-router shell | ~52 KiB | unavoidable baseline |
|
||||
| Shared app code (i18n, auth-shell, layout) | ~37 KiB | unavoidable baseline |
|
||||
| Per-page app code | 13–20 KiB | within budget |
|
||||
|
||||
Pages without charts (`/admin`, `/settings/integrations`) are about 132 KiB
|
||||
lighter than the chart pages, confirming Recharts is the dominant
|
||||
@@ -173,7 +173,7 @@ Two surprises:
|
||||
`withingsConnected` / `notificationsConfigured` flags. Acceptable —
|
||||
the checklist already gracefully renders unknown defaults.
|
||||
|
||||
### 3. Replace Recharts on the dashboard (L, **deferred to v1.5.1**)
|
||||
### 3. Replace Recharts on the dashboard (L, **deferred to v1.4.15**)
|
||||
|
||||
- **What**: Drop Recharts in favour of a smaller library (Visx, Chart.js
|
||||
4, or hand-rolled SVG). Recharts is ~108 KiB Brotli for a use case that
|
||||
@@ -182,8 +182,8 @@ Two surprises:
|
||||
TBT win on `/` desktop because Recharts hydration is the dominant
|
||||
longtask source.
|
||||
- **Effort**: L. New dep + every chart in `src/components/charts/` needs
|
||||
rewrite. Out of scope for v1.5.0 — track in v1.5.1 backlog.
|
||||
- **Why deferred**: hard rule "no new dependencies in v1.5".
|
||||
rewrite. Out of scope for v1.4.14 — track in v1.4.15 backlog.
|
||||
- **Why deferred**: hard rule "no new dependencies in v1.4.14".
|
||||
|
||||
### Bonus / honourable mentions
|
||||
|
||||
@@ -201,7 +201,7 @@ Local `pnpm build` cannot complete on this machine due to a Node-25
|
||||
upstream regression (`Cannot read private member #state from an object
|
||||
whose class did not declare it` in turbopack's prerender path; this is
|
||||
the same bug noted in `CLAUDE.md`'s pnpm-build entry). Wins #1 and #2
|
||||
therefore can't be re-measured against prod until v1.5.0 ships and
|
||||
therefore can't be re-measured against prod until v1.4.14 ships and
|
||||
Coolify force-pulls the new bundle. Both wins are nevertheless verified
|
||||
by static code review:
|
||||
|
||||
@@ -219,7 +219,7 @@ by static code review:
|
||||
every post-onboarding user with ≥ 5 measurements, so no UI regresses.
|
||||
`pnpm test` (95 files / 733 tests) is green after the change.
|
||||
|
||||
A re-measure after v1.5.0 ships should show:
|
||||
A re-measure after v1.4.14 ships should show:
|
||||
|
||||
- `/insights` initial JS dropping from ~419 KiB to ~310 KiB (the 108 KiB
|
||||
Recharts chunk moves out of the critical path and is only fetched if a
|
||||
@@ -1,4 +1,4 @@
|
||||
# v1.5 UX friction audit (Phase 5)
|
||||
# v1.4.14 UX friction audit (Phase 5)
|
||||
|
||||
**Date:** 2026-05-09
|
||||
**Method:** Static code walkthrough of the canonical user journey:
|
||||
@@ -10,7 +10,7 @@ already covered there; the local Node-25 build issue (documented in
|
||||
list comes from reading the rendered components and route handlers.
|
||||
|
||||
Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
**MEDIUM/LOW** parked for v1.5.1 unless a bigger v1.5 audit batches them.
|
||||
**MEDIUM/LOW** parked for v1.4.15 unless a bigger v1.4.14 audit batches them.
|
||||
|
||||
## Top friction points
|
||||
|
||||
@@ -36,7 +36,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
Users couldn't fall back to the admin/Codex provider without a
|
||||
workaround.
|
||||
- **Fixed tonight** — see commit `feat(settings): allow removing saved
|
||||
AI provider key`.
|
||||
AI provider key`.
|
||||
|
||||
### 3. **HIGH** — `/admin/users` icon-only buttons missed accessible names
|
||||
|
||||
@@ -48,7 +48,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
- **Fixed tonight** — added explicit `aria-label`, set the leading icon
|
||||
`aria-hidden`. Part of the a11y commit.
|
||||
|
||||
### 4. **HIGH** — `<PasswordInput>` toggle in admin/_shared had no label
|
||||
### 4. **HIGH** — `<PasswordInput>` toggle in admin/\_shared had no label
|
||||
|
||||
- File: `src/components/admin/_shared.tsx`.
|
||||
- Symptom: the eye/eye-off button had no `aria-label`, hitting axe-core
|
||||
@@ -68,7 +68,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
- **Fixed tonight** — `directionSentiment` prop with three buckets
|
||||
(`up-good` / `up-bad` / `neutral`). All dashboard tiles wired. See
|
||||
commit `feat(ui): trend arrow color reflects metric-specific
|
||||
direction sentiment`.
|
||||
direction sentiment`.
|
||||
|
||||
### 6. **MEDIUM** — Status-card audit-log row had an empty `<dd>`
|
||||
|
||||
@@ -93,7 +93,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
feedback BUG badge → `destructive`, "published to GitHub" badge →
|
||||
`success`, medication status (in-window → success, very-overdue →
|
||||
warning), AI section connection badges. See commit `style(ui): use
|
||||
semantic tokens for mood and feedback indicators`.
|
||||
semantic tokens for mood and feedback indicators`.
|
||||
|
||||
### 8. **LOW** — Logout from `/settings` requires going to topbar
|
||||
|
||||
@@ -103,7 +103,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
Logout, but on mobile within `/settings/*` the topbar's user-menu is
|
||||
still the only path. Not broken, but the action is two interactions
|
||||
away from settings landing.
|
||||
- **Deferred to v1.5.1** — would need a new "Sign out" surface in the
|
||||
- **Deferred to v1.4.15** — would need a new "Sign out" surface in the
|
||||
Settings shell.
|
||||
|
||||
### 9. **LOW** — Insights section nav has no `aria-label`
|
||||
@@ -113,7 +113,7 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
is rendered as `<nav>` without `aria-label`, so multiple nav landmarks
|
||||
on the page show up as "navigation, navigation, navigation" in screen
|
||||
reader landmark lists.
|
||||
- **Deferred to v1.5.1** — needs an i18n key plus a check that the same
|
||||
- **Deferred to v1.4.15** — needs an i18n key plus a check that the same
|
||||
`<nav>` doesn't already have one elsewhere on the page.
|
||||
|
||||
### 10. **LOW** — `/admin` overview "Sections" list has no aria-label
|
||||
@@ -124,9 +124,9 @@ Severity: **CRITICAL** ships tonight, **HIGH** ships tonight if scoped,
|
||||
already exists, so duplicating it as a quick-jump is fine, but the
|
||||
list could be wrapped in a `<nav aria-labelledby=...>` for parity
|
||||
with the sidebar.
|
||||
- **Deferred to v1.5.1**.
|
||||
- **Deferred to v1.4.15**.
|
||||
|
||||
## v1.5.1 backlog (from this audit)
|
||||
## v1.4.15 backlog (from this audit)
|
||||
|
||||
- Dedicated Sign-out CTA in `<SettingsShell>` mobile mode.
|
||||
- `aria-label` on `<nav>` landmarks across `/insights` and `/admin` overview.
|
||||
Reference in new issue
Block a user