6780fb366e
Captures the design direction from a multi-feature exploratory session: - Multi-tenant Family epic (decided) - Product + unit catalogs with family-scoped overrides and free-form additions - Per-store sections / departments with grouped list UI - Structured quantities + UoM (required on recipes, optional on lists with sensible defaults) - Pick-up vs remove distinction for shopping list items - Add-recipe-to-list flow - Stores polish: types, confirm-before-delete, duplicate-name bug, toast component - Foundational items (auth lifecycle, conflict resolution, offline PWA, backup/restore, onboarding, accessibility) ideas.md holds longer-term explorations (recipe URL import, product images, item notes, meal planning, observability). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
2.9 KiB
Markdown
31 lines
2.9 KiB
Markdown
# Ideas
|
||
|
||
Speculative features and explorations — not committed, not scheduled. Captured here so we don't lose them. Items graduate to `BACKLOG.md` when there's appetite to do them.
|
||
|
||
## Recipe import from URL
|
||
- Most recipe sites publish JSON-LD `Recipe` schema.org markup. Parsing it gives ingredients, steps, yield, prep/cook time, and an image — most of what you'd want in our recipe model.
|
||
- Flow: user pastes URL → backend fetches the page → extracts JSON-LD → maps to our `Recipe` + `RecipeIngredient` shape, mapping ingredient names through the typeahead so they land with `ProductId` where possible → user reviews and saves.
|
||
- High-leverage for a recipe app — a single paste replaces 5–10 minutes of manual entry.
|
||
- Considerations: which sites to support (start with anything that publishes valid schema.org), failure handling for paywalled / JS-rendered pages, abuse prevention (don't make us a free URL fetcher).
|
||
|
||
## Per-product images
|
||
- Big typeahead UX win when a family has multiple "milk" entries (whole, 2%, oat). A small thumbnail in the dropdown disambiguates instantly.
|
||
- Storage: object store (Azure Blob / S3-compatible). Curated catalog ships with one image per product; family-uploaded products can attach their own.
|
||
- Affects catalog schema design — add an `ImageUrl` (or `ImageId` if we want a separate Images table) to `Product` and `FamilyProduct` so we don't have to migrate later.
|
||
|
||
## Item-level notes / "running low"
|
||
- "Get the organic kind", "the one in the green bag", "make sure it's gluten-free" — instructions that don't fit any existing field.
|
||
- Add a `Note` (nullable string) to `ShoppingListItem`. Render as a subtle subtitle under the item name.
|
||
- Adjacent: a "running low" mode where checking an item in the *pantry* (or the kitchen, or a recurring-list view) auto-drops it onto the next shopping list. Out of scope for now (pantry tracking is parked).
|
||
|
||
## Meal planning + auto-generated lists
|
||
- Calendar view: assign recipes to days of the week. Generate one consolidated shopping list for the week with quantities aggregated across recipes (e.g., 3 recipes calling for onions → "3 onions" on the list).
|
||
- Natural extension of the "add recipe to shopping list" flow once that's solid.
|
||
- Considerations: how aggressive the aggregation is (require same `ProductId` AND same `UnitOfMeasureId`? what about recipe ingredients without `ProductId`?), how to handle "I already have onions" (intersects with the parked pantry concept).
|
||
- v2 territory.
|
||
|
||
## Observability
|
||
- Currently no structured logging strategy, no metrics, no alerting. The deferred SignalR-versioning memory is the only ops-adjacent item.
|
||
- Likely path when it matters: structured JSON logs via Serilog, metrics via OpenTelemetry exporting to a hosted backend (Grafana Cloud or similar low-cost option), basic alerts on error rate and latency.
|
||
- Not urgent until the app has more than one family using it in earnest.
|