Carlos Correa
← Projects

Booking platformmulti-tenant SaaS

Bookings for businesses that work by appointment. One API serves several businesses at once, and each one has its own website.

Status:
final phase
Built with:
Java, Spring Boot, Vue, PostgreSQL, RabbitMQ, Redis, Prometheus, Grafana, Docker, Nginx
Code:
private

How it’s built

Multi-tenantEach business is a tenant. The subdomain and the header only announce it: the real tenant comes from a shared database table that belongs to no business, and everything has to match. That way nobody sees anyone else’s data.
Async tasksAnything that doesn’t need to happen right away goes to a RabbitMQ queue: reminding someone of an appointment, asking them to confirm it. Notices go out over WhatsApp.
SecurityPublic pages for booking and private areas for managing. What you see depends on who you’re logged in as.
Cache and photosRedis keeps what gets read often. The photos each business uploads go to a Docker volume.
MetricsPrometheus collects metrics from every service and Grafana shows them on dashboards.
My own librariesWhat kept repeating across services (login, tenant, REST calls, WhatsApp) I moved into libraries. The WhatsApp one is open source.

Later I took the same hexagonal architecture into a monolith for a smaller project: twelve services were too much for it, and the structure works just as well without splitting it up.