feat: added db entries

This commit is contained in:
Alexey Dubovskoy 2025-09-03 18:57:49 +01:00
parent 12af78ae11
commit d555bb85e3
54 changed files with 823 additions and 153 deletions

4
.shopping_list.txt Normal file
View File

@ -0,0 +1,4 @@
# Shopping List
# Format: path<TAB>name<TAB>scale
Breakfast/Mexican Style Burrito Mexican Style Burrito 3

View File

@ -2,7 +2,7 @@
time required: 90 minutes
---
===== Nut roll ======
===== Dough ======
Add @sugar{1%tbsp} and @yeast{15%g} to the warm @milk{250%ml}.
Mix well until the yeast is fully dissolved. ss

View File

@ -1,11 +1,12 @@
---
quick: true
tags: [quick]
servings: 4
prep time: 10 minutes
cook time: 15 minutes
my tag: hehe
---
Crack the @eggs{3} into a blender, then add the @plain flour{125%g}, @milk{250%ml} and @sea salt{1%pinch}, and blitz until smooth.
Crack the @eggs{3} into a blender, then add the @plain flour{125%g}, @milk{250%ml} and @sea salt{1%pinch}, and blitz until smooth. Add more @milk{1%cup}
Pour into a #bowl and leave to stand for ~{20%minutes}.

View File

@ -2,14 +2,14 @@
servings: 2
complexity: easy
tags:
- breakfast
- breakfast
---
Coarsely grate the @cheddar cheese{25%g}(grated). Cut @lime{} in half and one half into 2 wedges.
> my grand ba did that
Loosely wrap the @tortillas{2%large} in tin foil then pop in the hot oven to warm through, along with two plates. Finely chop the @red chilli{0.5} and put it aside for later.
Loosely wrap the @tortillas{2%large} in tin foil then pop in the hot oven to warm through, along with two plates.
Make your table look respectable - get the cutlery, salt and pepper and drinks laid out nicely.
@ -17,7 +17,7 @@ Put a small non-stick saucepan on a low heat. Add the @butter{20%g} and leave to
Crack the @eggs{3%large} into a bowl, add a pinch of @salt{} and @black pepper{} and beat with a fork. When the buter has melted, add the eggs to the pan. Stir the eggs slowly with a spatula, getting right into the sides of the pan. Cook gently for 5 to 10 minutes until they just start to scramble then turn the heat off - they'll continute to cook on their own.
Get two plates and pop a warm tortilla on each one. Divide the scrambled eggs between them then top with a good spoonful of you home-made @./Components/Beans{}.
Get two plates and pop a warm tortilla on each one. Divide the scrambled eggs between them then top with a good spoonful of you home-made @./Components/Beans{2%servings}.
Scatter each portion with grated cheese and as much chilli as youdare, then roll each tortilla up.

View File

@ -4,8 +4,6 @@ servings: 6
Preheat your oven to the lowest setting. Drain the @cannellini beans{2%tins} in a sieve. Place a saucepan on a medium heat.
Peel and dinely slice the @garlic clove{2}. Add the @olive oil{1%tbsp} and sliced garlic to the hot pan.
Crubmle the @red chilli{1%item} into the pan, then stir and fry until the grlic turns golden.
Peel and dinely slice the @garlic clove{2}. Add the @olive oil{1%tbsp} and sliced garlic to the hot pan. Fry until the grlic turns golden.
Add the @tin tomatoes{2%tins} and drained cannellini beans to the pan, reduce to a low heat and simmer gently for around 20 minutes, or until reduced and nice and thick.

View File

@ -1,9 +0,0 @@
---
prep time: 15 min
---
Mix together @pork mince 10%{400%g}, @beef mince 5%{400%g}, @wholemeal flour{1/2%cup} and @onion{1%medium}(finely chopped) and stir in #stand mixer{}.
Make round pieces and put into the #freezer.

View File

@ -0,0 +1,15 @@
---
servings: 2
---
Fill large #pan with water, add a bit of @salt and bring to boil.
Put @wholegrain spaghetti{200%g}, reduce heat and boil for ~{10%minutes}.
Meanwhile brown @minced beef{200%g}, add @onion{1} and cook for a few minutes.
Add pre-made @bolognese pasta sauce{1/2%jar} and cook for another few minutes.
Mix everything, add @salt and @pepper to taste.
Grate @parmesan{} over plate and garnish with @parsley.

View File

@ -1,41 +0,0 @@
==Day 1==
Breakfast:
- @./Breakfast/Easy Pancakes{10%servings} with @syrup{2%tbsp}
- @coffee{1%cup}
Lunch:
- @./Lunches/Navy Pasta{1}
- @bread{2%slices} with @butter{1%tbsp}
Dinner:
- @./Dinners/Fried Rice{500%g}
- @soy sauce{1%tbsp}
==Day 2==
Breakfast:
- @./Breakfast/Oats{1} with @milk{1/2%cup} and @sugar{1%tsp}
- @orange juice{1%glass}
Lunch:
- @./Lunches/Spaghetti carbonara{1}
- @parmesan cheese{2%tbsp}
Dinner:
- @./Dinners/Meatballs{1} with @pasta{1%cup}
- @tomato sauce{1/4%cup}
==Day 3==
Breakfast:
- @scrambled eggs{2} with @toast{2%slices}
- @coffee{1%cup}
Lunch:
- @./Slowcooker/Slow cooker chicken soup{1}
- @crackers{1%package}
Dinner:
- @./Dinners/Carbonara{1}
- @garlic bread{2%slices}

69
Plans/3 Day Plan I.menu Normal file
View File

@ -0,0 +1,69 @@
---
servings: 2
---
==Day 0==
-- delivery around 4pm
Dinner:
- @hake fillet{2}(baked) with @./Sides/Mashed Potatoes{2%servings} and @sourdough bread{1%slice}
- @./Salads/Boring{2%servings}
-- do prep for burrito
==Day 1==
Breakfast:
- @./Breakfast/Mexican Style Burrito{2%servings}
- @filter coffee{1%cup} and @tea{1%cup}
Lunch:
- @./Lunches/Spaghetti Bolognese{}
- @./Salads/Boring{2%servings}
Dinner:
- @./Salads/Caprese{2}
==Day 2==
Breakfast:
- @./Breakfast/Mexican Style Burrito{2%servings}
- @filter coffee{1%cup} and @tea{1%cup}
Lunch:
- @./Slowcooker/Slow-cooker beef stew{1/2} with @rice{1%cup}(boiled)
- @tea{2%cup}
Dinner:
- @./Salads/Prawn Evening Salad{2} + @sourdough bread{1%slice}
==Day 3==
Breakfast:
- @./Breakfast/Mexican Style Burrito{2%servings}
- @filter coffee{1%cup} and @tea{1%cup}
Lunch:
- @./Slowcooker/Slow-cooker beef stew{1/2} with @./Sides/Mashed Potatoes{2%servings}
- @tea{2%cup}
-- dinner from a new order
== Snacks ==
- @kefir{2}
- @dates
- @apples
- @kiwi
- @Parma ham{2}
- @smoked salmon{2}
- @yogurt biscuits{3}
- @sourdough bread{}
== Batch Prep ==
- @./Freezable/Kotletter{}
== Baby ==
- @cotton pads{2}

View File

@ -1,5 +1,5 @@
items:
{% for ingredient in get_ingredient_list(ingredients) %}
{% for ingredient in excluding_pantry(get_ingredient_list(ingredients)) %}
- name: {{ingredient.name}}
amount: {{ingredient.quantities}}
link: {{ db(underscore(ingredient.name) ~ ".shopping.supervalu.opt_1.url") }}

7
Salads/Boring.cook Normal file
View File

@ -0,0 +1,7 @@
---
servings: 2
---
Mix @cherry tomatoes{8}, @English cucumber{1/4}, @radish{6}, @salad leaves{80%g}
Top with @extra virgin olive oil{}

View File

@ -1 +1,16 @@
TODO
---
course: Salad
cuisine: Italian
prep time: 15 minutes
servings: 1
source: "https://natashaskitchen.com/caprese-salad-recipe"
tags: quick
time required: 15 minutes
---
Start by layering slices of @tomatoes{1%large} on a #serving platter{}.
Tuck slices of @buffalo mozzarella{2%balls} between each tomato so both are visible then tuck whole @basil{1%bunch} leaves between the cheese and tomatoes. Arrange the slices so you can see every layer.
Just before serving, season generously with @salt, drizzle all over with @olive oil{1%tbsp}, and drizzle with @balsamic glaze{1%tbsp}.

218
Salads/building menus Normal file
View File

@ -0,0 +1,218 @@
building menus
- search top-rated ... recipe
- remember previous days back, record it as a plan
```
cook shopping-list --base-path /Users/alexeydubovskoy/recipes --ingredients-only "Plans/3 Day Plan I.menu" | cargo run -- scrape
```
Starting to scrape 35 products from SuperValu...
Scraping: Bolognese Pasta Sauce
🔗 Navigating to: https://shop.supervalu.ie/sm/delivery/rsid/404/results?q=Bolognese%20Pasta%20Sauce
⏳ Waiting for page to load...
🍪 Handling cookie consent...
🔍 Waiting for products to load...
📦 Found 3 products
✓ Saved shopping data to: "../config/db/bolognese_pasta_sauce/shopping.yml"
✓ Successfully scraped Bolognese Pasta Sauce
cargo run login
🔐 Logging in to SuperValu...
🍪 Handling cookie consent...
🔐 Logging in to SuperValu...
✅ Successfully logged in
✅ Login successful! Cookies saved to: "/Users/alexeydubovskoy/Library/Application Support/shop-automation/supervalu_cookies.json"
You can now use the 'shop' command without logging in each time.
recipes git:(main) ✗ /Users/alexeydubovskoy/cooklang/CookCLI/target/debug/cook -vvv report -t Reports/shopping-list.yaml.jinja -d config/db -p config/pantry.conf "Plans/3 Day Plan I.menu" | shop-automation/target/debug/shop-automation shop - --visible
WARN ⚠️ The report command is a prototype feature and will change in future versions.
TRACE checking auto aisle file: /Users/alexeydubovskoy/recipes/config/aisle.conf
Warning in aisle file: Duplicate ingredient: 'carrots'
Warning in 'Salads/Prawn Evening Salad': Invalid timer quantity: missing unit
Warning: key 'english_cucumber.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'parma_ham.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'bay_leaves.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'beef_mince_5%.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'cheddar_cheese.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'coriander.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'coriander_leaves.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'eggs.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'hake_fillet.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'kefir.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'kiwi.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'lime.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'milk.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'minced_beef.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'pork_mince_10%.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'potatoes.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'radish.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'salad_leaves.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'tomato_purée.shopping.supervalu.opt_2.url' not found in datastore, using empty value
Warning: key 'tortillas.shopping.supervalu.opt_2.url' not found in datastore, using empty value
🛒 Starting shopping automation with 35 items
🌐 Navigating to SuperValu...
🍪 Handling cookie consent...
🍪 Using saved cookies...
✅ Successfully restored session
📅 Please select your delivery slot in the browser.
Once you've selected a delivery slot, press Enter here to continue...
✅ Starting to add items to cart...
📦 [1/35] Processing: English cucumber
Amount needed: 0.5
✅ Added to cart
📦 [2/35] Processing: Parma ham
Amount needed: 2
✅ Added to cart
📦 [3/35] Processing: apples
✅ Added to cart
📦 [4/35] Processing: avocados
Amount needed: 2
✅ Added to cart
📦 [5/35] Processing: bay leaves
Amount needed: 2
✅ Added to cart
📦 [6/35] Processing: beef mince 5%
Amount needed: 400 g
✅ Added to cart
📦 [7/35] Processing: bolognese pasta sauce
Amount needed: 1/2 jar
✅ Added to cart
📦 [8/35] Processing: buffalo mozzarella
Amount needed: 4 balls
✅ Added to cart
📦 [9/35] Processing: carrots
Amount needed: 3
✅ Added to cart
📦 [10/35] Processing: celery
Amount needed: 2 sticks
✅ Added to cart
📦 [11/35] Processing: cheddar cheese
Amount needed: 75 g
✅ Added to cart
📦 [12/35] Processing: cherry tomatoes
Amount needed: 26
✅ Added to cart
📦 [13/35] Processing: coriander
Amount needed: 1 bunch
✅ Added to cart
📦 [14/35] Processing: coriander leaves
⚠️ Item might be out of stock
📦 [15/35] Processing: cotton pads
Amount needed: 2
✅ Added to cart
📦 [16/35] Processing: dates
✅ Added to cart
📦 [17/35] Processing: eggs
Amount needed: 9 large
✅ Added to cart
📦 [18/35] Processing: hake fillet
Amount needed: 2
✅ Added to cart
📦 [19/35] Processing: kefir
Amount needed: 2
✅ Added to cart
📦 [20/35] Processing: kiwi
✅ Added to cart
📦 [21/35] Processing: lime
✅ Added to cart
📦 [22/35] Processing: milk
Amount needed: 0.4 cup
✅ Added to cart
📦 [23/35] Processing: minced beef
Amount needed: 200 g
⚠️ Item might be out of stock
📦 [24/35] Processing: pork mince 10%
Amount needed: 400 g
✅ Added to cart
📦 [25/35] Processing: potatoes
Amount needed: 0.8 kg
✅ Added to cart
📦 [26/35] Processing: radish
Amount needed: 12
✅ Added to cart
📦 [27/35] Processing: roast beef
Amount needed: 900 g
✅ Added to cart
📦 [28/35] Processing: salad leaves
Amount needed: 160 g
✅ Added to cart
📦 [29/35] Processing: smoked salmon
Amount needed: 2
✅ Added to cart
📦 [30/35] Processing: sour cream
Amount needed: 12 tbsp
✅ Added to cart
📦 [31/35] Processing: sourdough bread
Amount needed: 2 slice
✅ Added to cart
📦 [32/35] Processing: tomato purée
Amount needed: 2 tbsp
✅ Added to cart
📦 [33/35] Processing: tomatoes
Amount needed: 2 large
✅ Added to cart
📦 [34/35] Processing: tortillas
Amount needed: 6 large
✅ Added to cart
📦 [35/35] Processing: yogurt biscuits
Amount needed: 3
✅ Added to cart
============================================================
📊 SHOPPING SUMMARY
============================================================
✅ Successfully added: 33 items
❌ Failed to add 2 items:
- coriander leaves
- minced beef
============================================================
🛒 Browser is ready for checkout.
Review your cart and complete your purchase.
Press Enter here when you're done to close the browser...
✅ Shopping session complete!

View File

@ -0,0 +1,21 @@
---
cook time: 20 minutes
course: Side Dish
cuisine: American
prep time: 15 minutes
servings: 10
source: "https://www.spendwithpennies.com/how-to-make-mashed-potatoes"
tags: best, easy, homemade, mashed potatoes, Thanksgiving
time required: 35 minutes
---
Peel and quarter @potatoes{2%kg}, place in a #pot{} of cold salted water.
Add cloves of @garlic{3%cloves} (if using) & bring to a boil, cook uncovered for ~{15%minutes} or until fork-tender. Drain well.
Heat @milk{1%cup} on the stove top (or in the microwave) until warm.
Add @butter{1/3%cup} to the potatoes and begin mashing. Pour in heated milk a little at a time while using a #potato masher{} to reach desired consistency.
Season with @salt and @pepper. Serve hot.

View File

@ -1,15 +0,0 @@
---
title: Beef Slow Cooker
---
Season the @beef chuck roast{1%kg} with @salt and @ground black pepper{}.
In a #skillet, brown the beef on all sides over medium heat, then transfer to the #slow cooker{}.
Add the @onions{2}, @garlic{4 cloves}, @carrots{500g}, @potatoes{500g}, @diced tomatoes{400g}, @beef broth{200ml}, @Worcestershire sauce{2tbsp}, @dried thyme{1tsp}, and @paprika{1tsp} to the slow cooker.
Stir gently to combine.
Cover and cook on low for ~{8%hours} or high for ~{4%hours}, until the beef is tender.
Shred the beef before serving and mix it with the vegetables and sauce.

View File

@ -0,0 +1,29 @@
---
author: Lulu Grimes
cook time: 4 hours
course: Dinner, Main course, Supper
prep time: 20 minutes
servings: 4
source: "https://www.bbcgoodfood.com/recipes/slow-cooker-beef-stew"
tags: 2 of 5-a-day, Beef stew, Family, Family friendly, Fibre, Folate, Freezable, Lulu Grimes, Slow cooker
time required: 4 hours 20 minutes
---
Fry the @onion{1} and @celery{2%sticks} in 1 tbsp @oil{2%tbsp} over a low heat until they start to soften about ~{5%mins}.
Add the @carrots{3}, @bay leaves{2} and @thyme{1/2%pack}, fry for ~{2%mins}, stir in the @tomato purée{2%tbsp} and @Worcestershire sauce{2%tbsp}, add 600ml boiling @water{600%ml}, stir and tip everything into a #slow cooker{}.
Season with @pepper{} and @salt.
Clean out the #frying pan{} and fry the @roast beef{900%g} in the remaining oil in batches until it is well browned, then tip each batch into the slow cooker.
Cook on low for 8-10 hrs, or on high for 4 hrs.
If you want to thicken the gravy, mix the @cornflour{2%tsp}(optional) with a splash of cold @water{} to make a paste, then stir in 2 tbsp of the liquid from the slow cooker.
Tip back into the slow cooker, stir and cook for a further 30 mins on high.
Stir in the @parsley{1/2%small bunch} and season again to taste. Serve with mash, if you like.
Leave to cool before freezing.

View File

@ -1,5 +1,11 @@
supervalu:
opt_3:
name: SuperValu Loose Cooking Apples
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-cooking-apples-1-kg-id-1036677000
price: €2.45/kg
price_per_unit: €2.45/kg
quantity: 1 kg
opt_2:
name: SuperValu Loose Pink Lady Apples
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-pink-lady-apples-1-piece-id-1179723000
price: €0.55
@ -11,9 +17,3 @@ supervalu:
price: €1.49
price_per_unit: €0.19 each
quantity: 8 Piece
opt_2:
name: SuperValu Loose Cooking Apples
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-cooking-apples-1-kg-id-1036677000
price: €2.45/kg
price_per_unit: €2.45/kg
quantity: 1 kg

View File

@ -0,0 +1,13 @@
supervalu:
opt_1:
name: SuperValu Signature Tastes Ripe Hass Avocados
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-ripe-hass-avocados-2-piece-id-1331324001
price: €2.49
price_per_unit: €1.25 each
quantity: 2 Piece
opt_2:
name: SuperValu Signature Tastes Ripe Avocado
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-ripe-avocado-1-piece-id-1007563000
price: €1.35
price_per_unit: €1.35
quantity: 1 Piece

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: Schwartz Bay Leaves
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/schwartz-bay-leaves-3-g-id-1723634000
price: €2.50
price_per_unit: €833.33/kg
quantity: 3 g

View File

@ -0,0 +1,19 @@
supervalu:
opt_2:
name: Heinz Baked Beans
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/heinz-baked-beans-415-g-id-1011892000
price: €1.50
price_per_unit: €3.61/kg
quantity: 415 g
opt_3:
name: SuperValu Baked Beans
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-baked-beans-420-g-id-1008169000
price: €0.48
price_per_unit: €1.14/kg
quantity: 420 g
opt_1:
name: Batchelors Baked Beans
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/batchelors-baked-beans-225-g-id-1025306000
price: €1.30
price_per_unit: €5.78/kg
quantity: 225 g

View File

@ -0,0 +1,6 @@
supervalu:
opt_1:
name: SuperValu Fresh Irish Beef Round Steak Mince (454 g)
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-fresh-irish-beef-round-steak-mince-454-g-id-1390464002
price: €4.99
price_per_unit: €6.61/kg

View File

@ -0,0 +1,19 @@
supervalu:
opt_2:
name: Heinz Tomato Bolognese Pasta Sauce
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/heinz-tomato-bolognese-pasta-sauce-490-g-id-1882775000
price: €3.79
price_per_unit: €7.73/kg
quantity: 490 g
opt_1:
name: SuperValu Signature Tastes Traditional Bolognese Pasta Sauce
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-traditional-bolognese-pasta-sauce-350-g-id-1350410000
price: €2.50
price_per_unit: €7.14/kg
quantity: 350 g
opt_3:
name: Heinz Tomato Bolognese Pasta Sauce
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/heinz-tomato-bolognese-pasta-sauce-350-g-id-1882122004
price: €2.50
price_per_unit: €7.14/kg
quantity: 350 g

View File

@ -0,0 +1,13 @@
supervalu:
opt_2:
name: SuperValu Signature Tastes Buffalo Mozzarella Cheese
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-buffalo-mozzarella-cheese-125-g-id-1209960000
price: €2.89
price_per_unit: €23.12/kg
quantity: 125 g
opt_1:
name: Macroom Buffalo Irish Mozzarella
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/macroom-buffalo-irish-mozzarella-125-g-id-1448230000
price: €3.39
price_per_unit: €27.12/kg
quantity: 125 g

View File

@ -1,17 +1,11 @@
supervalu:
opt_1:
name: SuperValu Carrots & Parsnips
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-carrots-&-parsnips-500-g-id-1002386000
price: €1.29
price_per_unit: €2.58/kg
quantity: 500 g
opt_3:
opt_2:
name: SuperValu Irish Carrots Loose
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-irish-carrots-loose-1-kg-id-1086702000
price: €1.35/kg
price_per_unit: €1.35/kg
quantity: 1 kg
opt_2:
opt_1:
name: SuperValu Irish Grown Carrots
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-irish-grown-carrots-1-kg-id-1022674001
price: €1.29

View File

@ -0,0 +1,19 @@
supervalu:
opt_1:
name: SuperValu Celery
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-celery-1-piece-id-1023533000
price: €0.99
price_per_unit: €0.99
quantity: 1 Piece
opt_3:
name: SuperValu Loose Leeks
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-leeks-1-kg-id-1036694000
price: €4.65/kg
price_per_unit: €4.65/kg
quantity: 1 kg
opt_2:
name: SuperValu Organic Celery
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-organic-celery-1-piece-id-1015370000
price: €1.99
price_per_unit: €1.99
quantity: 1 Piece

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Light Red Grated Cheddar Cheese (200 g)
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-light-red-grated-cheddar-cheese-200-g-id-1033911000
price: €2.05
price_per_unit: €10.25/kg
quantity: 200 g

View File

@ -0,0 +1,19 @@
supervalu:
opt_2:
name: SuperValu Organic Cherry Tomatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-organic-cherry-tomatoes-250-g-id-1180005000
price: €1.69
price_per_unit: €6.76/kg
quantity: 250 g
opt_3:
name: SuperValu Organic Cherry Tomato Shakers
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-organic-cherry-tomato-shakers-250-g-id-1892078000
price: €2.15
price_per_unit: €8.60/kg
quantity: 250 g
opt_1:
name: SuperValu Cherry Tomatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-cherry-tomatoes-250-g-id-1010962000
price: €1.09
price_per_unit: €4.36/kg
quantity: 250 g

View File

@ -0,0 +1,6 @@
supervalu:
opt_1:
name: SuperValu Growing Coriander (1 Piece)
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-growing-coriander-1-piece-id-1027601000
price: €1.69
price_per_unit: €1.69

View File

@ -0,0 +1,6 @@
supervalu:
opt_1:
name: SuperValu Growing Coriander (1 Piece)
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-growing-coriander-1-piece-id-1027601000
price: €1.69
price_per_unit: €1.69

View File

@ -0,0 +1,19 @@
supervalu:
opt_1:
name: SuperValu Giant Cotton Pads
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-giant-cotton-pads-40-piece-id-1308250000
price: €1.20
price_per_unit: €0.03 each
quantity: 40 Piece
opt_3:
name: Johnson's Baby 50 Cotton Pads
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/johnsons-baby-50-cotton-pads-50-piece-id-1119171001
price: €1.00
price_per_unit: €0.02 each
quantity: 50 Piece
opt_2:
name: Irish Breeze Oval Cotton Pads
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/irish-breeze-oval-cotton-pads-40-piece-id-1026921000
price: €2.35
price_per_unit: €0.06 each
quantity: 40 Piece

View File

@ -0,0 +1,19 @@
supervalu:
opt_3:
name: SuperValu Signature Tastes Organic Medjool Dates
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-organic-medjool-dates-150-g-id-1765802000
price: €4.99
price_per_unit: €33.27/kg
quantity: 150 g
opt_1:
name: Medjool Dates
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/medjool-dates-200-g-id-1803787000
price: €3.99
price_per_unit: €19.95/kg
quantity: 200 g
opt_2:
name: SuperValu Pitted Dates
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-pitted-dates-300-g-id-1013969000
price: €2.25
price_per_unit: €7.50/kg
quantity: 300 g

View File

@ -1,19 +1,8 @@
supervalu:
opt_1:
name: Daily Basics Mixed Weight Eggs
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/daily-basics-mixed-weight-eggs-18-piece-id-1246884001
price: €4.05
price_per_unit: €0.23 each
quantity: 18 Piece
opt_3:
name: SuperValu Large Fresh Irish Eggs 6 Pack
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-large-fresh-irish-eggs-6-pack-6-piece-id-1024951000
price: €1.79
price_per_unit: €0.30 each
quantity: 6 Piece
opt_2:
name: SuperValu Medium Fresh Irish Eggs 12 Pack
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-medium-fresh-irish-eggs-12-pack-12-piece-id-1024957000
price: €2.69
price_per_unit: €0.22 each
name: SuperValu Large Fresh Irish Eggs 12 Pack (12 Piece)
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-large-fresh-irish-eggs-12-pack-12-piece-id-1024956000
price: €2.99
price_per_unit: €0.25 each
quantity: 12 Piece

View File

@ -0,0 +1,6 @@
supervalu:
opt_1:
name: SuperValu Cucumber
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-cucumber-1-piece-id-1019540000
price: €0.89
price_per_unit: €0.89

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: Loose Hake Fillets
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/loose-hake-fillets-1-kg-id-1028898000
price: €25.99/kg
price_per_unit: €25.99/kg
quantity: 1 kg

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Strawberry Kefir
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/biotiful-gut-health-original-kefir-drink-1-l-id-1952840000
price: €2.00
price_per_unit: €4.00/l
quantity: 500 ml

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Signature Tastes Gold Kiwis
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-gold-kiwis-4-piece-id-1008873000
price: €3.50
price_per_unit: €0.88 each
quantity: 4 Piece

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Loose Limes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-limes-1-piece-id-1015786000
price: €0.49
price_per_unit: €0.49
quantity: 1 Piece

View File

@ -1,19 +1,7 @@
supervalu:
opt_2:
name: Avonmore Fresh Milk
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/avonmore-fresh-milk-500-ml-id-1022803000
price: €0.85
price_per_unit: €1.70/l
quantity: 500 ml
opt_1:
name: Premier Milk
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/premier-milk-2-l-id-1020718000
price: €2.69
price_per_unit: €1.35/l
quantity: 2 L
opt_3:
name: Avonmore Slimline Milk
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/avonmore-slimline-milk-1-l-id-1024126000
price: €1.49
price_per_unit: €1.49/l
name: Avonmore Lactose Free Milk
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/avonmore-lactose-free-milk-1-l-id-1048842000
price: €2.19
price_per_unit: €2.19/l
quantity: 1 L

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Fresh Irish Beef Round Steak Mince
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-fresh-irish-beef-round-steak-mince-454-g-id-1390464002
price: €3.00 was €4.99
price_per_unit: €6.61/kg
quantity: 454 g

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Signature Tastes Prosciutto Di Parma Ham
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-prosciutto-di-parma-ham-100-g-id-1342493000
price: €3.10
price_per_unit: €31.00/kg
quantity: 100 g

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Fresh Irish Pork Mince
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-fresh-irish-pork-mince-400-g-id-1350028000
price: €3.00
price_per_unit: €7.50/kg
quantity: 400 g

View File

@ -1,19 +1,7 @@
supervalu:
opt_2:
name: SuperValu Loose Rooster Potatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-loose-rooster-potatoes-1-kg-id-1036675000
price: €2.89/kg
price_per_unit: €2.89/kg
quantity: 1 kg
opt_3:
opt_1:
name: Keogh's Fresh Potatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/keoghs-fresh-potatoes-2-kg-id-1389480000
price: €3.49
price_per_unit: €1.75/kg
quantity: 2 kg
opt_1:
name: You Say Potato Fresh Peeled Potatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/you-say-potato-fresh-peeled-potatoes-450-g-id-1467675000
price: €2.00
price_per_unit: €4.44/kg
quantity: 450 g

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Radish
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-radish-200-g-id-1084671000
price: €0.89
price_per_unit: €4.45/kg
quantity: 200 g

View File

@ -0,0 +1,13 @@
supervalu:
opt_1:
name: SuperValu Fresh Irish Beef HouseKeepers Cut
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-fresh-irish-beef-housekeepers-cut-1-kg-id-1019176000
price: €15.99/kg
price_per_unit: €15.99/kg
quantity: 1 kg
opt_2:
name: SuperValu Fresh Irish Boneless Beef Rib Roast
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-fresh-irish-boneless-beef-rib-roast-1-kg-id-1019170001
price: €21.99/kg
price_per_unit: €21.99/kg
quantity: 1 kg

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: SuperValu Signature Tastes Superfood Salad
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-signature-tastes-superfood-salad-150-g-id-1663027000
price: €2.09
price_per_unit: €13.93/kg
quantity: 150 g

View File

@ -1,17 +1,17 @@
supervalu:
opt_2:
opt_1:
name: SuperValu Smoked Salmon
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-smoked-salmon-150-g-id-1027989000
price: €4.39
price_per_unit: €29.27/kg
quantity: 150 g
opt_3:
opt_2:
name: SuperValu Smoked Salmon
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-smoked-salmon-100-g-id-1028051000
price: €3.89
price_per_unit: €38.90/kg
quantity: 100 g
opt_1:
opt_3:
name: Dunn's Smoked Salmon
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/dunns-smoked-salmon-100-g-id-1299202000
price: €5.00

View File

@ -0,0 +1,19 @@
supervalu:
opt_3:
name: Mlekpol Sour Cream
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/mlekpol-sour-cream-400-g-id-1066683000
price: €2.40
price_per_unit: €9.60/kg
quantity: 400 g
opt_1:
name: Avonmore Sour Cream
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/avonmore-sour-cream-200-ml-id-1017013000
price: €1.69
price_per_unit: €8.45/l
quantity: 200 ml
opt_2:
name: SuperValu Sour Cream
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-sour-cream-200-ml-id-1343396000
price: €0.99
price_per_unit: €4.95/l
quantity: 200 ml

View File

@ -0,0 +1,19 @@
supervalu:
opt_1:
name: Hand Crafted White Sourdough Boule
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/hand-crafted-white-sourdough-boule-630-g-id-1768785001
price: €3.50
price_per_unit: €5.56/kg
quantity: 630 g
opt_2:
name: Sourdough Brown Pave
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/sourdough-brown-pave-400-g-id-1956759000
price: €2.85
price_per_unit: €7.13/kg
quantity: 400 g
opt_3:
name: Kelkin Gluten Free Sourdough Bread
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/kelkin-gluten-free-sourdough-bread-200-g-id-1406094000
price: €2.60 was €3.49
price_per_unit: €13.00/kg
quantity: 200 g

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: Roma Tomato Puree Tubes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/roma-tomato-puree-tubes-140-g-id-1007760000
price: €1.50
price_per_unit: €10.71/kg
quantity: 140 g

View File

@ -1,5 +1,5 @@
supervalu:
opt_2:
opt_1:
name: SuperValu Beef Tomatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-beef-tomatoes-2-piece-id-1600884000
price: €2.35
@ -11,7 +11,7 @@ supervalu:
price: €1.09
price_per_unit: €4.36/kg
quantity: 250 g
opt_1:
opt_2:
name: SuperValu Tomatoes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-tomatoes-6-piece-id-1016514000
price: €1.29

View File

@ -0,0 +1,7 @@
supervalu:
opt_1:
name: Fitzgeralds Wholemeal Wraps 6 Pack
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/fitzgeralds-wholemeal-wraps-6-pack-370-g-id-1174452001
price: €2.45
price_per_unit: €6.62/kg
quantity: 370 g

View File

@ -0,0 +1,19 @@
supervalu:
opt_1:
name: Bunalun Organic Rice Cakes Yoghurt
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/bunalun-organic-rice-cakes-yoghurt-100-g-id-1019219001
price: €3.00 was €3.99
price_per_unit: €30.00/kg
quantity: 100 g
opt_3:
name: SuperValu Mixed Berry Yogurt Rice Cakes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-mixed-berry-yogurt-rice-cakes-96-g-id-1799671000
price: €1.25
price_per_unit: €13.02/kg
quantity: 96 g
opt_2:
name: SuperValu Yogurt Rice Cakes
url: https://shop.supervalu.ie/sm/delivery/rsid/404/product/supervalu-yogurt-rice-cakes-100-g-id-1798305001
price: €1.25
price_per_unit: €12.50/kg
quantity: 100 g

View File

@ -1,2 +1,50 @@
# todo fix aliases
water = "unlim"
[cupboard]
salt = "1%kg"
"sea salt" = "1%kg"
"black pepper" = "200%g"
"pepper" = "200%g"
"smoked paprika" = "50%g"
"ground cumin" = "50%g"
[teas]
tea = "50%bags"
"filter coffee" = "50%bags"
[pantry]
# grains
rice = "2%kg"
"wholegrain spaghetti" = "1%kg"
# tins
"tin tomatoes" = "2%cans"
"cannellini beans" = "2%cans"
# vegs
garlic = "3"
"garlic clove" = "3"
"red onion" = "3"
"onion" = "3"
# sauces
"extra virgin olive oil" = "50%g"
"olive oil" = "1%l"
"oil" = "1%l"
"balsamic glaze" = "50%g"
"Worcestershire sauce" = "1%bottle"
# baking
"wholemeal flour" = "500%g"
"cornflour" = "100%g"
[garden]
parsley = "unlim"
thyme = "unlim"
basil = "unlim"
[fridge]
parmesan = "100%g"
butter = "50%g"

View File

@ -8,7 +8,7 @@ use crate::models::{ProductOption, ShoppingData};
const SUPERVALU_BASE_URL: &str = "https://shop.supervalu.ie";
pub async fn scrape_product(product_name: &str, db_path: &str, visible: bool) -> Result<()> {
// Check if shopping.yml already exists for this product
// Check if shopping.yml already exists and has data for this product
let clean_name = product_name
.to_lowercase()
.replace(" ", "_")
@ -18,8 +18,20 @@ pub async fn scrape_product(product_name: &str, db_path: &str, visible: bool) ->
let yaml_path = Path::new(db_path).join(&clean_name).join("shopping.yml");
if yaml_path.exists() {
println!("⏭ Skipping {} - shopping.yml already exists", product_name);
return Ok(());
// Check if the file has actual product data
if let Ok(content) = fs::read_to_string(&yaml_path) {
if let Ok(data) = serde_yaml::from_str::<ShoppingData>(&content) {
// Check if it has real data (any URL populated means it's ready)
let has_real_data = data.supervalu.values().any(|opt| !opt.url.is_empty());
if has_real_data {
println!("⏭ Skipping {} - shopping.yml has URL data (manually added or scraped)", product_name);
return Ok(());
} else {
println!("🔄 Re-scraping {} - shopping.yml exists but URLs are empty", product_name);
}
}
}
}
// Launch browser with appropriate options
@ -114,13 +126,8 @@ pub async fn scrape_product(product_name: &str, db_path: &str, visible: bool) ->
std::thread::sleep(Duration::from_secs(15));
}
// Save to YAML file
if !products.is_empty() {
save_to_yaml(product_name, products, db_path)?;
} else {
// Print in red using ANSI escape codes
println!("\x1b[31m⚠ No products found for: {}\x1b[0m", product_name);
}
// Save to YAML file (even if empty)
save_to_yaml(product_name, products, db_path)?;
Ok(())
}
@ -257,8 +264,22 @@ fn save_to_yaml(product_name: &str, products: Vec<ProductOption>, db_path: &str)
// Create shopping data
let mut shopping_data = ShoppingData::new();
for (i, product) in products.into_iter().enumerate() {
shopping_data.add_option(i + 1, product);
let is_empty = products.is_empty();
if is_empty {
// Create empty template with placeholder structure
let empty_product = ProductOption {
name: String::new(),
url: String::new(),
price: String::new(),
price_per_unit: String::new(),
quantity: None,
};
shopping_data.add_option(1, empty_product);
} else {
for (i, product) in products.into_iter().enumerate() {
shopping_data.add_option(i + 1, product);
}
}
// Write YAML file
@ -269,7 +290,12 @@ fn save_to_yaml(product_name: &str, products: Vec<ProductOption>, db_path: &str)
fs::write(&yaml_path, yaml_content)
.context(format!("Failed to write file: {:?}", yaml_path))?;
println!("✓ Saved shopping data to: {:?}", yaml_path);
if is_empty {
// Print in red using ANSI escape codes
println!("\x1b[31m⚠ No products found for: {} - created empty shopping.yml template for manual editing\x1b[0m", product_name);
} else {
println!("✓ Saved {} products to: {:?}", shopping_data.supervalu.len(), yaml_path);
}
Ok(())
}