From 048663a4c8c476f79b8396fe8be5f4b89eee6b85 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 23 Apr 2026 06:11:43 -0400 Subject: [PATCH] =?UTF-8?q?feat(web):=20wire=20root=20layout=20=E2=80=94?= =?UTF-8?q?=20bootstrap,=20guard,=20Shell,=20QueryProvider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit +layout.ts runs auth.bootstrap() in load() so the shell sees the user synchronously. +layout.svelte installs the TanStack QueryClientProvider, runs the route guard as a \$effect, and swaps Shell vs. bare slot based on auth state. --- web/src/routes/+layout.svelte | 28 +++++++++++++++++++++++++++- web/src/routes/+layout.ts | 10 ++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 web/src/routes/+layout.ts 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 {}; +};