Salon Malisha
Hair, beauty & bridal · Attidiya + Moratuwa
A two-branch salon running on WhatsApp threads and a paper diary — rebuilt as a public site with a full staff operations platform behind it.
- The problem
- Bookings, customer history and takings lived in messages and notebooks. Nothing joined up: a booking made on the website never became a customer record, prices had to be changed in three places, and every staff member could see everything.
- What we built
- A public site — booking form, live service prices, moderated reviews — and a staff platform behind it: the diary, a customer database that matches people by normalised mobile number, billing with per-branch bill numbers, an append-only payment ledger with refund modelling, QR checkout, and a reviews moderation queue. Four staff roles, scoped by branch.
- Where it stands
- Website bookings now arrive in the diary as real customer records. A price typed once in Settings reaches the website, the booking form and the billing pickers within a minute — and issued bills never move, because they carry price snapshots. Role limits are enforced in the database, so a stylist typing an admin URL by hand still sees nothing. Built, verified and deployed — a live engagement, held unlisted while we finish the launch.
- React
- Vite (prerendered)
- Cloudflare Pages
- Supabase Auth + RLS
- 5 edge functions
- Postgres









