Food Database
Search 9,349 foods, create custom foods with AI, scan nutrition labels, customize portions, configure ICMR exchange lists, and set allergen policies.
MealStack includes India's most comprehensive food database — the only platform combining IFCT 2017, INDB (Indian Nutritional Database), and USDA FoodData Central. Can't find a food? Type a name and AI fills everything, or scan a nutrition label photo.
Data sources
| Database | Foods | Coverage | Best for |
|---|---|---|---|
| IFCT 2017 | 542 | Indian foods — dal, roti, sabzi, regional dishes | Indian clients, regional cuisines |
| INDB | 1,014 | Indian Nutritional Database — expanded Indian foods | Broader Indian food coverage |
| USDA SR Legacy | 7,793 | International foods — global coverage | International foods, packaged items |
Each food includes up to 80+ nutrients: macros, 12 minerals, 15 vitamins, amino acids, fatty acids, sugars, phytate, oxalate, and more.
Free plans include the full IFCT 2017 database and can preview foods from INDB and USDA in search. Unlocking INDB and USDA for full nutrition detail and adding them to meal plans is available on Starter and above. Search results show items from all three sources with a badge indicating the source (IFCT, INDB, or USDA); locked sources show a preview with an upgrade prompt.
Custom foods (creating your own foods, cloning existing ones, label scanning, and AI nutrition estimates) are available on Starter and above.
Branded product lookup
Can't find a packaged food like Amul Butter, Britannia biscuits, or a protein bar? MealStack can look up branded products via barcode or name search using Open Food Facts — covering 13,000+ Indian packaged products.
How it works
- Search for a food in the meal plan builder (e.g., "amul")
- If local results are sparse, the Branded Products section appears automatically
- Results show product image, brand, macros, and serving size
- Click a product → review the nutrition → click Save & Add to Meal
The product is saved as a custom food in your practice. Next time you search, it appears in your local results — no repeat lookups needed.
Barcode lookup
Enter a barcode number (EAN-8 or EAN-13) to find a specific product instantly. The input validates the barcode in real-time:
- Shows digit count as you type
- Validates the EAN check digit
- Auto-submits when a valid barcode is detected
- Works with Indian product barcodes (starting with 890)
Data quality
Branded product data is community-sourced (from Open Food Facts) and marked as unverified. The food detail panel shows this status clearly. We recommend cross-checking nutrition values against the physical product label before using in client plans.
Branded lookup data is fetched externally and not permanently stored until you explicitly save it. This keeps your food database clean — only products you actually use are added. Data from Open Food Facts is provided under the Open Database License (ODbL).
Searching
The search bar supports multiple languages and fuzzy matching:
English — Type "chicken breast" → results show Chicken, breast, without skin, cooked (USDA) and Chicken, breast, raw (IFCT).
Hindi — Type "aloo" → Potato entries. Type "bhindi" → Okra / Lady's finger. Type "dahi" → Curd / Yogurt. Type "chana" → Chickpea / Bengal gram.
Regional — Type "batata" → Potato (Marathi). Type "vendakkai" → Okra (Tamil). Type "baingan" → Eggplant / Brinjal. Type "palak" → Spinach.
Search uses full-text matching with fuzzy support — typos and partial matches work. Searching "chiken" will still find "chicken". Search aliases are built in, so "cottage cheese" finds "Paneer".
Food detail view
Click any food to open the detail panel showing:
- Macro donut chart — visual ring showing protein/fat/carb calorie ratio with total kcal centered
- Nutrient highlights — auto-generated "Rich in" chips showing nutrients exceeding 10% of daily value (e.g., "Vit K 5×", "Calcium 90%", "Iron 40%")
- Portion selector — choose from pre-configured portions or enter a custom gram amount
- Full nutrient breakdown — all 80+ nutrients grouped by type (Proximates, Minerals, Vitamins, Lipids, Amino Acids, Sugars) with RDA percentage bars
- Regional names — Hindi and regional language names for the food
The nutrient values scale automatically when you change the portion size. Select "1 katori (150g)" and all values update to show the nutrients for that serving.
Portion sizes
IFCT foods come with Indian-friendly portion sizes pre-configured:
| Portion | Approximate weight | Common for |
|---|---|---|
| Katori (small bowl) | ~150g | Dal, sabzi, rice, curd |
| Roti / Chapati | ~30g | Wheat roti, chapati |
| Paratha | ~60g | Stuffed paratha |
| Idli | ~40g | Idli |
| Dosa | ~50g | Plain dosa |
| Glass | ~200ml | Milk, buttermilk, lassi |
| Cup | ~240ml | Beverages |
| Tablespoon | ~15g | Oil, ghee, sugar |
| Teaspoon | ~5g | Spices, honey |
Select a portion when adding food to a meal plan, and the nutrients auto-calculate based on the weight.
Customizing portions
Every practice uses different portion sizes. Override any platform portion to match your standard:
- Go to Settings → Food Database → Portions & Measures
- Click the gram value next to any portion to override it
- Your override applies to all future meal plans
You can also create entirely new portions (like "1 palm" = 85g for protein foods) and assign them to specific food categories. See Settings → Food Database for full details.
If your katori is 100g (ICMR standard) but the platform shows 150g, override it once in settings. Every meal plan you create from then on uses YOUR katori size. No need to manually adjust gram weights each time.
Categories
Browse foods by category using the visual category grid. Each category has an emoji icon for quick scanning:
| Category | Icon | Examples |
|---|---|---|
| Cereals and Millets | 🌾 | Rice, wheat, bajra, ragi, jowar |
| Grain Legumes | 🫘 | Moong dal, chana, masoor, toor |
| Green Leafy Vegetables | 🥬 | Palak, methi, amaranth, bathua |
| Fruits | 🍎 | Banana, mango, guava, papaya |
| Milk and Milk Products | 🥛 | Milk, curd, paneer, ghee |
| Nuts and Oil Seeds | 🥜 | Almonds, cashews, groundnuts |
| Poultry | 🍗 | Chicken, eggs |
| Fish | 🐟 | Rohu, pomfret, mackerel, prawns |
| Edible Oils and Fats | 🫒 | Mustard oil, coconut oil, ghee |
Use the category browser when you want to explore options — e.g., browsing "Green Leafy Vegetables" to find iron-rich greens for an anemic client.
Custom foods
Add foods that aren't in the database — branded products, regional specialties, or client-specific items. MealStack's custom food creator is AI-powered: type a food name and AI fills nutrients, portions, Hindi name, category, allergens, and more — or scan a nutrition label photo.
Open custom food form
Click Add Custom Food on the food database page.
Enter a food name
Type the food name. As you type, MealStack:
- Checks for duplicates — shows similar foods from the database right below the name field so you don't create duplicates
- Offers AI fill — after 3+ characters, a prompt appears: "AI can fill everything — nutrients, portions, category, and more". One click fills 20+ fields.
Fill with AI (recommended)
Click Fill with AI to have AI populate the entire form from just the food name. AI fills:
- 16 nutrients — energy, protein, carbs, fat, fiber, sugars, calcium, iron, potassium, sodium, zinc, vitamins A, B9, B12, C, D
- Portions — 2-4 common Indian portions with gram weights and Hindi names
- Category — auto-selects the best matching food category
- Dietary type — veg, non-veg, eggetarian, or vegan
- Hindi name — Devanagari script name for search
- Search aliases — alternate names, transliterations, regional names
- Description — brief consumer-friendly description
- Meal suitability — which meal slots the food fits (breakfast, lunch, dinner, etc.)
- Glycemic index — low, medium, or high classification
- Allergens — common allergens present (gluten, dairy, nuts, etc.)
- Confidence level — high, medium, or low with a source note
Select a context chip before filling to improve accuracy: Homemade, Restaurant, Packaged, Raw, or Street Food. For example, selecting "Restaurant" tells AI to estimate with higher fat content.
Refine if needed
After AI fills, a refine input appears below the name field. Type additional context like "deep-fried version" or "Amul brand" and click Re-fill to update the estimates.
Review and save
All AI-filled values are editable. Review the nutrients, adjust anything that looks off, and click Create Food.
AI fill is free — it doesn't consume any AI credits. This encourages creating complete custom foods rather than leaving nutrient fields empty.
Completeness indicator
The dialog header shows a progress bar tracking how complete your food entry is: Name, Category, Diet Type, Macros, Calories, Portions, Image. After AI fill, most checks turn green immediately.
Live macro visualization
As you enter or AI-fill nutrient values, a live donut chart appears in the nutrients section header showing the protein/fat/carb ratio with total calories centered. This gives instant visual feedback on the food's macro profile.
Auto-calculated calories
If you enter protein, carbs, and fat but leave calories empty, MealStack auto-calculates energy using the Atwater formula (P×4 + C×4 + F×9) and shows a blue hint. The calculated value is saved automatically.
Allergen tagging
The Basic Info section includes allergen toggle buttons for 9 common allergens: Gluten, Dairy, Tree Nuts, Peanuts, Soy, Egg, Fish, Shellfish, Sesame. AI auto-fills these when it detects allergens in the food. Selected allergens show as red pills for clear visibility.
Glycemic index
Classify foods as Low GI (<55), Medium GI (55-69), or High GI (≥70) using toggle buttons. AI auto-fills this. Useful for diabetic client meal planning.
Meal suitability
Tag which meal slots a food is suitable for: Early Morning, Breakfast, Mid-Morning, Lunch, Evening Snack, Dinner, Bedtime. AI auto-fills based on the food type. Used by the AI meal generator to place foods in appropriate slots.
Custom foods are scoped to your practice — only your team sees them. They won't appear for other MealStack users. You can edit or delete custom foods anytime from the food detail panel.
Clone from existing
Found a USDA or IFCT food that's close to what you need? Clone it instead of creating from scratch:
- Open any food's detail panel
- Click Clone — this opens the custom food form pre-filled with all the nutrient values
- Modify the name, adjust any nutrients, and save
This is much faster than entering 80+ nutrient values manually.
Clone is especially useful for cooked versions of raw foods. Clone "Rice, raw" → rename to "Rice, cooked (home style)" → adjust calories from 356 to 130 kcal and update other nutrients.
Quick food creator
When you're in the middle of building a meal plan or recipe and need a food that doesn't exist, you don't have to leave your workflow. A Quick Add Custom Food sheet is available inline from three places:
- Meal plan builder — when food search returns no results, a "Create custom food" button appears. It's also always visible as a footer link while searching.
- Recipe builder — same pattern in the ingredient search dropdown.
- AI day preview — when AI suggests a food that can't be matched to the database, a "Create" button appears next to each unmatched item.
The quick creator is a lightweight form with just the essentials:
| Field | Required | Notes |
|---|---|---|
| Food name | Yes | Pre-filled from your search query |
| Dietary type | No | Veg, Non-Veg, Eggetarian, Vegan |
| Category | No | Select from platform categories |
| Calories (kcal/100g) | No | Per 100g edible portion |
| Protein (g/100g) | No | |
| Carbs (g/100g) | No | |
| Fat (g/100g) | No | |
| Fiber (g/100g) | No | |
| Portion sizes | No | Quick-add presets or custom |
After creating, the food is automatically added to the meal slot or recipe ingredient you were working on — no need to search again.
Need more fields like scientific name, edible factor, or 80+ nutrients? Click "Need more fields? Open full custom food form" at the bottom of the quick creator to switch to the full form with your data carried over.
AI nutrient estimation
Don't know the exact nutrient values? Click Fill with AI in either the quick creator or the full custom food form. Enter just the food name and AI fills:
- 16 commonly measured nutrients per 100g — macros (energy, protein, carbs, fat, fiber, sugars) plus minerals (calcium, iron, potassium, sodium, zinc) and vitamins (A, B9, B12, C, D)
- Common portion sizes with gram weights and Hindi names
- Dietary type classification (veg/non-veg/egg/vegan)
- Food category auto-selection
- Hindi/Devanagari name and search aliases
- Description, meal suitability, glycemic index, and allergens
- Confidence level — shown as a colored badge (green = high, amber = medium, red = low)
- Source note — e.g., "Based on IFCT 2017 values for paneer tikka"
The AI handles cooked vs raw disambiguation automatically — "Rice" estimates cooked rice (~130 kcal), "Rice, raw" estimates raw (~356 kcal). For branded foods, it uses known product ranges. For homemade dishes, it estimates based on standard Indian recipes.
Context chips
Before clicking Fill with AI, select a context chip to improve accuracy:
| Context | Effect on estimation |
|---|---|
| 🏠 Homemade | Moderate oil/ghee, standard home recipe |
| 🍽️ Restaurant | Higher fat, richer preparation |
| 📦 Packaged | Commercial product ranges |
| 🥬 Raw | Uncooked ingredient values |
| 🛒 Street Food | Deep-fried, heavy preparation |
Refine and re-fill
After the initial fill, a refine input appears below the food name. Type additional context and click Re-fill:
- "deep-fried version" → re-estimates with higher fat
- "Amul brand" → uses known Amul product values
- "without oil" → adjusts for dry preparation
- "South Indian style" → adjusts for regional preparation
AI-estimated values are approximations. Always verify against the nutrition label or a trusted database before using in client plans. The confidence badge helps you judge — "Low confidence" items need extra scrutiny.
AI nutrient estimation is free — it doesn't consume any AI credits. This encourages creating complete custom foods rather than leaving nutrient fields empty.
Nutrition label input
For packaged foods, there are two ways to enter nutrition data from a label:
Scan a label photo
Click Scan Label (📷) in the nutrients section header. Take a photo of the nutrition label or select one from your gallery. MealStack uses GPT-4o vision to extract all values automatically:
- Reads all printed nutrient values (macros, minerals, vitamins)
- Detects serving size and whether values are per-serving or per-100g
- Extracts product name and brand name if visible
- Detects the veg/non-veg dot symbol on Indian FSSAI labels
- Handles kcal vs kJ conversion and sodium vs salt conversion
- Shows confidence level (high for clear labels, low for blurry photos)
After scanning, the form auto-fills with extracted values. If the label is per-serving, MealStack switches to label input mode automatically.
Label scanning costs 1 AI credit per scan (uses GPT-4o vision). For best results, take a clear, well-lit photo of the nutrition facts panel. Avoid angles — shoot straight-on.
Manual label entry
Switch to From Label mode using the tab switcher in the nutrients section. This mode matches what you see on a food package:
- Enter the serving size in grams (as printed on the label)
- Enter nutrient values per serving (exactly as printed)
- MealStack auto-converts everything to per-100g for storage
A real-time conversion indicator shows the per-100g value next to each field (e.g., "→ 12.5/100g") so you can verify the math.
The label serving size is automatically added as a portion size on the food, so you can select "1 serving" when adding it to meal plans.
Label mode is ideal for branded products like protein bars, cereals, packaged snacks, and supplements where the nutrition panel is per-serving, not per-100g.
Packaged food fields
When you enter a brand name or select the "Packaged" context chip, additional fields appear:
- Barcode — EAN/UPC barcode number for future scanning support
- Serving Size Label — the serving size as printed on the package (e.g., "Per 30g serving")
Verification
Custom foods start as unverified. The food detail panel shows a badge:
- 🟢 Verified — nutrient data has been reviewed and confirmed
- 🟡 Unverified — not yet reviewed (default for new custom foods)
- 🔵 Recipe-derived — nutrients were auto-calculated from a recipe's ingredients
Click the Verify button in the food detail footer to mark a custom food as verified after reviewing its nutrient data.
Your dashboard shows a notice when you have unverified custom foods: "X custom foods pending verification — Review nutrient data for accuracy before using in client plans." Click it to go to your food database filtered to custom foods.
Duplicate detection
When creating a custom food, MealStack checks for similar names in the database and shows a warning if a match is found. This prevents accidentally creating duplicates.
Favorites
Star frequently-used foods for quick access:
- Search for a food or open its detail panel
- Click the ★ star icon
- Use the Favorites filter to see only your starred items
Star the 20–30 foods you use most often — dal, rice, roti, chicken, paneer, oats, eggs, milk, common vegetables. This makes meal plan building significantly faster.
Calorie density badges
Every food in the list shows a calorie density badge — a quick visual indicator of how calorie-dense the food is per 100g:
| Badge | Density | kcal/100g | Examples |
|---|---|---|---|
| VL (very low) | Very low | Under 60 | Cucumber, lettuce, tomato, buttermilk |
| L (low) | Low | 60–149 | Most fruits, dal, curd, moong sprouts |
| M (medium) | Medium | 150–399 | Rice, roti, chicken, paneer, poha |
| H (high) | High | 400+ | Ghee, oil, nuts, dried fruits, cheese |
Use density badges for weight management plans. Look for VL and L foods to build volume-rich, low-calorie meals. For weight gain clients, include more M and H foods.
Macro visualization
Search results and the food list show visual macro bars for protein, carbs, and fat — colored progress indicators that give you an instant sense of the food's macro profile without reading numbers.
- Green bar — Protein
- Yellow bar — Carbs
- Orange bar — Fat
The bar length is proportional to the value, making it easy to visually compare foods as you scroll.
Inline actions
Hover over any food row to reveal quick action buttons:
| Action | Icon | What it does |
|---|---|---|
| Favorite | ⭐ | Toggle favorite status without opening the detail panel |
| Compare | ↔ | Add to the compare tray (select 2 foods to compare) |
| Copy | 📋 | Copy nutrient summary to clipboard (name, kcal, P, C, F) |
| Clone | 📄 | Clone as a custom food — opens the form pre-filled with all nutrients |
These actions save time by eliminating the need to open the detail panel for common operations.
Food comparison
Compare any two foods side-by-side to make informed substitution decisions:
Select foods to compare
Click the ↔ compare icon on any two food rows. A sticky tray appears at the bottom showing your selections.
Open the comparison
Click Compare in the tray. A side-by-side panel opens showing:
- Macro donuts — visual calorie ratio (protein/fat/carbs) for each food
- Nutrient highlights — "Rich in" chips showing standout nutrients
- Macronutrient table — calories, protein, fat, carbs, fiber with opposing bars
- Vitamin & mineral table — all micronutrients with visual bars showing which food has more
Read the results
The food with the higher value for each nutrient is highlighted in your primary color. Opposing bars grow from the center outward, making differences immediately visible.
Use comparison when a client asks "should I eat brown rice or quinoa?" or when you need to find a higher-protein alternative to a food in their plan. The visual bars make the answer obvious at a glance.
Nutrient details
Each food includes up to 80+ nutrients, organized by type:
| Type | Nutrients |
|---|---|
| Proximates | Energy, Protein, Carbohydrate, Total Fat, Fiber (total, soluble, insoluble), Water, Ash |
| Minerals | Calcium, Iron, Magnesium, Phosphorus, Potassium, Sodium, Zinc, Copper, Manganese, Selenium, Chromium, Iodine |
| Vitamins | Vitamin A, B1, B2, B3, B5, B6, B9 (Folate), B12, C, D, E, K, Biotin, Choline, Beta-Carotene |
| Lipids | Saturated Fat, Monounsaturated, Polyunsaturated, Trans Fat, Cholesterol, Omega-3, Omega-6, EPA, DHA |
| Amino Acids | All 19 amino acids including essential amino acids |
| Sugars | Total Sugars, Sucrose, Glucose, Fructose, Lactose, Maltose, Galactose |
| Other | Caffeine, Theobromine, Alcohol, Phytate, Oxalate |
The "Rich in" highlights in the food detail panel automatically flag nutrients that exceed 10% of the recommended daily allowance. Green chips indicate excellent sources (over 50% RDA), making it easy to spot nutrient-dense foods at a glance.
Practice-level controls
Every practice is different — a pediatric dietitian's "1 roti" is smaller than an adult practice's. A vegetarian clinic doesn't need non-veg foods in search. MealStack gives you full control over how the food database works for your practice.
Access these settings from Settings → Food Database.
Portion overrides
Override any platform portion size to match your practice's actual measurements:
| What you can do | Example |
|---|---|
| Override gram weight | "My katori = 100g" (instead of platform 150g) |
| Override per category | "Katori for cereals = 150g, for dal = 120g" |
| Override per food | "Katori for rice specifically = 200g" |
| Reset to platform default | One click to revert any override |
The override table shows all standard portions with the platform value and your custom value side-by-side. Click any value to edit inline.
Overrides apply to all new meal plans. Existing plans keep their saved gram weights — no retroactive changes.
Custom portions
Create entirely new portion types specific to your practice:
- Name (English + Hindi) — e.g., "1 palm (protein)" / "1 हथेली"
- Gram weight — the weight this portion represents
- Category assignment — which food categories this portion appears for
- Default flag — set as the default portion for assigned categories
Examples: "1 palm" (85g, for meat/fish), "1 fist" (80g, for vegetables), "1 steel glass" (250g, for beverages).
Custom portions appear alongside food-specific portions in the meal plan builder. They're marked with a ★ indicator so you can distinguish them from database portions.
Food visibility & filters
Control which foods appear when you or your team searches:
Dietary type filter — Only show foods matching selected types. A vegetarian practice can hide all non-veg foods from search results.
Database selection — Choose which databases are active (IFCT, INDB, USDA, Custom). Disable databases you don't use. You can only activate databases your plan includes; locked sources stay preview-only until you upgrade.
Hidden categories — Hide entire food categories from search (e.g., alcoholic beverages, infant foods).
Search behavior — Set default scope (all foods, favorites first, or custom foods first).
If you're a vegetarian practice, set the dietary type filter to show only Veg + Vegan. Non-veg foods will never appear in search results for any team member.
ICMR food exchange lists
The Indian food exchange system (ICMR-NIN 2024) is built in. One click loads all 9 standard exchange groups:
| Group | 1 Exchange | ~Calories |
|---|---|---|
| 🌾 Cereals & Millets | 30g raw | 100 kcal |
| 🫘 Pulses & Legumes | 30g raw | 100 kcal |
| 🥛 Milk & Dairy | 100ml | 70 kcal |
| 🥬 Vegetables (A) | 100g | 20 kcal |
| 🥕 Vegetables (B) | 100g | 40 kcal |
| 🍎 Fruits | 100g | 40 kcal |
| 🍗 Meat & Fish | 50g | 100 kcal |
| 🧈 Fats & Oils | 5g (1 tsp) | 45 kcal |
| 🍬 Sugar & Jaggery | 5g (1 tsp) | 20 kcal |
You can also create custom exchange groups for specialized protocols. When exchange lists are configured, the meal plan builder shows exchange counts alongside portions (e.g., "1.5 katori (225g) — 2.5 🌾 exchanges").
Food alert policies
Set practice-level rules that auto-warn or block foods when adding to meal plans:
Trigger types:
- Allergen tag — fires when a food has specific allergen tags (nuts, gluten, dairy, etc.)
- Nutrient threshold — fires when a nutrient exceeds a value per 100g (e.g., potassium > 300mg for renal patients)
- Dietary type — fires when food type doesn't match (e.g., non-veg for vegetarian clients)
- Food category — fires for specific food categories
Action types:
- Warn — shows a dismissible warning, practitioner can add anyway
- Block — prevents the food from being added entirely
- Note — shows an informational notice (no action required)
Scoping — policies can apply to all clients, or only to clients with specific goals (diabetes, renal) or tags (nut-allergy, celiac).
Use the quick templates to set up common policies in one click: Renal (high potassium), Nut Allergy, Gluten Free, Diabetes (high sugar), Pregnancy (caffeine), Vegetarian (non-veg block).
Cooking method adjustments
Configure how food weight and nutrients change with different cooking methods:
Yield factors — how weight changes after cooking:
- Rice: ×2.5 (100g raw → 250g cooked)
- Roti: ×0.85 (30g flour → ~25g cooked)
- Deep fried: ×0.7 (water loss, fat gain)
Nutrient retention — fraction of each nutrient retained:
- Deep frying: fat ×1.5 (absorption), protein ×0.9
- Boiling vegetables: vitamin C ×0.5 (heat-sensitive)
- Pressure cooking: protein ×0.95, fiber ×0.95
Platform defaults are based on USDA Retention Factor Release 6 and Indian cooking consensus. Override any value for your practice.
Display preferences
Control how food data appears across the app:
| Setting | Options | Default |
|---|---|---|
| Gram rounding | Exact, Nearest 5g, Nearest 10g | Nearest 5g |
| Portion display | "1.5 katori (225g)" or "225g (1.5 katori)" or "1.5 katori" | Portion first |
| Show Hindi names | On/Off | Off |
| Energy unit | kcal or kJ | kcal |
| Food name format | Cleaned, Original (USDA/IFCT), Hindi | Cleaned |
| Database badge | Show/Hide | Show |
| Dietary type badge | Show/Hide | Show |
Practice-level food database controls
Every practice is different — a pediatric dietitian's "1 roti" is smaller than an adult practice's. A vegetarian clinic doesn't need non-veg foods cluttering search. A renal specialist needs potassium warnings. MealStack lets you customize the food database to match your practice.
Access these settings from Settings → Food Database.
Portion configuration
Override any platform portion size to match your practice's actual measurements:
| What you can do | Example |
|---|---|
| Override platform portions | Change "1 katori (small)" from 150g to 100g |
| Create custom portions | Add "1 palm (protein)" = 85g for meat/fish |
| Assign to categories | Your "1 fist" portion only shows for vegetables |
| Set defaults | Make your custom portion the default for a category |
| Hindi names | Add Hindi names to all custom portions |
Overrides apply to all new meal plans. Existing plans keep their saved gram weights — no retroactive changes. The platform default is always shown for reference so you know what you're overriding.
How portion resolution works
When you add a food to a meal plan, MealStack resolves portions in this priority order:
- Food-specific override — if you've overridden a portion for this specific food
- Category override — if you've overridden a portion for this food's category
- Global override — if you've overridden a portion for all categories
- Platform default — the standard value (ICMR/FDA reference)
Overridden portions show a ✦ indicator in the portion picker. Custom practice portions show a ★ indicator.
Food visibility & filters
Control which foods appear when you or your team searches:
| Setting | What it does |
|---|---|
| Dietary type filter | Only show veg, eggetarian, vegan — hide non-veg entirely |
| Active databases | Choose which databases are searchable (IFCT, INDB, USDA, Custom) |
| Hidden categories | Hide entire categories (e.g., Alcoholic Beverages, Infant Foods) |
| Food blacklist | Block specific foods from ever appearing in search |
| Unverified foods | Hide foods with estimated/unverified nutrient data |
If your practice is exclusively vegetarian, set the dietary type filter to "Vegetarian" and "Vegan" only. Non-veg foods will never appear in search results for any team member.
Display preferences
| Setting | Options | Default |
|---|---|---|
| Show grams | Always / On hover / Never | Always |
| Gram rounding | Exact / Nearest 5g / Nearest 10g | Nearest 5g |
| Hindi portion names | On / Off | Off |
| Portion display | "1.5 katori (225g)" / "225g (1.5 katori)" / "1.5 katori" | Portion first |
| Energy unit | kcal / kJ | kcal |
| Decimal places | 0 / 1 / 2 | 1 |
| Food name format | Cleaned / Original / Hindi | Cleaned |
ICMR food exchange lists
The Indian food exchange system (ICMR-NIN 2024) is built in. One "exchange" is a measured amount of food providing approximately the same calories and macros. Foods within the same group can be substituted for each other.
Click Load ICMR Standard to set up the 9 standard exchange groups:
| Group | 1 Exchange | ~Calories | Key nutrient |
|---|---|---|---|
| 🌾 Cereals & Millets | 30g raw | 100 kcal | Carbs |
| 🫘 Pulses & Legumes | 30g raw | 100 kcal | Protein + Carbs |
| 🥛 Milk & Dairy | 100ml | 70 kcal | Protein + Calcium |
| 🥬 Vegetables (A) | 100g | 20 kcal | Fiber |
| 🥕 Vegetables (B) | 100g | 40 kcal | Carbs |
| 🍎 Fruits | 100g | 40 kcal | Carbs + Fiber |
| 🍗 Meat & Fish | 50g | 100 kcal | Protein |
| 🧈 Fats & Oils | 5g (1 tsp) | 45 kcal | Fat |
| 🍬 Sugar & Jaggery | 5g (1 tsp) | 20 kcal | Carbs |
You can also create custom exchange groups for specialized protocols.
When exchange lists are configured, the meal plan builder shows exchange counts alongside portions — e.g., "1.5 katori (225g) — 2.5 🌾 exchanges". This helps practitioners plan meals using the ICMR exchange system.
Food alert policies
Set up automatic warnings or blocks when adding foods that conflict with client conditions:
Trigger types:
- Allergen tag — warn/block when food has specific allergen tags (nuts, gluten, dairy, etc.)
- Nutrient threshold — warn when a nutrient exceeds a value per 100g (e.g., potassium > 300mg for renal)
- Dietary type — block non-veg foods for vegetarian clients
- Food category — warn/block entire categories
Action types:
- Warn — shows a dismissible warning, practitioner can add anyway
- Block — prevents the food from being added entirely
- Note — shows an informational notice (no action required)
Scoping: Policies can apply to all clients, or only to clients with specific goals (diabetes, renal, pregnancy) or tags (nut-allergy, celiac, vegetarian).
Quick templates
One-click setup for common clinical scenarios:
| Template | Trigger | Action |
|---|---|---|
| 🫘 Renal — High Potassium | K > 300mg/100g | Warn |
| 🥜 Nut Allergy | allergen:nuts, allergen:peanuts | Block |
| 🍞 Gluten Sensitivity | allergen:gluten | Warn |
| 🩺 Diabetes — High Sugar | sugar > 15g/100g | Warn |
| 🤰 Pregnancy — Caffeine | contains:caffeine | Note |
| 🌱 Vegetarian Practice | dietary_type: non_veg | Block |
Combine multiple policies for comprehensive coverage. A renal practice might use: High Potassium Warning + High Phosphorus Warning + High Sodium Warning — all scoped to clients with the "renal" goal.
Cooking method adjustments
Configure how food weight and nutrients change with different cooking methods:
| Method | Yield factor | What it means |
|---|---|---|
| Boiled | ×2.5 | 100g raw rice → 250g cooked |
| Pressure Cooked | ×2.2 | 100g raw dal → 220g cooked |
| Dry Roasted | ×0.85 | 30g flour → ~25g roti |
| Shallow Fried | ×0.80 | Water loss, fat gain |
| Deep Fried | ×0.70 | Significant fat absorption |
| Grilled | ×0.75 | Water + fat loss |
| Steamed | ×2.3 | Idli, dhokla — minimal nutrient loss |
Click Load Defaults to set up platform defaults based on USDA Retention Factor Release 6 and Indian cooking consensus.
Yield factors affect nutrition calculations. When a food is marked as "cooked" in a meal plan, MealStack divides the gram weight by the yield factor to get the raw equivalent, then calculates nutrients from the raw value. This ensures accurate nutrition whether you enter cooked or raw weights.
Data accuracy & verification
MealStack takes food data accuracy seriously. All imported nutrition databases are verified against their original sources using automated audit scripts.
Verification status
| Database | Foods | Verification | Result |
|---|---|---|---|
| IFCT 2017 | 542 | Every nutrient compared against CDN source (same data NIN published) | 100% match |
| INDB 2024 | 1,014 | Every nutrient compared against source Excel file | 100% match |
| USDA SR Legacy | 7,793 | Imported from official USDA CSV downloads | Standard import |
Energy corrections
35 INDB recipes had energy values that didn't match their macronutrient breakdown (a known issue in the INDB source data, particularly soups and watery dishes). These have been corrected using the standard Atwater formula (Energy = Protein×4 + Carbs×4 + Fat×9), with the original source value preserved in a footnote for audit trail.
How to identify calculated values
In the food detail panel, nutrients that were recalculated (rather than directly from the source) show a subtle ≈ symbol next to the nutrient name. The footer shows "Energy calculated from macros" when applicable.
Reporting inaccuracies
If you spot a food with incorrect nutrition data:
- Open the food detail panel
- Note the food name, source database badge (IFCT/INDB/USDA), and the value you believe is wrong
- Contact support at support@workfile.io with the details
We investigate all reported inaccuracies and correct them if confirmed.
Platform foods (IFCT, INDB, USDA) cannot be edited by practitioners — this ensures data integrity across all practices. If you need different values, clone the food as a custom food and adjust the nutrients.