06. Subscriptions — Recurring Orders
A subscription is a customer's standing order: "2 litres of Buffalo Milk every morning".
Once you set this up, MilkGo creates today's delivery row automatically every day. You don't enter "Ramesh, 2L Buffalo" by hand each morning — the app does it for you.
Before you start
You need:
- 03-products.md — at least one product
- 05-customers.md — the customer who's subscribing
Where to find it
Two ways:
- From the customer's profile → Subscriptions tab → + Add Subscription
- From the Subscriptions menu (if your nav has it) → + New Subscription → pick the customer
The first way is more common — you usually add a subscription right after creating the customer.
Adding a subscription
- Tap + Add Subscription.
- Fill in:
| Field | Example | Required? |
|---|---|---|
| Customer | Ramesh (C103) | ✓ |
| Product | Buffalo Milk | ✓ |
| Quantity | 2 | ✓ |
| Rate | ₹70 (auto-filled from product default) | ✓ — can override per customer |
| Frequency | Daily / Alternate / Weekly / Custom | ✓ |
| Custom days | Mon, Wed, Fri (only if Custom) | conditional |
| Shift | Morning / Evening / Both | ✓ |
| Start date | Today (auto) | ✓ |
| End date | blank for ongoing | optional |
| Status | Active | ✓ |
- Tap Save.
From tomorrow morning (or right now if you tap Generate on Deliveries), this subscription will create a delivery row.
Frequencies — what they mean
| Frequency | Delivery happens on |
|---|---|
| Daily | Every day |
| Alternate | Every other day from the start date — Mon, Wed, Fri, Sun… |
| Weekly | Once per week, same day of week as the start date |
| Custom | Pick specific days — e.g. Mon, Wed, Fri only |
Shifts
| Shift | When deliveries appear |
|---|---|
| Morning | On the morning shift only |
| Evening | On the evening shift only |
| Both | Two delivery rows per applicable day — morning and evening |
Use Both when a customer takes 1L morning + 1L evening, or 2L morning + 1L evening (you'd add two separate subscriptions instead — one per shift, with different qty).
Multiple subscriptions per customer
A customer can have many subscriptions running at once:
- Buffalo Milk · 2L · Morning
- Cow Milk · 1L · Morning
- Curd · 500g · Mon Wed Fri only
Each is independent — pause one without affecting the others. The Deliveries screen groups them per customer so the driver sees one card with all three products.
Pausing & resuming
Going on holiday? Festival shutdown?
- Open the subscription.
- Tap Pause.
- Set the date range — From today, To when you'll resume (or leave open).
- Save.
For the paused dates:
- No delivery row is generated.
- The customer still exists, still appears in lists.
- You can resume any time by ending the pause early.
To resume early: open the pause entry → End now → save.
Pro tip: for festival days when all customers pause, use the Subscription Pauses bulk screen if your role has it. Pause every active subscription for 1 day in one tap.
Editing a subscription
Open the subscription → change quantity / frequency / rate / shift → save.
What changes, and when:
- Future deliveries use the new values from the next generation.
- Today's already-generated row stays unchanged (it's its own delivery record).
- Past deliveries are untouched.
So if you edit at 6am before generating today's deliveries, today reflects the change. If you edit at 8pm, it kicks in tomorrow.
Ending a subscription
When a customer stops their order:
- Open the subscription.
- Set End date = today (or yesterday).
- Save.
Or simpler:
- Toggle Status → Cancelled.
- Save.
No more deliveries are generated. Past deliveries stay.
Daily delivery generation
Subscriptions don't deliver milk — they're just templates. The actual delivery rows are created when you tap Generate on the Deliveries screen each morning/evening.
This separation is intentional:
- You can review and adjust the day's list before going out
- A subscription change doesn't retroactively create or delete deliveries
- Each delivery is its own record with its own status, quantity, time, photo
Tips
- Use the customer's defaults. If you set their default product = Buffalo Milk, default qty = 2, default shift = Morning on the customer profile, the subscription form pre-fills these. One tap to save.
- One subscription per shift. If a customer takes morning + evening with different products or quantities, add two subscriptions, not one with shift=Both.
- Snapshot the rate at subscribe time. The subscription stores the rate as of that day. Even if you raise the product's default rate later, this customer keeps the old rate until you edit their subscription. Useful for grandfathering loyal customers.
- End instead of delete. If a customer pauses temporarily, use Pause; if they stop permanently, set End date. Don't delete — you'll lose the history.
Common mistakes
| Mistake | Fix |
|---|---|
| Customer says "I want both shifts" — added one subscription with shift=Both, but qty differs morning/evening | Edit to one shift, then add a second subscription for the other shift. |
| Forgot to set frequency to Custom — got daily by accident | Edit, change frequency to Custom, pick days. |
| Pause didn't take effect today | If you'd already tapped Generate before pausing, today's row exists. Manually skip it on the Deliveries screen. |
| Customer code on subscription is wrong | Subscription is tied to a customer ID, not their code. The code is just for display. Edit the customer if needed. |
What's next?
You're set up. Daily deliveries will now flow automatically.
→ 07-deliveries.md — your every-morning screen
Related
- 03-products.md — products to subscribe to
- 05-customers.md — customers to subscribe
- 09-billing.md — bills auto-build from delivered subscriptions
- 11-whatsapp.md — auto-send delivery + bill updates to subscribers