Project Details
Multi-Tenant Hotel Management SaaS (Backend Lead)
A Laravel 12 multi-tenant hospitality SaaS where one deployment serves every client brand on its own domain, with payments abstracted behind a four-driver gateway layer.
ongoingLast updated Aug 4, 2026
What It Does
- Runs hotel operations for many tenants from one codebase, scoped by property and gated by plan entitlements.
- Accepts payments through four interchangeable gateways without leaking gateway specifics into business logic.
- Serves each client's own branded domain from a single deployment.
Architecture Highlights
- The gateway contract and registry mean adding a fifth payment provider is a new driver, not a change to checkout logic.
- Payments and subscription billing are deliberately separate concerns, so a gateway change cannot disturb billing.
- Tenant resolution happens at the edge, before the application, keeping per-request tenancy cheap.
- A Docker and Caddy deployment stack with per-environment Compose files and wildcard TLS is reused across three products.
Key Features
Tenancy & Access Control
- Four-tier platform, owner, staff, and guest access model
- Per-property RBAC scoping applied across the endpoint surface
- Plan-and-feature entitlement middleware gating features per subscription
Payments Abstraction
- One gateway contract and registry fronting Stripe, Checkout.com, SSLCommerz, and manual drivers
- Per-gateway client factories and webhook signature verifiers
- Money and payment-session value objects instead of raw amounts passed around
- Idempotent webhook-event recording, kept architecturally separate from subscription billing
White-Label Custom Domains
- Domain-verification records carrying token, status, and timestamps, with a conflict detector on the API
- Next.js 16 edge middleware that resolves the Host header to a tenant and injects scoped headers
- One deployment serves every client brand's own domain
Test Coverage
- 149 test files and 1,030 tests run against MySQL on every pull request
- 35 of those files dedicated to the payments layer alone
Tech Stack
Backend
- Laravel 12
- PHP 8.4
- MySQL
Payments
- Stripe
- Checkout.com
- SSLCommerz
Edge & Frontend
- Next.js 16
- Edge middleware
Delivery
- Docker
- Caddy
- CI test suite
Performance & Product Notes
- 1,030 tests run against a real MySQL instance on every pull request rather than against mocks.
- Idempotent webhook recording keeps duplicate gateway callbacks from double-charging or double-crediting.
- A documented staging-to-production promotion flow makes releases repeatable across tenants.
Sajjadur