diff --git a/frontend/src/lib/onboarding/CategorySection.svelte b/frontend/src/lib/onboarding/CategorySection.svelte
new file mode 100644
index 0000000..d9e4f4d
--- /dev/null
+++ b/frontend/src/lib/onboarding/CategorySection.svelte
@@ -0,0 +1,26 @@
+
+
+
+
A4 — Mitglieder einladen (coming soon)
+
diff --git a/frontend/src/routes/household/setup/+page.server.ts b/frontend/src/routes/household/setup/+page.server.ts
index 6fe21b8..d780d6c 100644
--- a/frontend/src/routes/household/setup/+page.server.ts
+++ b/frontend/src/routes/household/setup/+page.server.ts
@@ -34,6 +34,6 @@ export const actions = {
});
}
- throw redirect(303, '/household/staples');
+ throw redirect(303, '/household/staples?ctx=onboarding');
}
} satisfies Actions;
diff --git a/frontend/src/routes/household/setup/page.server.test.ts b/frontend/src/routes/household/setup/page.server.test.ts
index 46e3679..a4a43ab 100644
--- a/frontend/src/routes/household/setup/page.server.test.ts
+++ b/frontend/src/routes/household/setup/page.server.test.ts
@@ -97,7 +97,7 @@ describe('household setup — form action', () => {
expect.unreachable();
} catch (e: any) {
expect(e.status).toBe(303);
- expect(e.location).toBe('/household/staples');
+ expect(e.location).toBe('/household/staples?ctx=onboarding');
}
});
diff --git a/frontend/src/routes/household/staples/+page.server.ts b/frontend/src/routes/household/staples/+page.server.ts
new file mode 100644
index 0000000..0927f77
--- /dev/null
+++ b/frontend/src/routes/household/staples/+page.server.ts
@@ -0,0 +1,28 @@
+import type { PageServerLoad } from './$types';
+import { apiClient } from '$lib/server/api';
+
+export const load: PageServerLoad = async ({ fetch, url }) => {
+ const api = apiClient(fetch);
+
+ const [categoriesResult, ingredientsResult] = await Promise.all([
+ api.GET('/v1/ingredient-categories'),
+ api.GET('/v1/ingredients')
+ ]);
+
+ const rawCategories = categoriesResult.data ?? [];
+ const rawIngredients = ingredientsResult.data ?? [];
+
+ const categories = rawCategories.map((cat) => ({
+ id: cat.id!,
+ name: cat.name!,
+ ingredients: rawIngredients
+ .filter((ing) => ing.category?.id === cat.id)
+ .map((ing) => ({
+ id: ing.id!,
+ name: ing.name!,
+ isStaple: ing.isStaple ?? false
+ }))
+ }));
+
+ return { categories, ctx: url.searchParams.get('ctx') };
+};
diff --git a/frontend/src/routes/household/staples/+page.svelte b/frontend/src/routes/household/staples/+page.svelte
index 6a67101..5db2188 100644
--- a/frontend/src/routes/household/staples/+page.svelte
+++ b/frontend/src/routes/household/staples/+page.svelte
@@ -1,7 +1,51 @@
+
+
-
A3 — Vorräte einrichten (coming soon)
-
+{#if isOnboarding}
+