Aller au contenu
Produit · 6 min de lecture

WITHMIA v1.0.6 — Une transition parfaite

Fini le double chargement de page après la connexion : une transition visuelle soignée en overlay inline, un mode sombre complet dans l'onboarding et la correction définitive de la boucle de redirection à l'authentification.

É

Équipe WITHMIA

WITHMIA

La v1.0.5 a sécurisé l’infrastructure avec les tests, la CI/CD et la facturation. La v1.0.6 s’attaque à ce que l’on voit et ressent vraiment : une connexion sans interruption, sans flash blanc, sans rechargement visible. C’est un changement d’architecture qui supprime un chargement complet de l’application et le remplace par une transition visuelle fluide.

Le problème : tout charger deux fois après la connexion

Jusqu’à la v1.0.5, le parcours d’authentification avec Google se déroulait ainsi :

  1. L’utilisateur clique sur « Se connecter avec Google »
  2. Google authentifie et renvoie vers /auth/google
  3. Le serveur rend auth-loading.blade.php — une page intermédiaire qui affiche la vidéo de transition
  4. Cette page charge l’application React dans une iframe pour stocker le token
  5. Puis elle exécute top.location.replace() vers le tableau de bord
  6. Le navigateur charge l’application entière une seconde fois

Résultat : un flash blanc bien visible entre la transition et le tableau de bord. L’application se chargeait deux fois à chaque connexion.

La solution : redirection directe + overlay inline

La v1.0.6 supprime totalement auth-loading.blade.php et remplace tout le parcours par une conception à chargement unique :

Le nouveau parcours

  1. L’utilisateur clique sur « Se connecter avec Google »
  2. Google authentifie et renvoie vers /auth/google
  3. Le serveur effectue une redirect() directe vers le tableau de bord avec ?transition=1&auth_token=...
  4. app.blade.php détecte ?transition=1 et affiche l’overlay de transition en inline au-dessus de <div id="app">
  5. React se monte en dessous de l’overlay
  6. Dès que React est prêt, l’overlay disparaît en fondu (1,5 s minimum à l’écran + 0,6 s d’animation)

Un seul chargement de page. Zéro flash blanc. Une transition soignée.

Ce qui change techniquement

ComposantAvant (v1.0.5)Maintenant (v1.0.6)
GoogleAuthControllerreturn view('auth-loading', ...)return redirect($url . '&transition=1')
OnboardingControllerreturn view('auth-loading', ...)return redirect($url . '&transition=1')
routes/web.phpRend auth-loading comme vueRedirection directe avec ?transition=1
OverlayPage séparée (auth-loading.blade.php)Inline dans app.blade.php avec du CSS
Chargements de page2 (iframe + replace)1 (redirection directe)

Mode sombre complet dans l’onboarding

Le parcours d’onboarding respecte désormais entièrement le mode sombre du système :

  • Détection automatique — lecture de prefers-color-scheme: dark du système d’exploitation
  • Persistance — si une préférence est déjà enregistrée dans le localStorage, c’est elle qui prime
  • Fond et texte — tout l’écran d’onboarding s’adapte : fonds #0F0F0F, textes clairs, champs aux bordures discrètes
  • Sans flash blanc<html> reçoit data-theme="dark" avant même que React ne rende quoi que ce soit

Correction de la boucle de redirection à l’authentification

Nous avons identifié et corrigé plusieurs causes d’une boucle de redirection qui touchait certains utilisateurs :

Causes identifiées et corrigées

  1. Closures paresseuses dans HandleInertiaRequests — elles étaient évaluées même lorsque l’utilisateur n’était pas authentifié, provoquant des erreurs qui déclenchaient des redirections
  2. AuthenticationException avec 302 — remplacée par une redirection propre au lieu d’une réponse qu’Inertia ne savait pas traiter
  3. Middleware auth.clean supprimé — il interférait avec la gestion des tokens Railway
  4. Railway auth sur les routes API — ajout de railway.auth aux routes utilisateur de l’API pour que le token fonctionne correctement
  5. auth_token conservé dans l’URL — nous avons cessé de retirer auth_token de l’URL trop tôt, ce qui permet à l’application de le récupérer correctement

L’overlay de transition : une finition professionnelle

L’overlay inline dans app.blade.php reproduit exactement le design de l’ancien auth-loading :

  • Vidéo d’arrière-plan — le même MP4 corporate, muted + autoplay + loop
  • Dégradé adaptatif — un linear-gradient qui bascule entre mode clair et mode sombre
  • Signature « WITH YOU, WITHMIA » — large interlettrage, graisse semibold, avec un dégradé d’opacité
  • Timing intelligent — 1,5 seconde minimum à l’écran (le temps que suit window.__loadingStart), puis un fondu de 0,6 seconde avec pointer-events: none pour ne jamais bloquer l’interaction
  • Nettoyage de l’URLhistory.replaceState() retire transition et auth_token de l’URL après le montage

Prise en charge du mode sombre dans l’overlay

/* Light mode */
background: linear-gradient(135deg, #f8f9fa 0%, #e8f4f8 50%, #f0f7ff 100%);

/* Dark mode (prefers-color-scheme: dark ou data-theme="dark") */
background: linear-gradient(135deg, #0a0a0a 0%, #111827 50%, #0f172a 100%);
color: white;

Correctif : une source de vérité unique pour le thème

Nous avons découvert que deux systèmes de thème se disputaient le contrôle de la classe dark sur <html> :

  1. WITHMIA ThemeContext — lit withmia_theme_mode dans le localStorage (le vrai système, synchronisé avec la base de données)
  2. Laravel starter kit (initializeTheme) — lit appearance dans le localStorage, dont la valeur par défaut était 'system'

Si l’utilisateur avait son thème WITHMIA sur light mais son système d’exploitation en mode sombre, initializeTheme() ajoutait la classe dark à <html> après que l’overlay se soit affiché en mode clair → un flash sombre par-dessus le clair.

La solution

initializeTheme() lit désormais withmia_theme_mode comme source de vérité principale, avec repli sur appearance puis sur 'light'. Le gestionnaire handleSystemThemeChange a également été mis à jour.

// Avant
const savedAppearance = (localStorage.getItem('appearance') as Appearance) || 'system';

// Maintenant
const savedAppearance = (localStorage.getItem('withmia_theme_mode') as Appearance)
    || (localStorage.getItem('appearance') as Appearance)
    || 'light';

Ménage : auth-loading supprimé

Le fichier auth-loading.blade.php (216 lignes) a été supprimé du codebase. Plus aucun contrôleur, route ou vue n’y fait référence.

La route /auth-loading existe toujours comme redirection de compatibilité — si quelqu’un a l’URL en cache, il est simplement redirigé vers sa destination avec &transition=1.

Récapitulatif technique

ChangementFichiersImpact
Supprimer le double chargementGoogleAuthController, OnboardingController, routes/web.phpview()redirect()
Overlay inlineapp.blade.phpDétection de ?transition=1, overlay CSS avec vidéo
Fondu de sortie côté Reactapp.tsx1,5 s minimum + 0,6 s d’animation, nettoyage de l’URL
Mode sombre dans l’onboardingonboarding.tsxRespecte prefers-color-scheme et le localStorage
Correctif boucle de redirectionHandleInertiaRequests, routes/web.php, GoogleAuthController5 correctifs indépendants
Types de retourGoogleAuthController, OnboardingControllerRedirectResponse en type de retour
Source de vérité du thèmeuse-appearance.tsxwithmia_theme_mode comme source principale
Ménageauth-loading.blade.phpFichier supprimé (-216 lignes)

La suite

L’expérience de connexion étant peaufinée, le cap revient aux fonctionnalités produit :

  • PWA / application mobile — la priorité pour une Amérique latine mobile-first
  • Enquêtes CSAT — la satisfaction client intégrée à la conversation
  • AI resolution analytics — les indicateurs de résolution par l’IA
  • Diffusion WhatsApp — les campagnes de masse

WITHMIA v1.0.6, c’est la version qui rend parfaites les 3 premières secondes de votre expérience. Une connexion, un chargement, zéro interruption.

Ouvrir WITHMIA → Essayez gratuitement sur app.withmia.com →

Étiquettes

mise à jour v1.0.6 produit UX mode sombre authentification transition performance thème

Partager

Commentaires

Restez respectueux. Votre e-mail ne sera pas publié.

Articles liés

Envie de mettre ça en place dans votre entreprise ?

Essayez gratuitement pendant 14 jours. Sans carte bancaire.

Essayer 14 jours gratuitement