diff --git a/src/lib/datastore.js b/src/lib/datastore.js index 06add63..f8a7ca7 100644 --- a/src/lib/datastore.js +++ b/src/lib/datastore.js @@ -30,7 +30,23 @@ const SYNC_FLAG = 'habitgrid_remote_synced_at'; export const getAuthUser = async () => { if (!isSupabaseConfigured()) return null; const { data } = await supabase.auth.getUser(); - return data?.user ?? null; + const user = data?.user ?? null; + // Mark that the user has logged in at least once so we can prompt later if they're logged out + try { + if (user) localStorage.setItem('habitgrid_ever_logged_in', '1'); + } catch (e) { + // ignore localStorage errors in restrictive environments + } + return user; +}; + +// Helper to check whether the user has ever logged in from this browser +export const hasEverLoggedIn = () => { + try { + return localStorage.getItem('habitgrid_ever_logged_in') === '1'; + } catch (e) { + return false; + } }; export const isLoggedIn = async () => Boolean(await getAuthUser()); diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx index 82b0edb..33d95ee 100644 --- a/src/pages/HomePage.jsx +++ b/src/pages/HomePage.jsx @@ -9,7 +9,7 @@ import HabitCard from '../components/HabitCard'; import AnimatedCounter from '../components/AnimatedCounter'; import GitActivityGrid from '../components/GitActivityGrid'; import { getGitEnabled } from '../lib/git'; -import { getHabits, updateHabit, syncLocalToRemoteIfNeeded, syncRemoteToLocal, getAuthUser } from '../lib/datastore'; +import { getHabits, updateHabit, syncLocalToRemoteIfNeeded, syncRemoteToLocal, getAuthUser, hasEverLoggedIn } from '../lib/datastore'; import { useNavigate } from 'react-router-dom'; const HomePage = () => { @@ -19,6 +19,7 @@ const HomePage = () => { const [loading, setLoading] = useState(true); const [loggedIn, setLoggedIn] = useState(false); const [collapsedGroups, setCollapsedGroups] = useState({}); + const [everLoggedIn, setEverLoggedIn] = useState(false); const [gitEnabled, setGitEnabled] = useState(getGitEnabled()); const [darkMode, setDarkMode] = useState(() => { return localStorage.getItem('theme') === 'dark'; @@ -30,6 +31,12 @@ const HomePage = () => { // On login, pull remote habits into localStorage const user = await getAuthUser(); setLoggedIn(!!user); + // Mark whether this browser has seen a login before + try { + setEverLoggedIn(hasEverLoggedIn()); + } catch (e) { + setEverLoggedIn(false); + } if (user) { await syncRemoteToLocal(); } @@ -133,7 +140,21 @@ const HomePage = () => { - + {/* Prompt previously-signed-in users to re-authenticate if currently logged out */} + {!loggedIn && everLoggedIn && ( + +
Looks like you were previously signed in. Sign in again to keep your habits synced across devices.
+
+ + +
+
+ )} + {/* Stats Overview */} {habits.length > 0 && ( { )} - - {/* Habits List */} {/* Grouped Habits by Category, collapsible, and uncategorized habits outside */} { ) )} - - {/* Add Button */} {habits.length > 0 && (