Why we built it
Every e-commerce client eventually asks the same questions: How do I bring customers back? Who are my best customers? Why did that cart get abandoned? Off-the-shelf answers meant stitching five SaaS subscriptions together. We built one suite instead — and run it in production on real stores before any client touches it.
What it does
Multi-channel campaigns. SMS via Twilio (send, receive, bulk scheduling), WhatsApp via approved content templates, and email via SendGrid with a drag-and-drop template builder — all against one subscriber base with segmentation groups and network-wide opt-out compliance.
Abandoned-cart recovery. Carts are captured at checkout, recovery messages drip on a schedule with cooldown logic, and every send is tracked — recovered revenue is attributable.
A full loyalty engine. Points earned, redeemed, clawed back and expired; referral codes; customer tiers; and a complete audit log. Loyalty becomes the reason customers order direct instead of through commission-charging aggregators.
Customer intelligence. A denormalized customer-360 profile per shopper — lifetime value, recency, frequency — surfaced in the store's own admin, not a third-party dashboard.
Feedback that routes itself. A public feedback form with an admin dashboard; happy customers get redirected to leave a Google review.
Built for scale. A REST API with JWT auth and idempotency keys (the integration point for mobile apps), and a multisite architecture that consolidates multiple storefronts into one shared customer, loyalty and messaging base while keeping cart data per-site.
The engineering
20+ purpose-built database tables, a modular autoloaded class architecture, 40+ admin AJAX endpoints, and a disciplined release process — 15 versioned releases shipped over five months (v2.9 → v2.11), each archived and reversible.
Results
- Live in production across the Flo's Grill network (flosgrill.ca + ordernow.flosgrill.ca)
- Loyalty engine and customer analytics live; multisite consolidation architected and staged
- One plugin replacing what would otherwise be 4--5 separate SaaS subscriptions per store