## Goal Recipe cards without a photo show a plain "No image" placeholder (`frontend/src/components/RecipeCard.tsx`), which looks inconsistent mixed into a grid of photographed recipes. Put recipes with a photo first in every sort order, so the grid looks more intentional - recipes without a photo still appear, just after the ones with one. ## Acceptance criteria - [ ] `buildRecipeQuery` (`backend/src/schema.ts`) sorts `image IS NOT NULL` first, ahead of the existing per-`RecipeSort` clause (`RELEVANCE`, `RATING`, `CALORIES`, `TITLE`), with `id` kept as the final tiebreaker for stable paging - [ ] Pure unit tests cover the new ordering for at least two sort modes (e.g. default `RATING` and `TITLE`) - [ ] Paging stays stable and `totalCount`/`hasMore` stay correct with the new `ORDER BY` (no duplicate or skipped rows across pages) - [ ] Manually verified against the real dataset: the first page of the default (no search, no filter) view shows only recipes with a photo ## Notes 5,653 of 17,698 recipes have a photo (`npm run import`'s report). Applies to all sort modes, not just the default, so switching sort doesn't suddenly mix placeholders back into the first page.