github MBombeck/HealthLog v1.4.36
v1.4.36 — Perf, charts, AI payload trim, UX punch

latest release: v1.4.37
2 hours ago

Highlights

Builds on the v1.4.35 rollup foundation. The aggregator hot paths now skip the legacy live COUNT/MIN/MAX/AVG query whenever every logged type has DAY-bucket coverage, daily chart fetches opt into reading from measurement_rollups, and the Insights feature extractor swaps raw measurements for the same bucket source — capping the prompt payload in the low hundreds of kB rather than double-digit MB for power users. The Insights page itself stops blocking the entire shell on /api/insights/comprehensive, so each section renders its own skeleton and fills in independently.

On top of the perf wave: chart slot heights pinned to kill Recharts' width=-1 height=-1 warning and the matching CLS, a tri-state trend annotation contract that ends the cold-mount "more data needed" flash, medication intake history restored on the detail page, About card folded into the Admin Console with an auto-checking update badge in place of the manual button, cumulative-metric tiles (Steps + four others) reading the day's running sum, and an IP-whois fallback that surfaces city + country when the carrier lookup misses.

Performance

  • Heavy-aggregate skip on the rollup-fresh + fully-covered path in comprehensive-aggregator and summaries-slice via a per-type coverage probe.
  • Daily chart fetches opt into rollup buckets via GET /api/measurements?aggregate=daily&source=rollup.
  • /api/insights/targets cached in the analytics LRU (60 s TTL, per-user, evicted on mutation).
  • Insights page swaps the page-level isLoading gate for per-section early-skeleton paint.

AI

  • extractFeatures reads measurement_rollups DAY buckets; hard 5 MB FEATURES_MAX_BYTES guard with two-step downgrade (drop raw → drop optional sections) before a 422 with insights_payload_too_large.
  • Coach settings sheet gained medications + anthropometrics exclusion switches, mirrored onto a new users.insights_exclude_metrics column so Coach and Insights share a single privacy contract.
  • compactSections drops empty data blocks from Coach and Insights prompts.

Charts + Insights UI

  • trends-row-chart-slot pinned to h-[140px]; Recharts width/height warning gone.
  • ChartSkeleton mini variant matches the loaded chart's wrapper.
  • TrendAnnotation tri-state contract (pending / needs_data / generated) ends the cold-mount and regenerate-in-flight empty-hint flash.

UX

  • <IntakeHistoryListV2> restored on the medication detail page; server-paginated, sortable, mounted for every medication kind.
  • Settings + Admin tab-strip scroll switched from inline: "center" to inline: "start".
  • Steps, Active Energy, Walking/Running Distance, Flights Climbed and Time in Daylight tiles read the day's cumulative sum via pickCumulativeDaySum.
  • Insights nav strict-gate flipped — types without measurements no longer appear in the strip.
  • "Über HealthLog" moved into the Admin Console (/admin/about); the public marketing /about page is untouched.
  • Manual "Update prüfen" button retired in favour of a 44 px, focus-ringed, aria-label-bearing auto-check badge.
  • IP-whois fallback surfaces city + country with "Carrier nicht verfügbar" / "Carrier unavailable" when the upstream ASN lookup misses.

Accessibility

  • IntakeHistoryListV2 sort headers and pagination buttons clear the 44 px touch floor and carry focus-visible:ring.
  • UpdateBadge ditto, with a real aria-label and sr-only tag exposure.

Schema

  • Additive users.insights_exclude_metrics (String[] NOT NULL DEFAULT '{}'); migration 0068_v1436_insights_exclude_metrics is idempotent under re-run.

Operator notes

  • Coolify auto-deploys main on tag push (working since v1.4.34.2). The first webhook may pull a stale :latest; trigger a redeploy after the docker-publish workflow completes if so.
  • Marc-account migration path is no-op: rollups are already populated, so the per-type coverage probe takes the rollup-fast path immediately.
  • See CHANGELOG.md for the full per-area breakdown including the carry-over backlog for v1.4.37.

Don't miss a new HealthLog release

NewReleases is sending notifications on new releases.