Recepcion.net
Multi-tenant booking SaaS — every business gets its own site.
A “digital front desk” for barbershops, salons and clinics. Each business gets a white-label site at name.recepcion.net with online booking, promotions and a customer CRM, while customers keep one account across every business on the platform. I designed the product, the data model and the infrastructure, and built it end to end.
- Subdomain-based tenancy with single sign-on across the business panel, the booking hub and every tenant site.
- Double booking is impossible: availability is checked inside a serializable transaction, so two customers can never take the same slot.
- Stateless modular monolith (7 domain modules) that scales horizontally behind a reverse proxy.
- CI/CD: GitHub Actions builds images to GHCR; production only pulls and restarts. Sentry and Uptime Kuma for monitoring.
Hardening
- Two locks on tenant data: every query is scoped by tenant in code, and Postgres Row Level Security rejects cross-tenant reads. The API’s database role cannot bypass RLS.
- JWT in httpOnly cookies, bcrypt, idempotency keys on bookings and Redis-backed rate limiting per IP and per tenant.
- No container publishes host ports: traffic enters only through Cloudflare (WAF, origin certificates) and Nginx Proxy Manager on an internal Docker network.
- Cloudflare Zero Trust Access on admin surfaces; SPF, DKIM and DMARC on the mail domain.
- Browser
- Cloudflare WAF
- Nginx Proxy Manager
- Next.js apps
- Express API
- Postgres + RLS · Redis
Live site (Recepcion.net, opens in a new tab)Live demo (Recepcion.net, opens in a new tab)