Skip to content

Pantry Host 0.4.0

Choose a tag to compare

@jpdevries jpdevries released this 08 Jun 03:25
· 46 commits to main since this release

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 — importOmniResult dispatcher 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/bluesky route 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 the pantry-server crate 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