From cd816607e46e8f9b2a8f290d59a79f8d3af20ebf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?=
Date: Thu, 18 Jun 2026 19:09:12 +0200
Subject: [PATCH] feat(onboarding): surface AI-provider setup on the done step
AI Insights, Coach and the daily briefing are default-ON but need a BYOK
or local provider that onboarding never mentioned, so a fresh user met
the flagship feature as a cold error. Add an optional, skippable card to
the onboarding done step that explains what the AI does (plain-language
summaries of your readings, data stays with you) and deep-links to
Settings -> AI. Adds onboarding.done.aiTitle/aiBody/aiCta across all six
locales.
---
messages/de.json | 5 +++-
messages/en.json | 5 +++-
messages/es.json | 5 +++-
messages/fr.json | 5 +++-
messages/it.json | 5 +++-
messages/pl.json | 5 +++-
src/components/onboarding/DoneScreen.tsx | 35 +++++++++++++++++++++++-
7 files changed, 58 insertions(+), 7 deletions(-)
diff --git a/messages/de.json b/messages/de.json
index dc5188ff6..ecf2d8338 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -3626,7 +3626,10 @@
"learning": "Manche Einblicke – Glukose, Schlafrhythmus, Blutdrucktrends, Zyklus – schärfen sich in den ersten ein bis zwei Wochen, sobald sich deine Daten ansammeln. Leere Kacheln heißen jetzt nur, dass wir deine Basislinie noch lernen.",
"connectCta": "Gerät verbinden",
"logCta": "Ersten Wert eintragen",
- "importCta": "Bestehende Daten importieren"
+ "importCta": "Bestehende Daten importieren",
+ "aiTitle": "KI-Einblicke aktivieren (optional)",
+ "aiBody": "Coach, Tagesbriefing und Einschätzungen fassen deine Werte in Klartext zusammen. Dafür verbindest du deinen eigenen KI-Schlüssel (OpenAI, Anthropic) oder ein lokales Modell — deine Daten bleiben bei dir.",
+ "aiCta": "KI-Anbieter verbinden"
},
"welcomeBack": {
"title": "Willkommen zurück",
diff --git a/messages/en.json b/messages/en.json
index 2cc1234f7..63d8a76e0 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -3626,7 +3626,10 @@
"learning": "Some insights — glucose, sleep rhythm, blood-pressure trends, cycle — sharpen over the first week or two as your data builds up. Empty tiles now just mean we're still learning your baseline.",
"connectCta": "Connect a device",
"logCta": "Log your first measurement",
- "importCta": "Import existing history"
+ "importCta": "Import existing history",
+ "aiTitle": "Turn on AI Insights (optional)",
+ "aiBody": "Coach, the daily briefing and assessments turn your readings into plain language. For that you connect your own AI key (OpenAI, Anthropic) or a local model — your data stays with you.",
+ "aiCta": "Connect an AI provider"
},
"welcomeBack": {
"title": "Welcome back",
diff --git a/messages/es.json b/messages/es.json
index 649638cc1..fe84dfe60 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -3626,7 +3626,10 @@
"learning": "Algunas conclusiones —glucosa, ritmo de sueño, tendencias de presión arterial, ciclo— se afinan durante la primera semana o dos a medida que se acumulan tus datos. Las casillas vacías ahora solo significan que aún estamos aprendiendo tu línea base.",
"connectCta": "Conectar un dispositivo",
"logCta": "Registra tu primera medición",
- "importCta": "Importar historial existente"
+ "importCta": "Importar historial existente",
+ "aiTitle": "Activar Insights con IA (opcional)",
+ "aiBody": "El coach, el briefing diario y las valoraciones convierten tus lecturas en lenguaje claro. Para ello conectas tu propia clave de IA (OpenAI, Anthropic) o un modelo local: tus datos siguen siendo tuyos.",
+ "aiCta": "Conectar un proveedor de IA"
},
"welcomeBack": {
"title": "Bienvenido de nuevo",
diff --git a/messages/fr.json b/messages/fr.json
index 9fe484ea4..fd10e6d92 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -3626,7 +3626,10 @@
"learning": "Certaines analyses — glycémie, rythme de sommeil, tendances de tension, cycle — s'affinent au cours de la première semaine ou deux à mesure que vos données s'accumulent. Des tuiles vides signifient simplement que nous apprenons encore votre référence.",
"connectCta": "Connecter un appareil",
"logCta": "Enregistrez votre première mesure",
- "importCta": "Importer un historique existant"
+ "importCta": "Importer un historique existant",
+ "aiTitle": "Activer les Insights IA (facultatif)",
+ "aiBody": "Le coach, le briefing quotidien et les évaluations traduisent tes mesures en langage clair. Pour cela, connecte ta propre clé IA (OpenAI, Anthropic) ou un modèle local — tes données restent chez toi.",
+ "aiCta": "Connecter un fournisseur d'IA"
},
"welcomeBack": {
"title": "Bon retour",
diff --git a/messages/it.json b/messages/it.json
index a50e007a6..841d260b7 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -3626,7 +3626,10 @@
"learning": "Alcune analisi — glicemia, ritmo del sonno, tendenze della pressione, ciclo — si affinano nella prima settimana o due man mano che i tuoi dati si accumulano. Le caselle vuote ora indicano solo che stiamo ancora imparando il tuo riferimento.",
"connectCta": "Collega un dispositivo",
"logCta": "Registra la tua prima misurazione",
- "importCta": "Importa la cronologia esistente"
+ "importCta": "Importa la cronologia esistente",
+ "aiTitle": "Attiva gli Insight IA (facoltativo)",
+ "aiBody": "Il coach, il briefing giornaliero e le valutazioni trasformano le tue misurazioni in linguaggio chiaro. Per farlo colleghi la tua chiave IA (OpenAI, Anthropic) o un modello locale: i tuoi dati restano tuoi.",
+ "aiCta": "Collega un provider IA"
},
"welcomeBack": {
"title": "Bentornato",
diff --git a/messages/pl.json b/messages/pl.json
index b3353ef57..29520337d 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -3626,7 +3626,10 @@
"learning": "Niektóre wnioski — glukoza, rytm snu, trendy ciśnienia, cykl — wyostrzają się w ciągu pierwszego tygodnia lub dwóch, w miarę gromadzenia danych. Puste kafelki oznaczają teraz tylko, że wciąż poznajemy Twój punkt odniesienia.",
"connectCta": "Połącz urządzenie",
"logCta": "Zapisz pierwszy pomiar",
- "importCta": "Importuj istniejącą historię"
+ "importCta": "Importuj istniejącą historię",
+ "aiTitle": "Włącz Insighty AI (opcjonalnie)",
+ "aiBody": "Coach, codzienny briefing i oceny zamieniają Twoje pomiary w prosty język. W tym celu łączysz własny klucz AI (OpenAI, Anthropic) lub model lokalny — Twoje dane pozostają u Ciebie.",
+ "aiCta": "Połącz dostawcę AI"
},
"welcomeBack": {
"title": "Witaj ponownie",
diff --git a/src/components/onboarding/DoneScreen.tsx b/src/components/onboarding/DoneScreen.tsx
index 9b924a123..3c6d7e01e 100644
--- a/src/components/onboarding/DoneScreen.tsx
+++ b/src/components/onboarding/DoneScreen.tsx
@@ -1,7 +1,13 @@
"use client";
import Link from "next/link";
-import { CheckCircle2, FileUp, PlusCircle, Plug } from "lucide-react";
+import {
+ CheckCircle2,
+ FileUp,
+ PlusCircle,
+ Plug,
+ Sparkles,
+} from "lucide-react";
import { Button } from "@/components/ui/button";
import { useTranslations } from "@/lib/i18n/context";
@@ -51,6 +57,33 @@ export function DoneScreen() {
+ {/* v1.18.6 — surface the AI Insights / Coach / briefing setup at
+ the highest-intent moment. The flagship feature needs a BYOK or
+ local provider that the rest of onboarding never mentions, so a
+ fresh user otherwise discovers it as a cold error. This card is
+ skippable by construction — it is an optional deep-link, not a
+ gate. */}
+