Diabetes + Blood Pressure Meal Plan 🌿

🌿 Diabetes + Blood Pressure Meal Plan

South African Edition Β· Johannesburg Northern Suburbs
Managing Type 2 Diabetes & Hypertension Together

🩸 Low GI πŸ§‚ Low Sodium ❀️ Heart Healthy 🌿 DASH Aligned

🍽️ Daily Meal Plan

❀️ Dual-condition plan: Every meal is optimised for both blood sugar control and blood pressure management. Sodium-adjusted, potassium-rich, low GI throughout.
Today's Progress 0/6 meals
πŸ’‘ Remember: Eat every 3–4 hours. Pair carbs with protein or healthy fat. Keep sodium low at every meal β€” flavour food with herbs, lemon and spices instead of salt.

❀️ Blood Pressure Guide

This plan follows DASH diet principles alongside Low GI eating. Managing both conditions together gives you powerful control over your long-term health.

<1,500mg
Daily sodium target
3,500mg+
Daily potassium target
120/80
Target BP (mmHg)
0–1
Alcohol units per day max
βœ… Good News β€” Huge Overlap

The Low GI diabetes diet and the DASH (Dietary Approaches to Stop Hypertension) diet share the same core principles. You don't need two separate diets β€” this single plan covers both.

βœ… Great for Both
πŸ₯¦ Plenty of vegetables
🫘 Beans & lentils
🐟 Oily fish (omega-3)
πŸ₯‘ Avocado
🌰 Nuts & seeds
πŸ«™ Olive oil
πŸ“ Berries
🌿 Herbs & spices
⚠️ Extra Caution For BP
πŸ§‚ Any added salt
πŸ₯“ Processed meats
🌭 Boerewors, wors
πŸ§€ Feta & hard cheese
🐟 Tuna in brine
β˜• More than 1 coffee
🍺 Alcohol
πŸ₯© Biltong (high Na)
πŸ§‚ Understanding Your Sodium Budget

Sodium causes the body to retain water, raising blood pressure. Most South Africans consume 3,000–4,000mg daily. Your target is under 1,500mg.

DAILY SODIUM β€” VISUAL COMPARISON
Your target: <1,500mg
βœ“ Target
Average SA adult: ~3,500mg
Average
Single boerewors: ~1,200mg
⚠️ One wors!
⚠️ The "silent" sodium sources in SA cooking: Aromat, Knorr stock cubes, Worcestershire sauce, soy sauce, feta, biltong, lean bacon. These are updated in this plan.
πŸ’Š Key Minerals for Blood Pressure

These three minerals work together to regulate blood pressure naturally.

🍌
Potassium β€” the sodium antidote
Helps kidneys flush excess sodium. Most important BP mineral. Target: 3,500mg+ daily.
Best SA sources: avocado, sweet potato, spinach, beans, yogurt, banana (medium GI β€” limit), salmon, mushrooms
πŸ₯¦
Magnesium β€” the relaxer
Relaxes blood vessel walls. Deficiency is common in South Africa.
Best SA sources: dark leafy greens, almonds, pumpkin seeds, quinoa, dark chocolate (85%+), black beans
πŸ₯›
Calcium β€” blood vessel support
Helps blood vessels tighten and relax properly. Works alongside magnesium.
Best SA sources: plain yogurt, low-fat cottage cheese, broccoli, kale, almonds, fortified oat/almond milk
πŸ”„ What Changed From a Standard Diabetes Diet

Specific meal changes made to this plan to protect your blood pressure:

πŸ₯©
Biltong removed as snack
Even lean biltong = ~800mg sodium per 30g serving. Replaced with low-sodium high-protein alternatives.
🌭
Boerewors replaced on braai day
One wors = ~1,200mg sodium. Replaced with chicken sosaties β€” flavoured with herbs, not salt.
πŸ₯“
Bacon removed from Sunday fry-up
1 rasher = ~400mg sodium. Replaced with extra grilled mushrooms and tomatoes.
🐟
Tuna in brine β†’ tuna in spring water
Brine = very high sodium. Spring water version has 60–70% less sodium. Same protein value.
πŸ§€
Feta β€” use sparingly, flagged
Feta is high in sodium. A small amount as a flavour accent is OK. Don't add extra salt to any dish containing feta.
β˜•
Coffee limited to 1 cup max
Caffeine can temporarily raise blood pressure. 1 cup of black coffee or flat white is fine. Rooibos is unlimited and actively beneficial.
πŸ₯—
Beetroot added to grocery list & meals
Raw beetroot contains natural nitrates that help dilate blood vessels and lower BP. A powerful SA-available superfood for hypertension.
πŸ«€ BP Superfoods β€” Prioritise These

All are available in SA and compatible with low GI eating.

🫚 Beetroot 🐟 Salmon & oily fish πŸ₯‘ Avocado 🍡 Rooibos tea 🌰 Almonds & walnuts 🫘 Beans & lentils 🌿 Garlic 🫚 Olive oil πŸ₯¬ Spinach & kale 🍠 Sweet potato 🍫 85% Dark chocolate 🌱 Flaxseeds
βš•οΈ Medical note: If you are on BP medication (e.g. ACE inhibitors, beta blockers or diuretics), dietary changes can meaningfully affect how your medication works β€” particularly potassium-rich foods if you're on certain diuretics. Always discuss this plan with your doctor or a registered dietitian before making significant changes.

🚫 What to Avoid & Replace

Updated for both blood sugar and blood pressure. Sodium warnings flagged throughout.

βœ… Spices & Herbs You CAN Use Freely

These are all safe β€” some actively support both blood sugar and blood pressure.

🩺 Cinnamon may improve insulin sensitivity β€” add Β½ tsp to oats daily.
🌿 Turmeric β€” anti-inflammatory, supports both conditions.
πŸ§„ Garlic β€” clinically shown to support healthy blood pressure. Use generously.

πŸ₯€ Drinks Guide

πŸ“ Dietary Guide

🍽️ The Diabetes Plate Method

Apply this to every main meal β€” no calorie counting needed.

50% β€” Non-starchy Veg
Broccoli, spinach, peppers, cucumber, tomatoes, cauliflower, courgettes, mushrooms, beetroot
25% β€” Lean Protein
Chicken, fish, eggs, lentils, beans, lean beef, tofu
25% β€” Complex Carbs
Brown rice, quinoa, sweet potato, Low GI bread, oats
πŸ“Š Glycemic Index (GI) Guide

GI measures how fast a food raises blood sugar. Build meals around Low GI foods.

Low GI (<55) β€” Best Choice
Oats, lentils, beans, berries, apple, pear, sweet potato, yogurt, quinoa, Low GI bread
Medium GI (56–69) β€” Use Moderately
Brown basmati rice, whole wheat bread, couscous, new potatoes, banana, pineapple
High GI (70+) β€” Limit / Avoid
White bread, white rice, pap, watermelon, chips, crackers, most breakfast cereals
πŸ”’ Daily Carbohydrate Targets

General guidelines β€” confirm with your dietitian or doctor.

Main meals (women)
45–60g carbs per meal
Main meals (men)
60–75g carbs per meal
Snacks
15–20g carbs per snack
Daily total (women)
~150–200g
Daily total (men)
~200–250g
βš–οΈ Portion Size Reference

1 carbohydrate serving = 15g of carbohydrates.

Cooked brown rice
Β½ cup (90g) = 1 carb serving
Whole wheat bread
1 slice = 1 carb serving (15g)
Cooked pasta
β…“ cup (75g) = 1 serving
Sweet potato
Small (100g) = 1.3 servings
Cooked oats
Β½ cup = 1 carb serving
Fresh fruit
Small piece or Β½ cup = 1 serving
⏰ Meal Timing Principles
βœ“Eat every 3–4 hours β€” never skip meals
βœ“Keep meal times consistent each day
βœ“Largest meal at lunch β€” lighter dinner
βœ“Avoid eating within 2 hours of bedtime
βœ“Always pair carbs with protein or healthy fat
βœ“Monitor blood sugar 1–2 hours after meals
βš•οΈ Important: This is general guidance only. Always work with a registered dietitian and your doctor to personalise your plan based on your medications, HbA1c targets and blood pressure readings.

πŸ›’ Grocery List

Shopping Progress 0/0 items

πŸͺ Available at: Woolworths Β· Pick n Pay Β· Checkers Β· Spar Β· Dis-Chem

🍴 Eating Out β€” Northern Joburg

Diabetes & blood pressure-friendly options across Sandton, Fourways, Bryanston & surrounds.

πŸ’‘ Eating Out Tips β€” Both Conditions
βœ“Ask for all dressings and sauces on the side
βœ“Choose grilled, baked or steamed β€” never fried
βœ“Ask the waiter: "Can you prepare this with no added salt?"
βœ“Request extra vegetables instead of chips or fries
βœ“Politely ask to remove the bread basket
βœ“Drink water, sparkling water or rooibos tea
βœ“Avoid buffets β€” very difficult to control portions and sodium
βœ“Don't arrive hungry β€” have a small snack beforehand
βœ“Avoid pre-made sauces and gravies β€” often very high in sodium
πŸ›‘ Key question for waiters: "How is this prepared, and can you hold the salt and serve any sauce on the side?" Most quality restaurants in Northern Joburg are happy to accommodate β€” just ask.
${meta.time}
${isOn?TICK_SVG:''}
${meal.name}
${meal.note}
${giBadge}${bpBadge}
`; container.appendChild(div); }); updateMealProgress(done); } window.toggleMeal = function(ck) { state.mealChecked[ck] = !state.mealChecked[ck]; const isOn = state.mealChecked[ck]; const mc = document.getElementById('mc-'+ck); const mn = document.getElementById('mn-'+ck); if(mc){mc.className='mcheck'+(isOn?' on':'');mc.innerHTML=isOn?TICK_SVG:'';} if(mn){mn.className='mname'+(isOn?' done':'');} let done=0; MEAL_META.forEach(m=>{if(state.mealChecked[state.currentDay+'-'+m.key])done++;}); updateMealProgress(done); }; function updateMealProgress(done) { const total = MEAL_META.length; document.getElementById('progCount').textContent = done+'/'+total+' meals'; document.getElementById('progFill').style.width = Math.round((done/total)*100)+'%'; const win = document.getElementById('progWin'); win.style.display = done===total?'block':'none'; } // AVOID function buildAvoid() { const container = document.getElementById('accordions'); Object.entries(AVOID_DATA).forEach(([cat, items]) => { const wrap = document.createElement('div'); const hd = document.createElement('div'); hd.className = 'acc-hd'; const isHighlighted = cat.includes('KEY for BP'); hd.innerHTML = `
${['🌾','🍬','πŸ§‚','πŸ₯«'][Object.keys(AVOID_DATA).indexOf(cat)]||'πŸ“‹'}${cat}${items.length}
β–Ό`; const body = document.createElement('div'); body.className = 'acc-body'; let html = `
❌ Avoidβœ… Replace With
`; items.forEach(item => { html += `
${item.bad}
β†’
${item.good}
`; }); body.innerHTML = html; hd.onclick = () => { const open = body.classList.contains('open'); document.querySelectorAll('.acc-body').forEach(b=>b.classList.remove('open')); document.querySelectorAll('.arr').forEach(a=>a.textContent='β–Ό'); if(!open){body.classList.add('open');hd.querySelector('.arr').textContent='β–²';} }; wrap.appendChild(hd); wrap.appendChild(body); container.appendChild(wrap); }); const spiceEl = document.getElementById('spiceTags'); GOOD_SPICES.forEach(s => { const span = document.createElement('span'); span.className = 'spice-tag'; span.textContent = s; spiceEl.appendChild(span); }); } // DRINKS function buildDrinks() { const gEl = document.getElementById('drinkPanelGood'); gEl.innerHTML = '
πŸ’§ Recommended Drinks
'; DRINKS_GOOD.forEach(d => { gEl.innerHTML += `
${d.icon}
${d.name}
${d.note}
`; }); const aEl = document.getElementById('drinkPanelAvoid'); aEl.innerHTML = '
❌ Drinks to Avoid
'; DRINKS_AVOID.forEach(d => { aEl.innerHTML += `
${d.icon}
${d.name}
${d.note}
`; }); const alcEl = document.getElementById('drinkPanelAlcohol'); alcEl.innerHTML = `
${ALCOHOL_NOTE}
🍷 Alcohol Reference Guide
`; ALCOHOL_ITEMS.forEach(a => { alcEl.innerHTML += `
${a.name}${a.rating}
${a.note}
`; }); alcEl.innerHTML += '
'; document.querySelectorAll('[data-dsec]').forEach(btn => { btn.onclick = () => { document.querySelectorAll('[data-dsec]').forEach(b=>b.classList.remove('on')); btn.classList.add('on'); const s = btn.dataset.dsec; document.getElementById('drinkPanelGood').style.display = s==='good'?'block':'none'; document.getElementById('drinkPanelAvoid').style.display = s==='avoid'?'block':'none'; document.getElementById('drinkPanelAlcohol').style.display= s==='alcohol'?'block':'none'; }; }); } // GROCERY function buildGrocery() { const list = document.getElementById('groceryList'); Object.entries(GROCERY_DATA).forEach(([cat, items]) => { const catDiv = document.createElement('div'); catDiv.className = 'gcat'; catDiv.textContent = cat; list.appendChild(catDiv); items.forEach((item, i) => { const key = cat+'-'+i; const row = document.createElement('div'); row.className = 'gitem'; row.innerHTML = `
${state.grocChecked[key]?TICK_SVG:''}
${item.n}
${item.s}
`; row.onclick = () => toggleGroc(key); list.appendChild(row); }); }); updateGrocProgress(); } window.toggleGroc = function(key) { state.grocChecked[key] = !state.grocChecked[key]; const isOn = state.grocChecked[key]; const gc = document.getElementById('gc-'+key); const gn = document.getElementById('gn-'+key); if(gc){gc.className='gcheck'+(isOn?' on':'');gc.innerHTML=isOn?TICK_SVG:'';} if(gn){gn.className='gname'+(isOn?' done':'');} updateGrocProgress(); }; function updateGrocProgress() { const total = Object.values(GROCERY_DATA).reduce((s,a)=>s+a.length,0); const done = Object.values(state.grocChecked).filter(Boolean).length; document.getElementById('grocCount').textContent = done+'/'+total+' items'; document.getElementById('grocFill').style.width = total?Math.round((done/total)*100)+'%':'0%'; } // RESTAURANTS function buildRestaurants() { const list = document.getElementById('restaurantList'); RESTAURANTS_DATA.forEach(r => { list.innerHTML += `
${r.icon}
${r.name}
πŸ“ ${r.loc}
${r.tip}
`; }); } // INIT buildDaySel(); renderMeals(); buildAvoid(); buildDrinks(); buildGrocery(); buildRestaurants();