🌿
Analysing your meal...
Comparing against your phenotype profile
Test, Don't Guess
Food Log & Meal Analyser
Photo or description · Phenotype-matched analysis · Weekly pattern tracking
TDG Suite · v1.1
Your Name
Nutrition Phenotype
Active Exclusions
Gut Status
🍽
Log a Meal
Photo or description — analysed against your phenotype
Meal preview 📸
Tap to photograph or choose from camera roll
Works on iPhone, Android, and desktop. Or describe your meal below.
Or describe your meal instead (or add extra detail below your photo):
Time eaten
How you felt before
How you felt after
Hours since last meal
I'm currently in a gut flare / IBS episode — adjust analysis accordingly
🌿 Your Meal Analysis
Your meal score will
appear here after analysis
Today's Log
No meals logged today.
Start by analysing your first meal.
Send to Stephen Export your food log as a PDF — includes all meals, scores, and weekly pattern summary.
Submit Your Responses

Send your Food Log & Meal Analyser to Stephen

When you're satisfied with your responses, enter your name and email below and click submit. Your answers go directly to Stephen — you don't need to save or email anything separately.

Your responses are transmitted securely and go directly to stephen@stephenduncan.co · Detective Health Clinical Platform

`); pw.document.close(); setTimeout(() => pw.print(), 500); } function showToast(message, type) { const toast = document.getElementById('toast'); toast.textContent = message; toast.className = 'toast toast-' + type + ' show'; setTimeout(() => toast.classList.remove('show'), 3500); } // ── PROFILE BRIDGE — loads client profile saved from Nutrition Integration Engine ── function loadNIEProfile() { try { let raw = null; try { raw = localStorage.getItem('tdg_client_profile'); } catch(e) {} if (!raw) return; const p = JSON.parse(raw); let loaded = false; if (p.clientName) { document.getElementById('clientName').value = p.clientName; loaded = true; } if (p.phenotype && PHENOTYPE_DATA[p.phenotype]) { document.getElementById('phenotypeSelect').value = p.phenotype; updatePhenotypeContext(); loaded = true; } if (p.exclusions) { document.getElementById('exclusionsInput').value = p.exclusions; loaded = true; } if (loaded) { // Show dismissible banner const banner = document.createElement('div'); banner.id = 'nie-bridge-banner'; banner.style.cssText = 'background:var(--forest);color:#fff;padding:10px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12.5px;'; const mt = PHENOTYPE_DATA[p.phenotype]; banner.innerHTML = `✓ Profile loaded from Nutrition Integration Engine${p.clientName ? ' — ' + p.clientName + '' : ''}${mt ? ' · ' + mt.shortName : ''}`; document.querySelector('.setup-panel').insertAdjacentElement('afterend', banner); } } catch(e) { /* silent — bridge is optional */ } } renderLog(); updatePhenotypeContext(); loadNIEProfile();