Counter · customers
Find them, sell them, bring them back.
Customer records anchor everything — sales, prescriptions, recall windows, and the WhatsApp + email marketing flows. Tight phone-based dedup keeps the list clean.
Create a customer
Two ways in:
| From | How |
|---|---|
| The customers page | Click + New customer at the top. |
| Inside a new sale | In the customer search dropdown, click + Create new customer at the bottom of the search results — a drawer opens without losing your cart. |
Full name is the only required field — everything else (phone, email, DOB, gender, address, tags, notes) is optional and editable later. That said, capture the phone whenever you can: it's what recall, WhatsApp, and dedup all key on, so a customer without one is invisible to most of the marketing flows.
Find a customer
The Customers page lists everyone, most-recent first. The search bar at the top matches across name, phone, and email — partial matches work. Click any row to open the full record.
The customer record
Each customer page shows:
- Contact details (phone, email, address, DOB if captured)
- Tags (free-text labels — e.g. “VIP”, “senior citizen”, “corporate-Wipro”)
- Lifetime stats — orders, total spend, last visit, days since last visit
- Their latest prescription (if any)
- Order history, reverse-chronological, click-through to each
- Notes — for shop-floor context that doesn't fit a structured field
Marketing cohorts
Customers → Insights auto-segments your base into five cohorts. Each is a clickable list with a one-click message draft.
| Cohort | Definition | What to send |
|---|---|---|
| Due for recall | 16–22 months since last purchase. Lenses typically need refreshing around now. | Warm invitation to come in for an eye-test. |
| Lapsed | 24+ months silent. Win-back territory. | Friendly “it's been a while” — maybe a small offer. |
| Rx expiring | Their prescription is 22–24 months old. Most opticians treat that as expired. | Health-focused nudge to come back for a fresh test. |
| High-value repeat | Top 10% by lifetime spend AND ≥3 orders. | VIP preview of a new collection or personal-shopping moment. |
| New customers | First-time customer in the last 30 days. | Thank-you note, Google-review ask if they were happy. |
AI-drafted messages
Click any customer in a cohort, then Draft message. Claude reads the cohort context, the customer's details (name and purchase history — phone number never leaves the server in plaintext), and produces a 2-3 line WhatsApp message in the right tone for that cohort.
You review the draft, edit if needed, then approve. In Phase 1 approval queues a Meta Cloud API send; for now it copies to the clipboard for you to paste into WhatsApp manually.
Recall windows you can tune
The defaults match the all-India median (people refresh frames every 18-24 months), but you can shift them per-org in Settings → Customer recall:
- Recall window — when “due for recall” starts (default 16 months) and ends (default 22 months)
- Lapsed threshold — when “lapsed” starts (default 24 months)
- Rx-expiring threshold — when prescriptions count as old (default 22 months)
- VIP cutoff — minimum lifetime spend and order count for “high-value”
Privacy posture
Customer PII is handled with kid gloves:
- Lab technicians never see phone or address. Their job card shows the customer's first name only (for case-labelling).
- For FOFO franchisees, customer records are owned by the franchisee — the parent brand cannot see individual rows. RLS enforces this.
- AI message drafting replaces name + phone with placeholders before sending the prompt to the model, then re-hydrates the real values in the returned text. Phone numbers never appear in the Anthropic API request.
- Soft-delete only — even when you remove a customer, the row stays for audit. No way to hard-delete from the UI.
Next up
Creating SKUs (with AI scanner) →Once your customer + sales flows are humming, the catalogue side is what makes the system shine.