Skip to content

Dinaya

A multi-tenant SaaS where a Sri Lankan business gets a branded booking page, real payments, automated reminders, and an operations dashboard — the software a salon or clinic needs to run, not just a website.

dinaya-lk.vercel.app
dinaya-lk.vercel.app

Live demo

Dinaya

Booking-and-payments infrastructure for local businesses.

Next.js 16React 19TypeScript

The Problem

A salon, a clinic, a tutor — small service businesses in Sri Lanka run on WhatsApp messages and a paper diary. They lose bookings to no-shows, they can't take a deposit, and a "website" from a typical agency is a brochure that captures nothing.

Dinaya is the opposite bet: the website is the operational tool. It takes the booking, takes the payment, sends the reminder, and hands the owner a dashboard to run the day.

A booking page that can't take money is a poster. The whole product lives in the parts that are hard: payments, tenancy, and reminders that actually fire.

The System

Dinaya is multi-tenant from the ground up. Each business gets a branded public booking page at /book/[slug] and its own {slug}.dinaya.lk subdomain; behind it sits an operations dashboard for calendar, clients, locations, staff, and automations. Payments run through PayHere; the platform bills its own tenants across three subscription tiers.

Fig. 1 — Multi-tenant booking and payments flow.

Customer{slug}.dinaya.lk
Booking + depositPayHere
Ops dashboardcalendar · staff · clients
Remindersautomated

The Build

The Proof

Fig. 2What a tenant gets.
Vercel
live demo
PayHere
real checkout
3-tier
subscription billing
per-slug
branded pages

Beyond the core, Dinaya carries a growth layer — reviews, referrals, a discovery directory, and an AI workflow hub — because the businesses that adopt it need customers as much as they need a calendar. The product ships as a live demo while the studio settles the dinaya.lk apex.

Margin Notes

  • What broke first: reminder delivery. "Send a reminder 24h before" is trivial until you handle timezones, cancellations, and reschedules — the reminder has to chase the current state of the booking, not the one that existed when it was scheduled.
  • What I'd redo: model deposits vs. full payments as distinct states earlier. Retrofitting partial payment onto a paid/unpaid boolean was avoidable pain.
  • What shipped anyway: true per-tenant branding on subdomains. It's the detail that makes a small business feel like the software is theirs, not a rented booth.

Next — 05

AutoLens LK