- {config?.claudeApiConfigured ?
:
}
+ {config === undefined ? (
+ // Hold a stable, empty frame until config resolves — avoids flashing the
+ // setup empty-state for a beat before the chat mounts.
+
+ ) : config?.claudeApiConfigured ? (
+
+ ) : (
+
+ )}
);
}
diff --git a/apps/web/src/pages/DashboardPage.tsx b/apps/web/src/pages/DashboardPage.tsx
index cbc93e8..8343b1b 100644
--- a/apps/web/src/pages/DashboardPage.tsx
+++ b/apps/web/src/pages/DashboardPage.tsx
@@ -108,6 +108,7 @@ export default function DashboardPage() {
// hrv series (oldest → newest)
const hrvSeries = [...daily].reverse().map((d) => d.fitbit?.hrv ?? d.consensus.hrv ?? null);
+ const hrvDates = [...daily].reverse().map((d) => d.date);
// sleep stages (latest night)
const sd = daily.find((d) => d.fitbit?.sleepHours != null)?.fitbit;
@@ -225,7 +226,14 @@ export default function DashboardPage() {