Hospitality · PMS

KoroCRM

Multi-tenant CRM / PMS in production for Chivasom (Thailand) and Zulal (Qatar). NestJS + Nuxt + MSSQL with per-tenant isolation.

Tech Stack:NestJSNuxt 3Vue 3MSSQLTypeScript

The Problem

Luxury-resort operations depend on tight coordination across housekeeping, maintenance, and guest-services teams. Off-the-shelf PMS products are either too generic or too heavyweight for high-touch wellness resorts. Korotek needed a modern, multi-tenant platform that could serve multiple branded properties from one codebase without leaking data between them.

The Solution

Apex36 built a multi-tenant CRM / Property Management System on NestJS 10 + Sequelize + MSSQL + Nuxt 3 / Vue 3 / Vuetify 3, with five operational modules (housekeeping, inspections, maintenance, lost & found, concierge), JWT + CASL authorisation, custom @TenantScoped() / @TenantIds() decorators enforcing per-tenant data isolation at the ORM layer, and i18n across English, Thai, Arabic, and French. In production at Chivasom (Thailand) and Zulal (Qatar).

Features

Five operational modules

Housekeeping, Inspections, Maintenance, Lost & Found, and Concierge, each a first-class module with training videos and transcripts.

Decorator-based multi-tenancy

Custom NestJS @TenantScoped() and @TenantIds() decorators enforce per-tenant data isolation at the ORM layer.

JWT + CASL authorisation

JWT authentication combined with CASL permissions for granular access control across tenants.

English / Thai / Arabic / French i18n

Full localisation across all four languages required by Chivasom (Thailand) and Zulal (Qatar).

Internal mssql-mcp-server dev tool

Internal MCP server built to accelerate MSSQL querying during development.

Results / Impact

Chivasom & Zulal live

two luxury wellness resorts running on the same multi-tenant codebase.

5 operational modules

spanning housekeeping, inspections, maintenance, lost & found, concierge.

Per-tenant isolation via decorators

at the ORM layer, clean separation across branded properties.

FAQ

Through custom NestJS decorators, @TenantScoped() and @TenantIds(), that enforce per-tenant data filtering at the ORM (Sequelize) layer, so every query is automatically scoped.
Chivasom (Thailand) and Zulal (Qatar), two luxury wellness resorts operating on the same multi-tenant platform.
Apex36, as an active contractor engagement for Korotek since November 2025.

Ready to build something impactful?

Let's discuss your project and how we can help you ship faster and smarter.

Book a Free Strategy Call