Repository navigation
Pantry Host 0.4.0
Recipe discovery used to be fragmented across seven separate import tabs — finding "eggplant parm" meant clicking into each source and searching one at a time. 0.4.0 collapses that into a single "Search All Recipes" bar that fans one query across every data source in parallel and merges the results into one source-badged grid. It ships on both tiers from a shared fan-out engine, so the browser PWA and the self-hosted Rex app stay byte-aligned.
✨ Highlights
🔎 Omni Search — "Search All Recipes" (#32)
One query, every source, merged into a single grid — each card badged with where it came from.
- Parallel fan-out: a debounced query hits every source at once; results stream in progressively with per-source status chips and stale-response guarding.
- Sources: Bluesky, TheMealDB, Cooklang, Public Domain, Wikibooks, and recipe-api.
- Source policy: free CORS sources queried eagerly; recipe-api only when a key is configured (respects its ~100/day quota); Cooklang throttled.
- External only: searches import sources, not your own saved recipes — the Recipes page already covers those.
- Both flows: Browse & Import (cards link to detail) and Bulk Import (checkboxes + one CTA), with the shared tag-based category filter.
🧱 Shared fan-out engine (packages/shared/src/search/)
A net-new module so the two tiers can't drift:
sources.ts—buildOmniAdapters()wraps every existing source client in a uniform adapter (no new source clients).useOmniSearch.ts— debounced parallel fan-out, progressive streaming, per-source status.importer.ts—importOmniResultdispatcher reusing the existing per-source converters.categories.ts/types.ts— shared category-filter and result models.components/OmniSearch.tsx— the full surface (search bar, User Flow radios, category pills, source chips, results grid, bulk import).
🧭 Import page redesign (both tiers)
- New "Search All Recipes" replaces the old top "Browse from Bluesky" CTA.
- Per-source section renamed → "Import Recipes from Specific Data Source."
- Bluesky added as the first data-source tab — the feed-browse body was extracted into a reusable
<BlueskyFeedBrowse>shared by both the legacy/recipes/feeds/blueskyroute and the new tab. - "Community Datasources" → "Community Data Sources."
📐 Also in this release
docs/architecture.md— new architecture overview (system diagram, Rust-layer internals, MCP integration, and the shared-schema source of truth).
⬆️ Upgrade notes
- Scope: browser PWA (tier 1) + self-hosted Rex app (tier 2). No MCP surface change.
- Umbrella versioning: every workspace package (
app,shared,web,marketing,mcp,feed,installer-ui) and thepantry-servercrate move together to 0.4.0. - No schema changes — Omni Search is read-only over existing import sources; no DB migration required.
Full changelog: v0.3.0...v0.4.0