Workshop Automation
All Workshops
Click to configure
Sales & Revenue
Fetch past orders from WooCommerce REST API and import them as sales records. Orders already in the system are skipped automatically.
WooCommerce API keys must be saved in API Settings first.
Revenue — Last 30 Days
By Workshop
By Payment Gateway
Top States
Orders by Day of Week
Recent Orders
Payment Reconciliation
Compares successful gateway payments against the orders recorded in this system, so you can spot money received without an order, orders with no payment, and amount mismatches.
Add the gateway's API keys first.
⚠ In gateway — not in system (money received, no order logged)
⚠ In system — not in gateway (order logged, no successful payment)
⚠ Amount mismatch
✓ Matched (net = after gateway fees)
⚠ Orders received but not yet settled (awaiting payout — usually settles next cycle, T+2/T+3)
🏦 Bank payouts (each settlement Razorpay deposited — click to see the orders it paid out)
Profit & Loss
Everything here is GST-exclusive. GST collected on sales is a liability, and GST paid on ads and gateway fees is Input Tax Credit — neither is income or cost, so neither touches profit. Only the net GST payable is remitted, shown as a separate position below the statement. Ad spend is pulled from Meta for the selected period; gateway fees use actual settlement data where available (PhonePe is estimated); ingredients come from the sessions register. The By Workshop tab shows the same figures per Workshop ID as a cohort.
Today Live
Yesterday
7D
30D
This Month
Last Month
All
🗓—
↻
Advanced overrides
Net Profit
₹0
P/L Statement
Gateway Fees
Workshops by Revenue (orders grouped by workshop; the session count here is inferred from order dates, not the register above)
Batch Profitability (per Workshop ID — edit ad spend & ingredients inline)
🎓Workshops with a session in
↻
Workshop P&L cohort view — every order ever placed against a Workshop ID, not just this period
Workshop
₹0
Workshop Sessions ingredient cost is charged to these dates
Accounting (Double-Entry)
Profit & Loss
Balance Sheet
Trial Balance
Upload a CSV of expenses / ad spend. Columns:
Date, Account, Amount, GST%, PaidFrom, Narration.
Amount is the total incl. GST; Account & PaidFrom match by name or code (GST% defaults to 18, PaidFrom to Bank). GST is auto-claimed as ITC.
↓ Download template
📘 Pull Facebook ad spend from Meta
Journal Entries
Add Account
Edit a name, type or GST role and it saves as soon as you leave the field. Codes are fixed — journal entries reference them.
Dashboard Overview
Mints Recipes · Today
Today Live
Yesterday
7D
30D
This Month
Last Month
This Year
All
Custom
→
🗓—
Net Profit
₹0
Workshops cohort P&L · every order placed against each Workshop ID
ROAS
—
Payment Mix
Value Insights
Revenue — Today
Daily Breakdown —
Top Workshops by revenue
Revenue by Payment Gateway
Top Students by purchases
Students by State
Students Directory
No students found.
Tag Management
Add a Tag
Existing Tags
No tags yet — add one above.
Order Logs
No logs yet.
Security & Access
Change Password
Changing your password signs you out of all other devices.
Two-Factor Authentication
…
Adds a 6-digit code from an authenticator app (Google Authenticator, Authy, 1Password) on top of your password at login.
1. Scan this QR code with your authenticator app:
Or enter this key manually:
✓ 2FA enabled. Save your recovery codes.
Each code works once if you lose your authenticator. Store them somewhere safe — they won't be shown again.
Locked out?
If you forget your password or lose your authenticator and recovery codes, open the project's Firebase console → Firestore →
config/settings and delete the ADMIN_PASSWORD_HASH, TOTP_SECRET and TOTP_ENABLED fields. This reverts to the hosting ADMIN_PASSWORD and turns 2FA off.
WhatsApp Broadcast
Connect a Google Sheet — whenever the trigger column gets filled in on a row, a WhatsApp template message is sent to that row's contact automatically. Templates are created in Meta Business Manager ↗; this page only picks from already-approved templates.
All Broadcasts
No broadcasts yet.
API Settings
⚠ Leave any field blank to keep its existing saved value. Only fill a field to update it.
📱 Messaging & Email WhatsApp · Waflux · Selzy
WhatsApp Cloud API
✓ already set
Waflux
✓ already set
Selzy
✓ already set
Selzy Automation Trigger (global — fires for every workshop unless overridden per workshop)
Paste the URL from your Selzy omni-automation API Trigger block. In your email template use
{{ ApiTrigger1.group_link }},
{{ ApiTrigger1.schedule }},
{{ ApiTrigger1.workshop }} etc.
📊 Sheets & Order Import Google · All Sales · WooCommerce
Google Service Account (for Sheets)
✓ already set
All Sales Sheet (global duplicate check — applies to every workshop)
When a new order arrives, the Check Duplicate step will check this sheet in addition to the per-workshop sheet.
Use your master "All Sales" Google Sheet so students from previous batches can't re-enrol.
WooCommerce REST API (needed for historical order import)
✓ already set
✓ already set
✓ already set
Until you set this, the live order webhook accepts any caller. WooCommerce Delivery URL:
…
📝 Google Form → Order create an On-Hold order from each new form row
A Google Apps Script on your responses sheet calls this app whenever a new row arrives. Set the Product ID for the current workshop here (change it only when the workshop type changes). Webhook URL to use in the script:
https://YOUR-DOMAIN/webhook/form-order
Creates one On-Hold test order in WooCommerce (save the Product ID first).
💳 Payment Gateways Razorpay · Cashfree · PhonePe
Razorpay (for payment reconciliation)
Generate keys in Razorpay Dashboard → Settings → API Keys → Generate Key. Read access is enough.
✓ already set
Cashfree (for payment reconciliation)
Generate keys in Cashfree Dashboard → Developers → API Keys. Use your Production credentials.
✓ already set
PhonePe (for payment reconciliation)
From PhonePe Business → Developer Settings → API Keys. PhonePe can only verify orders one-by-one, so reconciliation confirms each recorded order was actually paid (it can't list payments that have no order).
✓ already set
📣 Facebook / Meta Ads auto-fill ad spend in P&L
Meta Marketing API (reads ad spend for the P&L page)
Create a System User in Meta Business Settings → System Users, generate a token with the ads_read permission, and assign the ad account to it. The Ad Account ID is the number shown in Ads Manager (with or without the
act_ prefix).
✓ already set
Auto-post to Accounting (books ad spend as journal entries)
Every 30 minutes, ad spend is posted to the expense account below — one entry per day, GST claimed as ITC.
Meta keeps revising recent figures, so each day is amended in place until it is older than the
settle lag, then frozen and never touched again. Entries you imported by hand are never overwritten.
Days to keep amending before freezing. Meta usually settles within 3.
Account code — defaults to 5000 Advertising (Meta/Google).
📎 File Uploads Cloudinary — PDFs
Cloudinary (for uploading workshop PDFs — free)
In Cloudinary Console: copy your Cloud name (Dashboard); create an Unsigned upload preset (Settings → Upload → Upload presets → Add → Signing Mode: Unsigned) and copy its name; and turn on Settings → Security → "Allow delivery of PDF and ZIP files".
🔑 Account signed up with: droliaz22b@gmail.com
🔑 Account signed up with: droliaz22b@gmail.com
✓ Saved
Google Contacts Connection
Connect a Google account to automatically create contacts. You can disconnect and switch to a different account anytime.
Checking…
⚙️ One-time developer setup (OAuth credentials)
Set up once in Google Cloud Console. After this, only the "Sign in with Google" button above is needed.
✓ already set
✓ Saved