2026-10-31 20:44:29 -05:00
import type { ItemId , StoreItem } from "@/app/types" ;
// ---------------------------------------------------------------------------
// Store catalog — U.S. average grocery prices as of October 2026.
//
// Core staples are calibrated against the U.S. Bureau of Labor Statistics (BLS)
// CPI Average Retail Food Prices (U.S. City Average, released October 14, 2026),
// e.g. Grade A large eggs ($2.27/doz), boneless chicken breast ($4.20/lb),
// 80/20 ground beef ($6.49/lb), boneless pork chops ($4.55/lb), stick butter
// ($3.96/lb), reduced-fat milk ($3.59/gal), natural cheddar ($6.13/lb), white
// bread ($1.83/lb), white rice ($1.12/lb), dry pasta ($1.38/lb), Russet
// potatoes ($0.99/lb), field tomatoes ($1.99/lb), bananas ($0.66/lb), flour
// ($0.55/lb), and sugar ($1.02/lb). Items outside the BLS APU basket reflect
// October 2026 U.S. national supermarket shelf averages.
//
// Swap in live store pricing by implementing PriceProvider (see pricing.ts).
//
// Conventions:
// - packageSize is in baseUnit (g / ml / each)
// - gramsPerMl only on weight items that recipes measure in cups/tbsp
// ---------------------------------------------------------------------------
const LB = 453.6 ; // grams
const OZ = 28.35 ; // grams
const FL_OZ = 29.57 ; // ml
export const CATALOG : StoreItem [ ] = [
// --- Meat & Eggs ---------------------------------------------------------
{ id : "chicken_breast" , name : "Boneless Skinless Chicken Breast" , aisle : "Meat & Eggs" , packageSize : 2.5 * LB , baseUnit : "g" , packageLabel : "2.5 lb tray" , price : 10.5 } ,
{ id : "chicken_thighs" , name : "Boneless Skinless Chicken Thighs" , aisle : "Meat & Eggs" , packageSize : 3 * LB , baseUnit : "g" , packageLabel : "3 lb tray" , price : 9.89 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "ground_beef" , name : "80/20 Ground Beef" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb roll" , price : 6.49 } ,
{ id : "ground_turkey" , name : "93/7 Ground Turkey" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb roll" , price : 4.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "pork_shoulder" , name : "Bone-In Pork Shoulder Roast" , aisle : "Meat & Eggs" , packageSize : 3 * LB , baseUnit : "g" , packageLabel : "~3 lb roast" , price : 8.39 } ,
{ id : "smoked_sausage" , name : "Smoked Sausage Rope" , aisle : "Meat & Eggs" , packageSize : 13 * OZ , baseUnit : "g" , packageLabel : "13 oz" , price : 3.79 } ,
{ id : "bacon" , name : "Hickory Smoked Bacon" , aisle : "Meat & Eggs" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz pack" , price : 5.09 } ,
{ id : "eggs" , name : "Large White Eggs" , aisle : "Meat & Eggs" , packageSize : 12 , baseUnit : "each" , packageLabel : "12 ct" , price : 2.27 } ,
{ id : "tofu" , name : "Extra Firm Tofu" , aisle : "Produce" , packageSize : 14 * OZ , baseUnit : "g" , packageLabel : "14 oz block" , price : 2.39 } ,
// --- Dairy -----------------------------------------------------------------
{ id : "milk" , name : "2% Reduced Fat Milk" , aisle : "Dairy" , packageSize : 128 * FL_OZ , baseUnit : "ml" , packageLabel : "1 gallon" , price : 3.59 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "butter" , name : "Salted Butter Sticks" , aisle : "Dairy" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb (4 sticks)" , price : 3.96 , gramsPerMl : 0.96 } ,
2026-10-31 20:44:29 -05:00
{ id : "cheddar" , name : "Shredded Mild Cheddar" , aisle : "Dairy" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz bag" , price : 3.09 , gramsPerMl : 0.48 } ,
{ id : "mozzarella" , name : "Shredded Low-Moisture Mozzarella" , aisle : "Dairy" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz bag" , price : 3.09 , gramsPerMl : 0.48 } ,
{ id : "parmesan" , name : "Grated Parmesan" , aisle : "Dairy" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz shaker" , price : 3.99 , gramsPerMl : 0.42 } ,
{ id : "sour_cream" , name : "Sour Cream" , aisle : "Dairy" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz tub" , price : 2.49 , gramsPerMl : 1.0 } ,
{ id : "greek_yogurt" , name : "Plain Nonfat Greek Yogurt" , aisle : "Dairy" , packageSize : 32 * OZ , baseUnit : "g" , packageLabel : "32 oz tub" , price : 5.29 , gramsPerMl : 1.03 } ,
{ id : "heavy_cream" , name : "Heavy Whipping Cream" , aisle : "Dairy" , packageSize : 16 * FL_OZ , baseUnit : "ml" , packageLabel : "1 pint" , price : 3.89 } ,
// --- Produce ---------------------------------------------------------------
{ id : "onion" , name : "Yellow Onions" , aisle : "Produce" , packageSize : 8 , baseUnit : "each" , packageLabel : "3 lb bag (~8)" , price : 3.49 } ,
{ id : "potatoes" , name : "Russet Potatoes" , aisle : "Produce" , packageSize : 5 * LB , baseUnit : "g" , packageLabel : "5 lb bag" , price : 4.95 } ,
{ id : "carrots" , name : "Whole Carrots" , aisle : "Produce" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 1.99 } ,
{ id : "bell_pepper" , name : "Green Bell Pepper" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 1.09 } ,
{ id : "spinach" , name : "Baby Spinach" , aisle : "Produce" , packageSize : 10 * OZ , baseUnit : "g" , packageLabel : "10 oz clamshell" , price : 3.29 , gramsPerMl : 0.13 } ,
{ id : "coleslaw_mix" , name : "Classic Coleslaw Mix" , aisle : "Produce" , packageSize : 14 * OZ , baseUnit : "g" , packageLabel : "14 oz bag" , price : 2.29 } ,
{ id : "celery" , name : "Celery Hearts" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 bunch" , price : 2.19 } ,
{ id : "lemon" , name : "Lemon" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.69 } ,
{ id : "lime" , name : "Lime" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.45 } ,
{ id : "green_onions" , name : "Green Onions" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 bunch" , price : 0.99 } ,
{ id : "bananas" , name : "Bananas" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.26 } ,
// --- Frozen ---------------------------------------------------------------
{ id : "frozen_broccoli" , name : "Frozen Broccoli Florets" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 1.69 } ,
{ id : "frozen_mixed_veg" , name : "Frozen Mixed Vegetables" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 1.69 , gramsPerMl : 0.57 } ,
{ id : "frozen_berries" , name : "Frozen Mixed Berries" , aisle : "Frozen" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz bag" , price : 3.99 , gramsPerMl : 0.6 } ,
// --- Pantry: grains, cans, baking -------------------------------------------
{ id : "white_rice" , name : "Long Grain White Rice" , aisle : "Pantry" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 2.24 , gramsPerMl : 0.78 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "spaghetti" , name : "Spaghetti" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "16 oz box" , price : 1.38 } ,
{ id : "penne" , name : "Penne Rigate" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "16 oz box" , price : 1.38 } ,
{ id : "elbow_macaroni" , name : "Elbow Macaroni" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "16 oz box" , price : 1.38 } ,
2026-10-31 20:44:29 -05:00
{ id : "oats" , name : "Quick Oats" , aisle : "Pantry" , packageSize : 42 * OZ , baseUnit : "g" , packageLabel : "42 oz canister" , price : 4.19 , gramsPerMl : 0.34 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "red_lentils" , name : "Dry Lentils" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "16 oz bag" , price : 1.79 , gramsPerMl : 0.8 } ,
2026-10-31 20:44:29 -05:00
{ id : "flour_tortillas" , name : "Flour Tortillas (Taco Size)" , aisle : "Bakery" , packageSize : 10 , baseUnit : "each" , packageLabel : "10 ct" , price : 2.49 } ,
{ id : "sandwich_bread" , name : "White Sandwich Bread" , aisle : "Bakery" , packageSize : 20 , baseUnit : "each" , packageLabel : "20 oz loaf (~20 slices)" , price : 2.29 } ,
{ id : "breadcrumbs" , name : "Italian Breadcrumbs" , aisle : "Pantry" , packageSize : 15 * OZ , baseUnit : "g" , packageLabel : "15 oz canister" , price : 1.99 , gramsPerMl : 0.45 } ,
{ id : "black_beans" , name : "Black Beans, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15 oz can" , price : 1.15 } ,
{ id : "kidney_beans" , name : "Dark Red Kidney Beans, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15.5 oz can" , price : 1.15 } ,
{ id : "chickpeas" , name : "Chickpeas (Garbanzo), canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15.5 oz can" , price : 1.19 } ,
{ id : "diced_tomatoes" , name : "Diced Tomatoes, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "14.5 oz can" , price : 1.15 } ,
{ id : "crushed_tomatoes" , name : "Crushed Tomatoes, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "28 oz can" , price : 2.19 } ,
{ id : "marinara" , name : "Traditional Pasta Sauce" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "24 oz jar" , price : 2.49 } ,
{ id : "coconut_milk" , name : "Coconut Milk, canned" , aisle : "Pantry" , packageSize : 400 , baseUnit : "ml" , packageLabel : "13.5 oz can" , price : 1.99 } ,
{ id : "chicken_broth" , name : "Chicken Broth" , aisle : "Pantry" , packageSize : 32 * FL_OZ , baseUnit : "ml" , packageLabel : "32 oz carton" , price : 2.19 } ,
{ id : "peanut_butter" , name : "Creamy Peanut Butter" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz jar" , price : 2.69 , gramsPerMl : 1.07 } ,
{ id : "honey" , name : "Clover Honey" , aisle : "Pantry" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bear" , price : 4.29 , gramsPerMl : 1.42 } ,
{ id : "brown_sugar" , name : "Light Brown Sugar" , aisle : "Pantry" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 2.49 , gramsPerMl : 0.9 } ,
{ id : "pancake_syrup" , name : "Original Pancake Syrup" , aisle : "Pantry" , packageSize : 24 * FL_OZ , baseUnit : "ml" , packageLabel : "24 oz bottle" , price : 2.79 } ,
{ id : "cornstarch" , name : "Corn Starch" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz box" , price : 1.69 , gramsPerMl : 0.54 } ,
// Pantry staples: listed, but excluded from the total if the user owns them.
{ id : "flour" , name : "All-Purpose Flour" , aisle : "Pantry" , packageSize : 5 * LB , baseUnit : "g" , packageLabel : "5 lb bag" , price : 2.73 , gramsPerMl : 0.53 , pantryStaple : true } ,
{ id : "baking_powder" , name : "Baking Powder" , aisle : "Pantry" , packageSize : 8.1 * OZ , baseUnit : "g" , packageLabel : "8.1 oz can" , price : 1.79 , gramsPerMl : 0.9 , pantryStaple : true } ,
{ id : "vegetable_oil" , name : "Vegetable Oil" , aisle : "Pantry" , packageSize : 48 * FL_OZ , baseUnit : "ml" , packageLabel : "48 oz bottle" , price : 4.29 , pantryStaple : true } ,
{ id : "olive_oil" , name : "Extra Virgin Olive Oil" , aisle : "Pantry" , packageSize : 17 * FL_OZ , baseUnit : "ml" , packageLabel : "17 oz bottle" , price : 7.99 , pantryStaple : true } ,
{ id : "salt" , name : "Iodized Salt" , aisle : "Spices & Sauces" , packageSize : 26 * OZ , baseUnit : "g" , packageLabel : "26 oz canister" , price : 1.19 , gramsPerMl : 1.2 , pantryStaple : true } ,
{ id : "black_pepper" , name : "Ground Black Pepper" , aisle : "Spices & Sauces" , packageSize : 3 * OZ , baseUnit : "g" , packageLabel : "3 oz" , price : 2.49 , gramsPerMl : 0.47 , pantryStaple : true } ,
// --- Spices & Sauces ---------------------------------------------------------
{ id : "minced_garlic" , name : "Minced Garlic (jar)" , aisle : "Spices & Sauces" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz jar" , price : 2.89 , gramsPerMl : 1.1 } ,
{ id : "soy_sauce" , name : "Soy Sauce" , aisle : "International" , packageSize : 15 * FL_OZ , baseUnit : "ml" , packageLabel : "15 oz bottle" , price : 2.19 } ,
{ id : "bbq_sauce" , name : "Original BBQ Sauce" , aisle : "Spices & Sauces" , packageSize : 18 * OZ , baseUnit : "g" , packageLabel : "18 oz bottle" , price : 1.99 , gramsPerMl : 1.1 } ,
{ id : "salsa" , name : "Medium Thick & Chunky Salsa" , aisle : "Spices & Sauces" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz jar" , price : 2.69 , gramsPerMl : 1.05 } ,
{ id : "taco_seasoning" , name : "Taco Seasoning Packet" , aisle : "Spices & Sauces" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 oz packet" , price : 0.89 } ,
{ id : "chili_powder" , name : "Chili Powder" , aisle : "Spices & Sauces" , packageSize : 2.5 * OZ , baseUnit : "g" , packageLabel : "2.5 oz" , price : 1.99 , gramsPerMl : 0.55 } ,
{ id : "cumin" , name : "Ground Cumin" , aisle : "Spices & Sauces" , packageSize : 1.5 * OZ , baseUnit : "g" , packageLabel : "1.5 oz" , price : 1.99 , gramsPerMl : 0.5 } ,
{ id : "paprika" , name : "Paprika" , aisle : "Spices & Sauces" , packageSize : 2.5 * OZ , baseUnit : "g" , packageLabel : "2.5 oz" , price : 1.99 , gramsPerMl : 0.46 } ,
{ id : "italian_seasoning" , name : "Italian Seasoning" , aisle : "Spices & Sauces" , packageSize : 0.87 * OZ , baseUnit : "g" , packageLabel : "0.87 oz" , price : 1.89 , gramsPerMl : 0.2 } ,
{ id : "curry_powder" , name : "Curry Powder" , aisle : "Spices & Sauces" , packageSize : 1.75 * OZ , baseUnit : "g" , packageLabel : "1.75 oz" , price : 2.49 , gramsPerMl : 0.42 } ,
// --- Seafood (one aisle so fish & shellfish group together on lists) --------
{ id : "salmon" , name : "Frozen Atlantic Salmon Fillets" , aisle : "Seafood" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 15.99 } ,
{ id : "tilapia" , name : "Frozen Tilapia Fillets" , aisle : "Seafood" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 8.99 } ,
{ id : "pollock" , name : "Frozen Wild Alaska Pollock Fillets" , aisle : "Seafood" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 7.99 } ,
{ id : "canned_tuna" , name : "Chunk Light Tuna in Water" , aisle : "Seafood" , packageSize : 1 , baseUnit : "each" , packageLabel : "5 oz can" , price : 1.29 } ,
{ id : "canned_clams" , name : "Chopped Clams, canned" , aisle : "Seafood" , packageSize : 1 , baseUnit : "each" , packageLabel : "6.5 oz can" , price : 2.19 } ,
{ id : "imitation_crab" , name : "Imitation Crab (Flake Style)" , aisle : "Seafood" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz pack" , price : 3.99 } ,
{ id : "old_bay" , name : "Old Bay Seafood Seasoning" , aisle : "Spices & Sauces" , packageSize : 6 * OZ , baseUnit : "g" , packageLabel : "6 oz can" , price : 4.49 , gramsPerMl : 0.6 } ,
{ id : "mayo" , name : "Mayonnaise" , aisle : "Spices & Sauces" , packageSize : 30 * FL_OZ , baseUnit : "ml" , packageLabel : "30 oz jar" , price : 4.29 } ,
{ id : "seaweed_snacks" , name : "Roasted Seaweed Snack Sheets" , aisle : "International" , packageSize : 1 , baseUnit : "each" , packageLabel : "0.35 oz pack" , price : 1.39 } ,
{ id : "avocado" , name : "Hass Avocado" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 1.25 } ,
// --- Cayden's Corner (family recipes) --------------------------------------------
// Meat & seafood
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "italian_sausage" , name : "Mild Italian Sausage (bulk)" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb roll" , price : 4.69 } ,
2026-10-31 20:44:29 -05:00
{ id : "turkey_sausage" , name : "Smoked Turkey Sausage" , aisle : "Meat & Eggs" , packageSize : 13 * OZ , baseUnit : "g" , packageLabel : "13 oz rope" , price : 3.79 } ,
{ id : "pork_tenderloin" , name : "Pork Tenderloin" , aisle : "Meat & Eggs" , packageSize : 1.25 * LB , baseUnit : "g" , packageLabel : "~1.25 lb" , price : 6.49 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "bottom_round_roast" , name : "Beef Bottom Round Roast" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "per lb" , price : 7.49 } ,
{ id : "rib_roast" , name : "Beef Standing Rib Roast" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "per lb" , price : 15.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "spiral_ham" , name : "Spiral-Sliced Bone-In Half Ham" , aisle : "Meat & Eggs" , packageSize : 8 * LB , baseUnit : "g" , packageLabel : "~8 lb" , price : 21.99 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "ham_steak" , name : "Bone-In Ham Steak" , aisle : "Meat & Eggs" , packageSize : 1 , baseUnit : "each" , packageLabel : "~1 lb steak" , price : 5.49 } ,
2026-10-31 20:44:29 -05:00
{ id : "deli_ham" , name : "Sliced Deli Ham" , aisle : "Meat & Eggs" , packageSize : 9 * OZ , baseUnit : "g" , packageLabel : "9 oz tub" , price : 4.29 } ,
{ id : "bacon_bits" , name : "Real Bacon Bits" , aisle : "Pantry" , packageSize : 3 * OZ , baseUnit : "g" , packageLabel : "3 oz pouch" , price : 3.29 , gramsPerMl : 0.3 } ,
{ id : "canned_crab" , name : "Lump Crabmeat, canned" , aisle : "Seafood" , packageSize : 6 * OZ , baseUnit : "g" , packageLabel : "6 oz can" , price : 6.99 } ,
// Dairy
{ id : "swiss_cheese" , name : "Sliced Swiss Cheese" , aisle : "Dairy" , packageSize : 10 , baseUnit : "each" , packageLabel : "10 slices" , price : 3.49 } ,
{ id : "romano" , name : "Grated Romano Cheese" , aisle : "Dairy" , packageSize : 5 * OZ , baseUnit : "g" , packageLabel : "5 oz" , price : 3.99 , gramsPerMl : 0.42 } ,
{ id : "buttermilk" , name : "Buttermilk" , aisle : "Dairy" , packageSize : 32 * FL_OZ , baseUnit : "ml" , packageLabel : "1 quart" , price : 2.69 } ,
{ id : "evaporated_milk" , name : "Evaporated Milk" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "12 oz can" , price : 1.49 } ,
// Produce & frozen
{ id : "shallots" , name : "Shallot" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.89 } ,
{ id : "fresh_parsley" , name : "Fresh Parsley" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 bunch" , price : 1.19 } ,
{ id : "fresh_rosemary" , name : "Fresh Rosemary" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "0.75 oz pack" , price : 2.79 } ,
{ id : "fresh_thyme" , name : "Fresh Thyme" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "0.75 oz pack" , price : 2.79 } ,
{ id : "frozen_spinach" , name : "Frozen Chopped Spinach" , aisle : "Frozen" , packageSize : 10 * OZ , baseUnit : "g" , packageLabel : "10 oz box" , price : 1.59 , gramsPerMl : 0.6 } ,
// Pantry: cans, jars, condiments
{ id : "capers" , name : "Capers" , aisle : "Pantry" , packageSize : 3.5 * OZ , baseUnit : "g" , packageLabel : "3.5 oz jar" , price : 2.99 , gramsPerMl : 0.6 } ,
{ id : "white_wine" , name : "Dry White Wine (or cooking wine)" , aisle : "Pantry" , packageSize : 750 , baseUnit : "ml" , packageLabel : "750 ml bottle" , price : 6.99 } ,
{ id : "sangria" , name : "Sangria Wine" , aisle : "Pantry" , packageSize : 750 , baseUnit : "ml" , packageLabel : "750 ml bottle" , price : 6.99 } ,
{ id : "chicken_bouillon" , name : "Chicken Bouillon Granules" , aisle : "Pantry" , packageSize : 3.75 * OZ , baseUnit : "g" , packageLabel : "3.75 oz jar" , price : 1.99 , gramsPerMl : 0.8 } ,
{ id : "sun_dried_tomatoes" , name : "Sun-Dried Tomatoes in Oil" , aisle : "Pantry" , packageSize : 8.5 * OZ , baseUnit : "g" , packageLabel : "8.5 oz jar" , price : 4.49 , gramsPerMl : 0.5 } ,
{ id : "spanish_olives" , name : "Spanish Olives (pitted)" , aisle : "Pantry" , packageSize : 5.75 * OZ , baseUnit : "g" , packageLabel : "5.75 oz jar" , price : 2.69 , gramsPerMl : 0.6 } ,
{ id : "black_olives" , name : "Sliced Black Olives" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "6 oz can" , price : 1.79 } ,
{ id : "artichoke_hearts" , name : "Artichoke Hearts, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "14 oz can" , price : 2.99 } ,
{ id : "french_fried_onions" , name : "French Fried Onions" , aisle : "Pantry" , packageSize : 6 * OZ , baseUnit : "g" , packageLabel : "6 oz canister" , price : 3.99 } ,
{ id : "rotel" , name : "Diced Tomatoes & Green Chiles" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "10 oz can" , price : 1.35 } ,
{ id : "stewed_tomatoes" , name : "Italian-Style Stewed Tomatoes" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "14.5 oz can" , price : 1.39 } ,
{ id : "mango_peach_salsa" , name : "Mango Peach Salsa" , aisle : "International" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz jar" , price : 3.49 , gramsPerMl : 1.05 } ,
{ id : "balsamic_vinegar" , name : "Balsamic Vinegar" , aisle : "Spices & Sauces" , packageSize : 500 , baseUnit : "ml" , packageLabel : "16.9 oz bottle" , price : 3.69 } ,
{ id : "dijon_mustard" , name : "Dijon Mustard" , aisle : "Spices & Sauces" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz jar" , price : 2.49 , gramsPerMl : 1.05 } ,
{ id : "horseradish" , name : "Prepared Horseradish" , aisle : "Spices & Sauces" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz jar" , price : 2.69 , gramsPerMl : 1.0 } ,
{ id : "chili_oil" , name : "Chili Oil" , aisle : "International" , packageSize : 207 , baseUnit : "ml" , packageLabel : "7 oz bottle" , price : 3.99 } ,
{ id : "crackers" , name : "Butter Crackers" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "13.7 oz box" , price : 3.49 } ,
{ id : "saltines" , name : "Saltine Crackers" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz box" , price : 2.99 } ,
// Baking
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "baking_soda" , name : "Baking Soda" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb box" , price : 1.19 , gramsPerMl : 1.0 , pantryStaple : true } ,
2026-10-31 20:44:29 -05:00
{ id : "vanilla_extract" , name : "Vanilla Extract" , aisle : "Pantry" , packageSize : 2 * FL_OZ , baseUnit : "ml" , packageLabel : "2 oz bottle" , price : 5.49 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "mint_extract" , name : "Pure Peppermint Extract" , aisle : "Pantry" , packageSize : FL_OZ , baseUnit : "ml" , packageLabel : "1 oz bottle" , price : 3.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "powdered_sugar" , name : "Powdered Sugar" , aisle : "Pantry" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb bag" , price : 2.59 , gramsPerMl : 0.5 } ,
{ id : "shortening" , name : "Vegetable Shortening" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz can" , price : 3.79 , gramsPerMl : 0.8 } ,
{ id : "molasses" , name : "Molasses" , aisle : "Pantry" , packageSize : 12 * FL_OZ , baseUnit : "ml" , packageLabel : "12 oz bottle" , price : 4.29 } ,
{ id : "pecans" , name : "Chopped Pecans" , aisle : "Pantry" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz bag" , price : 5.99 , gramsPerMl : 0.45 } ,
{ id : "marshmallow_creme" , name : "Marshmallow Creme" , aisle : "Pantry" , packageSize : 7 * OZ , baseUnit : "g" , packageLabel : "7 oz jar" , price : 2.29 , gramsPerMl : 0.37 } ,
{ id : "german_chocolate" , name : "German Sweet Chocolate Bar" , aisle : "Pantry" , packageSize : 4 * OZ , baseUnit : "g" , packageLabel : "4 oz bar" , price : 3.49 } ,
{ id : "dark_chocolate_chips" , name : "Dark Chocolate Chips" , aisle : "Pantry" , packageSize : 10 * OZ , baseUnit : "g" , packageLabel : "10 oz bag" , price : 3.99 , gramsPerMl : 0.7 } ,
{ id : "caramels" , name : "Milk Caramels" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "11 oz bag" , price : 3.49 } ,
{ id : "peppermint_kisses" , name : "Candy Cane Kisses" , aisle : "Pantry" , packageSize : 45 , baseUnit : "each" , packageLabel : "9 oz bag (~45)" , price : 4.49 } ,
// Spices
{ id : "cayenne" , name : "Ground Cayenne Pepper" , aisle : "Spices & Sauces" , packageSize : 1.5 * OZ , baseUnit : "g" , packageLabel : "1.5 oz" , price : 1.99 , gramsPerMl : 0.45 } ,
{ id : "coriander" , name : "Ground Coriander" , aisle : "Spices & Sauces" , packageSize : 0.9 * OZ , baseUnit : "g" , packageLabel : "0.9 oz" , price : 2.29 , gramsPerMl : 0.4 } ,
{ id : "nutmeg" , name : "Ground Nutmeg" , aisle : "Spices & Sauces" , packageSize : 1.1 * OZ , baseUnit : "g" , packageLabel : "1.1 oz" , price : 3.49 , gramsPerMl : 0.45 } ,
{ id : "ground_ginger" , name : "Ground Ginger" , aisle : "Spices & Sauces" , packageSize : 0.8 * OZ , baseUnit : "g" , packageLabel : "0.8 oz" , price : 2.29 , gramsPerMl : 0.45 } ,
{ id : "onion_powder" , name : "Onion Powder" , aisle : "Spices & Sauces" , packageSize : 2.6 * OZ , baseUnit : "g" , packageLabel : "2.6 oz" , price : 1.99 , gramsPerMl : 0.45 } ,
{ id : "garlic_salt" , name : "Garlic Salt" , aisle : "Spices & Sauces" , packageSize : 3.25 * OZ , baseUnit : "g" , packageLabel : "3.25 oz" , price : 1.89 , gramsPerMl : 1.0 } ,
{ id : "dried_oregano" , name : "Dried Oregano" , aisle : "Spices & Sauces" , packageSize : 0.87 * OZ , baseUnit : "g" , packageLabel : "0.87 oz" , price : 1.89 , gramsPerMl : 0.25 } ,
{ id : "dried_basil" , name : "Dried Basil" , aisle : "Spices & Sauces" , packageSize : 0.62 * OZ , baseUnit : "g" , packageLabel : "0.62 oz" , price : 1.89 , gramsPerMl : 0.25 } ,
{ id : "dried_thyme" , name : "Dried Thyme" , aisle : "Spices & Sauces" , packageSize : 0.75 * OZ , baseUnit : "g" , packageLabel : "0.75 oz" , price : 1.89 , gramsPerMl : 0.3 } ,
{ id : "dried_parsley" , name : "Dried Parsley Flakes" , aisle : "Spices & Sauces" , packageSize : 0.5 * OZ , baseUnit : "g" , packageLabel : "0.5 oz" , price : 1.89 , gramsPerMl : 0.1 } ,
{ id : "dried_rosemary" , name : "Dried Rosemary" , aisle : "Spices & Sauces" , packageSize : 0.75 * OZ , baseUnit : "g" , packageLabel : "0.75 oz" , price : 1.89 , gramsPerMl : 0.25 } ,
// --- Big recipe expansion ------------------------------------------------------
// Meat & deli
{ id : "rotisserie_chicken" , name : "Rotisserie Chicken (meat only)" , aisle : "Meat & Eggs" , packageSize : 1.5 * LB , baseUnit : "g" , packageLabel : "1 whole bird (~1.5 lb meat)" , price : 6.99 , gramsPerMl : 0.59 } ,
{ id : "chicken_drumsticks" , name : "Chicken Drumsticks" , aisle : "Meat & Eggs" , packageSize : 3 * LB , baseUnit : "g" , packageLabel : "3 lb family pack" , price : 5.22 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "ground_chicken" , name : "Ground Chicken" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb pack" , price : 4.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "pork_chops" , name : "Boneless Pork Chops" , aisle : "Meat & Eggs" , packageSize : 2 * LB , baseUnit : "g" , packageLabel : "2 lb pack" , price : 9.1 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "beef_stew_meat" , name : "Beef Stew Meat" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb tray" , price : 7.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "diced_ham" , name : "Diced Ham" , aisle : "Meat & Eggs" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz pack" , price : 3.29 , gramsPerMl : 0.6 } ,
{ id : "hot_dogs" , name : "Beef Franks" , aisle : "Meat & Eggs" , packageSize : 8 , baseUnit : "each" , packageLabel : "8 ct" , price : 4.49 } ,
{ id : "frozen_meatballs" , name : "Frozen Homestyle Meatballs" , aisle : "Frozen" , packageSize : 26 * OZ , baseUnit : "g" , packageLabel : "26 oz bag" , price : 6.49 } ,
{ id : "chorizo" , name : "Pork Chorizo" , aisle : "Meat & Eggs" , packageSize : 9 * OZ , baseUnit : "g" , packageLabel : "9 oz pack" , price : 2.79 } ,
{ id : "pepperoni" , name : "Sliced Pepperoni" , aisle : "Meat & Eggs" , packageSize : 6 * OZ , baseUnit : "g" , packageLabel : "6 oz pack" , price : 3.29 } ,
{ id : "deli_turkey" , name : "Sliced Deli Turkey" , aisle : "Meat & Eggs" , packageSize : 9 * OZ , baseUnit : "g" , packageLabel : "9 oz tub" , price : 4.29 } ,
{ id : "canned_chicken" , name : "Chunk Chicken Breast, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "12.5 oz can" , price : 2.99 } ,
{ id : "spam" , name : "Spam Classic" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "12 oz can" , price : 3.79 } ,
// Seafood
{ id : "fish_sticks" , name : "Frozen Breaded Fish Sticks" , aisle : "Seafood" , packageSize : 24.6 * OZ , baseUnit : "g" , packageLabel : "24.6 oz box" , price : 5.99 } ,
{ id : "canned_salmon" , name : "Pink Salmon, canned" , aisle : "Seafood" , packageSize : 1 , baseUnit : "each" , packageLabel : "14.75 oz can" , price : 4.29 } ,
// Dairy & refrigerated
{ id : "cream_cheese" , name : "Cream Cheese" , aisle : "Dairy" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz brick" , price : 2.69 , gramsPerMl : 0.95 } ,
{ id : "ricotta" , name : "Whole Milk Ricotta" , aisle : "Dairy" , packageSize : 15 * OZ , baseUnit : "g" , packageLabel : "15 oz tub" , price : 3.49 , gramsPerMl : 1.0 } ,
{ id : "biscuit_dough" , name : "Refrigerated Biscuits" , aisle : "Dairy" , packageSize : 8 , baseUnit : "each" , packageLabel : "8 ct can" , price : 1.99 } ,
{ id : "crescent_rolls" , name : "Refrigerated Crescent Rolls" , aisle : "Dairy" , packageSize : 8 , baseUnit : "each" , packageLabel : "8 ct can" , price : 2.79 } ,
{ id : "pizza_dough" , name : "Refrigerated Pizza Crust" , aisle : "Dairy" , packageSize : 1 , baseUnit : "each" , packageLabel : "13.8 oz can" , price : 2.99 } ,
{ id : "tortellini" , name : "Refrigerated Cheese Tortellini" , aisle : "Dairy" , packageSize : 20 * OZ , baseUnit : "g" , packageLabel : "20 oz pack" , price : 4.79 } ,
{ id : "gnocchi" , name : "Potato Gnocchi" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz pack" , price : 2.79 } ,
// Produce
{ id : "mushrooms" , name : "White Mushrooms" , aisle : "Produce" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz pack" , price : 2.39 , gramsPerMl : 0.3 } ,
{ id : "zucchini" , name : "Zucchini" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 1.09 } ,
{ id : "cabbage" , name : "Green Cabbage" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 head" , price : 2.29 } ,
{ id : "romaine" , name : "Romaine Hearts" , aisle : "Produce" , packageSize : 3 , baseUnit : "each" , packageLabel : "3 ct bag" , price : 3.49 } ,
{ id : "apples" , name : "Gala Apple" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.79 } ,
// Frozen
{ id : "frozen_peas" , name : "Frozen Sweet Peas" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 1.69 , gramsPerMl : 0.6 } ,
{ id : "frozen_green_beans" , name : "Frozen Cut Green Beans" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 1.69 } ,
{ id : "frozen_hash_browns" , name : "Frozen Shredded Hash Browns" , aisle : "Frozen" , packageSize : 30 * OZ , baseUnit : "g" , packageLabel : "30 oz bag" , price : 3.49 , gramsPerMl : 0.4 } ,
{ id : "frozen_fries" , name : "Frozen Crinkle Fries" , aisle : "Frozen" , packageSize : 32 * OZ , baseUnit : "g" , packageLabel : "32 oz bag" , price : 3.69 } ,
{ id : "potstickers" , name : "Frozen Pork Potstickers" , aisle : "Frozen" , packageSize : 20 * OZ , baseUnit : "g" , packageLabel : "20 oz bag" , price : 6.29 } ,
{ id : "cauliflower_rice" , name : "Frozen Riced Cauliflower" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 2.39 } ,
// Bakery & bread
{ id : "corn_tortillas" , name : "White Corn Tortillas" , aisle : "Bakery" , packageSize : 30 , baseUnit : "each" , packageLabel : "30 ct" , price : 2.49 } ,
{ id : "hamburger_buns" , name : "Hamburger Buns" , aisle : "Bakery" , packageSize : 8 , baseUnit : "each" , packageLabel : "8 ct" , price : 2.19 } ,
{ id : "hot_dog_buns" , name : "Hot Dog Buns" , aisle : "Bakery" , packageSize : 8 , baseUnit : "each" , packageLabel : "8 ct" , price : 2.19 } ,
{ id : "hoagie_rolls" , name : "Hoagie Rolls" , aisle : "Bakery" , packageSize : 6 , baseUnit : "each" , packageLabel : "6 ct" , price : 2.99 } ,
{ id : "english_muffins" , name : "English Muffins" , aisle : "Bakery" , packageSize : 6 , baseUnit : "each" , packageLabel : "6 ct" , price : 2.49 } ,
{ id : "bagels" , name : "Plain Bagels" , aisle : "Bakery" , packageSize : 6 , baseUnit : "each" , packageLabel : "6 ct" , price : 3.29 } ,
{ id : "naan" , name : "Garlic Naan" , aisle : "Bakery" , packageSize : 4 , baseUnit : "each" , packageLabel : "4 ct" , price : 4.29 } ,
// Pantry: grains & pasta
{ id : "egg_noodles" , name : "Wide Egg Noodles" , aisle : "Pantry" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 2.19 } ,
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "lasagna_noodles" , name : "Lasagna Noodles" , aisle : "Pantry" , packageSize : LB , baseUnit : "g" , packageLabel : "16 oz box" , price : 1.89 } ,
2026-10-31 20:44:29 -05:00
{ id : "rice_noodles" , name : "Thin Rice Noodles" , aisle : "International" , packageSize : 14 * OZ , baseUnit : "g" , packageLabel : "14 oz pack" , price : 2.99 } ,
{ id : "quinoa" , name : "Quinoa" , aisle : "Pantry" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 3.99 , gramsPerMl : 0.72 } ,
{ id : "couscous" , name : "Couscous" , aisle : "Pantry" , packageSize : 10 * OZ , baseUnit : "g" , packageLabel : "10 oz box" , price : 2.79 , gramsPerMl : 0.73 } ,
{ id : "panko" , name : "Panko Breadcrumbs" , aisle : "Pantry" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz canister" , price : 2.49 , gramsPerMl : 0.25 } ,
{ id : "tortilla_chips" , name : "Tortilla Chips" , aisle : "Pantry" , packageSize : 13 * OZ , baseUnit : "g" , packageLabel : "13 oz bag" , price : 3.29 } ,
{ id : "granola" , name : "Oats & Honey Granola" , aisle : "Pantry" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 3.99 , gramsPerMl : 0.4 } ,
{ id : "chocolate_chips" , name : "Semi-Sweet Chocolate Chips" , aisle : "Pantry" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 3.69 , gramsPerMl : 0.7 } ,
{ id : "cornbread_mix" , name : "Cornbread Muffin Mix" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "8.5 oz box" , price : 0.89 } ,
{ id : "sugar" , name : "Granulated Sugar" , aisle : "Pantry" , packageSize : 4 * LB , baseUnit : "g" , packageLabel : "4 lb bag" , price : 4.08 , gramsPerMl : 0.85 , pantryStaple : true } ,
// Pantry: cans & jars
{ id : "cream_of_mushroom" , name : "Cream of Mushroom Soup" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "10.5 oz can" , price : 1.39 } ,
{ id : "cream_of_chicken" , name : "Cream of Chicken Soup" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "10.5 oz can" , price : 1.39 } ,
{ id : "refried_beans" , name : "Refried Beans" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "16 oz can" , price : 1.39 } ,
{ id : "pinto_beans" , name : "Pinto Beans, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15.5 oz can" , price : 1.15 } ,
{ id : "white_beans" , name : "Cannellini Beans, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15.5 oz can" , price : 1.19 } ,
{ id : "green_chiles" , name : "Diced Green Chiles" , aisle : "International" , packageSize : 1 , baseUnit : "each" , packageLabel : "4 oz can" , price : 1.25 } ,
{ id : "chipotle_adobo" , name : "Chipotle Peppers in Adobo" , aisle : "International" , packageSize : 1 , baseUnit : "each" , packageLabel : "7 oz can" , price : 1.99 } ,
{ id : "salsa_verde" , name : "Salsa Verde" , aisle : "International" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz jar" , price : 2.89 , gramsPerMl : 1.05 } ,
{ id : "alfredo_sauce" , name : "Alfredo Pasta Sauce" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15 oz jar" , price : 2.69 } ,
{ id : "tomato_sauce" , name : "Tomato Sauce, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15 oz can" , price : 1.05 } ,
{ id : "canned_pumpkin" , name : "Pure Pumpkin, canned" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "15 oz can" , price : 2.29 } ,
// Sauces & condiments
{ id : "ketchup" , name : "Ketchup" , aisle : "Spices & Sauces" , packageSize : 38 * OZ , baseUnit : "g" , packageLabel : "38 oz bottle" , price : 3.19 , gramsPerMl : 1.15 } ,
{ id : "mustard" , name : "Yellow Mustard" , aisle : "Spices & Sauces" , packageSize : 20 * OZ , baseUnit : "g" , packageLabel : "20 oz bottle" , price : 1.49 , gramsPerMl : 1.05 } ,
{ id : "worcestershire" , name : "Worcestershire Sauce" , aisle : "Spices & Sauces" , packageSize : 10 * FL_OZ , baseUnit : "ml" , packageLabel : "10 oz bottle" , price : 2.39 } ,
{ id : "hot_sauce" , name : "Louisiana Hot Sauce" , aisle : "Spices & Sauces" , packageSize : 12 * FL_OZ , baseUnit : "ml" , packageLabel : "12 oz bottle" , price : 1.79 } ,
{ id : "buffalo_sauce" , name : "Buffalo Wing Sauce" , aisle : "Spices & Sauces" , packageSize : 12 * FL_OZ , baseUnit : "ml" , packageLabel : "12 oz bottle" , price : 2.89 } ,
{ id : "ranch" , name : "Ranch Dressing" , aisle : "Spices & Sauces" , packageSize : 16 * FL_OZ , baseUnit : "ml" , packageLabel : "16 oz bottle" , price : 2.79 } ,
{ id : "italian_dressing" , name : "Italian Dressing" , aisle : "Spices & Sauces" , packageSize : 16 * FL_OZ , baseUnit : "ml" , packageLabel : "16 oz bottle" , price : 1.99 } ,
{ id : "apple_cider_vinegar" , name : "Apple Cider Vinegar" , aisle : "Spices & Sauces" , packageSize : 16 * FL_OZ , baseUnit : "ml" , packageLabel : "16 oz bottle" , price : 1.99 } ,
{ id : "hoisin" , name : "Hoisin Sauce" , aisle : "International" , packageSize : 8.5 * OZ , baseUnit : "g" , packageLabel : "8.5 oz jar" , price : 3.49 , gramsPerMl : 1.2 } ,
{ id : "oyster_sauce" , name : "Oyster Sauce" , aisle : "International" , packageSize : 9 * OZ , baseUnit : "g" , packageLabel : "9 oz bottle" , price : 2.99 , gramsPerMl : 1.2 } ,
{ id : "sweet_chili_sauce" , name : "Sweet Chili Sauce" , aisle : "International" , packageSize : 12 * FL_OZ , baseUnit : "ml" , packageLabel : "12 oz bottle" , price : 2.99 } ,
{ id : "miso" , name : "White Miso Paste" , aisle : "International" , packageSize : 14 * OZ , baseUnit : "g" , packageLabel : "14 oz tub" , price : 5.49 , gramsPerMl : 1.15 } ,
{ id : "garlic_powder" , name : "Garlic Powder" , aisle : "Spices & Sauces" , packageSize : 3.4 * OZ , baseUnit : "g" , packageLabel : "3.4 oz" , price : 1.99 , gramsPerMl : 0.5 } ,
{ id : "red_pepper_flakes" , name : "Crushed Red Pepper" , aisle : "Spices & Sauces" , packageSize : 1.5 * OZ , baseUnit : "g" , packageLabel : "1.5 oz" , price : 1.89 , gramsPerMl : 0.4 } ,
// --- Added for the expanded cuisines ------------------------------------------
Move UI to BoardUI with slate + salmon theme; add PDF plan export
- Adopt BoardUI (Pro init): theme tokens, Inter, .dark mode, Button,
SegmentedControl, Meter, Skeleton and ThemeToggle; remap the app's
color aliases onto BoardUI tokens and swap lucide for Remix icons
- Retint BoardUI's neutral ramp to cool slate with a salmon accent;
drop the dotted background; raise muted text contrast
- Simplify the landing page and remove the overlap explorer
- Planner: explicit "I have this" toggle on grocery lines, pantry panel
above the menu with the staples list spelled out, sticky aisle
header fix, and a "Download PDF" plan export (jsPDF, lazy-loaded)
- Recipes: replace the family cabbage soup with Cade's Cabbage Soup
(adds Bone-In Ham Steak to the catalog); remove Ham, Bean & Cabbage Soup
- Remove unused BoardUI components, dependencies and exports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:36:33 -06:00
{ id : "ground_pork" , name : "Ground Pork" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb pack" , price : 4.19 } ,
{ id : "breakfast_sausage" , name : "Original Pork Sausage Roll" , aisle : "Meat & Eggs" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb roll" , price : 3.99 } ,
{ id : "shrimp" , name : "Frozen Raw Shrimp, peeled & deveined" , aisle : "Seafood" , packageSize : LB , baseUnit : "g" , packageLabel : "1 lb bag" , price : 7.99 } ,
2026-10-31 20:44:29 -05:00
{ id : "feta" , name : "Crumbled Feta" , aisle : "Dairy" , packageSize : 4 * OZ , baseUnit : "g" , packageLabel : "4 oz tub" , price : 3.29 , gramsPerMl : 0.53 } ,
{ id : "cucumber" , name : "Cucumber" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.89 } ,
{ id : "roma_tomatoes" , name : "Roma Tomato" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.48 } ,
{ id : "fresh_basil" , name : "Fresh Basil" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "0.75 oz clamshell" , price : 2.79 } ,
{ id : "jalapeno" , name : "Jalapeño Pepper" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.25 } ,
{ id : "cilantro" , name : "Cilantro" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "1 bunch" , price : 0.89 } ,
{ id : "sweet_potatoes" , name : "Sweet Potato" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each (~0.7 lb)" , price : 0.99 } ,
{ id : "plantains" , name : "Plantain" , aisle : "Produce" , packageSize : 1 , baseUnit : "each" , packageLabel : "each" , price : 0.69 } ,
{ id : "frozen_corn" , name : "Frozen Sweet Corn" , aisle : "Frozen" , packageSize : 12 * OZ , baseUnit : "g" , packageLabel : "12 oz bag" , price : 1.69 , gramsPerMl : 0.6 } ,
{ id : "grits" , name : "Quick Grits" , aisle : "Pantry" , packageSize : 24 * OZ , baseUnit : "g" , packageLabel : "24 oz canister" , price : 2.69 , gramsPerMl : 0.66 } ,
{ id : "pita_bread" , name : "Pita Bread" , aisle : "Bakery" , packageSize : 6 , baseUnit : "each" , packageLabel : "6 ct" , price : 2.99 } ,
{ id : "instant_ramen" , name : "Instant Ramen Noodles" , aisle : "International" , packageSize : 1 , baseUnit : "each" , packageLabel : "3 oz pack" , price : 0.45 } ,
{ id : "peanuts" , name : "Dry Roasted Peanuts" , aisle : "Pantry" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz jar" , price : 3.29 , gramsPerMl : 0.6 } ,
{ id : "pineapple" , name : "Pineapple, canned (chunks or slices)" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "20 oz can" , price : 1.89 } ,
{ id : "tomato_paste" , name : "Tomato Paste" , aisle : "Pantry" , packageSize : 1 , baseUnit : "each" , packageLabel : "6 oz can" , price : 0.99 } ,
{ id : "enchilada_sauce" , name : "Red Enchilada Sauce" , aisle : "International" , packageSize : 1 , baseUnit : "each" , packageLabel : "10 oz can" , price : 1.59 } ,
{ id : "sesame_oil" , name : "Toasted Sesame Oil" , aisle : "International" , packageSize : 5 * FL_OZ , baseUnit : "ml" , packageLabel : "5 oz bottle" , price : 3.49 } ,
{ id : "rice_vinegar" , name : "Rice Vinegar" , aisle : "International" , packageSize : 12 * FL_OZ , baseUnit : "ml" , packageLabel : "12 oz bottle" , price : 2.79 } ,
{ id : "teriyaki_sauce" , name : "Teriyaki Sauce" , aisle : "International" , packageSize : 10 * FL_OZ , baseUnit : "ml" , packageLabel : "10 oz bottle" , price : 2.49 } ,
{ id : "fish_sauce" , name : "Fish Sauce" , aisle : "International" , packageSize : 200 , baseUnit : "ml" , packageLabel : "6.76 oz bottle" , price : 3.29 } ,
{ id : "sriracha" , name : "Sriracha Hot Chili Sauce" , aisle : "International" , packageSize : 17 * OZ , baseUnit : "g" , packageLabel : "17 oz bottle" , price : 3.79 , gramsPerMl : 1.1 } ,
{ id : "gochujang" , name : "Gochujang (Korean Chili Paste)" , aisle : "International" , packageSize : 500 , baseUnit : "g" , packageLabel : "17.6 oz tub" , price : 6.49 , gramsPerMl : 1.2 } ,
{ id : "kimchi" , name : "Napa Cabbage Kimchi" , aisle : "International" , packageSize : 14 * OZ , baseUnit : "g" , packageLabel : "14 oz jar" , price : 5.49 , gramsPerMl : 0.75 } ,
{ id : "red_curry_paste" , name : "Thai Red Curry Paste" , aisle : "International" , packageSize : 4 * OZ , baseUnit : "g" , packageLabel : "4 oz jar" , price : 3.69 , gramsPerMl : 1.1 } ,
{ id : "ginger_paste" , name : "Ginger Paste (tube)" , aisle : "Produce" , packageSize : 4 * OZ , baseUnit : "g" , packageLabel : "4 oz tube" , price : 3.79 , gramsPerMl : 1.1 } ,
{ id : "cajun_seasoning" , name : "Creole / Cajun Seasoning" , aisle : "Spices & Sauces" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz canister" , price : 3.29 , gramsPerMl : 0.6 } ,
{ id : "jerk_seasoning" , name : "Jamaican Jerk Seasoning" , aisle : "Spices & Sauces" , packageSize : 3 * OZ , baseUnit : "g" , packageLabel : "3 oz" , price : 2.79 , gramsPerMl : 0.5 } ,
{ id : "frozen_mango" , name : "Frozen Mango Chunks" , aisle : "Frozen" , packageSize : 16 * OZ , baseUnit : "g" , packageLabel : "16 oz bag" , price : 3.99 , gramsPerMl : 0.6 } ,
{ id : "orange_juice" , name : "100% Orange Juice" , aisle : "Dairy" , packageSize : 52 * FL_OZ , baseUnit : "ml" , packageLabel : "52 oz bottle" , price : 4.49 } ,
{ id : "almond_milk" , name : "Unsweetened Almond Milk" , aisle : "Dairy" , packageSize : 64 * FL_OZ , baseUnit : "ml" , packageLabel : "half gallon" , price : 2.99 } ,
{ id : "cocoa_powder" , name : "Unsweetened Cocoa Powder" , aisle : "Pantry" , packageSize : 8 * OZ , baseUnit : "g" , packageLabel : "8 oz canister" , price : 4.49 , gramsPerMl : 0.36 } ,
{ id : "cinnamon" , name : "Ground Cinnamon" , aisle : "Spices & Sauces" , packageSize : 2.37 * OZ , baseUnit : "g" , packageLabel : "2.37 oz" , price : 1.99 , gramsPerMl : 0.53 } ,
] ;
export const CATALOG_BY_ID : ReadonlyMap < ItemId , StoreItem > = new Map ( CATALOG . map ( ( item ) = > [ item . id , item ] ) ) ;
/** Default "have it" list for new users: the basic pantry staples. */
export const PANTRY_STAPLE_IDS : ItemId [ ] = CATALOG . filter ( ( item ) = > item . pantryStaple ) . map ( ( item ) = > item . id ) ;