diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 327b6e3..066830e 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -170,7 +170,7 @@ import { householdAPI } from './services/api' type Tab = 'inventory' | 'receipts' | 'recipes' | 'settings' -const currentTab = ref('inventory') +const currentTab = ref('recipes') const sidebarCollapsed = ref(false) const inventoryStore = useInventoryStore() const { kiwiVisible, kiwiDirection } = useEasterEggs() @@ -198,6 +198,11 @@ async function switchTab(tab: Tab) { } onMounted(async () => { + // Pre-fetch inventory so Recipes tab has data on first load + if (inventoryStore.items.length === 0) { + await inventoryStore.fetchItems() + } + // Handle household invite links: /#/join?household_id=xxx&token=yyy const hash = window.location.hash if (hash.includes('/join')) { diff --git a/frontend/src/components/BuildYourOwnTab.vue b/frontend/src/components/BuildYourOwnTab.vue index d2b8071..108f8b7 100644 --- a/frontend/src/components/BuildYourOwnTab.vue +++ b/frontend/src/components/BuildYourOwnTab.vue @@ -132,14 +132,24 @@ - -

- Nothing in your pantry fits this role yet. You can skip it or - -

+ +
@@ -273,6 +283,17 @@ function toggleIngredient(name: string) { roleOverrides.value = { ...roleOverrides.value, [role]: [...current] } } +function useCustomIngredient() { + const name = filterText.value.trim() + if (!name) return + const role = currentRole.value?.display + if (!role) return + const current = new Set(roleOverrides.value[role] ?? []) + current.add(name) + roleOverrides.value = { ...roleOverrides.value, [role]: [...current] } + filterText.value = '' +} + async function selectTemplate(tmpl: AssemblyTemplateOut) { selectedTemplate.value = tmpl wizardStep.value = 0 diff --git a/frontend/src/components/RecipesView.vue b/frontend/src/components/RecipesView.vue index ab8ca89..0c4f579 100644 --- a/frontend/src/components/RecipesView.vue +++ b/frontend/src/components/RecipesView.vue @@ -595,9 +595,10 @@