Zum Inhalt springen
Produkt · 6 Min. Lesezeit

WITHMIA v1.0.6 — Der perfekte Übergang

Das doppelte Laden nach dem Login ist Geschichte: ein sauberer visueller Übergang als Inline-Overlay, vollständiger Dark Mode im Onboarding und die endgültige Behebung der Redirect-Schleife bei der Anmeldung.

W

WITHMIA-Team

WITHMIA

Die v1.0.5 hat die Infrastruktur mit Tests, CI/CD und Abrechnung abgesichert. Die v1.0.6 kümmert sich um das, was man tatsächlich sieht und spürt: eine Anmeldung ohne Unterbrechungen, ohne weiße Blitze, ohne sichtbare Reloads. Eine architektonische Änderung, die einen kompletten Ladevorgang der Anwendung streicht und durch einen flüssigen visuellen Übergang ersetzt.

Das Problem: nach dem Login wurde alles zweimal geladen

Bis zur v1.0.5 lief die Authentifizierung mit Google so ab:

  1. Die Person klickt auf „Mit Google anmelden”
  2. Google authentifiziert und leitet zurück auf /auth/google
  3. Der Server rendert auth-loading.blade.php — eine Zwischenseite mit dem Übergangsvideo
  4. Diese Seite lädt die React-App in einem iframe, um das Token zu speichern
  5. Danach führt sie top.location.replace() Richtung Dashboard aus
  6. Der Browser lädt die komplette App ein zweites Mal

Das Ergebnis: ein sichtbarer weißer Blitz zwischen Übergang und Dashboard. Die App wurde bei jedem Login zweimal geladen.

Die Lösung: direkter Redirect + Inline-Overlay

Die v1.0.6 entfernt auth-loading.blade.php vollständig und ersetzt den gesamten Ablauf durch ein Design mit nur einem Ladevorgang:

Der neue Ablauf

  1. Die Person klickt auf „Mit Google anmelden”
  2. Google authentifiziert und leitet zurück auf /auth/google
  3. Der Server macht einen direkten redirect() zum Dashboard mit ?transition=1&auth_token=...
  4. app.blade.php erkennt ?transition=1 und rendert das Übergangs-Overlay inline über <div id="app">
  5. React mountet unterhalb des Overlays
  6. Sobald React bereit ist, blendet das Overlay sanft aus (mindestens 1,5 s sichtbar + 0,6 s Animation)

Ein einziger Seitenaufbau. Null weiße Blitze. Ein professioneller Übergang.

Was sich technisch ändert

KomponenteVorher (v1.0.5)Jetzt (v1.0.6)
GoogleAuthControllerreturn view('auth-loading', ...)return redirect($url . '&transition=1')
OnboardingControllerreturn view('auth-loading', ...)return redirect($url . '&transition=1')
routes/web.phpRendert auth-loading als ViewDirekter Redirect mit ?transition=1
OverlayEigene Seite (auth-loading.blade.php)Inline in app.blade.php per CSS
Seitenaufbauten2 (iframe + replace)1 (direkter Redirect)

Vollständiger Dark Mode im Onboarding

Der Onboarding-Ablauf respektiert jetzt den Dunkelmodus des Systems vollständig:

  • Automatische Erkennung — liest prefers-color-scheme: dark vom Betriebssystem
  • Persistenz — liegt bereits eine Präferenz im localStorage, hat sie Vorrang
  • Hintergrund und Text — der gesamte Onboarding-Screen passt sich an: Hintergründe in #0F0F0F, helle Texte, Eingabefelder mit dezenten Rändern
  • Kein weißer Blitz<html> bekommt data-theme="dark", bevor React überhaupt rendert

Fix der Redirect-Schleife bei der Anmeldung

Wir haben mehrere Ursachen einer Redirect-Schleife gefunden und behoben, die einige Nutzerinnen und Nutzer getroffen hat:

Erkannte und behobene Ursachen

  1. Lazy Closures in HandleInertiaRequests — die Closures wurden auch dann ausgewertet, wenn niemand angemeldet war, was Fehler und damit Redirects auslöste
  2. AuthenticationException mit 302 — gibt jetzt einen sauberen Redirect zurück statt einer Antwort, mit der Inertia nichts anfangen konnte
  3. Middleware auth.clean entfernt — sie kam der Verarbeitung der Railway-Tokens in die Quere
  4. Railway-Auth auf den API-Routenrailway.auth wurde den User-Routen in der API hinzugefügt, damit das Token korrekt funktioniert
  5. auth_token bleibt in der URL — wir entfernen auth_token nicht mehr voreilig aus der URL, sodass die App ihn sauber aufnehmen kann

Das Übergangs-Overlay: professionelles Finish

Das Inline-Overlay in app.blade.php bildet das Design des alten auth-loading exakt nach:

  • Hintergrundvideo — dasselbe Corporate-MP4, muted + autoplay + loop
  • Adaptiver Verlauf — ein linear-gradient, der zwischen hellem und dunklem Modus wechselt
  • Schriftzug „WITH YOU, WITHMIA” — weite Laufweite, Semibold, mit Deckkraftverlauf
  • Kluges Timing — mindestens 1,5 Sekunden sichtbar (die Zeit, die window.__loadingStart misst), dann 0,6 Sekunden Ausblenden mit pointer-events: none, damit nie eine Interaktion blockiert wird
  • URL-Bereinigunghistory.replaceState() entfernt transition und auth_token nach dem Mount aus der URL

Dark-Mode-Unterstützung im Overlay

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

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

Fix: eine einzige Quelle der Wahrheit für das Theme

Es stellte sich heraus, dass zwei Theme-Systeme um die Kontrolle über die dark-Klasse am <html> stritten:

  1. WITHMIA ThemeContext — liest withmia_theme_mode aus dem localStorage (das echte System, mit der Datenbank synchronisiert)
  2. Laravel Starter Kit (initializeTheme) — liest appearance aus dem localStorage, standardmäßig 'system'

Stand das WITHMIA-Theme auf light, das Betriebssystem aber im Dark Mode, hängte initializeTheme() die Klasse dark an <html>, nachdem das Overlay bereits hell gerendert war → ein dunkles Aufblitzen über dem hellen Bild.

Die Lösung

initializeTheme() liest jetzt withmia_theme_mode als primäre Quelle der Wahrheit, mit Fallback auf appearance und danach auf 'light'. Der Handler handleSystemThemeChange wurde ebenfalls aktualisiert.

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

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

Aufräumen: auth-loading ist weg

Die Datei auth-loading.blade.php (216 Zeilen) wurde aus der Codebase gelöscht. Kein Controller, keine Route und keine View verweist noch darauf.

Die Route /auth-loading existiert weiterhin als Kompatibilitäts-Redirect — wer die URL im Cache hat, wird einfach mit &transition=1 an sein Ziel weitergeleitet.

Technische Zusammenfassung

ÄnderungDateienAuswirkung
Doppeltes Laden entfernenGoogleAuthController, OnboardingController, routes/web.phpview()redirect()
Inline-Overlayapp.blade.phpErkennung von ?transition=1, CSS-Overlay mit Video
Ausblenden in Reactapp.tsxmind. 1,5 s + 0,6 s Animation, URL-Bereinigung
Dark Mode im Onboardingonboarding.tsxRespektiert prefers-color-scheme und localStorage
Fix Redirect-SchleifeHandleInertiaRequests, routes/web.php, GoogleAuthController5 unabhängige Fixes
RückgabetypenGoogleAuthController, OnboardingControllerRedirectResponse als Rückgabetyp
Theme Source of Truthuse-appearance.tsxwithmia_theme_mode als primäre Quelle
Aufräumenauth-loading.blade.phpDatei gelöscht (-216 Zeilen)

Wie es weitergeht

Da die Login-Erfahrung nun sitzt, wandert der Fokus zurück auf Produktfunktionen:

  • PWA / mobile App — die Priorität für ein mobile-first geprägtes Lateinamerika
  • CSAT-Umfragen — Kundenzufriedenheit direkt im Gespräch
  • AI Resolution Analytics — Kennzahlen zur Lösungsquote der KI
  • WhatsApp-Broadcasting — Kampagnen an viele Empfänger

WITHMIA v1.0.6 ist die Version, die die ersten 3 Sekunden deiner Erfahrung perfekt macht. Ein Login, ein Ladevorgang, null Unterbrechungen.

WITHMIA öffnen → Kostenlos testen auf app.withmia.com →

Labels

update v1.0.6 produkt UX dark-mode authentifizierung übergang performance theme

Teilen

Kommentare

Bleiben Sie respektvoll. Ihre E-Mail-Adresse wird nicht veröffentlicht.

Verwandte Artikel

Möchten Sie das in Ihrem Unternehmen umsetzen?

Testen Sie es 14 Tage kostenlos. Ohne Kreditkarte.

14 Tage kostenlos testen