From 573cf49ac5997970444991770720c54fd1689903 Mon Sep 17 00:00:00 2001 From: Giancarmine Salucci Date: Tue, 12 May 2026 22:02:47 +0200 Subject: [PATCH] feat(ui): implement InstaChef design system - Replace Tailwind with IC CSS design tokens (purple/pink/orange brand gradient, Lilita One / DM Sans / JetBrains Mono fonts, light+dark theme via data-theme) - Add all SVG icon components (ic/Bell, BellOff, Check, Chevron, Clipboard, Close, Download, External, Filter, Link, Plus, Retry, Search, Settings, Share, Spark, Trash, PhasePrepping, PhaseSimmering, PhasePlating) - Add shared primitives: Chip, RecipeThumb (deterministic gradient swatch), CookingPot (animated SVG), PhaseTrack, SectionHead - Add TopBar with LIVE indicator and notification bell - Add CookingHero: animated hero card for in-progress items - Add TimelineRow: queue list row with status badges - Add EmptyState: gradient hero + dismissible How it works card - Add RecipeSheet: bottom-sheet detail overlay with phase progress - Add AddUrlScreen: full-page URL input with clipboard paste - Add NotificationsScreen: push toggle + SSE status - Rewrite +page.svelte: screen router (home/addurl/notifs) + RecipeSheet; preserves all SSE, retry, remove, filter, auto-subscribe logic - Rewrite share/+page.svelte: uses AddUrlScreen shell, preserves Share Target logic and auto-process on URL param - Rewrite InstallPrompt.svelte: InstallSheet bottom-sheet design, all PWA logic intact - Update manifest.json theme_color to #FFF8F5 - 282 unit tests passing (unchanged) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/routes/+layout.svelte | 24 +- src/routes/+page.svelte | 638 +++++++++--------- src/routes/components/AddUrlScreen.svelte | 276 ++++++++ src/routes/components/Chip.svelte | 38 ++ src/routes/components/CookingHero.svelte | 162 +++++ src/routes/components/CookingPot.svelte | 76 +++ src/routes/components/EmptyState.svelte | 204 ++++++ src/routes/components/InstallPrompt.svelte | 367 +++++----- .../components/NotificationsScreen.svelte | 322 +++++++++ src/routes/components/PhaseTrack.svelte | 87 +++ src/routes/components/RecipeSheet.svelte | 435 ++++++++++++ src/routes/components/RecipeThumb.svelte | 86 +++ src/routes/components/SectionHead.svelte | 31 + src/routes/components/TimelineRow.svelte | 193 ++++++ src/routes/components/TopBar.svelte | 106 +++ src/routes/components/ic/Bell.svelte | 7 + src/routes/components/ic/BellOff.svelte | 9 + src/routes/components/ic/Check.svelte | 6 + src/routes/components/ic/Chevron.svelte | 7 + src/routes/components/ic/Clipboard.svelte | 7 + src/routes/components/ic/Close.svelte | 6 + src/routes/components/ic/Download.svelte | 7 + src/routes/components/ic/External.svelte | 6 + src/routes/components/ic/Filter.svelte | 6 + src/routes/components/ic/Link.svelte | 7 + src/routes/components/ic/PhasePlating.svelte | 13 + src/routes/components/ic/PhasePrepping.svelte | 14 + .../components/ic/PhaseSimmering.svelte | 20 + src/routes/components/ic/Plus.svelte | 6 + src/routes/components/ic/Retry.svelte | 6 + src/routes/components/ic/Search.svelte | 6 + src/routes/components/ic/Settings.svelte | 7 + src/routes/components/ic/Share.svelte | 7 + src/routes/components/ic/Spark.svelte | 6 + src/routes/components/ic/Trash.svelte | 6 + src/routes/layout.css | 172 ++++- src/routes/share/+page.svelte | 171 ++--- static/icon-256.png | Bin 0 -> 87124 bytes static/manifest.json | 4 +- 39 files changed, 2982 insertions(+), 569 deletions(-) create mode 100644 src/routes/components/AddUrlScreen.svelte create mode 100644 src/routes/components/Chip.svelte create mode 100644 src/routes/components/CookingHero.svelte create mode 100644 src/routes/components/CookingPot.svelte create mode 100644 src/routes/components/EmptyState.svelte create mode 100644 src/routes/components/NotificationsScreen.svelte create mode 100644 src/routes/components/PhaseTrack.svelte create mode 100644 src/routes/components/RecipeSheet.svelte create mode 100644 src/routes/components/RecipeThumb.svelte create mode 100644 src/routes/components/SectionHead.svelte create mode 100644 src/routes/components/TimelineRow.svelte create mode 100644 src/routes/components/TopBar.svelte create mode 100644 src/routes/components/ic/Bell.svelte create mode 100644 src/routes/components/ic/BellOff.svelte create mode 100644 src/routes/components/ic/Check.svelte create mode 100644 src/routes/components/ic/Chevron.svelte create mode 100644 src/routes/components/ic/Clipboard.svelte create mode 100644 src/routes/components/ic/Close.svelte create mode 100644 src/routes/components/ic/Download.svelte create mode 100644 src/routes/components/ic/External.svelte create mode 100644 src/routes/components/ic/Filter.svelte create mode 100644 src/routes/components/ic/Link.svelte create mode 100644 src/routes/components/ic/PhasePlating.svelte create mode 100644 src/routes/components/ic/PhasePrepping.svelte create mode 100644 src/routes/components/ic/PhaseSimmering.svelte create mode 100644 src/routes/components/ic/Plus.svelte create mode 100644 src/routes/components/ic/Retry.svelte create mode 100644 src/routes/components/ic/Search.svelte create mode 100644 src/routes/components/ic/Settings.svelte create mode 100644 src/routes/components/ic/Share.svelte create mode 100644 src/routes/components/ic/Spark.svelte create mode 100644 src/routes/components/ic/Trash.svelte create mode 100644 static/icon-256.png diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e92089d..26b2369 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,16 +1,38 @@ + + + -{@render children()} +
+ {@render children()} +
+ diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index b93e64b..4644b69 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -3,42 +3,82 @@ import { browser } from '$app/environment'; import { onMount, onDestroy } from 'svelte'; import type { QueueItem, QueueStatusUpdate } from '$lib/server/queue/types'; - import QueueItemCard from './components/QueueItemCard.svelte'; - import NotificationSettings from './components/NotificationSettings.svelte'; import { replaceState } from '$app/navigation'; import { pushNotificationManager } from '$lib/client/PushNotificationManager'; - import type { NotificationState } from '$lib/client/PushNotificationManager'; + import TopBar from './components/TopBar.svelte'; + import CookingHero from './components/CookingHero.svelte'; + import TimelineRow from './components/TimelineRow.svelte'; + import EmptyState from './components/EmptyState.svelte'; + import RecipeSheet from './components/RecipeSheet.svelte'; + import SectionHead from './components/SectionHead.svelte'; + import AddUrlScreen from './components/AddUrlScreen.svelte'; + import NotificationsScreen from './components/NotificationsScreen.svelte'; + + // ── State ────────────────────────────────────────────────── let items = $state([]); let loading = $state(true); - let error = $state(null); - let filter = $state('all'); + let loadError = $state(null); + let filter = $state<'all' | 'in_progress' | 'success' | 'error'>('all'); let eventSource = $state(null); let connectionStatus = $state<'connecting' | 'connected' | 'disconnected'>('disconnected'); let lastPing = $state(null); let hasAttemptedAutoSubscribe = $state(false); - let notificationViewModel = $state(null); + + // Screen router + let screen = $state<'home' | 'addurl' | 'notifications'>('home'); + // Recipe detail sheet + let selectedItem = $state(null); + // "How it works" dismissible card + let showHowTo = $state(true); // Get highlighted item ID from URL params (when redirected from Share page) - let highlightId = $derived($page.url.searchParams.get('highlight')); + const highlightId = $derived($page.url.searchParams.get('highlight')); - // Available filters - derived to be reactive - let filters = $derived([ - { id: 'all', name: 'All Items', count: items.length }, - { id: 'pending', name: 'Pending', count: items.filter(item => item.status === 'pending').length }, - { id: 'in_progress', name: 'Processing', count: items.filter(item => item.status === 'in_progress').length }, - { id: 'success', name: 'Complete', count: items.filter(item => item.status === 'success').length }, - { id: 'error', name: 'Failed', count: items.filter(item => item.status === 'error' || item.status === 'unhealthy').length } - ]); - - // Filter items based on selected filter - // Using $derived.by to execute the function and derive the result array - let filteredItems = $derived.by(() => { + // ── Derived ──────────────────────────────────────────────── + const filteredItems = $derived.by(() => { if (filter === 'all') return items; - if (filter === 'error') return items.filter(item => item.status === 'error' || item.status === 'unhealthy'); - return items.filter(item => item.status === filter); + if (filter === 'error') return items.filter((i) => i.status === 'error' || i.status === 'unhealthy'); + return items.filter((i) => i.status === filter); }); + const sseLastPing = $derived( + lastPing ? relTime(lastPing) + ' ago' : '' + ); + + function relTime(iso: string): string { + const diff = (Date.now() - new Date(iso).getTime()) / 1000; + if (diff < 60) return Math.round(diff) + 's'; + if (diff < 3600) return Math.floor(diff / 60) + 'm'; + return Math.floor(diff / 3600) + 'h'; + } + + // ── groupByDate ──────────────────────────────────────────── + type Group = 'Cooking now' | 'In line' | 'Today' | 'Yesterday' | 'Earlier'; + function groupByDate(list: QueueItem[]): Record { + const g: Record = { + 'Cooking now': [], + 'In line': [], + Today: [], + Yesterday: [], + Earlier: [] + }; + const now = Date.now(); + for (const it of list) { + if (it.status === 'in_progress') { g['Cooking now'].push(it); continue; } + if (it.status === 'pending') { g['In line'].push(it); continue; } + const age = (now - new Date(it.createdAt).getTime()) / 1000; + if (age < 86400) g['Today'].push(it); + else if (age < 172800) g['Yesterday'].push(it); + else g['Earlier'].push(it); + } + return g; + } + + const groups = $derived(groupByDate(filteredItems)); + const cooking = $derived(groups['Cooking now'][0] ?? null); + + // ── Lifecycle ────────────────────────────────────────────── let unsubscribeNotifications: (() => void) | undefined; onMount(async () => { @@ -46,384 +86,374 @@ if (browser) { startSSEConnection(); setupAutoSubscribe(); - unsubscribeNotifications = pushNotificationManager.onStateChange((newState) => { - notificationViewModel = newState; - }); + unsubscribeNotifications = pushNotificationManager.onStateChange(() => {}); + + // Open RecipeSheet for highlighted item + if (highlightId) { + const found = items.find((i) => i.id === highlightId); + if (found) { selectedItem = found; clearHighlight(); } + } } }); onDestroy(() => { - if (eventSource) { - console.log('[SSE] Closing connection on component destroy'); - eventSource.close(); - connectionStatus = 'disconnected'; - } - // Add notification state cleanup + eventSource?.close(); + connectionStatus = 'disconnected'; unsubscribeNotifications?.(); }); + // ── Data fetching ────────────────────────────────────────── async function loadQueueItems() { try { loading = true; - error = null; - + loadError = null; const response = await fetch('/api/queue'); - if (!response.ok) { - throw new Error('Failed to load queue items'); - } - + if (!response.ok) throw new Error('Failed to load queue items'); const data = await response.json(); items = data.items || []; } catch (e) { - error = e instanceof Error ? e.message : 'Unknown error'; + loadError = e instanceof Error ? e.message : 'Unknown error'; console.error('Failed to load queue items:', e); } finally { loading = false; } } - function startSSEConnection() { - if (!browser) { - console.error('Cannot start SSE connection on server side'); - return; // Guard: EventSource is browser-only API + async function submitUrl(url: string) { + try { + const response = await fetch('/api/queue', { + method: 'POST', + body: JSON.stringify({ url }), + headers: { 'Content-Type': 'application/json' } + }); + if (!response.ok) { + const err = await response.json(); + throw new Error(err.message || 'Failed to enqueue URL'); + } + const queueItem = await response.json(); + // Item will arrive via SSE, but add immediately for UX + items = [queueItem, ...items]; + screen = 'home'; + // Show the new item in RecipeSheet + selectedItem = queueItem; + } catch (e) { + console.error('Failed to submit URL:', e); } - + } + + // ── SSE ──────────────────────────────────────────────────── + function startSSEConnection() { + if (!browser) return; connectionStatus = 'connecting'; - console.log('[SSE] Connecting to queue stream...'); - try { eventSource = new EventSource('/api/queue/stream'); - - eventSource.addEventListener('open', () => { - console.log('[SSE] Connection opened'); - connectionStatus = 'connected'; - }); - - eventSource.addEventListener('connection', (event) => { - const data = JSON.parse(event.data); - console.log('[SSE] Connection confirmed:', data.message); - connectionStatus = 'connected'; - }); - + eventSource.addEventListener('open', () => { connectionStatus = 'connected'; }); + eventSource.addEventListener('connection', () => { connectionStatus = 'connected'; }); eventSource.addEventListener('queue-update', (event) => { - const update: QueueStatusUpdate = JSON.parse(event.data); - updateQueueItem(update); + updateQueueItem(JSON.parse(event.data) as QueueStatusUpdate); }); - - eventSource.addEventListener('error', (event) => { - console.error('[SSE] Connection error:', event); + eventSource.addEventListener('error', () => { connectionStatus = 'disconnected'; - - // Attempt to reconnect after 5 seconds setTimeout(() => { - // EventSource.CLOSED = 2 (use numeric constant for SSR safety) - if (eventSource?.readyState === 2) { - console.log('[SSE] Attempting reconnection...'); - startSSEConnection(); - } + if (eventSource?.readyState === 2) startSSEConnection(); }, 5000); }); - eventSource.addEventListener('ping', (event) => { - // Keep-alive ping, update last ping timestamp - const data = JSON.parse(event.data); - lastPing = data.timestamp; - console.log('[SSE] Keep-alive ping received at:', data.timestamp); + lastPing = JSON.parse(event.data).timestamp; }); - } catch (e) { - console.error('[SSE] Failed to start SSE connection:', e); + console.error('[SSE] Failed to start:', e); connectionStatus = 'disconnected'; } } - /** - * Setup automatic notification subscription on first user interaction - * - * Follows Web Push API best practices: subscription requires user gesture. - * Listens for first click/touch anywhere on page, checks if notifications - * are supported but not subscribed, then auto-subscribes. - */ function setupAutoSubscribe() { if (hasAttemptedAutoSubscribe) return; - - const attemptSubscribe = async () => { + const attempt = async () => { if (hasAttemptedAutoSubscribe) return; hasAttemptedAutoSubscribe = true; - const state = pushNotificationManager.getState(); - - // Only auto-subscribe if: - // - Browser supports notifications - // - Permission is not denied - // - Not already subscribed if (state.supported && state.permission !== 'denied' && !state.subscribed) { - console.log('[HomePage] Auto-subscribing to notifications on first interaction'); await pushNotificationManager.subscribe(); } - - // Remove listener after first attempt - document.removeEventListener('click', attemptSubscribe); - document.removeEventListener('touchstart', attemptSubscribe); }; - - // Listen for first user interaction - document.addEventListener('click', attemptSubscribe, { once: true }); - document.addEventListener('touchstart', attemptSubscribe, { once: true }); + document.addEventListener('click', attempt, { once: true }); + document.addEventListener('touchstart', attempt, { once: true }); } function updateQueueItem(update: QueueStatusUpdate) { - // Find and update the item in the list - const itemIndex = items.findIndex(item => item.id === update.itemId); - - if (itemIndex >= 0) { - // Update existing item - items[itemIndex] = { - ...items[itemIndex], + const idx = items.findIndex((i) => i.id === update.itemId); + if (idx >= 0) { + items[idx] = { + ...items[idx], status: update.status, - phases: update.progress || items[itemIndex].phases, - results: update.results || items[itemIndex].results, - error: update.error || items[itemIndex].error, + phases: update.progress || items[idx].phases, + results: update.results || items[idx].results, + error: update.error || items[idx].error, updatedAt: update.timestamp }; + // Keep selectedItem in sync + if (selectedItem?.id === update.itemId) selectedItem = items[idx]; } else { - // New item - fetch full details from API fetchQueueItem(update.itemId); } - - // Trigger reactivity items = [...items]; } async function fetchQueueItem(id: string) { try { const response = await fetch(`/api/queue/${id}`); - if (response.ok) { - const item = await response.json(); - items = [item, ...items]; // Add to top of list - } + if (response.ok) items = [await response.json(), ...items]; } catch (e) { console.error('Failed to fetch queue item:', e); } } + // ── Actions ──────────────────────────────────────────────── async function retryItem(id: string) { try { - const response = await fetch(`/api/queue/${id}/retry`, { - method: 'POST' - }); - + const response = await fetch(`/api/queue/${id}/retry`, { method: 'POST' }); if (!response.ok) { - const errorData = await response.json(); - throw new Error(errorData.message || 'Failed to retry item'); + const err = await response.json(); + throw new Error(err.message || 'Failed to retry'); } - - // Item will be updated via SSE - console.log('Retry initiated for item:', id); } catch (e) { console.error('Failed to retry item:', e); - // Could show a toast notification here } } async function removeItem(id: string) { try { - const response = await fetch(`/api/queue/${id}`, { - method: 'DELETE' - }); - - if (!response.ok) { - const errorData = await response.json(); - throw new Error(errorData.message || 'Failed to remove item'); - } - - // Item will be removed from local state via SSE update - // but remove immediately for better UX - items = items.filter(item => item.id !== id); - console.log('Item removed successfully:', id); + await fetch(`/api/queue/${id}`, { method: 'DELETE' }); } catch (e) { console.error('Failed to remove item:', e); - // Fallback: remove from local state anyway - items = items.filter(item => item.id !== id); + } finally { + items = items.filter((i) => i.id !== id); + if (selectedItem?.id === id) selectedItem = null; } } function clearHighlight() { - // Remove highlight parameter from URL without navigation const url = new URL(window.location.href); url.searchParams.delete('highlight'); replaceState(url, {}); } + + // Queue positions for pending items + function queuePos(item: QueueItem): number { + return items.filter((i) => i.status === 'pending').indexOf(item) + 1; + } - InstaRecipe Queue Dashboard - + InstaChef + -
- -
-

Recipe Queue Dashboard

-

Monitor your Instagram recipe extractions in real-time

-
+
+ + {#if screen === 'home'} +
+ (screen = 'notifications')} + /> - -
-
- -
- - -
- - - -
- - - {#if items.length > 0} - - - - - - {/if} -
- - - {#if loading} -
-
- Loading queue items... -
- {/if} - - - {#if error} -
-
- - - - Error loading queue: {error} -
-
- {/if} - - - {#if !loading && filteredItems.length === 0} -
-
- - - -
-

No queue items

-

- {#if filter === 'all'} - Start by sharing an Instagram recipe or adding a URL manually - {:else} - No items match the selected filter - {/if} -

- - - - - Add Recipe URL - -
- {:else} -
- {#each filteredItems as item (item.id)} - retryItem(item.id)} - onRemove={() => removeItem(item.id)} - onClearHighlight={clearHighlight} + {#if loading} +
+
+
+ {:else if loadError} +
Failed to load queue: {loadError}
+ {:else if items.length === 0} + (screen = 'addurl')} + {showHowTo} + onDismissHowTo={() => (showHowTo = false)} /> - {/each} + {:else} + + {#if cooking && filter !== 'success' && filter !== 'error'} + (selectedItem = cooking)} /> + {/if} + + +
+ {#each [ + { id: 'all', label: 'All', count: items.length }, + { id: 'in_progress', label: 'Cooking', count: items.filter((i) => i.status === 'in_progress').length }, + { id: 'success', label: 'Saved', count: items.filter((i) => i.status === 'success').length }, + { id: 'error', label: 'Failed', count: items.filter((i) => i.status === 'error' || i.status === 'unhealthy').length } + ] as f} + + {/each} +
+ + +
+ {#each (['In line', 'Today', 'Yesterday', 'Earlier'] as const) as g} + {#if groups[g]?.length} + {g} + {#each groups[g] as it (it.id)} + (selectedItem = it)} + onRetry={retryItem} + /> + {/each} + {/if} + {/each} +
+ {/if} + + +
+ +
+
+ + + {:else if screen === 'addurl'} +
+ (screen = 'home')} + onSubmit={submitUrl} + /> +
+ + + {:else if screen === 'notifications'} +
+ (screen = 'home')} + sseConnected={connectionStatus === 'connected'} + {sseLastPing} + />
{/if} - -
- -
- - -
-
- - - - -
-
-
-
-
+ + {#if selectedItem} + (selectedItem = null)} + onRetry={(id) => { retryItem(id); selectedItem = null; }} + /> + {/if}
+ + diff --git a/src/routes/components/AddUrlScreen.svelte b/src/routes/components/AddUrlScreen.svelte new file mode 100644 index 0000000..4f63281 --- /dev/null +++ b/src/routes/components/AddUrlScreen.svelte @@ -0,0 +1,276 @@ + + +
+ +
+ +
Add a recipe
+
+
+ +
+
STEP 01 · PASTE
+

+ Drop the
+ Instagram
+ link here. +

+

+ Reels, posts, carousels — anything with a recipe in the caption. We'll cook it down into + something searchable. +

+ + +
+
+ + (focused = true)} + onblur={() => (focused = false)} + class="url-input" + /> + {#if url} + + {/if} +
+
+ + + + + +
+
+ Pro move +
+
+ Add InstaChef to your share sheet and you can send recipes here straight from the Instagram + app — no copy-paste required. +
+
+
+ + +
+ +
+
+ + diff --git a/src/routes/components/Chip.svelte b/src/routes/components/Chip.svelte new file mode 100644 index 0000000..c52db2b --- /dev/null +++ b/src/routes/components/Chip.svelte @@ -0,0 +1,38 @@ + + + + {@render children()} + + + diff --git a/src/routes/components/CookingHero.svelte b/src/routes/components/CookingHero.svelte new file mode 100644 index 0000000..8b8829a --- /dev/null +++ b/src/routes/components/CookingHero.svelte @@ -0,0 +1,162 @@ + + + + + diff --git a/src/routes/components/CookingPot.svelte b/src/routes/components/CookingPot.svelte new file mode 100644 index 0000000..ce0611e --- /dev/null +++ b/src/routes/components/CookingPot.svelte @@ -0,0 +1,76 @@ + + +
+ + {#if animate && (phase === 'prepping' || phase === 'simmering')} + {#each { length: steamCount } as _, i} +
+ {/each} + {/if} + + + + + + + + + + + + + + {#if animate && phase !== 'prepping'} + + + + {/if} + +
+ + diff --git a/src/routes/components/EmptyState.svelte b/src/routes/components/EmptyState.svelte new file mode 100644 index 0000000..1da30aa --- /dev/null +++ b/src/routes/components/EmptyState.svelte @@ -0,0 +1,204 @@ + + +
+ +
+
+ +
+
Empty kitchen
+

+ Cook
anything
from a link. +

+

+ Paste an Instagram recipe and we'll turn it into a real, savable recipe in Tandoor. +

+ +
+ + + {#if showHowTo} +
+ +
How it works
+ + {#each [ + { + icon: PhasePrepping, + n: '01', + t: 'Prepping', + d: 'We grab the post, caption, and any tagged ingredients off Instagram.' + }, + { + icon: PhaseSimmering, + n: '02', + t: 'Simmering', + d: 'An LLM reads the caption and turns it into structured ingredients + steps.' + }, + { + icon: PhasePlating, + n: '03', + t: 'Plating', + d: 'The finished recipe lands in your Tandoor cookbook, ready to cook.' + } + ] as step, i} +
0}> +
+ +
+
+
STEP {step.n}
+
{step.t}
+
{step.d}
+
+
+ {/each} +
+ {/if} +
+ + diff --git a/src/routes/components/InstallPrompt.svelte b/src/routes/components/InstallPrompt.svelte index 69365d8..c5a8d98 100644 --- a/src/routes/components/InstallPrompt.svelte +++ b/src/routes/components/InstallPrompt.svelte @@ -2,6 +2,11 @@ import { onMount } from 'svelte'; import { browser } from '$app/environment'; import { pwaInstallManager } from '$lib/client/PWAInstallManager'; + import Chip from './Chip.svelte'; + import Bell from './ic/Bell.svelte'; + import Share from './ic/Share.svelte'; + import Download from './ic/Download.svelte'; + import Spark from './ic/Spark.svelte'; let showPrompt = $state(false); let showFallback = $state(false); @@ -11,36 +16,18 @@ let unsubscribe: (() => void) | null = null; onMount(() => { - // Don't show if already dismissed or in standalone mode - if (pwaInstallManager.isDismissed() || pwaInstallManager.isStandalone()) { - return; - } + if (pwaInstallManager.isDismissed() || pwaInstallManager.isStandalone()) return; - // Listen for install state changes unsubscribe = pwaInstallManager.onInstallStateChange((installable) => { canInstall = installable; - - // Show prompt after user engagement and delay if (installable && userEngaged && !pwaInstallManager.isDismissed()) { - setTimeout(() => { - showPrompt = true; - }, 2000); + setTimeout(() => { showPrompt = true; }, 2000); } else if (!installable && userEngaged && !pwaInstallManager.isStandalone() && !pwaInstallManager.isDismissed()) { - // Show fallback instructions for browsers without beforeinstallprompt - setTimeout(() => { - showFallback = true; - }, 5000); + setTimeout(() => { showFallback = true; }, 5000); } }); - // Detect user engagement - const detectEngagement = () => { - userEngaged = true; - document.removeEventListener('scroll', detectEngagement); - document.removeEventListener('click', detectEngagement); - document.removeEventListener('keydown', detectEngagement); - }; - + const detectEngagement = () => { userEngaged = true; }; document.addEventListener('scroll', detectEngagement, { once: true }); document.addEventListener('click', detectEngagement, { once: true }); document.addEventListener('keydown', detectEngagement, { once: true }); @@ -55,18 +42,12 @@ async function handleInstall() { installing = true; - try { const result = await pwaInstallManager.showInstallPrompt(); - - if (result === 'accepted') { - showPrompt = false; - showFallback = false; - } else if (result === 'dismissed') { - handleDismiss(); - } - } catch (error) { - console.error('Install failed:', error); + if (result === 'accepted') { showPrompt = false; showFallback = false; } + else if (result === 'dismissed') handleDismiss(); + } catch (e) { + console.error('Install failed:', e); } finally { installing = false; } @@ -79,171 +60,201 @@ } - + {#if showPrompt && canInstall} -
-
-
-
-
- -
-
- - - -
-
+ + +
+
e.stopPropagation()}> + +
- -
-

Install InstaRecipe

-

- Get faster access and offline support. Works like a native app! -

-
-
- - -
- - - +
+ +
+ InstaChef +
+ + INSTALL + +
Put InstaChef on your home screen
- -
-
- - - - Offline access -
-
- - - - Push notifications -
-
- - - - Faster loading -
-
- - - - Home screen access -
+ +
+ {#each [ + { Icon: Share, color: 'var(--purple)', t: 'Share-sheet target', d: 'Send links from Instagram in one tap.' }, + { Icon: Bell, color: 'var(--pink)', t: 'Push when ready', d: 'Buzz on save, retry, or fail.' }, + { Icon: Download, color: 'var(--orange)', t: 'Works offline', d: 'Browse saved recipes anywhere.' }, + { Icon: Spark, color: 'var(--yellow)', t: 'Faster too', d: 'Launches like a native app.' }, + ] as f} +
+ +
{f.t}
+
{f.d}
+
+ {/each}
+ + + +
{/if} - -{#if showFallback && !canInstall && !pwaInstallManager.isStandalone()} -
-
-
-
- - - -
+ +{#if showFallback && !canInstall && browser && !pwaInstallManager.isStandalone()} +
+
+
+
Install InstaChef
+
{pwaInstallManager.getInstallInstructions()}
-
-

Install InstaRecipe

-

- {pwaInstallManager.getInstallInstructions()} -

- - - {#if pwaInstallManager.getBrowserName() === 'safari'} -
- - - - Use the Share button -
- {:else} -
- - - - Look for install button -
- {/if} -
- +
{/if} \ No newline at end of file diff --git a/src/routes/components/NotificationsScreen.svelte b/src/routes/components/NotificationsScreen.svelte new file mode 100644 index 0000000..4b30eec --- /dev/null +++ b/src/routes/components/NotificationsScreen.svelte @@ -0,0 +1,322 @@ + + +
+ +
+ +
Notifications
+
+
+ +
+ +
+
+ {#if enabled} + + {:else} + + {/if} +
+ +
+ + {enabled ? '● LIVE' : 'OFF'} + +

+ {enabled ? 'Push is on.' : "Get a ping when it's ready."} +

+

+ {#if enabled} + We'll buzz you the moment a recipe is saved, fails, or needs a retry. + {:else} + Don't miss a plate. Allow notifications and we'll buzz you when a recipe is saved. + {/if} +

+ + {#if notifState.error} +
{notifState.error}
+ {/if} + + {#if notifState.permission === 'denied'} +
+ Notifications are blocked. Enable them in your browser settings. +
+ {:else} + + {/if} +
+
+ + +
+
You'll hear about
+ {#each [ + { color: 'var(--status-success)', title: 'Recipe saved', desc: 'Tap the notification to open it in Tandoor.' }, + { color: 'var(--status-error)', title: 'Extraction failed', desc: 'Retry directly from the notification.' }, + { color: 'var(--orange)', title: 'Long-running parses', desc: 'When a post is taking longer than usual.' } + ] as row, i} +
0}> +
+
+
{row.title}
+
{row.desc}
+
+
+ {/each} +
+ + +
+
Live queue
+
+ + {sseConnected ? 'SSE connected' : 'SSE disconnected'} + + {#if sseLastPing} + {sseLastPing} + {/if} +
+
+
+
+ + diff --git a/src/routes/components/PhaseTrack.svelte b/src/routes/components/PhaseTrack.svelte new file mode 100644 index 0000000..a196818 --- /dev/null +++ b/src/routes/components/PhaseTrack.svelte @@ -0,0 +1,87 @@ + + +
+ {#each phases as p, i} + {@const state = i < current ? 'done' : i === current ? 'active' : 'idle'} +
+
+ {p.label} +
+ {#if i < phases.length - 1} +
+ {/if} + {/each} +
+ + diff --git a/src/routes/components/RecipeSheet.svelte b/src/routes/components/RecipeSheet.svelte new file mode 100644 index 0000000..f0845d0 --- /dev/null +++ b/src/routes/components/RecipeSheet.svelte @@ -0,0 +1,435 @@ + + +{#if item} + + + +{/if} + + diff --git a/src/routes/components/RecipeThumb.svelte b/src/routes/components/RecipeThumb.svelte new file mode 100644 index 0000000..22ef42e --- /dev/null +++ b/src/routes/components/RecipeThumb.svelte @@ -0,0 +1,86 @@ + + +
+
+
+
+ {#if emoji} + {emoji} + {:else} + + + + {/if} +
+
+ + diff --git a/src/routes/components/SectionHead.svelte b/src/routes/components/SectionHead.svelte new file mode 100644 index 0000000..c294158 --- /dev/null +++ b/src/routes/components/SectionHead.svelte @@ -0,0 +1,31 @@ + + +
+ {#if emoji}{emoji}{/if} + {@render children()} +
+ + diff --git a/src/routes/components/TimelineRow.svelte b/src/routes/components/TimelineRow.svelte new file mode 100644 index 0000000..f9d176f --- /dev/null +++ b/src/routes/components/TimelineRow.svelte @@ -0,0 +1,193 @@ + + + + +
e.key === 'Enter' && onTap?.()}> + +
+ {#if isPending} +
+ #{queuePosition ?? 1} +
+ {:else} + + {/if} + {#if isError} +
!
+ {:else if isSuccess} +
+ +
+ {/if} +
+ + +
+
+ {recipe?.name || (isPending ? 'Waiting in line…' : 'Untitled recipe')} +
+
+ {username(item.url)} + · + {relTime(item.createdAt)} +
+ {#if isError && item.error} +
{item.error.message?.slice(0, 60)}…
+ {/if} +
+ + +
+ {#if isError} + + {:else} + + {/if} +
+
+ + diff --git a/src/routes/components/TopBar.svelte b/src/routes/components/TopBar.svelte new file mode 100644 index 0000000..d0cc7af --- /dev/null +++ b/src/routes/components/TopBar.svelte @@ -0,0 +1,106 @@ + + +
+
+ +
+
InstaChef
+
+ + LIVE · {count} RECIPES +
+
+
+
+ +
+
+ + diff --git a/src/routes/components/ic/Bell.svelte b/src/routes/components/ic/Bell.svelte new file mode 100644 index 0000000..030d72b --- /dev/null +++ b/src/routes/components/ic/Bell.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/BellOff.svelte b/src/routes/components/ic/BellOff.svelte new file mode 100644 index 0000000..f347f46 --- /dev/null +++ b/src/routes/components/ic/BellOff.svelte @@ -0,0 +1,9 @@ + + + + + + + diff --git a/src/routes/components/ic/Check.svelte b/src/routes/components/ic/Check.svelte new file mode 100644 index 0000000..255ec4f --- /dev/null +++ b/src/routes/components/ic/Check.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Chevron.svelte b/src/routes/components/ic/Chevron.svelte new file mode 100644 index 0000000..1de18ca --- /dev/null +++ b/src/routes/components/ic/Chevron.svelte @@ -0,0 +1,7 @@ + + + + diff --git a/src/routes/components/ic/Clipboard.svelte b/src/routes/components/ic/Clipboard.svelte new file mode 100644 index 0000000..9d6bc16 --- /dev/null +++ b/src/routes/components/ic/Clipboard.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/Close.svelte b/src/routes/components/ic/Close.svelte new file mode 100644 index 0000000..b9a44cc --- /dev/null +++ b/src/routes/components/ic/Close.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Download.svelte b/src/routes/components/ic/Download.svelte new file mode 100644 index 0000000..70d0a57 --- /dev/null +++ b/src/routes/components/ic/Download.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/External.svelte b/src/routes/components/ic/External.svelte new file mode 100644 index 0000000..d182166 --- /dev/null +++ b/src/routes/components/ic/External.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Filter.svelte b/src/routes/components/ic/Filter.svelte new file mode 100644 index 0000000..f7a8029 --- /dev/null +++ b/src/routes/components/ic/Filter.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Link.svelte b/src/routes/components/ic/Link.svelte new file mode 100644 index 0000000..7dcffa0 --- /dev/null +++ b/src/routes/components/ic/Link.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/PhasePlating.svelte b/src/routes/components/ic/PhasePlating.svelte new file mode 100644 index 0000000..69961ba --- /dev/null +++ b/src/routes/components/ic/PhasePlating.svelte @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/routes/components/ic/PhasePrepping.svelte b/src/routes/components/ic/PhasePrepping.svelte new file mode 100644 index 0000000..f329132 --- /dev/null +++ b/src/routes/components/ic/PhasePrepping.svelte @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/src/routes/components/ic/PhaseSimmering.svelte b/src/routes/components/ic/PhaseSimmering.svelte new file mode 100644 index 0000000..1cffac7 --- /dev/null +++ b/src/routes/components/ic/PhaseSimmering.svelte @@ -0,0 +1,20 @@ + + + {#if animate} + + + + {/if} + + + + {#if animate} + + + + {/if} + + + diff --git a/src/routes/components/ic/Plus.svelte b/src/routes/components/ic/Plus.svelte new file mode 100644 index 0000000..aa0c0bb --- /dev/null +++ b/src/routes/components/ic/Plus.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Retry.svelte b/src/routes/components/ic/Retry.svelte new file mode 100644 index 0000000..8b33ea8 --- /dev/null +++ b/src/routes/components/ic/Retry.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Search.svelte b/src/routes/components/ic/Search.svelte new file mode 100644 index 0000000..8477f92 --- /dev/null +++ b/src/routes/components/ic/Search.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Settings.svelte b/src/routes/components/ic/Settings.svelte new file mode 100644 index 0000000..0bdd3ea --- /dev/null +++ b/src/routes/components/ic/Settings.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/Share.svelte b/src/routes/components/ic/Share.svelte new file mode 100644 index 0000000..4ca3544 --- /dev/null +++ b/src/routes/components/ic/Share.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/src/routes/components/ic/Spark.svelte b/src/routes/components/ic/Spark.svelte new file mode 100644 index 0000000..5282867 --- /dev/null +++ b/src/routes/components/ic/Spark.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/components/ic/Trash.svelte b/src/routes/components/ic/Trash.svelte new file mode 100644 index 0000000..790dbae --- /dev/null +++ b/src/routes/components/ic/Trash.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/layout.css b/src/routes/layout.css index d4b5078..ebe4b9e 100644 --- a/src/routes/layout.css +++ b/src/routes/layout.css @@ -1 +1,171 @@ -@import 'tailwindcss'; +/* ─── InstaChef design system ─────────────────────────────────────────────── */ + +/* Brand + shared tokens (theme-independent) */ +:root { + --grad-1: #833AB4; + --grad-2: #C13584; + --grad-3: #E1306C; + --grad-4: #FD7E14; + --grad-5: #FCAF45; + --brand-gradient: linear-gradient(135deg, var(--grad-1) 0%, var(--grad-3) 45%, var(--grad-4) 75%, var(--grad-5) 100%); + --brand-gradient-soft: linear-gradient(135deg, #FCE9F3 0%, #FFEAD8 100%); + + --purple: #833AB4; + --pink: #E1306C; + --orange: #FD7E14; + --yellow: #FCAF45; + --berry: #C13584; + + --status-pending: #FCAF45; + --status-success: #2EA56A; + --status-error: #E64B4B; + + --font-display: "Lilita One", "Caprasimo", system-ui, sans-serif; + --font-body: "DM Sans", -apple-system, system-ui, sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, monospace; +} + +/* Light theme */ +.ic-root[data-theme="light"] { + --bg: #FFF8F5; + --bg-tint: #FFEFE4; + --surface: #FFFFFF; + --surface-2: #FDF1EC; + --surface-3: #F7E5DC; + --ink: #1A0B1F; + --ink-2: #3A2A40; + --muted: #7A6B7D; + --muted-2: #A8989C; + --border: rgba(26, 11, 31, 0.08); + --border-strong: rgba(26, 11, 31, 0.14); + --shadow-sm: 0 1px 2px rgba(26, 11, 31, 0.04), 0 2px 8px rgba(26, 11, 31, 0.04); + --shadow-md: 0 4px 12px rgba(26, 11, 31, 0.06), 0 12px 32px rgba(26, 11, 31, 0.05); + --shadow-lg: 0 12px 28px rgba(193, 53, 132, 0.18), 0 24px 60px rgba(131, 58, 180, 0.15); +} + +/* Dark theme */ +.ic-root[data-theme="dark"] { + --bg: #110510; + --bg-tint: #1A0A1F; + --surface: #1F0F24; + --surface-2: #2A1730; + --surface-3: #371E3E; + --ink: #FCEFE5; + --ink-2: #E0D2DA; + --muted: #A38FA8; + --muted-2: #6E5A73; + --border: rgba(255, 235, 245, 0.08); + --border-strong: rgba(255, 235, 245, 0.16); + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4), 0 12px 32px rgba(0, 0, 0, 0.3); + --shadow-lg: 0 12px 28px rgba(225, 48, 108, 0.35), 0 24px 60px rgba(131, 58, 180, 0.3); +} + +/* ─── Base reset ──────────────────────────────────────────────────────────── */ +*, *::before, *::after { box-sizing: border-box; } + +html, body { + margin: 0; + padding: 0; + height: 100%; +} + +.ic-root { + font-family: var(--font-body); + color: var(--ink); + background: var(--bg); + -webkit-font-smoothing: antialiased; + min-height: 100dvh; +} + +/* ─── Utility classes ─────────────────────────────────────────────────────── */ +.ic-display { + font-family: var(--font-display); + font-weight: 400; + letter-spacing: -0.005em; + line-height: 1; +} + +.ic-grad-text { + background: var(--brand-gradient); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.ic-scroll { + scrollbar-width: none; + -ms-overflow-style: none; +} +.ic-scroll::-webkit-scrollbar { display: none; } + +button.ic-btn { + background: none; + border: 0; + padding: 0; + cursor: pointer; + font: inherit; + color: inherit; + -webkit-tap-highlight-color: transparent; +} + +/* ─── Animations ──────────────────────────────────────────────────────────── */ +@keyframes ic-steam { + 0% { transform: translateY(0) translateX(0) scale(0.6); opacity: 0; } + 25% { opacity: 0.85; } + 100% { transform: translateY(-44px) translateX(var(--drift, 4px)) scale(1.4); opacity: 0; } +} +.ic-steam { + animation: ic-steam 2.4s ease-out infinite; + animation-delay: var(--delay, 0s); +} + +@keyframes ic-bubble { + 0%, 100% { transform: translateY(0) scale(1); } + 50% { transform: translateY(-2px) scale(1.05); } +} +.ic-bubble { animation: ic-bubble 1.6s ease-in-out infinite; } + +@keyframes ic-chop { + 0%, 100% { transform: rotate(-30deg) translateY(0); } + 50% { transform: rotate(-8deg) translateY(-2px); } +} +.ic-chop { animation: ic-chop 0.9s cubic-bezier(.7,0,.3,1) infinite; transform-origin: bottom right; } + +@keyframes ic-shimmer { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(200%); } +} +.ic-shimmer { animation: ic-shimmer 2s ease-in-out infinite; } + +@keyframes ic-pulse { + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.55; transform: scale(0.95); } +} +.ic-pulse { animation: ic-pulse 1.4s ease-in-out infinite; } + +@keyframes ic-slide-up { + from { transform: translateY(100%); } + to { transform: translateY(0); } +} +.ic-slide-up { animation: ic-slide-up 0.32s cubic-bezier(.2,.7,.2,1); } + +@keyframes ic-fade { + from { opacity: 0; } + to { opacity: 1; } +} +.ic-fade { animation: ic-fade 0.24s ease-out; } + +@keyframes ic-pop { + 0% { transform: scale(0.6); opacity: 0; } + 60% { transform: scale(1.08); opacity: 1; } + 100% { transform: scale(1); } +} +.ic-pop { animation: ic-pop 0.4s cubic-bezier(.2,1.4,.4,1); } + +@keyframes ic-live { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.3; } +} +.ic-live { animation: ic-live 1.4s ease-in-out infinite; } + diff --git a/src/routes/share/+page.svelte b/src/routes/share/+page.svelte index 0136613..b4d18f9 100644 --- a/src/routes/share/+page.svelte +++ b/src/routes/share/+page.svelte @@ -2,13 +2,11 @@ import { page } from '$app/stores'; import { goto } from '$app/navigation'; import { onMount } from 'svelte'; - import UrlInputSection from './components/UrlInputSection.svelte'; + import AddUrlScreen from '../components/AddUrlScreen.svelte'; - let status = $state('idle'); - let logs = $state([]); + let status = $state<'idle' | 'enqueuing' | 'success' | 'error'>('idle'); // URL param parsing for Share Target - // Instagram typically shares text that contains the URL, so we might need to parse it out let sharedText = $derived($page.url.searchParams.get('text') || ''); let sharedUrl = $derived($page.url.searchParams.get('url') || ''); @@ -17,32 +15,27 @@ return match ? match[0] : null; } - let targetUrl = $derived(sharedUrl || extractUrl(sharedText)); + let targetUrl = $derived(sharedUrl || extractUrl(sharedText) || ''); // Track if we've already auto-processed to prevent duplicate processing let hasAutoProcessed = $state(false); // Auto-process URL if provided via share target - // Use onMount instead of $effect for side effects (SvelteKit best practice) onMount(() => { if (targetUrl && status === 'idle' && !hasAutoProcessed) { hasAutoProcessed = true; - process(); + process(targetUrl); } }); - async function process(url?: string) { - const urlToProcess = url || targetUrl; - if (!urlToProcess) return; - + async function process(url: string) { + if (!url) return; status = 'enqueuing'; - logs = [...logs, '🚀 Enqueuing extraction from: ' + urlToProcess]; try { - // Enqueue URL for background processing const response = await fetch('/api/queue', { method: 'POST', - body: JSON.stringify({ url: urlToProcess }), + body: JSON.stringify({ url }), headers: { 'Content-Type': 'application/json' } }); @@ -52,88 +45,100 @@ } const queueItem = await response.json(); - logs = [...logs, `✅ URL enqueued successfully with ID: ${queueItem.id}`]; - logs = [...logs, '🔄 Redirecting to queue dashboard...']; + status = 'success'; - // Small delay to show the success message setTimeout(() => { - // Redirect to homepage (queue dashboard) with the queue item ID highlighted goto(`/?highlight=${queueItem.id}`); - }, 1500); - + }, 800); } catch (e) { status = 'error'; - const errorMessage = e instanceof Error ? e.message : 'Unknown error'; - logs = [...logs, `❌ Error: ${errorMessage}`]; + console.error('Failed to enqueue:', e); } } - - function retry() { - status = 'idle'; - logs = [...logs, 'Retrying...']; - process(); - } - Share to InstaRecipe - + Add Recipe — InstaChef + -
-
-

Share to InstaRecipe

-

- {#if targetUrl} - Processing your shared recipe... +{#if status === 'enqueuing' || status === 'success'} + +

+
+ {#if status === 'enqueuing'} +
+
Adding to queue…
{:else} - Paste an Instagram recipe URL to extract it +
+
Added! Redirecting…
{/if} -

+
{targetUrl}
+
+{:else} + goto('/')} + onSubmit={process} + /> +{/if} - {#if !targetUrl} - - {:else} - -
-
-

Processing URL:

-

{targetUrl}

- - {#if status === 'enqueuing'} -
-
- Enqueuing for processing... -
- {:else if status === 'error'} -
- ❌ Error occurred -
- - {:else} -
✅ Ready to process
- {/if} -
-
- {/if} - - - {#if logs.length > 0} -
-
-

Process Log:

-
- {#each logs as log} -
{log}
- {/each} -
-
-
- {/if} -
\ No newline at end of file + \ No newline at end of file diff --git a/static/icon-256.png b/static/icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..7f308507eadb8273adc8a22e04b1d0388e202363 GIT binary patch literal 87124 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 Hu0mjf)Dso{ literal 0 HcmV?d00001 diff --git a/static/manifest.json b/static/manifest.json index c830e97..cb682a7 100644 --- a/static/manifest.json +++ b/static/manifest.json @@ -4,8 +4,8 @@ "start_url": "/", "scope": "/", "display": "standalone", - "theme_color": "#ffffff", - "background_color": "#ffffff", + "theme_color": "#FFF8F5", + "background_color": "#FFF8F5", "icons": [ { "src": "/favicon.png",