## Goal "My Fridge" currently matches its ingredients against recipes entirely in the browser, against whichever page of results the server already returned for the active search/category/rating filters (see `frontend/src/pages/HomePage.tsx` and `frontend/src/utils/recipeFilters.ts`). A recipe that matches a fridge ingredient but isn't on the currently loaded page is never found. Move this to the server, like every other filter, so it runs over the whole dataset. ## Acceptance criteria - [ ] `recipes`' `RecipeFilter` input gains an `ingredients: [String!]` field (`backend/src/schema.ts`), matching **any** of the given ingredients (not all) - the semantics #60 already established for the client-side version - [ ] `buildRecipeQuery` builds the matching SQL and stays covered by its existing pure unit tests (`backend/src/server.test.ts` or similar) - [ ] Decide and document the matching strategy: a straightforward option is `EXISTS` over `unnest(ingredients)` with `ILIKE`, matching the current client-side substring behaviour; a more precise option would link recipes to the canonical `ingredients` table (already used for autocomplete, `backend/db/ingredients.sql`) via a new recipe-ingredient relation built during import. Record the trade-off (precision vs. import/schema complexity) in the PR - [ ] Reasonable performance at the full dataset size (17,698 recipes); add an index if the chosen approach needs one - [ ] `frontend/src/pages/HomePage.tsx` sends `filters.ingredients` as part of the GraphQL `filter` instead of calling `filterRecipes` client-side for that field - [ ] `frontend/src/utils/recipeFilters.ts`'s ingredient matching is removed once nothing depends on it, or kept only for tests with a comment saying so - [ ] Existing Fridge behaviour keeps working: "Back to Fridge" link when nothing matches, result count and "matching any of: ..." wording ## Notes Follow-up from #58 (frontend connected to the API) and #60 (fixed the any-vs-all matching semantics, client-side only). The server-side `search` already does a full-text match that includes ingredient text (`backend/src/schema.ts`'s `search` tsvector covers title + ingredients), but that's AND-combined with every search/category/rating filter and doesn't support "any of these ingredients" - a dedicated filter field is still needed.