1. "💾 In meine Sammlung speichern" → Lucide BookmarkPlus + Text.
Letzter Emoji auf den wichtigen UI-Flächen ist damit weg.
2. Query auf der Startseite wird per history.replaceState nach ?q=…
in die URL gespiegelt. Folge:
- User tippt "Pizza" → Ergebnisse erscheinen
- Klick auf Vorschau pusht neue History-Entry /preview?url=…
- "Zurück" landet wieder auf /?q=Pizza
- onMount liest q aus URL, setzt query, Debounce-Effekt feuert,
Ergebnisse sind wieder da.
replaceState statt pushState beim Tippen → keine History-Spam-Einträge.
alertAction({title, message}) returns Promise<void> and renders the
same ConfirmDialog with infoOnly:true — single OK button, no Abbrechen.
Replaces:
- 'Bitte Profil wählen.' (recipe rating / favorite / cooked / comment)
- 'Bitte Profil wählen, um zu liken.' (wishlist)
- 'Profil konnte nicht angelegt werden' (ProfileSwitcher)
- 'Umbenennen fehlgeschlagen' (admin/profiles)
- 'Speichern fehlgeschlagen' (preview)
No window.alert() or window.confirm() left in the codebase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Explains that the page was likely a forum/listing, not a recipe, and
offers 'Zurück zur Trefferliste' plus 'Seite im Browser öffnen' as escape hatches.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- /search shows 'Im Internet suchen' CTA when no local hits or always after search
- /search/web lists SearXNG hits with domain pill and snippet
- /preview loads recipe via preview endpoint and shows unified RecipeView with banner
- Save button imports via POST and navigates to the saved recipe
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>