From 8ef1226755d7bdfed22e1d6930cf7c8f5f9c2c0e Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 28 Apr 2026 21:17:54 -0400 Subject: [PATCH] Fix logout resetting progress: auto-load cloud save after re-login After logout and re-login, the cloud save was never fetched because useAuthGate.init() had already run with an anonymous token. Now handleSetRegistered fetches and restores the cloud save when the user becomes registered, so they return directly to their game. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/hooks/useAuthGate.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/web/src/hooks/useAuthGate.ts b/apps/web/src/hooks/useAuthGate.ts index 0defc58..de8d947 100644 --- a/apps/web/src/hooks/useAuthGate.ts +++ b/apps/web/src/hooks/useAuthGate.ts @@ -111,13 +111,35 @@ export function useAuthGate(): AuthGateState { } }, []); - const handleSetRegistered = useCallback((value: boolean) => { + const handleSetRegistered = useCallback(async (value: boolean) => { setRegistered(value); const payload = getTokenPayload(); if (payload) { setAdmin(payload.role === 'admin'); setPasswordReset(payload.mustResetPassword); } + if (value) { + setLoading(true); + try { + const { save } = await api.saves.latest(); + if (save && save.tickCount > 0) { + setCloudSave({ + id: save.id, + companyName: save.companyName, + era: save.era, + tickCount: save.tickCount, + updatedAt: save.updatedAt, + }); + if (save.gameData) { + useGameStore.setState(save.gameData as Record); + } + } + } catch { + // No cloud save — user sees new game screen + } finally { + setLoading(false); + } + } }, []); const handleSetPasswordReset = useCallback((value: boolean) => {