Before recipe search is set up the card suggests SearXNG and the
deployment's URL, which differ from the unset saved values. That
suggestion marked the card dirty, so the leave guard warned about
unsaved changes the household never made. The leave guard now fires
only when the draft differs from the loaded baseline, which includes
the suggestion. Save stays enabled so the suggestion can still be
stored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The service now reads the optional MEALQUEST_SEARXNG_URL, validates it at
startup like any SearXNG URL, and returns it in the recipe search settings
as the read-only default_base_url. base_url stays the saved URL only, and
PATCH is unchanged: nothing is stored until the household saves.
The recipe search card pre-fills the SearXNG URL from default_base_url
while no URL is saved, and an edit now clears the last Test result so a
stale count or error never sits beside "Save your changes to test them."
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a Recipe search card to /settings/ai: a SearXNG | Brave segmented
control, the SearXNG URL pre-filled from the saved settings, or the Brave
API key shown masked (last four characters) with Replace. The provider,
URL and new key are a draft saved together with PATCH
/api/v1/settings/recipe-search; Test calls the recipe-search test
endpoint and shows "Found N recipes for 'chicken tikka masala'" or the
error.
The leave-without-saving guard moves to page level so it covers both the
AI assistant form and the card; the shell test now renders in a data
router as main.tsx does.
Maestro task: 0698ae2c-f65e-408e-a9c6-198edc2c5696
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>