Hospitality platform

EzeePMS

A command-driven Property Management System for hotels — a TypeScript monorepo built around a centralized command pipeline, with asynchronous domain services consuming off Kafka. Architected for 20,000 operations per second. Engineered under the codename Tartware.

TypeScript Nx monorepo Fastify Kafka PostgreSQL Redis gRPC

Guest Lifecycle

Reservations, check-in/out, loyalty, and mobile self-service, with full GDPR export, erasure, and restriction support.

Revenue Management

Dynamic pricing, demand forecasting, and hurdle-rate calculations feeding rate decisions in real time.

Financial Operations

Folios, payments, invoicing, and accounts receivable, closing out with full night-audit workflows.

Availability Guard

A dedicated gRPC service holding pessimistic room locks with TTL expiry — the single source of truth against double-booking.

Multi-tenant & RBAC

A five-tier role hierarchy — Owner, Admin, Manager, Staff, Viewer — enforced across every property and every service.

45 Screens, Two Apps

A 40-screen back-office console for staff, and a 5-screen guest portal for booking and self-service check-in.

What it does

Hotel operations touch reservations, guest profiles, rates, folios, and housekeeping all at once — and they need to stay correct under real concurrency (two agents can't sell the same room twice). EzeePMS routes read traffic straight to the owning service, while every write flows through a Command Center into Kafka, where domain services consume it asynchronously and idempotently.

Guest lifecycle

Reservations, check-in/out, loyalty programs, and guest self-service (including mobile check-in), with full GDPR Art. 15-18 export/erasure/restriction support.

Revenue management

Dynamic pricing, demand forecasting, competitor rate intelligence, and hurdle-rate calculations feeding rate decisions in real time.

Financial operations

Folios (5 types, windowing and routing rules), payments, invoicing, accounts receivable, and full night-audit workflows.

Housekeeping

Task management, staff scheduling, and maintenance requests, coordinated off the same event stream that drives room status.

Availability Guard

A dedicated gRPC service holding pessimistic room locks with TTL expiry and date-range overlap detection — the single source of truth against double-booking.

Multi-tenant & RBAC

A five-tier role hierarchy — Owner > Admin > Manager > Staff > Viewer — enforced across every property and every service.

Inside the app

45 screens across two apps: a 40-screen back-office console for staff, and a 5-screen guest portal for booking and self-service check-in — no staff login required.

pms-ui — staff console 40 screens

Everything a property runs on, from the front desk to the back office.

Auth & onboarding · 2 Dashboard · 2 Reservations · 3 Groups · 3 Rooms & inventory · 4 Rates · 2 Packages · 2 Guests · 2 Housekeeping · 1 Billing & accounts · 11 Reports · 1 Administration · 5 Loyalty · 1 Integrations · 1

guest-portal 5 screens

The public surface: search and book, then check in from a phone before arrival.

Booking flow · 3 Self-service check-in · 2

Under the hood

Read traffic proxies straight through the API Gateway to the owning service. Write traffic flows through a Command Center into Kafka, where ten domain services (core, rooms, guests, reservations, billing, housekeeping, availability, notifications, revenue) consume asynchronously — CQRS end to end, with an exactly-once transactional outbox and a dedicated gRPC service guarding room locks against double-booking.

Want the full service breakdown, database schema, or deployment model? Email us — happy to walk through it.

Standards & compliance

Hospitality software lives or dies on getting these right.

USALI PCI DSS GDPR CCPA RFC 9457 OpenAPI 3.0.3 W3C Trace Context STR metrics HTNG OTA
10core services
201database tables
38+reservation lifecycle commands
20K/sops-per-second design target