From 47e91de0a16fe4c190a5e4c51014bd6415e7fcfd Mon Sep 17 00:00:00 2001
From: hsiegeln <37154749+hsiegeln@users.noreply.github.com>
Date: Tue, 21 Apr 2026 10:47:33 +0200
Subject: [PATCH] feat(ui): /new/from-photo Page mit File-Picker, Lade- und
Fehler-States
---
src/lib/sw/cache-strategy.ts | 1 +
src/routes/new/from-photo/+page.server.ts | 12 ++
src/routes/new/from-photo/+page.svelte | 247 ++++++++++++++++++++++
3 files changed, 260 insertions(+)
create mode 100644 src/routes/new/from-photo/+page.server.ts
create mode 100644 src/routes/new/from-photo/+page.svelte
diff --git a/src/lib/sw/cache-strategy.ts b/src/lib/sw/cache-strategy.ts
index 28624a9..d755a72 100644
--- a/src/lib/sw/cache-strategy.ts
+++ b/src/lib/sw/cache-strategy.ts
@@ -16,6 +16,7 @@ export function resolveStrategy(req: RequestShape): CacheStrategy {
if (
path === '/api/recipes/import' ||
path === '/api/recipes/preview' ||
+ path === '/api/recipes/extract-from-photo' ||
path.startsWith('/api/recipes/search/web')
) {
return 'network-only';
diff --git a/src/routes/new/from-photo/+page.server.ts b/src/routes/new/from-photo/+page.server.ts
new file mode 100644
index 0000000..d7bbd56
--- /dev/null
+++ b/src/routes/new/from-photo/+page.server.ts
@@ -0,0 +1,12 @@
+import type { PageServerLoad } from './$types';
+import { error } from '@sveltejs/kit';
+import { env } from '$env/dynamic/private';
+
+export const load: PageServerLoad = async () => {
+ if (!env.GEMINI_API_KEY) {
+ error(503, {
+ message: 'Foto-Import ist nicht konfiguriert (GEMINI_API_KEY fehlt).'
+ });
+ }
+ return {};
+};
diff --git a/src/routes/new/from-photo/+page.svelte b/src/routes/new/from-photo/+page.svelte
new file mode 100644
index 0000000..f452598
--- /dev/null
+++ b/src/routes/new/from-photo/+page.svelte
@@ -0,0 +1,247 @@
+
+
+
+ Fotografiere ein gedrucktes oder handgeschriebenes Rezept. Eine Seite,
+ scharf, gut ausgeleuchtet.
+ Offline — diese Funktion braucht Internet. Lese das Rezept… Ich konnte auf dem Foto kein Rezept erkennen. {store.errorMessage ?? 'Unbekannter Fehler.'}Rezept aus Foto
+ Kein Rezept im Bild
+ Fehler
+