diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte
index 7a4e65b2..9ea00a2c 100644
--- a/web/src/routes/+layout.svelte
+++ b/web/src/routes/+layout.svelte
@@ -1,5 +1,31 @@
-
+
+ {#if user.value !== null && page.url.pathname !== '/login'}
+ {@render children()}
+ {:else}
+ {@render children()}
+ {/if}
+
diff --git a/web/src/routes/+layout.ts b/web/src/routes/+layout.ts
new file mode 100644
index 00000000..ea7719a7
--- /dev/null
+++ b/web/src/routes/+layout.ts
@@ -0,0 +1,10 @@
+import type { LayoutLoad } from './$types';
+import { bootstrap } from '$lib/auth/store.svelte';
+
+export const ssr = false; // adapter-static fallback; we're SPA-only
+export const prerender = false;
+
+export const load: LayoutLoad = async () => {
+ await bootstrap();
+ return {};
+};