feat(insights): add a Coach launch fallback to every empty-state sub-page and lift the CTA size

Every Insights sub-page's empty branch surfaced a single "Add
measurement" CTA and stopped there — a user with zero data had no
path to the assistant who can explain why the missing reading
matters. Mount CoachLaunchButton below the primary CTA with a
metric-specific prefill so the secondary fallback is one tap away,
and pair the change with the ctaSize="lg" prop that EmptyState picked
up in MB7 (CF-36) but never had a consumer wire — both findings hit
the same files so they fold cleanly into one change.

Covers blutdruck, gewicht, puls, stimmung, medikamente, bmi (both
the no-weight and no-height branches), and schlaf.
This commit is contained in:
Marc-André Bombeck committed 2026-05-15 21:04:13 +02:00
1 parent 815f31a321
commit b1b0b1b9b1
7 files changed
+32

No files matched your search

+4
View File
@@ -80,6 +80,7 @@ export default function InsightsBlutdruckPage() {
icon={<HeartPulse className="size-6" />}
title={t("insights.emptyState.bloodPressure.title")}
description={t("insights.emptyState.bloodPressure.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/measurements?add=BLOOD_PRESSURE">
@@ -88,6 +89,9 @@ export default function InsightsBlutdruckPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't recorded any blood pressure yet — why does it matter, and what should I know before I start?"
/>
</SubPageShell>
);
}
+8
View File
@@ -86,6 +86,7 @@ export default function InsightsBmiPage() {
icon={<Ruler className="size-6" />}
title={t("insights.emptyState.bmi.title")}
description={t("insights.emptyState.bmi.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/measurements?add=WEIGHT">
@@ -94,6 +95,9 @@ export default function InsightsBmiPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't recorded any weight yet — why does BMI matter for me, and what should I know before I start tracking it?"
/>
</SubPageShell>
);
}
@@ -105,6 +109,7 @@ export default function InsightsBmiPage() {
icon={<Ruler className="size-6" />}
title={t("insights.bmiEmptyTitle")}
description={t("insights.bmiEmptyDescription")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/settings/account">
@@ -113,6 +118,9 @@ export default function InsightsBmiPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't set my height yet — why does BMI matter, and what should I know before I configure it?"
/>
</SubPageShell>
);
}
+4
View File
@@ -74,6 +74,7 @@ export default function InsightsGewichtPage() {
icon={<Scale className="size-6" />}
title={t("insights.emptyState.weight.title")}
description={t("insights.emptyState.weight.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/measurements?add=WEIGHT">
@@ -82,6 +83,9 @@ export default function InsightsGewichtPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't recorded any weight yet — why does it matter, and what should I know before I start tracking?"
/>
</SubPageShell>
);
}
+4
View File
@@ -127,6 +127,7 @@ export default function InsightsMedikamentePage() {
icon={<Pill className="size-6" />}
title={t("insights.emptyState.medication.title")}
description={t("insights.emptyState.medication.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/medications">
@@ -135,6 +136,9 @@ export default function InsightsMedikamentePage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't added any medications yet — what should I know before I start tracking medication compliance here?"
/>
</SubPageShell>
);
}
+4
View File
@@ -90,6 +90,7 @@ export default function InsightsPulsPage() {
icon={<Heart className="size-6" />}
title={t("insights.emptyState.pulse.title")}
description={t("insights.emptyState.pulse.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/measurements?add=PULSE">
@@ -98,6 +99,9 @@ export default function InsightsPulsPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't recorded any resting pulse yet — why does it matter, and what should I know before I start?"
/>
</SubPageShell>
);
}
+4
View File
@@ -62,6 +62,7 @@ export default function InsightsSchlafPage() {
icon={<Moon className="size-6" />}
title={t("insights.emptyState.sleep.title")}
description={t("insights.emptyState.sleep.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/settings/data-sources">
@@ -70,6 +71,9 @@ export default function InsightsSchlafPage() {
</Button>
}
/>
<CoachLaunchButton
prefill="I don't have any sleep data yet — why does sleep tracking matter, and what should I know before I connect a source?"
/>
</SubPageShell>
);
}
+4
View File
@@ -70,12 +70,16 @@ export default function InsightsStimmungPage() {
icon={<Smile className="size-6" />}
title={t("insights.emptyState.mood.title")}
description={t("insights.emptyState.mood.description")}
ctaSize="lg"
action={
<Button size="sm" asChild>
<Link href="/mood">{t("insights.emptyState.mood.cta")}</Link>
</Button>
}
/>
<CoachLaunchButton
prefill="I haven't logged any mood entries yet — why does mood tracking matter, and how should I start?"
/>
</SubPageShell>
);
}