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

The Zentry dashboard with totals for customers, bookings, revenue and pending balance, recent activity and quick actions, beside a dark sidebar of Dashboard, Bookings, Customers, Tour Packages, Conversations, Payments, Reports, Reviews, Message Templates, Billing and Settings.

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.

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.

Six steps from a tap on a link to a confirmed booking.

  1. Tap

    The customer taps the business's WhatsApp link and says hello.

  2. Browse

    The bot replies with the catalog as a WhatsApp list.

  3. Choose

    They pick an item and see its details, with Buy Now and Talk to Support.

  4. Pay

    Buy Now creates a pending booking and sends a Razorpay payment link.

  5. Confirm

    Razorpay tells Zentry the link was paid. The signature is checked, and the booking is confirmed.

  6. Notify

    The customer gets a confirmation in the chat and the business gets a notification.

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 Zentry dashboard: totals for customers, bookings, revenue and pending balance, a recent activity panel and quick actions, with a dark sidebar.
Dashboard. Customers, bookings, revenue and what's still owed.
The Bookings list with booking code, masked customer, service, date, amount, payment status and booking status such as pending, paid, partial and refunded.
Bookings, with payment and booking status side by side.
A WhatsApp conversation thread in the inbox: the customer's messages and the business's replies.
A conversation. The bot's answers and the human's replies in one thread.
The Conversations inbox: contact, phone, last message and time, with unread badges.
The inbox, with unread counts.
The Tour Packages catalog: five packages with SKU, price and status.
Catalog. What the bot and the web store sell. The label changes with the business type.
Reports: a date range, total revenue, bookings, new customers, average booking value, a daily revenue chart, bookings by status and top customers.
Reports for any date range.

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.

The public web storefront for a demo business: five packages with prices and View Details buttons.
The public web store, no login needed.
The storefront on a phone.
On a phone.
A product page on a phone with the order form.
An item page and order form, paid with Razorpay checkout.

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.me with 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.

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.

The platform dashboard: pending requests, approved requests, total tenants and total users.
Platform dashboard for the owner.
Subscriptions: every business with its plan, status Active or Trialing, trial end date and actions.
Subscriptions: who is paying, who is on trial.
The New Plan builder: plan details, a list of features with prices, and a suggested price from the features that are ticked.
Plan builder. Tick features and a suggested price is worked out.
Features: key, name, type, cost weight and status, for staff users, catalog products, online payments, reviews, reports and the WhatsApp storefront bot.
Features, each with a cost weight.
  • 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.

The stack.

What Zentry is built with
BackendPHP 8.1 or newer, in a small custom MVC with its own router, request, session, validation and view classes. PHPMailer is the only library.
DatabaseMySQL through PDO, with 22 numbered migrations.
WhatsAppThe WhatsApp Cloud API: list and button messages, webhooks, template submission and Embedded Signup.
PaymentsRazorpay: payment links for the bot, an orders-and-checkout flow for the web store and staff, and subscriptions for Zentry's own billing.
EmailA log driver for development, SMTP, or the Mailgun API.
Quality21 PHPUnit tests, and a CI workflow that lints and runs them on every push.

What isn't proven or built.

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