From fff999bdb2d5c901bacffb54028cddec2d611b88 Mon Sep 17 00:00:00 2001 From: Jonathan St-Onge Date: Wed, 8 Apr 2026 14:40:38 -0400 Subject: [PATCH 1/4] first fix, with boundary --- .claude/settings.json | 3 +++ .../components/Index.svelte | 2 +- frontend/src/routes/+layout.svelte | 10 +++++++- frontend/src/routes/+page.svelte | 17 ++++++++++++- frontend/src/routes/blog/+page.svelte | 22 +++++++++++++---- .../src/routes/research-at-uvm/+page.svelte | 24 ++++++++++++++----- 6 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 .claude/settings.json diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..c72c6b7 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,3 @@ +{ + "enabledPlugins": {} +} diff --git a/frontend/src/lib/stories/friends-funnier-than-you-are/components/Index.svelte b/frontend/src/lib/stories/friends-funnier-than-you-are/components/Index.svelte index 2a5a6b2..f362218 100644 --- a/frontend/src/lib/stories/friends-funnier-than-you-are/components/Index.svelte +++ b/frontend/src/lib/stories/friends-funnier-than-you-are/components/Index.svelte @@ -60,7 +60,7 @@ let { story, data } = $props(); {/if} {:else} -

{@render renderTextContent(item)}

+ {@render renderTextContent(item)} {/if} {/each} {/snippet} diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index f3fbce4..23dd3ea 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -2,11 +2,19 @@ import { base } from '$app/paths'; import "$styles/app.css"; import { page } from '$app/state'; + import { afterNavigate } from '$app/navigation'; import Header from '$lib/components/Header.svelte'; import Footer from '$lib/components/Footer.svelte'; import { QueryClient, QueryClientProvider } from '@tanstack/svelte-query'; import { browser } from '$app/environment'; + // Manually track page views in Umami so it doesn't monkey-patch + // history.pushState/replaceState (which breaks SvelteKit's router). + afterNavigate(() => { + // @ts-expect-error - umami is injected globally by the tracker script + window.umami?.track(); + }); + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -28,7 +36,7 @@ - + {#if showHeader} diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index f0f3f4a..b40bee7 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -9,4 +9,19 @@ description="Scientific data essays that uncover the challenges of computational science." /> - \ No newline at end of file + + + + {#snippet pending()} +

Loading stories…

+ {/snippet} +
+ + \ No newline at end of file diff --git a/frontend/src/routes/blog/+page.svelte b/frontend/src/routes/blog/+page.svelte index 898fb9b..3101d40 100644 --- a/frontend/src/routes/blog/+page.svelte +++ b/frontend/src/routes/blog/+page.svelte @@ -4,14 +4,26 @@ import Blog from "$lib/components/Blog.svelte"; import { getBlogs } from '$lib/blog.remote'; - - const posts = await getBlogs(); - - - \ No newline at end of file + + + + {#snippet pending()} +

Loading posts…

+ {/snippet} +
+ + \ No newline at end of file diff --git a/frontend/src/routes/research-at-uvm/+page.svelte b/frontend/src/routes/research-at-uvm/+page.svelte index bdf984d..3af5d39 100644 --- a/frontend/src/routes/research-at-uvm/+page.svelte +++ b/frontend/src/routes/research-at-uvm/+page.svelte @@ -1,17 +1,29 @@ - + - - \ No newline at end of file + + + + {#snippet pending()} +

Loading research groups…

+ {/snippet} +
+ + \ No newline at end of file From caab16b27a8400cd9c89a9b67a1b862fea7eab87 Mon Sep 17 00:00:00 2001 From: Jonathan St-Onge Date: Wed, 8 Apr 2026 15:17:33 -0400 Subject: [PATCH 2/4] going back to the load function for now... --- frontend/src/lib/components/Home.svelte | 3 +- frontend/src/lib/components/Stories.svelte | 2 +- frontend/src/lib/components/Story.svelte | 2 +- .../src/lib/{blog.remote.ts => data/blogs.ts} | 32 +----- .../{research.remote.ts => data/research.ts} | 9 +- frontend/src/lib/data/stories.ts | 39 +++++++ frontend/src/lib/story.remote.ts | 105 ------------------ frontend/src/routes/+page.svelte | 18 +-- frontend/src/routes/+page.ts | 7 ++ frontend/src/routes/blog/+page.svelte | 19 +--- frontend/src/routes/blog/+page.ts | 7 ++ frontend/src/routes/blog/[slug]/+page.svelte | 12 +- frontend/src/routes/blog/[slug]/+page.ts | 29 +++++ .../src/routes/research-at-uvm/+page.svelte | 19 +--- frontend/src/routes/research-at-uvm/+page.ts | 7 ++ 15 files changed, 112 insertions(+), 198 deletions(-) rename frontend/src/lib/{blog.remote.ts => data/blogs.ts} (64%) rename frontend/src/lib/{research.remote.ts => data/research.ts} (86%) create mode 100644 frontend/src/lib/data/stories.ts delete mode 100644 frontend/src/lib/story.remote.ts create mode 100644 frontend/src/routes/+page.ts create mode 100644 frontend/src/routes/blog/+page.ts create mode 100644 frontend/src/routes/blog/[slug]/+page.ts create mode 100644 frontend/src/routes/research-at-uvm/+page.ts diff --git a/frontend/src/lib/components/Home.svelte b/frontend/src/lib/components/Home.svelte index b03b923..725691f 100644 --- a/frontend/src/lib/components/Home.svelte +++ b/frontend/src/lib/components/Home.svelte @@ -2,11 +2,10 @@ import Stories from "$lib/components/Stories.svelte"; import FilterBar from "$lib/components/FilterBar.svelte"; import { ChevronDown } from "@lucide/svelte"; - import { getStories } from '$lib/story.remote'; const initMax = 12; - const stories = $derived(await getStories()); + let { stories } = $props(); let maxStories = $state(initMax); let activeFilter = $state(undefined); diff --git a/frontend/src/lib/components/Stories.svelte b/frontend/src/lib/components/Stories.svelte index 6d8d9ae..62b1d69 100644 --- a/frontend/src/lib/components/Stories.svelte +++ b/frontend/src/lib/components/Stories.svelte @@ -1,6 +1,6 @@ diff --git a/frontend/src/lib/components/Story.svelte b/frontend/src/lib/components/Story.svelte index 92360a1..7fc1f16 100644 --- a/frontend/src/lib/components/Story.svelte +++ b/frontend/src/lib/components/Story.svelte @@ -1,7 +1,7 @@ - - - - {#snippet pending()} -

Loading stories…

- {/snippet} -
- - \ No newline at end of file + diff --git a/frontend/src/routes/+page.ts b/frontend/src/routes/+page.ts new file mode 100644 index 0000000..17f22c7 --- /dev/null +++ b/frontend/src/routes/+page.ts @@ -0,0 +1,7 @@ +import { getVisibleStories } from '$lib/data/stories'; + +export const load = () => { + return { + stories: getVisibleStories() + }; +}; diff --git a/frontend/src/routes/blog/+page.svelte b/frontend/src/routes/blog/+page.svelte index 3101d40..c1803ba 100644 --- a/frontend/src/routes/blog/+page.svelte +++ b/frontend/src/routes/blog/+page.svelte @@ -3,7 +3,7 @@ import Meta from "$lib/components/Meta.svelte"; import Blog from "$lib/components/Blog.svelte"; - import { getBlogs } from '$lib/blog.remote'; + let { data } = $props(); - - - - {#snippet pending()} -

Loading posts…

- {/snippet} -
- - \ No newline at end of file + diff --git a/frontend/src/routes/blog/+page.ts b/frontend/src/routes/blog/+page.ts new file mode 100644 index 0000000..9040e72 --- /dev/null +++ b/frontend/src/routes/blog/+page.ts @@ -0,0 +1,7 @@ +import { getSortedBlogs } from '$lib/data/blogs'; + +export const load = () => { + return { + posts: getSortedBlogs() + }; +}; diff --git a/frontend/src/routes/blog/[slug]/+page.svelte b/frontend/src/routes/blog/[slug]/+page.svelte index 8779fdc..81c3ca7 100644 --- a/frontend/src/routes/blog/[slug]/+page.svelte +++ b/frontend/src/routes/blog/[slug]/+page.svelte @@ -5,17 +5,17 @@ import { base } from '$app/paths'; import { ModeWatcher, setMode } from "mode-watcher"; import { Sun, Moon } from "@lucide/svelte"; - import { getBlog } from '$lib/blog.remote'; - let { params } = $props(); - const { blog, content } = await getBlog(params.slug); - + let { data } = $props(); + const blog = $derived(data.blog); + const content = $derived(data.content); + let isDark = $state(false); - + $effect(() => { isDark = document.documentElement.classList.contains('dark'); }); - + function toggleTheme() { isDark = !isDark; setMode(isDark ? 'dark' : 'light'); diff --git a/frontend/src/routes/blog/[slug]/+page.ts b/frontend/src/routes/blog/[slug]/+page.ts new file mode 100644 index 0000000..84574e1 --- /dev/null +++ b/frontend/src/routes/blog/[slug]/+page.ts @@ -0,0 +1,29 @@ +import { error } from '@sveltejs/kit'; +import { blogs } from '$lib/data/blogs'; + +// Vite analyzes this glob at build time — no runtime dynamic import needed +const markdownModules = import.meta.glob('/src/lib/blog/*.md', { + query: '?raw', + import: 'default' +}); + +export const load = async ({ params }: { params: { slug: string } }) => { + const blog = blogs.find((d) => d.slug === params.slug); + + if (!blog) { + error(404, 'Blog post not found'); + } + + let content = ''; + + if (blog.hasMarkdown) { + const markdownPath = `/src/lib/blog/${params.slug}.md`; + if (markdownPath in markdownModules) { + content = (await markdownModules[markdownPath]()) as string; + } else { + console.warn(`No markdown file found for ${params.slug}`); + } + } + + return { blog, content }; +}; diff --git a/frontend/src/routes/research-at-uvm/+page.svelte b/frontend/src/routes/research-at-uvm/+page.svelte index 3af5d39..4035b46 100644 --- a/frontend/src/routes/research-at-uvm/+page.svelte +++ b/frontend/src/routes/research-at-uvm/+page.svelte @@ -3,7 +3,7 @@ import Meta from "$lib/components/Meta.svelte"; import Research from "$lib/components/Research.svelte"; - import { getResearchGroups } from '$lib/research.remote'; + let { data } = $props(); - - - - {#snippet pending()} -

Loading research groups…

- {/snippet} -
- - \ No newline at end of file + diff --git a/frontend/src/routes/research-at-uvm/+page.ts b/frontend/src/routes/research-at-uvm/+page.ts new file mode 100644 index 0000000..7f5a59e --- /dev/null +++ b/frontend/src/routes/research-at-uvm/+page.ts @@ -0,0 +1,7 @@ +import { getSortedResearchGroups } from '$lib/data/research'; + +export const load = () => { + return { + posts: getSortedResearchGroups() + }; +}; From 85b3513afb8fa8921df0d8d9929e04ea5a2e17b0 Mon Sep 17 00:00:00 2001 From: Jonathan St-Onge Date: Wed, 8 Apr 2026 15:46:15 -0400 Subject: [PATCH 3/4] cleaning up the friends are funnier story --- .../components/LogLogPlot.svelte | 23 +- .../distribution_l3_at_p0.001.txt | 10000 - .../distribution_l3_at_p0.003.txt | 10000 - .../distribution_l3_at_p0.006.txt | 10000 - .../distribution_l3_at_p0.01.txt | 10000 - .../distribution_l3_at_p0.03.txt | 10000 - .../distribution_l3_at_p0.05.txt | 10000 - .../distribution_l3_at_p0.075.txt | 10000 - .../distribution_l3_at_p0.1.txt | 10000 - .../distribution_l3_at_p0.125.txt | 10000 - .../distribution_l3_at_p0.15.txt | 10000 - .../distribution_l3_at_p0.175.txt | 10000 - .../distribution_l3_at_p0.2.txt | 10000 - .../distribution_l3_at_p0.225.txt | 10000 - .../distribution_l3_at_p0.25.txt | 10000 - .../distribution_l3_at_p0.275.txt | 10000 - .../distribution_l3_at_p0.3.txt | 10000 - .../distribution_l3_at_p0.31.txt | 10000 - .../distribution_l3_at_p0.32.txt | 10000 - .../distribution_l3_at_p0.33.txt | 10000 - .../distribution_l3_at_p0.3333.txt | 10000 - .../distribution_l3_at_p0.35.txt | 10000 - .../distribution_l3_at_p0.4.txt | 10000 - .../distribution_l3_at_p0.45.txt | 10000 - .../distribution_l3_at_p0.5.txt | 10000 - .../distribution_l3_at_p0.55.txt | 10000 - .../distribution_l3_at_p0.6.txt | 10000 - .../distribution_l3_at_p0.65.txt | 10000 - .../distribution_l3_at_p0.75.txt | 10000 - .../data/cascadeDistributions.json | 480499 --------------- .../data/cascades.trimmed.json | 1 + .../data/precompute.py | 84 + .../distribution_l3_at_p0.001.txt | 10000 - .../distribution_l3_at_p0.002.txt | 10000 - .../distribution_l3_at_p0.003.txt | 10000 - .../distribution_l3_at_p0.005.txt | 10000 - .../distribution_l3_at_p0.0075.txt | 20000 - .../distribution_l3_at_p0.01.txt | 10000 - .../distribution_l3_at_p0.0125.txt | 20000 - .../distribution_l3_at_p0.015.txt | 10000 - .../distribution_l3_at_p0.0175.txt | 20000 - .../distribution_l3_at_p0.02.txt | 10000 - .../distribution_l3_at_p0.025.txt | 10000 - .../distribution_l3_at_p0.02859548.txt | 10000 - .../distribution_l3_at_p0.032.txt | 10000 - .../distribution_l3_at_p0.035.txt | 10000 - .../distribution_l3_at_p0.04.txt | 10000 - .../distribution_l3_at_p0.045.txt | 10000 - .../distribution_l3_at_p0.05.txt | 10000 - .../distribution_l3_at_p0.06.txt | 10000 - .../distribution_l3_at_p0.07.txt | 10000 - .../distribution_l3_at_p0.08.txt | 10000 - .../distribution_l3_at_p0.09.txt | 10000 - 53 files changed, 89 insertions(+), 1000518 deletions(-) delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.001.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.003.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.006.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.01.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.03.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.05.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.075.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.1.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.125.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.15.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.175.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.2.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.225.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.25.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.275.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.3.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.31.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.32.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.33.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.3333.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.35.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.4.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.45.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.5.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.55.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.6.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.65.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/bp_cascades_dist/distribution_l3_at_p0.75.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/cascadeDistributions.json create mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/cascades.trimmed.json create mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/precompute.py delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.001.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.002.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.003.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.005.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.0075.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.01.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.0125.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.015.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.0175.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.02.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.025.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.02859548.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.032.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.035.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.04.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.045.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.05.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.06.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.07.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.08.txt delete mode 100644 frontend/src/lib/stories/friends-funnier-than-you-are/data/src_cascade_dist/distribution_l3_at_p0.09.txt diff --git a/frontend/src/lib/stories/friends-funnier-than-you-are/components/LogLogPlot.svelte b/frontend/src/lib/stories/friends-funnier-than-you-are/components/LogLogPlot.svelte index 5a43fe3..16c659a 100644 --- a/frontend/src/lib/stories/friends-funnier-than-you-are/components/LogLogPlot.svelte +++ b/frontend/src/lib/stories/friends-funnier-than-you-are/components/LogLogPlot.svelte @@ -1,6 +1,6 @@
+ + + +
diff --git a/frontend/src/lib/stories/friends-funnier-than-you-are/components/SelfReinforcingNetwork.svelte b/frontend/src/lib/stories/friends-funnier-than-you-are/components/SelfReinforcingNetwork.svelte index 408dd72..63616ea 100644 --- a/frontend/src/lib/stories/friends-funnier-than-you-are/components/SelfReinforcingNetwork.svelte +++ b/frontend/src/lib/stories/friends-funnier-than-you-are/components/SelfReinforcingNetwork.svelte @@ -1,6 +1,7 @@
diff --git a/frontend/src/routes/[slug]/+page.svelte b/frontend/src/routes/[slug]/+page.svelte index fcfbdfb..a4e2683 100644 --- a/frontend/src/routes/[slug]/+page.svelte +++ b/frontend/src/routes/[slug]/+page.svelte @@ -2,4 +2,6 @@ let { data } = $props(); - +{#await import(`$lib/stories/${data.story.slug}/components/Index.svelte`) then mod} + +{/await} diff --git a/frontend/src/routes/[slug]/+page.ts b/frontend/src/routes/[slug]/+page.ts index bc11c66..2dc19e0 100644 --- a/frontend/src/routes/[slug]/+page.ts +++ b/frontend/src/routes/[slug]/+page.ts @@ -1,8 +1,8 @@ +export const ssr = false; + import { error, redirect } from '@sveltejs/kit'; import storiesData from '$data/stories.csv'; -// Vite analyzes these globs at build time — no runtime dynamic import needed -const storyModules = import.meta.glob('/src/lib/stories/*/components/Index.svelte'); const copyModules = import.meta.glob('/src/lib/stories/*/data/copy.json'); const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; @@ -34,12 +34,7 @@ export async function load({ params }: { params: { slug: string } }) { tags: parseTags(storyRaw.tags) }; - // Resolve component (static glob — Vite bundles all story components at build time) - const componentPath = `/src/lib/stories/${slug}/components/Index.svelte`; - if (!(componentPath in storyModules)) error(404, `Story "${slug}" not found`); - const mod = await (storyModules[componentPath] as () => Promise<{ default: any }>)(); - - // Resolve copy data (static glob — same approach) + // Resolve copy data let copyData: any = {}; const copyPath = `/src/lib/stories/${slug}/data/copy.json`; if (copyPath in copyModules) { @@ -47,5 +42,5 @@ export async function load({ params }: { params: { slug: string } }) { copyData = copyMod.default || copyMod; } - return { component: mod.default, story, copyData }; + return { story, copyData }; }