Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision 650c45e5d67db4e6dcb8639ca9b69d914b6ba2aa)
+++ frontend/src/App.tsx	(revision 30928cc138a6ec85438245ae8b06540b1de759fb)
@@ -1,9 +1,13 @@
+import { useEffect } from "react";
 import { createBrowserRouter, Outlet, RouterProvider } from "react-router-dom";
 import { ToastContainer } from "react-toastify";
 import "react-toastify/dist/ReactToastify.css";
+import { fetchUser } from "./api/user";
 import Footer from "./components/Footer";
 import Navbar from "./components/Navbar";
 import PrivateRoute from "./components/PrivateRoute";
 import CourseCatalog from "./components/SubjectCatalog/SubjectCatalog";
+import { AuthProvider } from "./context/AuthProvider";
+import { useAuth } from "./hooks/useAuth";
 import "./index.css";
 import Account from "./pages/Account";
@@ -15,5 +19,4 @@
 import SubjectPreferences from "./pages/SubjectPreferences";
 import SubjectView from "./pages/SubjectView";
-import { AuthProvider } from "./context/AuthProvider";
 
 const Layout = () => (
@@ -85,4 +88,12 @@
 
 function App() {
+	const { setUser } = useAuth();
+	// TODO
+	useEffect(() => {
+		const token = localStorage.getItem("access");
+		if (token) {
+			fetchUser(token, setUser);
+		}
+	}, []);
 	return (
 		<AuthProvider>
Index: frontend/src/context/AuthContext.tsx
===================================================================
--- frontend/src/context/AuthContext.tsx	(revision 650c45e5d67db4e6dcb8639ca9b69d914b6ba2aa)
+++ frontend/src/context/AuthContext.tsx	(revision 30928cc138a6ec85438245ae8b06540b1de759fb)
@@ -1,3 +1,3 @@
-import { createContext } from "react";
+import { createContext, Dispatch, SetStateAction } from "react";
 import { StudentData } from "../components/types";
 
@@ -15,4 +15,5 @@
 	isAuthenticated: boolean;
 	loading: boolean;
+	setUser: Dispatch<SetStateAction<User | null>>;
 }
 
Index: frontend/src/context/AuthProvider.tsx
===================================================================
--- frontend/src/context/AuthProvider.tsx	(revision 650c45e5d67db4e6dcb8639ca9b69d914b6ba2aa)
+++ frontend/src/context/AuthProvider.tsx	(revision 30928cc138a6ec85438245ae8b06540b1de759fb)
@@ -204,15 +204,4 @@
 	}, [logout, scheduleProactiveRefresh]);
 
-	const fetchUser = useCallback(async (token: string) => {
-		try {
-			const response = await axiosInstance.get<User>("/auth/user/", {
-				headers: { Authorization: `Bearer ${token}` },
-			});
-			setUser(response.data);
-		} catch (error) {
-			console.error("Could not fetch user data on load", error);
-		}
-	}, []);
-
 	const login = useCallback(
 		async (newAccessToken: string, newRefreshToken: string, userData: User) => {
@@ -223,10 +212,6 @@
 			setUser(userData);
 			scheduleProactiveRefresh(newAccessToken);
-			// await fetchFormData(newAccessToken);
 		},
-		[
-			// fetchFormData,
-			scheduleProactiveRefresh,
-		]
+		[scheduleProactiveRefresh]
 	);
 
@@ -238,10 +223,9 @@
 				setRefreshToken(localStorage.getItem("refresh"));
 				scheduleProactiveRefresh(token);
-				await fetchUser(token);
 			}
 			setLoading(false);
 		};
 		initializeAuth();
-	}, [scheduleProactiveRefresh, fetchUser]);
+	}, [scheduleProactiveRefresh]);
 
 	const contextValue: AuthContextType = {
@@ -254,4 +238,5 @@
 		isAuthenticated: !!accessToken && !loading,
 		loading,
+		setUser,
 	};
 
