From 5d82984d7ddb830a6c5f6e383dc5552e68e19ed4 Mon Sep 17 00:00:00 2001 From: tbeaumont79 Date: Wed, 10 Jun 2026 19:32:05 +0200 Subject: [PATCH] =?UTF-8?q?feat(ui):=20landing=20full-bleed=20+=20formulai?= =?UTF-8?q?re=20magic-link=20r=C3=A9ellement=20branch=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Landing : les fonds de sections occupent désormais toute la largeur de l'écran (le layout ne contraint plus
; chaque page app pose son propre conteneur mx-auto max-w-6xl px-6 py-10). Conteneurs internes de la landing élargis (max-w-7xl), footer dupliqué supprimé (celui du layout fait foi),
imbriqué corrigé (page → div). MagicLinkForm : le formulaire de la landing affichait « lien envoyé » sans jamais rien envoyer (prop onSubmit jamais branchée). Il appelle désormais useAuth().signIn par défaut — un vrai magic-link part du hero et du CTA final. Connexion : encart dev-only expliquant que sans SMTP le lien s'affiche dans le terminal du serveur (évite de chercher un email qui n'arrive pas). Vérifié sur build de prod : fonds bord à bord, formulaire landing → lien loggé serveur, écran « C'est envoyé ». Lint, typecheck, 56 tests OK. Co-Authored-By: Claude Fable 5 --- apps/app/components/landing/MagicLinkForm.vue | 17 ++++++--- apps/app/layouts/default.vue | 7 +++- apps/app/pages/connexion.vue | 13 +++++++ apps/app/pages/cv/demo.vue | 3 +- apps/app/pages/index.vue | 37 +++++-------------- apps/app/pages/profil.vue | 2 +- apps/app/pages/ui.vue | 2 +- 7 files changed, 44 insertions(+), 37 deletions(-) diff --git a/apps/app/components/landing/MagicLinkForm.vue b/apps/app/components/landing/MagicLinkForm.vue index 12358b0..413fcb3 100644 --- a/apps/app/components/landing/MagicLinkForm.vue +++ b/apps/app/components/landing/MagicLinkForm.vue @@ -10,16 +10,16 @@ import { useLanding } from '~/composables/useLanding' * Monté plusieurs fois sur la landing (hero + CTA final) : les ids champ/erreur * sont générés via useId() pour rester uniques dans le DOM (a11y). * - * Périmètre de CETTE issue = l'UI du flux. L'envoi réel du lien (génération de - * token + e-mail) relève du WS auth/magic-link : on l'appelle via la prop - * `onSubmit`, à brancher sur l'endpoint quand il existera. Par défaut le flux - * affiche l'écran de confirmation sans prétendre avoir envoyé un e-mail. + * L'envoi réel passe par useAuth().signIn (Better Auth magic-link). La prop + * `onSubmit` reste disponible pour surcharger le comportement (tests, variantes). */ const props = defineProps<{ - /** Brancher l'envoi réel du lien ici (WS auth). */ + /** Surcharge de l'envoi (défaut : useAuth().signIn). */ onSubmit?: (email: string) => Promise }>() +const { signIn } = useAuth() + const { m } = useLanding() const uid = useId() @@ -43,7 +43,12 @@ async function submit() { } status.value = 'pending' try { - await props.onSubmit?.(value) + if (props.onSubmit) { + await props.onSubmit(value) + } else { + const ok = await signIn(value) + if (!ok) throw new Error('signIn failed') + } status.value = 'sent' } catch { status.value = 'idle' diff --git a/apps/app/layouts/default.vue b/apps/app/layouts/default.vue index 4da8f7a..f9d5f37 100644 --- a/apps/app/layouts/default.vue +++ b/apps/app/layouts/default.vue @@ -188,7 +188,12 @@ const year = new Date().getFullYear() -
+ +
diff --git a/apps/app/pages/connexion.vue b/apps/app/pages/connexion.vue index 48593cb..8251367 100644 --- a/apps/app/pages/connexion.vue +++ b/apps/app/pages/connexion.vue @@ -10,6 +10,10 @@ const toast = useToast() const email = ref('') const sent = ref(false) +// En dev sans SMTP, l'email n'est jamais envoyé : le lien magique est loggé +// dans le terminal du serveur. On l'affiche pour ne pas chercher en vain. +const isDev = import.meta.dev + async function handleSubmit() { if (!email.value) return const ok = await signIn(email.value) @@ -88,6 +92,15 @@ function changeEmail() {

+

+ Mode dev sans SMTP : aucun email n'est réellement envoyé. Le lien de connexion est affiché + dans le terminal du serveur ([DEV] Magic-link…) — copie-le + dans le navigateur. +

+
Renvoyer le lien diff --git a/apps/app/pages/cv/demo.vue b/apps/app/pages/cv/demo.vue index 10f2500..e6d5fc9 100644 --- a/apps/app/pages/cv/demo.vue +++ b/apps/app/pages/cv/demo.vue @@ -127,13 +127,14 @@ async function handleExport() {