Meal Plan Builder
Build personalized nutrition plans with real-time nutrient tracking and visual progress.
The meal plan builder is the core of MealStack. Create day-by-day nutrition plans with real-time calorie and macro tracking, visual progress indicators, and smart nutrient gap alerts.
Creating a plan
Start a new plan
Go to Meal Plans and click New Plan. Give it a title — e.g., "Priya's Weight Loss Plan — Week 1".
The plan list supports search (by title or client name), status filtering, and sorting (by recent activity, creation date, title, client name, or start date). Use the ⋯ menu on any plan to clone, archive, or assign a client directly from the list.
Assign a client (optional)
Select a client to link the plan. When linked, the builder pre-fills nutrient targets from the client's profile (based on their goal, weight, and activity level).
You can also create plans without a client — useful for building templates or general-purpose plans. You can assign or change the client later from Plan Settings at any time.
Set duration and targets
Choose the number of days (1–28) and set calorie/macro targets:
| Target | Example (weight loss) | Example (muscle gain) |
|---|---|---|
| Calories | 1400 kcal | 2400 kcal |
| Protein | 70g | 150g |
| Carbs | 175g | 280g |
| Fat | 45g | 75g |
| Fiber | 25g | 30g |
Client context panel
When a plan is linked to a client, a Client tab appears in the builder sidebar (open by default). This panel gives you constant access to the client's health profile without leaving the builder. A View Profile link at the top opens the full client profile in a new tab for quick edits.
Sections displayed:
- Profile snapshot — name, age, gender, height, weight, BMI
- Daily targets — calorie and macro progress bars showing actual vs target for the current day
- Restrictions — allergies (red), intolerances (amber), dietary preference (blue)
- Medical conditions — badges for diabetes, PCOS, thyroid, etc.
- Cuisine preferences — preferred cuisines for culturally appropriate meal planning
- Food likes & dislikes — green tags for likes, red tags for dislikes
- Women's health — pregnancy status with trimester indicator and calorie adjustment (+0/+340/+452 kcal), breastfeeding status with baby age and calorie guidance (+400/+500 kcal), menstrual cycle regularity, menopausal status
- Medications & supplements — current prescriptions and supplements (important for food-drug interactions)
- Lifestyle — cooking skill, meal prep time, eating out frequency, stress level
- Typical diet — what the client normally eats for each meal (helps you build plans they'll actually follow)
The women's health section shows trimester-specific calorie adjustments that match the Auto-Calculate formula. Use this as a quick reference when building pregnancy or postpartum plans.
Plan score
The Score tab in the builder sidebar rates your plan across up to 7 metrics. The overall score is the average of all applicable metrics.
| Metric | What it measures | Scoring |
|---|---|---|
| Calorie Accuracy | How close each day's total is to the calorie target | % deviation from target, averaged across days |
| Macro Balance | Protein, carbs, and fat vs their targets | Average accuracy across all macros and days |
| Food Variety | Unique foods relative to total items | Higher ratio = better score |
| Meal Spacing | Time gaps between meals (needs meal times set) | Days with 1.5h+ gaps between all meals |
| Completeness | How many days have at least one meal | Percentage of days with food items |
| Fiber Adequacy | Daily fiber intake vs target | Average % of fiber target met across days |
| Clinical Safety | Condition-aware flags based on clinical guidelines | Flags reduce the score |
Clinical safety flags
When the client has medical conditions or special health status, the Clinical Safety metric checks for potential issues:
| Flag | Trigger | Reference |
|---|---|---|
| Pregnancy calorie floor | Target < 1800 kcal for pregnant clients | ACOG minimum |
| Breastfeeding calorie floor | Target < 1800 kcal for breastfeeding clients | WHO minimum |
| Diabetes carb limit | Carbs > 45% of calories for diabetic clients | ADA guidelines |
| Kidney protein limit | Protein > 20% of calories for kidney disease clients | NKF guidelines |
| Weight loss calorie floor | Target < 1200 kcal for weight loss clients | Nutrient deficiency risk |
Clinical Safety only appears when the client has relevant health data (pregnancy, medical conditions, or a weight loss goal). Plans without a linked client or without relevant conditions won't show this metric.
Nutrient tracking
The nutrient bar at the top provides real-time visual feedback:
- Calorie ring — circular progress indicator showing percentage of daily calorie target. Green when 80–110% (on track), amber when slightly off, red when significantly under or over.
- Calorie bar — stacked progress bar showing per-meal calorie contribution. Each meal gets its own colored segment with a compact legend below (e.g., "Breakfast 420 · Lunch 580 · Dinner 490"). Hover any segment to see the exact kcal. When no meals have items yet, falls back to a simple progress bar.
- Macro mini-bars — compact progress bars for Protein, Carbs, and Fat showing actual vs target (e.g., "P 58/165g")
| Color | Meaning | Range |
|---|---|---|
| Green | On track | 80–110% of target |
| Amber | Watch | 60–80% or 110–130% |
| Red | Off target | Below 60% or above 130% |
The color coding gives you instant visual feedback. Aim for all green — that means the day is well-balanced within the target range.
Per-item nutrition
Every food and recipe item in the plan shows inline macro pills below its name:
- P (protein), C (carbs), F (fat), Fb (fiber) — color-coded and shown in grams
- Only non-zero values are displayed (no clutter from "P 0g")
- Hover over any item name to see a nutrition hover card with a macro ratio bar, kcal, and all macros in a compact grid
Click any food name to open the Food Detail Sheet (full nutrient breakdown, portions, micronutrients). Click any recipe name to open the Recipe Detail Sheet (nutrition per serving, ingredients list, instructions).
The hover card gives you instant nutrition context without leaving the plan. Use it to quickly compare items — hover one, then hover another to see which has more protein.
Meal timeline
A compact timeline above the meal slots shows your meal spacing visually:
- Dots represent each meal on a 5AM–11PM track
- Filled dots = meals with food items, empty dots = empty slots
- Shows eating window duration and fasting window (e.g., "15.5h eating · 8.5h fasting")
This is especially useful for intermittent fasting plans and ensuring proper meal spacing.
Day view
The default view shows one day at a time with meal slots:
| Slot | Typical time | Purpose |
|---|---|---|
| Early Morning | 6:00 AM | Pre-breakfast — water, nuts, seeds |
| Breakfast | 8:00 AM | Main morning meal |
| Mid-Morning | 10:30 AM | Light snack |
| Lunch | 12:30 PM | Main afternoon meal |
| Evening Snack | 4:00 PM | Tea-time snack |
| Dinner | 7:30 PM | Main evening meal |
| Bedtime | 9:30 PM | Optional — milk, supplements |
You can customize meal slots in Settings → Meal Structure. Add slots like "Pre-Workout" or "Post-Workout" for sports nutrition clients, or remove "Bedtime" if not needed.
Adding foods
Click Add food or recipe in any meal slot to open the search panel.
AI-powered suggestions
When there's a significant nutrient gap (>30% below target for any macro), an AI Suggestions section appears in the search panel. Click the "Suggest foods" button to get AI-powered recommendations based on the client's profile, dietary preference, and current nutrient gaps.
Suggestions are cached per meal type — switching between meals and back reuses previous results without another AI call. Click Refresh to get new suggestions.
AI suggestions are on-demand — they only fire when you click the button, not automatically. This keeps AI costs predictable.
Manual search
Search by English name — Type "brown rice" → results show Brown rice, cooked (USDA) at 123 kcal/100g.
Search by Hindi name — Type "dahi" → results show Curd / Dahi (IFCT) at 60 kcal/100g.
Prefix matching — Type "chick" → immediately shows Chicken, Chickpea, etc. without needing the full word.
Each search result shows:
- Food name with source badge (IFCT / INDB / USDA)
- Macro preview (calories, protein, carbs, fat) in consistent colors
- Hindi name (when available)
- Category name
- Calorie density badge — VL (very low, under 60 kcal/100g), L (low), M (medium), H (high, over 400 kcal/100g)
Recipe results appear in a separate section above foods, showing:
- Recipe name with a violet indicator
- Calories per serving — so you can compare recipes against individual foods before adding
- Servings count, cuisine type, and ingredient count
- "per serving" label for context
The first 15 results load instantly. If more results exist, a "Show more" button appears at the bottom with the total count (e.g., "Show more — 32 remaining"). Click to load the next page.
Can't find a food? A "Create custom food" link appears at the bottom of search results. Click it to open the Quick Food Creator pre-filled with your search query. After creating, the food is automatically added to the meal slot — no need to search again. See Food Database → Quick food creator for details.
The calorie density badge helps with weight management plans. Look for VL and L foods (vegetables, fruits, lean proteins) to build volume-rich, low-calorie meals.
After adding, adjust the quantity and portion size (grams, katori, roti, cup, tablespoon, etc.).
Organizing items
Reorder within a meal
Hover over any food item to reveal a drag handle (⠿) on the left. Drag items up or down to reorder them within the meal — useful for putting the main item first, sides second, and beverages last.
Move between meals
Each item has a ⋯ menu with Move to → [meal name]. Use this to quickly move a food from one meal to another without removing and re-adding it.
Clear and remove meals
The ⋯ menu on each meal header offers:
- Clear all items — empties the meal without removing the slot itself
- Remove meal — deletes the meal slot entirely (confirms if it has items)
Add a meal slot
Click + Add meal slot below the last meal to add a missing meal type (e.g., Pre-Workout, Post-Workout, Bedtime). The dropdown shows only meal types not already in the current day.
Sports nutrition clients often need Pre-Workout and Post-Workout slots. Add them to specific days without changing your org-wide meal structure defaults.
Nutrient gap alerts
When daily targets are set and a nutrient is significantly off, the builder shows smart alerts at the bottom of the day:
| Alert | Trigger | Suggestion |
|---|---|---|
| ⚠ Protein low | Below 50% of target | "Add eggs, paneer, dal, or chicken" |
| ⚠ Fiber low | Below 50% of target | "Add vegetables, whole grains, or fruits" |
| ⚠ Fat high | Above 130% of target | "Reduce oil, ghee, or fried items" |
| ⚠ Calories high | Above 120% of target | "Consider smaller portions or lower-calorie swaps" |
These suggestions are India-specific — they recommend foods commonly available and culturally appropriate for Indian clients.
Food safety warnings
The builder automatically flags foods that may be unsafe or inappropriate based on the client's health profile. Warnings appear as colored badges on food items in the meal slots.
Pregnancy safety
When a client is marked as pregnant, the builder warns about:
| Level | Foods flagged |
|---|---|
| Critical | Alcohol, high-mercury fish (shark, swordfish), raw/undercooked foods (sushi, tartare) |
| Warning | Caffeine (coffee, espresso — limit 200mg/day), raw papaya, excess pineapple |
Medical condition warnings
When a client has medical conditions in their profile, the builder flags condition-specific foods:
| Condition | Foods flagged | Level |
|---|---|---|
| Diabetes | Sugar, jaggery, honey, sweets, mithai, maida, white bread, soda, juice | Warning |
| Kidney Disease | High-potassium (banana, potato, spinach, coconut water), high-phosphorus (cola, processed meat) | Warning |
| Hypertension | High-sodium (pickle, papad, chips, namkeen, instant noodles, soy sauce) | Warning |
| High Cholesterol | High saturated fat (ghee, butter, fried foods, pakora, samosa, red meat) | Warning |
| Thyroid (Hypo) | Raw goitrogens (raw cabbage, broccoli, cauliflower, soy) — cooking reduces goitrogens | Info |
| PCOS | High-GI/refined foods (same as diabetes list) | Info |
Medication interactions
When a client has medications listed in their profile, the builder warns about food-drug interactions:
| Medication | Interacting foods | Level |
|---|---|---|
| Warfarin | Vitamin K-rich (spinach, kale, broccoli, green tea) | Warning |
| Metformin | Alcohol | Warning |
| Statins | Grapefruit | Warning |
| MAOIs | Tyramine-rich (aged cheese, soy sauce, kimchi, salami) | Critical |
| Levothyroxine | Calcium, iron, soy, coffee (reduce absorption) | Info |
| ACE inhibitors | High-potassium (banana, orange, potato, coconut water) | Info |
All warnings are informational — they help you make informed decisions, not restrict your choices. Use clinical judgment to decide whether a flagged food is appropriate for the specific client.
Day tabs with calorie totals
The day sidebar shows each day's name and total calories, making it easy to spot which days need attention without clicking through each one.
For active plans, the day that corresponds to today's date shows a green "Today" badge — so you always know which day the client is currently on in their portal.
Week view
Switch to week view to see all days side by side. Each day shows:
- Total calories with a color-coded progress bar
- Macro breakdown (P/C/F) in consistent colors
- Food items per meal slot
Click any day to jump back to the day view for editing.
Copying meals and days
This is the biggest time-saver in the builder:
- Copy a meal — click the ⋯ menu on any meal → "Copy to other days"
- Duplicate a day — hover over a day tab → ⋯ → "Duplicate Day"
Most clients eat similar breakfasts all week. Build one good breakfast, copy it to all days, then focus your time on varying lunch and dinner.
Food alternatives
For any food in a meal, you can add alternatives — "or" options the client can choose from if the primary item isn't available or preferred. This is the industry-standard approach used by platforms like Nutrium and Foodzilla.
How nutrient totals work
Only the primary food in each alternative group counts toward meal and day totals. The primary is always the first item in the group (topmost). Alternative items show their own calories inline but are excluded from all totals — nutrient bar, day calories, plan score, grocery list, and PDF summaries.
This means adding alternatives never inflates your nutrient numbers. The day stays accurate to what the client will actually eat — whichever option they pick.
Adding alternatives
Open the item menu
Hover over any food item in a meal and click the ⋯ dropdown menu.
Click "Add alternative"
The food search panel opens in alternative mode — the header shows "Add alternative to [meal name]".
Search and select
Find the alternative food and click it. It's added to the same group as the source item, positioned directly below it.
You can also click + Add option in the group footer to add more alternatives to an existing group.
Visual grouping
Items in the same alternative group are wrapped in a dashed border with "or" dividers between them:
- The primary item (first in the group) shows a green dot (●) next to its name — this is the one counting toward totals
- Alternative items show dimmed calorie values to indicate they're excluded from totals
- The group footer has two actions: + Add option (add another alternative) and Ungroup (dissolve the group)
Changing the primary
Drag-and-drop reordering within a group changes which item is primary. The topmost item after reordering becomes the new primary, and nutrient totals update accordingly.
Removing and moving items
- Removing an item from a 2-item group automatically dissolves the group — the remaining item becomes standalone
- Moving an item to a different meal detaches it from its group. If the source group is left with only 1 item, that group is dissolved automatically
Alternatives in PDF exports
Day list layout — Alternative items appear indented below the primary with an italic "or" prefix and dimmed calories. A footnote explains: "Items marked 'or' are alternatives. Nutrition totals reflect the primary option only."
Week grid layout — Only primary items are shown (space is limited). Items that have alternatives show an asterisk (*). A footnote explains the convention.
Grocery list — Only primary items are included in the grocery list. Alternative ingredients are excluded to avoid over-purchasing.
Alternatives in the client portal
Clients see the primary food normally. Below it, a small chip shows "X alternatives" — tapping it expands the alternative options with an "or" prefix and a left border accent.
Each alternative has a "Use this" button. When a client taps it, the selected food swaps to the top position and the meal's nutrient totals recalculate instantly to reflect the selected item. The day totals and calorie ring on the home screen update too. Selections persist across page refreshes — the client doesn't need to re-select each time.
Use alternatives for common substitutions: "Brown rice" with alternatives "Quinoa" and "Roti". This gives clients flexibility while keeping your nutrient targets accurate — totals always reflect whichever option the client has selected.
Notes and instructions
Add notes at any level of the plan — per food item, per meal, per day, or for the entire plan. Each note has two fields:
| Field | Visible to | Where it appears |
|---|---|---|
| Client note | Client + practitioner | PDF exports, client portal, meal cards |
| Internal note | Practitioner only | Builder UI only (never on PDFs or portal) |
Per-food notes
Click the 📝 icon on any food item to add notes. Common uses:
- "Boil for 10 minutes" (preparation instruction)
- "Can substitute with paneer" (alternative suggestion)
- "Use low-fat version" (client-facing tip)
- "Client mentioned bloating with this food" (internal clinical note)
The note icon is hidden by default and appears on hover. When a note exists, the icon stays visible with a colored dot indicator — green for client notes, amber for internal notes. Hover the icon to preview the note without clicking.
Per-meal notes
Click the 📝 icon in the meal header (next to the kcal total). Use for timing instructions like "Eat within 30 minutes of waking up" or "Post-workout — consume within 45 min."
Per-day notes
Click the 📝 icon at the top of the day view. Use for special day instructions like "Fasting day — only liquids until noon" or "High-carb day (training day)."
Plan-level notes
Open Plan Settings (⚙️) to add plan-level notes:
- Client Notes — general instructions shown on the PDF and portal (e.g., "Drink 3L water daily")
- Internal Notes — private notes for your reference (e.g., "Client prefers South Indian cuisine, review in 2 weeks")
Plan actions
The toolbar provides quick access to key actions:
| Action | Location | Description |
|---|---|---|
| Grocery List | 🛒 icon button | Auto-generated shopping list grouped by category |
| Activate | Green button (draft plans) | Publish the plan — auto-sends email to client |
| Send to Client | Outline button (active plans) | Email the plan with optional PDF and personal message |
| Complete | Outline button (active plans) | Mark the plan as completed |
| Back to Draft | ⋯ menu (active plans) | Revert to draft — clears dates, removes from portal |
| Reopen | Outline button (completed plans) | Move back to draft for editing |
| Restore | Outline button (archived plans) | Move back to draft for editing |
| Export PDF | ⋯ menu | Generate branded PDF with customizable sections |
| Clone Plan | ⋯ menu | Create an exact copy as a new draft |
| Save as Template | ⋯ menu | Save for reuse across clients |
| Plan Settings | ⋯ menu | Edit title, dates, targets, day labels |
| Archive | ⋯ menu | Archive for reference |
Plan settings
Open Plan Settings from the ⋯ menu (or click the gear icon) to manage all plan metadata in one place.
Client assignment
The top section lets you assign, change, or remove the client linked to this plan.
- Assign a client — search by name and select. Nutrient targets auto-fill from the client's profile for any empty target fields.
- Change — switch to a different client. Empty targets are filled from the new client's profile.
- Remove — unlink the client (the plan keeps its content and targets).
Changes are saved when you click Save Settings — you can cancel to undo.
If you created a plan without a client (e.g., while drafting), you can assign one later without losing any work. The builder header also shows an "Assign a client" shortcut when no client is linked.
Duration
Use the +/− stepper to change the plan duration (1–28 days).
- Extending adds blank days with the same meal slot structure as existing days.
- Shrinking removes days from the end. If those days contain food items, a confirmation dialog warns you before deleting.
Schedule
- Start date — sets when the plan begins. Auto-detects the weekday and relabels days accordingly.
- End date — auto-calculated from start date + duration.
- Day labels — choose weekday labels (Mon→Sun) or generic labels (Day 1, Day 2...).
Daily targets
Edit calorie and macro targets. If a client is linked, click Sync from client to pull the latest targets from their profile.
Nutrient visibility
Control which nutrients the client sees in PDFs and the portal. By default, all five nutrients (calories, protein, carbs, fat, fiber) are visible. You can hide specific nutrients per plan — useful for clients where showing certain macros isn't clinically appropriate (e.g., hiding fat for clients with eating disorder history, or hiding all macros for clients who feel overwhelmed by numbers).
Click any nutrient pill to toggle it off. Hidden nutrients are still tracked internally — the practitioner always sees all data in the builder. Only the client-facing outputs (PDF exports and portal) are affected.
| Level | Where to set | Behavior |
|---|---|---|
| Practice default | Settings → Export & Branding | Applies to all clients and plans unless overridden |
| Per-client | Client → Portal tab → Nutrient Visibility | Overrides practice default for this client |
| Per-plan | Plan Settings → Client Nutrient Visibility | Overrides client and practice defaults for this plan |
| Per-export | Export dialog → Visible Nutrients | One-time override for this specific PDF export |
The cascade resolves from most specific to least: export override → plan → client → practice → all visible. Setting a level to "inherit" (null) falls through to the next level up.
Notes
- Client notes — shown on PDF exports and the client portal.
- Internal notes — visible only to you and your team.
Grocery list
Click the 🛒 button to auto-generate a shopping list from all foods in the plan, grouped by category (grains, vegetables, fruits, dairy, etc.). Quantities are rounded to practical shopping amounts.
Share via copy, WhatsApp, or print.
PDF export
Click ⋯ → Export PDF to generate a branded PDF. Customize what appears:
- Cover page with practice logo and client name
- Client summary with health stats
- Day-by-day meal plan with portions and per-meal nutrients
- Per-item macros (optional) — show P/C/F below each food item. Enable with the "Show item macros" toggle in the export dialog. Off by default to keep PDFs clean.
- Daily nutrient totals
- Nutrient summary across all days
- Recipes (if included)
- Grocery list
- Recommendations (water intake, physical activity, foods to avoid)
- Custom message
- Visible nutrients picker — choose which macros appear in the PDF (calories, protein, carbs, fat, fiber)
Display preferences in exports
Your practice's display preferences (configured in Settings → Food Database → Visibility & Filters) automatically apply to PDF exports:
| Setting | Effect on PDF |
|---|---|
| Portion display: "Grams first" | Shows "225g (1.5 katori)" instead of "1.5 katori (225g)" |
| Portion display: "Portion only" | Shows "1.5 katori" without gram weight |
| Gram rounding: Nearest 10g | Rounds all gram values to nearest 10 |
| Recipe portions | Shows "1 serving (250g)" when gram weight is available |
Per-item macros are hidden by default in PDFs. Enable them when the client needs detailed nutrition transparency — for example, clients tracking macros for bodybuilding or diabetes management. For most clients, meal-level and day-level totals are sufficient.
If the client's portal is enabled, a QR code linking to the portal is automatically added to the cover page. For PDFs without a cover page, the QR code appears at the end of the document.
Configure default export settings in Settings → Export & Branding. You can set your logo, disclaimer text, default section toggles, and default nutrient visibility.
Templates
Save any plan as a reusable template:
Save as template
Open a completed plan → click ⋯ → Save as Template. Add tags like "weight-loss", "vegetarian", "1400-kcal".
Reuse later
When creating a new plan, start from a template. Go to Templates page, find your template, and click Use Template.
Build condition-specific starter templates — "Diabetes 1600 kcal", "PCOS Vegetarian", "Pregnancy Trimester 2" — and reuse them across clients. Customize per client after copying.
Plan statuses
| Status | Meaning | Editable? | Actions available |
|---|---|---|---|
| Draft | Work in progress — not shared with client | Yes | Activate, Archive |
| Active | Published and assigned to client | Yes | Send to Client, Complete, Back to Draft, Clone, Archive |
| Completed | Program ended | No (reopen to edit) | Reopen → Draft, Clone, Next Cycle, Archive |
| Archived | Manually archived for reference | No (restore to edit) | Restore → Draft |
Confirmation dialogs
All status transitions require explicit confirmation. Each dialog explains what will happen:
| Action | What the dialog tells you |
|---|---|
| Activate | Dates will be set automatically, activation email sent to client, plan visible in portal |
| Complete | Plan marked as finished, client loses active view, can reopen later |
| Back to Draft | Dates cleared, client loses portal access, no email sent |
| Archive | Hidden from list, client loses access, can restore later |
If the plan has no assigned client, the dialog omits client-specific warnings (email, portal) and only mentions the date changes.
One active plan per client
MealStack enforces a single active plan per client. If you try to activate a plan for a client who already has one active, you'll see a dialog offering two choices:
- Cancel — keep the existing plan active
- Replace & Activate — the existing plan is automatically marked as "Completed" and the new plan becomes active
This prevents confusion about which plan is current. If you have legacy duplicate active plans (created before this guardrail), the plan list shows an amber ⚠ warning icon with a tooltip: "This client has multiple active plans."
Deactivating a plan (Back to Draft)
If you accidentally activated a plan or need to make significant edits, use Back to Draft from the ⋯ menu. This:
- Moves the plan back to Draft status
- Clears the start and end dates (they'll be re-set on next activation)
- Removes the plan from the client's portal immediately
- Does not send any email notification to the client
When you Activate a plan, MealStack automatically sets the start and end dates (if not already set) and sends an activation email to the client — "Your meal plan starts today." You can disable this email in Settings → Notifications.
Reopening and restoring plans
- Completed → Reopen: Moves the plan back to Draft so you can edit it. Start and end dates are cleared — they'll be re-set when you activate again.
- Archived → Restore: Same as reopen — moves to Draft for editing.
This means no plan is ever a dead end. You can always go back and revise.
Sending plans to clients
After activating a plan, click Send to Client in the toolbar. The delivery dialog offers two channels side by side:
- Send Email — emails the plan to the client with an optional personal message and PDF attachment
- WhatsApp — opens WhatsApp with a pre-composed message containing the plan details and portal link (requires the client to have a phone number)
Both options support:
- A personal message field (optional)
- PDF attachment toggle (on by default)
- Portal link inclusion (if the client's portal is enabled)
If the client has only a phone number (no email), you can still deliver via WhatsApp. If they have only an email (no phone), the WhatsApp button won't appear.
You can also copy the portal link directly from the ⋯ menu → Copy Portal Link in the plan builder toolbar.
Plans without a client assigned show a disabled "Send to Client" button with a tooltip explaining you need to assign a client first. Click "Assign a client" in the plan header or open Plan Settings to link one.
The activation email is sent automatically when you click Activate. Use "Send to Client" for follow-up deliveries — for example, after making changes to an active plan, or to re-send with a personal note.
Cloning and next cycle
Instead of building every plan from scratch, clone an existing one:
- Clone Plan — creates an exact copy as a new Draft. Available from the ⋯ menu in the builder, the plan list, or the client's Plans tab.
- Create Next Cycle — clones a completed plan and shifts the dates forward. If the original plan ended on Friday, the new one starts Saturday. Available on completed plans in the client's Plans tab.
Cloned plans track their lineage — each clone increments the version number (v2, v3, etc.) and links back to the source plan via parentPlanId.
Version numbers appear next to the plan title in the client's Plans tab, making it easy to see the iteration history at a glance.
Plan expiry
When an active plan passes its end date, MealStack shows visual indicators:
- Builder header — "Xd remaining" (amber when ≤3 days, red when overdue)
- Plan list — expiry badge next to the status
- Plan settings — status section with countdown
- Expired banner — a red banner appears in the builder with two actions: Complete or Next Cycle
Don't let plans sit in "active" after they expire. Either mark them as completed or create the next cycle — this keeps your plan list clean and gives clients clear expectations.