Testing Checklist

Solo → Beta · July 25 – Sep 4

Overall Progress

0 of 199 items complete

0%

Week 1 · Core Flows

July 25–31 · 0/12 complete

Pantry

Add an item manually
Add an item via barcode scan
Edit quantity, best-by date, and notes
Set a low stock threshold and verify alert triggers
Delete an item
Create a second pantry and move between them

Grocery Lists

Create a new list
Add items manually
Add item via barcode scan (product auto-fill)
Check off items one by one
Mark all as purchased and verify 'purchased' section
Set a budget and verify the budget bar updates

Week 2 · Integrations & Intelligence

Aug 1–7 · 0/12 complete

Recipes

Create a recipe manually
Import a recipe from a file (processRecipeFile)
Run 'Pantry Recipes' and verify matching logic
Compare pantry to a recipe (comparePantryToRecipe)
Build a shopping list from a recipe (buildRecipeShoppingList)
Share a recipe and test the shared link

AI & API Functions

Scan a barcode — verify Barcode Lookup → Open Food Facts fallback
Trigger analyzeIngredients on a product with known allergens
Trigger checkProductSafety and verify recall + allergy results
Run generateListSuggestions from a pantry
Run generateRecipeSuggestions and verify output quality
Upload a receipt and run processReceipt — verify item extraction

Week 3 · Sharing, Notifications & Edge Cases

Aug 8–14 · 0/35 complete

Sharing & Household

Share a grocery list with another account (editor + viewer)
Share an individual item (createItemShare)
Send a product recommendation (createItemRecommendation)
Invite a household member and verify permissions work
Test limited_member role restrictions vs. household_member

Notifications & Safety

Add an allergen to your profile
Add a grocery item that contains that allergen — verify automation fires
Check HealthSafetyHub recall toggle and verify recall display
Run fetchRecalls (FDA + USDA) with a real product name

Weekly Deals

Trigger importWeeklyFlyers manually from AdminProductImport
Scan a flyer (scanFlyer) and verify deal extraction
Run matchFlyerDeals and confirm matches appear in Weekly Deals
Open Weekly Deals as a Premium user and verify 'Import Local Deals' button appears
Open Weekly Deals as a Free user and verify 'Import Local Deals' button is hidden
Tap 'Import Local Deals' and allow location — verify ZIP auto-detects from GPS
Deny location permission and verify the ZIP field allows manual entry
Edit the detected ZIP and import — verify regional flyers fetch for that ZIP
Verify national stores (Publix, Aldi, etc.) do NOT re-fetch with override ZIP
Import local deals for a ZIP different from home and confirm home ZIP settings stay unchanged
Re-run import for the same ZIP and verify 'already up to date' message (no duplicate fetch)
Confirm imported local deals surface in Smart Matches after refresh
Tap a Smart Match carousel card — verify the individual product detail sheet opens (not the full flyer)
Open a flyer deal's product detail — verify Sale Details shows sale price, regular price, store, sale period, and deal description

Receipt Format Research

Visit each saved store and request an e-receipt (email and/or SMS)
Document the receipt format each store sends (clean email, messy SMS, web link, etc.)
Paste an SMS receipt text into /share-receipt and verify processing
Paste an email receipt text into /share-receipt and verify processing
Identify which stores provide clean structured email receipts vs. messy text
Note any stores that require login to view the receipt online
Record findings in testing notes for future parsing improvements

Edge Cases

Scan an unknown barcode (should gracefully return 'not found')
Upload a blurry/unreadable receipt and verify error handling
Add a product with no image — verify no broken image UI
Create a list with no budget — verify no budget bar shown
Test on mobile viewport (iOS Safari + Chrome Android)

Week 4 · New Features

Aug 15–21 · 0/73 complete

Smart Insights & Receipt Search

Open Store Insights (/smart-insights) and verify summary cards render
Verify 'Today's Opportunities' matches list items to flyer sales
Verify pantry restock suggestions appear with correct reasons
Verify 'Sale Items Per Store' counts are accurate
Use Smart Receipt Search with a natural language query
Use voice input in Smart Receipt Search

Sound Alert System

Trigger Smart Store Detection near a saved store and verify the chime plays
Verify Level 1 ding (1 match) is a single soft chime with no layers
Verify Level 2 ding (2–4 matches) adds a subtle harmonic layer
Verify Level 3 ding (5+ matches) adds shimmer + stereo widening
Verify haptic single tap / double tap / triple pulse scale with match count on mobile
Verify no sound or haptic fires when there are zero matches
Verify alert does NOT fire on the /smart-insights or /freshscan pages
Verify alert does NOT fire when the app is backgrounded or tab hidden
Verify manual store selection does not trigger the alert
Verify the same store does not re-trigger the alert within one session
Toggle Sound Alerts off in Settings and verify only haptics play
Verify Sound Alerts setting syncs across devices (saved to account)

Voice Assistant

Trigger voiceAssistant from a grocery list
Verify add-to-list via voice command works
Verify error handling for unrecognized voice commands

Email Receipt Capture

Open Email Receipt Capture page and verify benefits/how-to sections render
Select 'Use my account email' and connect Gmail — verify the connected Gmail must match the account email
Select 'Use a different Gmail', enter a custom address, and verify 'Pending Gmail verification' shows before connecting
Connect a Gmail that doesn't match the entered email — verify an error toast appears and the connection is rejected
Connect the matching Gmail — verify 'Email verified via Gmail' appears and the email is saved to the profile
Verify the receipt capture email is NOT saved until the Gmail OAuth verification succeeds
Verify the button label reads 'Verify & Connect' (not 'Save & Connect')
Disconnect Gmail — verify the receipt capture email is cleared and capture is disabled
Reload the page with an existing verified connection — verify the saved email and connected state persist
Verify processGmailReceipt rejects requests where the userEmail doesn't match the account or verified receipt email
Process a Gmail receipt (processGmailReceipt) and verify items extract
Verify a '🧾 Receipt from [Store] found, importing now!' in-app toast fires the moment a Gmail receipt matches a store
Verify the in-app chime/sound plays when a receipt is matched
Verify a web push notification reaches the device for a matched receipt (app closed)
Verify the push notification deep-links to /receipt-history
Verify notifications do NOT fire for emails from stores the user hasn't enabled for receipt scanning
Forward a store receipt email to yourself and verify it's still captured (forwarded-sender fallback)
Verify Gmail disconnect/reconnect flow
Open 'View My Receipts' and confirm captured receipts appear in history
Edit a receipt item (name, quantity, price, category) and verify update persists
Delete an individual receipt item and confirm removal
Delete an entire receipt and confirm its items are removed
Verify pantry item quantities increment after a receipt processes
Verify a repurchased item reuses its prior pantry, category, quantity & expiration logic
Verify an unexpected purchase (not on any list) is added to the main pantry
Verify a new item with an LLM category (non-'other') keeps that category in the pantry
Verify a new item the LLM categorized as 'other' is checked against the internal Product DB first
Verify a new item not found internally is then searched via Barcode Lookup API by product name
Verify the 'other' category is only applied when no database recognizes the product
Verify receipt cleanup (cleanupOldReceipts) deletes receipts older than 90 days

Weekly Meal Planning

Open the Weekly Plan tab and generate a 7-day dinner plan (generateWeeklyMealPlan)
Set a budget and verify the plan stays within it; confirm estimated_cost is shown
Select a nutrition goal (High Protein, Low Carb, etc.) and verify meals reflect it
Exclude a category (e.g. Pork) and verify no meal uses it
Choose pantry-only strategy and verify missing_ingredients is empty for every meal
Choose pantry & grocery strategy and verify missing ingredients list with estimated prices
Set a shorter duration (3–4 days) and verify only that many meal cards render
Regenerate a single day (regenerateMealDay) and verify only that meal changes
Add missing ingredients to a grocery list and verify they appear with estimated prices
Rate a meal with stars and mark it prepared via the checkbox
Verify sendDailyDinnerNotification fires at 3 PM local time for today's meal
Verify the notification deep-links to /recipes

Household Management

Send a household invite (sendHouseholdInvite)
Accept a household invite (acceptHouseholdInvite)
Manage household settings (manageHousehold)
Remove a household member (removeHouseholdMember)
Leave a household as a member (leaveHousehold)
Verify member permissions: billing_visibility & store_setup_visibility

Subscription & Billing

Check premium status (getSubscriptionStatus) on Profile
Run Stripe checkout (createCheckoutSession) with test card 4242
Verify stripeWebhook updates the Subscription entity
Verify premium-only features are gated (paywall appears)

Week 5 · Final Functions & Pre-Beta Polish

Aug 22–28 · 0/34 complete

Smart Store Detection & Final Regression

Trigger Smart Store Detection near each saved store and verify the correct store is detected
Verify detection fires the appropriate sound alert level based on match count
Verify manual store override persists across sessions and does not re-trigger alerts
Verify detection does not fire while on /smart-insights, /freshscan, or when app is backgrounded
Run a full regression pass on Week 1 Core Flows (Pantry + Grocery Lists)
Test offline / poor-network behavior for barcode lookup and flyer import
Verify a fresh Incognito onboarding flow completes with no console errors

Push Notifications & Deadlines

Get VAPID public key (getVapidPublicKey) and subscribe to push
Trigger sendPushNotification on a real mobile device
Set a list complete-by date and verify notifyListDeadlines fires
Verify recall alert automation (notifyRecallAlerts) sends a notification
Verify allergen alert automation (notifyHouseholdAllergen) notifies household

Product Images & Analysis

Analyze a single product image (analyzeProductImage)
Run batch image analysis (batchAnalyzeProductImages) in Admin
Backfill missing flyer images (backfillFlyerImages)
Fetch a product image (fetchProductImage) for a barcode
Verify image_quality_score & image_needs_replacement flags are set

Product Data & Imports

Fetch product details — nutrition & ingredients (fetchProductDetails)
Import a product from Open Food Facts (importOpenFoodFacts)
Verify scan_count increments on repeated barcode scans
Verify getConsumptionAnalytics dashboard renders spending trends

Sharing Lifecycle

Open a shared item link (getSharedItem) as recipient
Update a shared item (updateSharedItem) as viewer vs editor
Revoke an item share (revokeItemShare) and verify link dies
Create a recipe share link (createRecipeShare)
Open a shared recipe link (getSharedRecipe)
Save a shared recipe to your account (saveSharedRecipe)
Accept a list invite (acceptListInvite) via email/SMS link

Cooking Profile & Recipes

Generate a cooking profile (generateCookingProfile)
Verify the profile influences recipe suggestions

Account & Support

Send a password reset code (sendPasswordResetCode)
Verify a reset code (verifyPasswordResetCode) and complete reset
Submit the contact form (sendContactEmail) and confirm receipt
Send an SMS list invite (sendSmsInvite) to a phone number

Week 6 · Meal Planner UX & Home Dashboard

Aug 29–Sep 4 · 0/28 complete

Weekly Meal Planner — This Week Tab

Open the This Week tab with a saved plan and verify meal cards render with date labels (e.g. 'Monday - Aug 27')
Verify the 'need to buy' badge count on each card matches the pantry-driven ingredient gap (not the AI's missing_ingredients list)
Tap the kebab (⋮) menu on a meal card and choose 'Replace meal' — verify only that day's meal changes
Tap the kebab menu and choose 'Remove meal' — verify the day becomes a 'Rest Day' slot
On a Rest Day slot, tap the kebab menu and verify 'Add a meal' regenerates a meal for that day
Drag a meal card to a different day slot and verify the meal relabels to the new day (e.g. Monday's meal becomes Friday's)
Verify the Shopping Needed section rebuilds from actual pantry stock after a drag or replace
Verify shopping items are grouped by category with collapsible headers
Verify meal images auto-generate for meals without a saved recipe photo
Verify the 'Retry image' button appears when an image fails to generate

Weekly Meal Planner — Plan Tab

Generate a plan and verify day cards match the This Week tab layout (emoji, date+title, badge, chevron, action handle)
Select 3–4 days and verify only that many meal cards render (not always 7)
Drag a meal to reassign its day and verify the order persists after saving
Tap 'Save This Week's Plan' and verify it appears on the This Week tab
Verify the summary table shows correct Meals / To Buy / Deals / Est. Cost counts
Verify budget over/under indicator updates when estimated_cost crosses the budget

Home Dashboard — Weekly Meal Planner Card

On the Welcome page with no saved plan, tap the 'Weekly Meal Planner' card — verify it routes to the Plan tab
With a saved plan (within 7 days), tap the card — verify it routes to the This Week tab
Verify the card subtitle changes based on whether a saved plan exists

Recipe Ratings & Pantry Matching

Rate a saved recipe and verify the rating is scoped to your account (not shared across users)
Mark a recipe as prepared and verify last_prepared timestamp persists
Add an ingredient to your pantry and verify a meal using it no longer shows 'need to buy'
Verify ingredient matching ignores parenthetical qualifiers (e.g. 'Brown Sugar (small bag)' matches 'Brown Sugar')

My Stores Dashboard Cards

Open My Stores and verify each card uses the tile trio layout (status badge, 3 stat tiles, address row, slim action button)
Verify stat tiles use the light grey-green background
Verify store logos render at 256px resolution (sharp, not blurry)
Verify the flyer auto-import dropdown includes an 'Off' option to disable the feature
Verify store address and auto-import settings are editable directly from the card

Beta Gate · Beta Readiness Gate

Aug 29 · 0/5 complete

Before Inviting Beta Testers

All Week 1–5 items above are checked off
Bug reporting mechanism is live (Google Form or GitHub Issues)
Onboarding flow tested in an Incognito window from scratch
Push notifications tested on a real mobile device
Stripe checkout tested end-to-end (test card: 4242 4242 4242 4242)
base44
Edit with Base44