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. */} +
+ +

+ {t("onboarding.done.aiTitle")} +

+

+ {t("onboarding.done.aiBody")} +

+ + {t("onboarding.done.aiCta")} + +
+