Multi-tenant SaaS · own product
Šape
SaaS for dog grooming salons: clients, dogs, appointments, public booking and automated email reminders. Each salon sees strictly its own data — a rule the database enforces, not the app.
- data isolation in the database
- RLSdata isolation in the database
- steps to a booking
- 5steps to a booking
- before the appointment — reminder
- 24 hbefore the appointment — reminder
- languages
- 2languages
The task
A salon runs appointments out of a notebook and a messaging app, so bookings get lost and reminders are sent by hand or not at all. Software for that has to be multi-tenant from day one: one system, many salons, and no possibility of one salon seeing another's client.
Approach
- 01
Every table carries a salon id and Postgres row-level security refuses a query for another salon's row. The salon id never comes from user input — it is resolved server-side from the session, because anything else is a privilege escalation path.
- 02
A public salon directory searchable by salon, owner and city — the dog's owner finds the nearest salon, and the salon gets visibility it could not build alone.
- 03
Booking in five steps: dog size, services, time slot, details and confirmation — no account and no phone call.
- 04
Email reminders scheduled exactly 24 hours before the appointment, with one-click unsubscribe.
- 05
Onboarding that walks a new salon through opening hours, services and pricing before the first appointment.
- 06
Plan tiers and seat counts designed into the schema from the start, even though billing comes later.
- 07
Croatian as the default language, with English prepared in the same translation system.
Result
In production on its own domain, with separate development and production environments and automatic per-branch deployments. The system is ready to take on the next salon without a single code change.



Contact
Tell me what you are building — I reply today.
I normally reply the same working day. The first call takes thirty minutes, costs nothing and commits you to nothing.