Red Moon
Back to work

Hospitality RMS, revenue management for independent hotels

A system that forecasts demand and recommends prices and stay restrictions, connected to six PMSs and two channel managers.

Industry
Hospitality
Engagement
My own product
My role
Product design, architecture and development
Duration
In production since March 2026
Stack
NestJS, Python, FastAPI, LightGBM, PostgreSQL, TimescaleDB, Redis, Next.js, Docker, Hetzner

The problem

Independent hotels and aparthotels with 30 to 150 units usually set prices with a spreadsheet and the gut feeling of whoever handles bookings. The revenue management tools on the market are built for chains and priced accordingly.

What I decided

  • The system recommends, a person decides. Every proposed price or restriction (minimum stay, closed to arrival) is approved, adjusted or rejected. While a hotel learns to trust the system, that matters more than automating everything.
  • One shared data model and one adapter per PMS. Adding a new PMS doesn’t require touching the forecasting engine.
  • One server per client, so each hotel’s data stays isolated.

What I built

  • Adapters for Sihot (XML), Apaleo (OAuth2), Noray on Business Central (OData), Amenitiz, Cloudbeds and Mews, plus the Channex and SiteMinder channel managers. Credentials are stored encrypted.
  • A Python forecasting engine with LightGBM, calibrated uncertainty and a readable explanation for every recommendation.
  • Competitor price comparison, overbooking simulation and a test bench that replays past seasons to validate every engine change.
  • A Next.js dashboard, a NestJS backend on PostgreSQL with TimescaleDB, and deployment through GitHub Actions.

Result

It has been running in production at an aparthotel since March 2026. Across roughly 36,000 real bookings, the forecast’s mean absolute error is 1.62 units.

Tell me about your project

A 30-minute call, no strings attached. If I'm not the right fit, I'll tell you.