Define what each tier receives. Perks display on customer account pages.
Top Referrers
Create Customer
Edit Customer
Send Email
Finance
Sales
Ops
🔍
Click any row to open the item's detail panel. SKUs are permanent once assigned.
Base Meal Price
Drives all plan card prices, the order picker, launch discounts, projections, and revenue calculations. Recipe cards use their own menuPrice field — set it to blank to inherit this.
$/meal
Meal Plan Discounts
Applied to base price per plan type. Updates plan cards and checkout picker on the public site.
5-meal weekly
standard plan
%
10-meal weekly
committed plan
%
Monthly (4-week prepay) — extra off
5-meal monthly
%
10-meal monthly
%
How monthly % stacks
Baked Goods Subscriptions
Discount on baked goods for subscribers.
Weekly recurring
%
Monthly plan
%
Referrals
Credit for referrer, discount for referred person.
Referrer credit
$
Referee discount
%
🎉 Graduated Launch Discount
New customers get decreasing discounts over a range of orders. Set % off and the order range it applies to.
Orders beyond the last range = full price. Saved to settings/subscriptionConfig.launchDiscount. Changes apply immediately to cards, picker, and modals.
Live Price Preview
Enter a base price above to see all plan prices.
💡 Pricing Insights
Adjust cost per meal to see insights.
📋 Pricing Strategy Guide
Target Margins
Meals: 55-62% gross margin
Baked goods: 65-75% gross margin
Food cost target: 30-32%
Red Lines
Food cost: never >35%
Prime cost (food+labor): never >60%
CAC: never >$60
Competitive Position
Minneapolis avg: $12-15/meal
tandoco: $9.99/meal
Undercut by: 23-41%
Launch Strategy
Frame as free meals, not %
Graduated ramp, no cliff
Monthly upsell after 3-4 orders
Key Principles from Pricing Strategy Doc
1. Lead with per-meal price. "$9.99/meal" beats "$50/week" — customers compare to their lunch spend, and it wins instantly.
2. Anchor against alternatives. Average Minneapolis lunch: $15-25. DoorDash with fees: $18-30. Show this comparison.
3. 10-meal plan is the upsell target. "Your extra 5 meals cost just $6.99 each" — incremental cost framing is the strongest argument.
4. Monthly is a loyalty reward, not a commitment. Don't lead with monthly at signup. Present it after 3-4 successful orders as "savings you've earned."
5. Graduated ramp prevents churn. Never let customers experience a single dramatic price cliff. Each order is a small step toward full price.
6. Baked goods are the profit accelerator. 65-75% margins vs 55-62% on meals. A $3.99 cookie is 4.7% of an $84.90 order — feels like a treat, not a cost increase.
7. Target churn <12%. Industry average is 12.7%. Pause/skip flexibility reduces permanent churn by up to 30%.
Price Simulator
See how stacked discounts affect the final price. Reads live values from the Pricing tab — adjust them there, then simulate here.
Plan Type
Meal Plans
Bakery
Additional Discounts (stackable)
Price Breakdown
Customer Pays
$0.00
Per meal
$0.00
Total discount
-$0.00 (0%)
TandoCoins earned
0
Business Margins
Total cost to make
$0.00
Gross profit
$0.00
Profit margin
0%
Profit per item
$0.00
Changes go live on the public site immediately after saving.
📊 Customer Acquisition Cost (CAC)
True CAC = all costs to acquire a customer, not just ad spend. Discounts are marketing spend disguised as pricing.
Cost Breakdown Per Customer
🎉
Order 1 discount (40% off)
$50 order → customer pays $30 → you absorb $20
$20.00
per customer
🎁
Order 2 discount (25% off)
$50 order → customer pays $37.50 → you absorb $12.50
$12.50
per customer
✨
Order 3 discount (10% off)
$50 order → customer pays $45 → you absorb $5
$5.00
per customer
📣
Marketing / ad spend
ads, flyers, gym partnerships, influencers
🤝
Referral credits
credits given to referrers (when active)
$0
per customer
ongoing plan discounts
📦
Weekly plan discount
5-meal: standard discount · 10-meal: committed discount
—
per order
📅
Monthly plan discount
stacked plan + monthly discount · billed every 4 weeks
—
per order
🥐
Bakery monthly discount
applied to all baked goods on monthly plans
—
% off
🔄
Auto-renew discount
extra % off for customers who auto-renew (when active)
—
% off
DISCOUNT CAC
$37.50
launch discounts alone
TRUE CAC
$37.50
discounts + marketing + referrals
LTV:CAC Ratio
—
Goal: 10:1+ for local meal prep
Payback Period
—
Orders to recover CAC
SKU Sales Analytics
Pricing is managed in Finance → Pricing.
Subscribers by Type
Category Manager
Set colors, SKU type, pack options, and owner for each recipe category.
Site Content
Edit your consumer-facing website content here. Changes save to Firestore and update the live site instantly — no redeploy needed.
Preview site →
Hero Section
How It Works
Step 1
Step 2
Step 3
Menu / What We're Cooking
Reviews / Testimonials
Review 1
Review 2
Review 3
Review 4
Review 5
Review 6
Subscription / Waitlist
Social Media Section
Pickup Section
Email Capture / Founding Members
Contact Section
FAQ Section
FAQ 1
FAQ 2
FAQ 3
FAQ 4
FAQ 5
FAQ 6
SEO Settings
0/160
SEO Content Section
Footer
QR Tracker
Flyer Map
Track every flyer hung across the Twin Cities. Double-tap the map to drop a pin — anywhere, anytime.
Filter:→
Tap anywhere on the map to drop a pin — or double-tap any spot at any time.
All Flyers
Suppliers
Company Information
Licenses & Registrations
Team Members
AI Assistant (Claude)
The AI Inventory Assistant is powered by Anthropic's Claude. An admin sets the API key once — it's stored securely in Firestore and shared with the whole team automatically. No one else needs to configure it.
How to get your API key:
1. Go to console.anthropic.com
2. Sign in or create a free account
3. Navigate to API Keys → Create Key
4. Paste the key above and click Save Key
Closed Weekends
Mark weekends when tandoco will be closed for pickup. Monthly subscribers will automatically have their billing adjusted. Weekly subscribers won't be able to order for closed weeks.
Blog
Loading...
—
Total Posts
—
Published
—
Total Views
—
Drafts
Weekly Blog Calendar
Post one SEO-rich blog per day to grow organic traffic
Packaging Inventory
0
Total Items
0
Low Stock
0
In Stock
0
Linked to Recipes
Item
Description
In Stock
Low Stock Alert
Unit
Cost/Unit
Linked Recipes
Actions
No packaging items yet
Add containers, bags, boxes, and labels to track your packaging stock.
Packaging stock is automatically deducted when orders are marked as Completed.
Production Supplies
Consumables used during cooking — foil, gloves, parchment, cleaning supplies, etc. Link these to recipes in the recipe costing panel.
0
Total Items
0
Low Stock
0
In Stock
Supply Name
Unit
Case Size
Case Price
Cost/Unit
In Stock
Low Stock Alert
Actions
No supplies yet
Add production supplies like foil, gloves, parchment, and cleaning materials.
Products
0
Total Products
0
Published
0
Drafts
Name
Category
Price
Status
Actions
🛍️
No products yet
Add baking mixes, meal prep guides, merch, and more.
0
Total Subscribers
0
News
0
Training
0
Recipe
Email
Category
Recipe
Source
Date
Actions
📧
No subscribers yet
No recipe alerts yet
Customers can sign up to be notified when unavailable recipes return.
🍽️
Weekly Menu Blast
One click sends a beautiful email with this week's full menu to all your subscribers and customers.
—
Meals
—
Bakery
—
Recipients
Compose & Send
Using saved template. Subject/body below override just this send; permanent edits live in the Templates tab.
When filled, this replaces the audience selection — sends to exactly this address.
sent via SendGrid from hello@tandoco.com
Live Email Variables
edit once, propagates to every email
These values are read by all transactional + marketing emails (welcome, winback, cart abandonment, referral, etc.). Changes apply within ~5 minutes due to function caching. Base meal price reads from Pricing & Discounts automatically.
These are the email templates sent automatically by tandoco. Preview, edit subject & HTML, restore previous versions. Edits propagate to Cloud Functions within 5 minutes.
loading templates…
Edit Email Template
🟢 using hardcoded default
⚠️ This template generates dynamic sections at send time (items table, pickup box, etc.). Overriding the HTML body replaces the full email and loses those dynamic parts. Subject-only edits are safe.
⚠️ Open & click tracking require Open Tracking and Click Tracking to be enabled in your SendGrid tracking settings. Bounces & unsubscribes are always tracked.
Sent by Category
Sent by Template
Recent Sends
Date
Template
Category
Subject
Count
By
No email sends recorded yet for this period.
Customers who opted in to receive SMS updates during signup.
Name
Phone
Email
Opted In
📱
No SMS subscribers yet
PT Management
On
Day
Start
End
Client
Date
Time
Duration
Status
Actions
💪
No appointments
Client
Email
Total Sessions
Last Session
Actions
👥
No clients yet
Direct Messages
no conversations yet
💬
Your Messages
Select a conversation or start a new one with + New
SMS Broadcast
COMING SOON
Send SMS to opted-in customers
Infrastructure is in place. When we connect a Twilio number, this panel will show the opted-in customer count, a message composer with character/segment counter, and a send button.
Currently collecting opt-ins at checkout. See SMS_ARCHITECTURE.md for the activation checklist.
Shows a sticky top banner on every page and replaces the checkout payment form with a waitlist signup. Non-blocking — customers can still browse and build a cart.
Appears in the banner and modals. Optional — leave blank to hide.
Banner (every page)
Reserve Modal (opens when banner is clicked)
Checkout Intercept (replaces payment form on /checkout)
📬Pre-Launch Arrival Popupsettings/preLaunch
Full-screen modal on first visit — highest email capture rate. Highest raw capture but some visitors bounce. Use alongside or instead of the banner.
Shown in both the reserve modal and arrival popup.
both cards share one save — clicking either saves all fields.
Google Business
Not Connected
Google Business Profile
Manage posts, reviews, photos & insights from HQ
Connect your Google Business Profile to manage everything from one place:
Step 1: Go to Google Cloud Console and create a project (or use existing). Step 2: Enable these APIs: My Business Account Management, Business Information, Business Profile Performance. Step 3: Create OAuth 2.0 credentials (Web application type). Add your redirect URI. Step 4:Apply for GBP API access (takes ~14 days). Step 5: Enter your OAuth credentials below and click Connect.
Google Business Posts
Create Post
Use a public image URL. You can copy a URL from your recipe photos in Firebase Storage.
Connect your Google Business Profile to view and create posts.
Reviews
—
Total Reviews
—
Avg Rating
—
Unreplied
—
5-Star
Connect your Google Business Profile to view and manage reviews.
Photos
Connect your Google Business Profile to manage photos.
Performance Insights
—
Total Views
—
Search Appearances
—
Phone Calls
—
Direction Requests
—
Website Clicks
Views Over Time
Search Type
—
View Source
—
Business Listing
Business Hours
DayOpenClose
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Events
Add Event
zoom:100%
Label Generator
1
Batch makes how many total servings?
2
How many servings per pack?
This is how many servings the customer gets in 1 package
3
Serving size label
Select a recipe to generate a label.
Select a recipe and fill in the fields to generate a label.
Market Research
🍱 Ready-to-Eat Meal Prep (US)
📦 Meal Kit Delivery (US)
🧁 Protein Snacks Market (US)
📍 Minneapolis Metro Market
🎯 Target Customer Profile
💰 Pricing Landscape
📈 Key Industry Trends (2025-2026)
⚡ tandoco Competitive Advantages
🕳️ Market Gaps to Exploit
Sort:
Marketing AI BETA
🤖
Marketing Analyst
Ask about campaigns, content strategy, customer insights, SEO
Powered by Claude · Analysis based on your live business data
📊 Google Analytics & Search Console
Live data from GA4 property 531134108 · tandoco.com
📈
Daily Traffic (Last 30 Days)
🌐
Traffic Sources
📱
Devices
📄
Top Pages
🔍
Search Console — Top Queries
DOMAIN HEALTH
--
Calculating...
tandoco.com
ORGANIC KEYWORDS
--
ORGANIC TRAFFIC
--
AVG POSITION
--
TOTAL CLICKS
--
IMPRESSIONS
--
AVG CTR
--
📅
vs Last Month
📊
Keyword Position Distribution
📈
Organic Traffic Trend
🔑
Top Organic Keywords
🗺️
Market Position Map
X = Price point | Y = Threat level | Bubble = Market share
🕸️
Competitor Radar Comparison
Where We Win vs Where They Win
📝
Competitor Content Strategy
🔀
Keyword Gap Analysis
Keywords your competitors rank for that you don't — untapped opportunities.
📊
Competitor Keyword Comparison
🩺 SEO Site Audit
Technical SEO issues and recommendations for tandoco.com
AI-powered keyword research: get volume estimates, difficulty scores, and content suggestions for each keyword.
🎯 SEO & AI Rank Battle Plan
actionable strategies to beat competitors in traditional search and AI/LLM rankings
🔍 Traditional SEO Strategy
How to outrank competitors in Google organic search results
Generate a battle plan to see specific strategies for beating each competitor.
🤖 AI & LLM Rank Strategy
NEW
How to get cited and recommended by ChatGPT, Gemini, Claude, and AI Overviews
Generate a battle plan to see AI/LLM ranking strategies.
⚡ Priority Actions (This Week)
Top tasks ranked by impact-to-effort ratio
Generate a battle plan to see priority actions.
⚔️ Beat Each Competitor
Specific tactics for outranking each competitor
Generate a battle plan to see competitor-specific tactics.
⚡ Site Performance
Real-time performance metrics from Firebase Performance Monitoring. Data updates automatically as customers use the site.
📄
Page Load Times
Loading performance data...
🌐
Network Request Performance
Loading network data...
🎯
Core Web Vitals
First Contentful Paint
—
Target: < 1.8s
DOM Interactive
—
Target: < 3s
Full Page Load
—
Target: < 4s
Time to First Byte
—
Target: < 600ms
🧪
Test Page Speed Now
Ad Platform Connections
Connect your ad accounts so the Marketing AI can pull real campaign data automatically. Credentials are encrypted and stored securely in Firestore.
G
Google Ads
Pull campaign spend, clicks, impressions, and conversions
How to get your credentials:
1. Go to ads.google.com/aw/apicenter — apply for a developer token
2. In console.cloud.google.com → APIs & Services → Credentials → Create OAuth 2.0 Client ID
3. Generate a refresh token using the OAuth Playground (developers.google.com/oauthplayground)
4. Copy your Customer ID from the top of Google Ads (format: 123-456-7890)
f
Meta Ads (Facebook & Instagram)
Pull campaign reach, spend, impressions, clicks, and conversions
How to get your credentials:
1. Go to developers.facebook.com → Create App (type: Business)
2. Add the Marketing API product to your app
3. Go to business.facebook.com → Settings → Users → System Users → Generate Token with ads_read permission
4. Copy your Ad Account ID from Ads Manager URL (format: act_1234567890)
🎵
TikTok Ads
Pull campaign spend, impressions, clicks, video views, and conversions
How to get your credentials:
1. Go to business-api.tiktok.com → create a developer account
2. Create an app and request Reporting: Read access
3. Get your Access Token from the app dashboard
4. Copy your Advertiser ID from TikTok Ads Manager
A
Google Analytics & Search Console
Pull organic search data, keywords, page performance, and site analytics
How to get your credentials:
1. Go to console.cloud.google.com → enable Search Console API and Analytics Data API
2. Create a service account → download the JSON key file
3. In Search Console, add the service account email as a user
4. In GA4, add the service account email under Admin → Property Access Management
5. Paste the full JSON key below and your GA4 Property ID
⏰
Auto-Sync Schedule
Connected platforms are synced automatically every day at 6:00 AM CT. Campaign data flows into your Ads Manager and is automatically analyzed by the Marketing AI when you run an analysis.
You can also click "Sync Now" on any platform to pull fresh data immediately.
🧠
No analysis yet
Click "Run Analysis" to have AI analyze your orders, traffic, and marketing data.
New Message
loading team…
Notifications
Keyboard Shortcuts
Search / Command⌘K
New ItemN
Overview⌘1
Recipes⌘2
Projects⌘3
Tasks⌘4
Financials⌘5
Orders⌘6
Close ModalEsc
Show Shortcuts?
New Ad Account
New Campaign
📎 Drop images or videos here, or click to browse
Campaign Details
New Project
New Task
New Document
📎
Click to attach a file
Add License
Add Ingredient
📦 Container / Purchase Info
🏪 Inventory
New Ingredient
SKU
📦 Container / Cost
🏪 Current Inventory
Nutrition (per 100g)
gEnter values exactly as they appear on the label
USDA MATCH — Please verify
Scan Barcode
Point camera at a barcode, or enter it manually below
PRODUCT FOUND
Scan Nutrition Label
EXTRACTED NUTRITION
Update Stock
Set a new absolute value, or enter a +/- adjustment.
New Invoice
📬 Bill To
📋 Line Items
DescriptionQtyUnit PriceAmount
Subtotal$0.00
Tax$0.00
Total$0.00
Add Transaction
New Contact
New QR Code
✨ Generate Blog with AI
Type a topic or working title. Claude will write a full on-brand post — title, excerpt, SEO meta description, hook, category, tags, and formatted HTML body with working CTAs linking to /store. Edit any field after generation.
New Flyer Location
New Supplier
New Event
Team & Invites
TEAM MEMBERS
INVITE SOMEONE
Generate an invite link and share it with your team member. The link can only be used once.
Recipe
📋 Full Recipe / Instructions
Write plain text or upload an HTML file
rendered preview
Core Macros
Extended Nutrition
Auto-fills nutrition from ingredient data
📐 Best size: 1500×1000 (3:2 landscape) — keep food centered
Click to upload or drag & drop
JPG, PNG, WEBP — max 10MB
📐 Best size: 1500×1000 (3:2 landscape) — keep food centered
🌐 Publish to Consumer Menu
Availability & Badges
Show as orderable
Hide behind reveal button
New Post
Status:
✨
Generate with AI
Give it a topic — get a full on-brand post with title, excerpt, SEO meta, and HTML body with working CTAs.
Category
Author
Publish Date / Schedule
Funnel / TikTok Hook (optional)
Excerpt (shown in blog card + social)
SEO Meta Description
0 / 160
Thumbnail Image (shown on blog card)
Content Builder
0 words
⚡
FULL HTML MODE
custom page uploaded
This post will render your uploaded HTML exactly as designed — all CSS, fonts, and layout preserved. The title, category, author, and excerpt fields are still used for SEO and the blog listing.
Permanently delete this post. This cannot be undone.
Import from Spreadsheet
Step 1 — Load your data
📂
Drop your file here or click to browse
Supports .xlsx, .xls, .csv — export from Excel or Google Sheets
Paste the share link from your Google Sheet. The sheet must be set to "Anyone with the link can view".
In Google Sheets: File → Share → Share with others → Change to "Anyone with the link"
Step 2 — Map columns
0 rows detected. Map your spreadsheet columns to the fields below. Unmapped fields will be skipped.
Preview (first 5 rows)
New Packaging Item
New Supply
New Appointment
Weekly Availability
Toggle which recipes are available this week. Only published recipes are shown.
New Product
SKU
Visible on the shop page
Display in homepage product area (bulk items default off)