Zentry In development
WhatsApp-first booking SaaS · by Shahrukh Sheikh
Small business · Custom PHP · WhatsApp Cloud API · Razorpay · Multi-tenant
Let customers buy inside WhatsApp, and let the business run it from one dashboard.
A tour operator, a taxi service, a homestay or a shop publishes a catalog. Customers tap a WhatsApp link, pick what they want, pay through a Razorpay link and get a confirmation in the same chat, with no app, no login and no website needed. The business gets bookings, payments, a shared inbox and reports in one place.
In development · Not launched · Screenshots are the real app on invented data, names masked
At a glance
Zentry in numbers
4
Business types
Tourism, taxi, homestay and shopping. The same catalog, with the right words for each.
2
Ways to buy
Inside WhatsApp with a payment link, or on a public web store with checkout.
21
Automated tests
29 assertions on validation, encryption, message templates and configuration.
22
Migrations
About 21,000 lines of PHP, with no framework: a custom MVC core and one mail library.
Why it exists
Small businesses already sell on WhatsApp. The software hasn't caught up.
A tour operator, a cab owner or a homestay host gets most of their enquiries on WhatsApp, then answers by hand: sends the price, waits, sends a payment number, asks for a screenshot, writes "confirmed". It works until the second busy day, when messages slip through and nobody is sure who has paid.
Zentry moves that conversation into a system without moving the customer out of WhatsApp. The customer keeps the chat they already have. The business gets a catalog, a booking record per sale, a payment record, and an inbox for the things the bot can't answer.
How a purchase works
Six steps from a tap on a link to a confirmed booking.
Tap
The customer taps the business's WhatsApp link and says hello.
Browse
The bot replies with the catalog as a WhatsApp list.
Choose
They pick an item and see its details, with Buy Now and Talk to Support.
Pay
Buy Now creates a pending booking and sends a Razorpay payment link.
Confirm
Razorpay tells Zentry the link was paid. The signature is checked, and the booking is confirmed.
Notify
The customer gets a confirmation in the chat and the business gets a notification.
The business dashboard
What a business sees.
Screenshots of the running app on a demo business, Pondicherry Travels, one of six I invented for this page. Customer and staff names are masked to two letters and stars, and the emails and phone numbers are placeholders.
The public store
A web page for customers who aren't on WhatsApp.
Every business also gets a public page at /store/their-name showing its active catalog. A visitor fills in a name, phone and email and pays with Razorpay's embedded checkout. On success the booking is confirmed, the payment is recorded and the business is notified. These bookings are tagged as coming from the web store.
Every feature
Everything the product does.
The WhatsApp bot
- The catalog as a list, up to ten items, with details and two buttons.
- Buy Now finds or creates the customer by phone number, creates a pending booking and sends a payment link.
- Talk to Support, or any message that isn't a catalog command, goes to the human inbox.
- A share link in Settings:
wa.mewith a friendly first message.
Bookings and payments
- Bookings with a code, customer, service, date, amount and status, from three sources: staff, the bot or the web store.
- Payments recorded per booking, with method and status, and a booking's balance.
- Pay Online button for staff to take a card or UPI payment on a customer's behalf.
- Webhooks from Razorpay and WhatsApp, signature-checked.
Customers and conversations
- Customers with contact details and booking history.
- A shared WhatsApp inbox: messages grouped into threads by phone number, replies from staff, and delivery status (sent, delivered, read, failed).
- Notifications with a bell and unread counts for new bookings, payments, requests and messages.
Templates and reviews
- Message templates filled in with the customer's details, for WhatsApp, email and SMS.
- Submit a template to Meta for approval from inside Zentry, and its status updates itself when Meta replies.
- Review requests after a booking, a public one-time rating form and a reviews page with an average.
Reports
- Date-range summary: revenue, bookings, new customers and average booking value.
- Daily revenue chart, bookings by status, revenue by payment method and top customers.
Business types
- Pick a type on first login: tourism, taxi, homestay or shopping.
- Only the words change: Tour Package, Vehicle, Room or Product, over the same catalog underneath.
- Changing type later means typing the business's name to confirm, because it permanently deletes the catalog, customers, bookings and payments.
The platform side
How Zentry gets paid.
A separate set of screens for the owner. A business asks for access, an admin reviews it, and only then is a tenant created, with a welcome email and a trial subscription on the cheapest plan. After that, plans work like this: features have prices, a plan is a set of features, and Razorpay Subscriptions charge each cycle.
- A feature is a switch (WhatsApp bot, reports, reviews, online payments) or a limit (catalog products, staff users), with a cost weight in rupees.
- The plan builder adds up the weights of the features you tick and suggests a price. The final price is yours to set.
- A lapsed subscription limits a business to its billing page, its profile and logout until it pays.
- A signed webhook handles activation, charges, failures, cancellations and completion, and records an invoice on each charge.
- Admin tools extend a trial, change a plan or cancel, which also tells Razorpay to stop future charges.
Built with
The stack.
| Backend | PHP 8.1 or newer, in a small custom MVC with its own router, request, session, validation and view classes. PHPMailer is the only library. |
| Database | MySQL through PDO, with 22 numbered migrations. |
| The WhatsApp Cloud API: list and button messages, webhooks, template submission and Embedded Signup. | |
| Payments | Razorpay: payment links for the bot, an orders-and-checkout flow for the web store and staff, and subscriptions for Zentry's own billing. |
| A log driver for development, SMTP, or the Mailgun API. | |
| Quality | 21 PHPUnit tests, and a CI workflow that lints and runs them on every push. |
Being honest
What isn't proven or built.
- Not launched. No customers are claimed.
- Not tested against live services. The Meta and Razorpay parts were exercised with simulated events and fake credentials, never a live account.
- WhatsApp Embedded Signup needs a Meta app and Meta's App Review before other businesses can use it.
- The catalog bot is basic: ten items, no categories, no cart, one product per purchase, and WhatsApp's 24-hour window limits free-form replies.
- No plan switching or proration. Changing plan creates a new subscription, and only three places check a plan's limits so far.
- No API, no automatic migration runner and no soft deletes.
- An abandoned purchase leaves a pending booking behind, with no automatic clean-up yet.
- A small cosmetic fault: the sidebar badge says "Pro Plan" for every business, whatever its plan.
FAQ
Questions people ask first.
What is Zentry?
A multi-tenant SaaS for small businesses that sell tours, rides, rooms or products. Customers browse the catalog and buy inside WhatsApp or on a public web page, and the business runs it all from one dashboard.
Is it live?
No. It is in active development and not launched. The WhatsApp and Razorpay parts are built and tested with simulated events, but not against live Meta or Razorpay accounts, and I am not claiming customers.
Are these screenshots real?
Yes. They are the running app on invented data: six demo businesses, with customer and staff names masked down to two letters and stars. Nothing is a mock-up.
How does a customer buy on WhatsApp?
They tap the business's wa.me link, the bot lists the catalog, they pick an item and tap Buy Now, and a Razorpay payment link arrives in the chat. When they pay, the booking is confirmed and a confirmation comes back in the same conversation. Anything that isn't a catalog command goes to a human inbox.
Does it use WhatsApp's own product catalog?
No, deliberately. It uses its own bot with WhatsApp list messages, so no business needs Meta Commerce Catalog approval. The trade-off is a plain list capped at ten items, not Meta's swipeable product cards.
How do the businesses pay for Zentry?
By subscription. Features carry a cost, a plan is a set of features, every approved business starts a trial, and Razorpay Subscriptions charge each cycle. If a subscription lapses, the business is limited to billing until it pays.
Is one business's data kept separate from another's?
Yes. Every request is tied to a tenant by middleware, and each business has its own customers, bookings, payments and templates. Each tenant's Razorpay and WhatsApp secrets are encrypted at rest (AES-256-GCM).
Want the build story: why it's its own bot, the validation bug that blocked every phone number, and how the billing was built without a live account?
Read the case study