Skip to content
All work
Valsoft logo
Hospitality SaaSValsoft2025AI Product Manager · Platform PM

roomMaster Web App — DAU +700% on US launch day

Vibe-coded a modern web app on top of a 40-year-old Clarion PMS for 1,500 hotels. The single API surface I built unblocked seven downstream products — and the Housekeeping PWA I shipped solo proved the contract end-to-end before anyone else integrated.

DAU on US launch day
+700%
Hotels migrated
1,500+
Products unblocked
7
Uptime target
99.9%
StackNext.js / NestJSMariaDB + RedisAWS App RunnerServer-Sent EventsAdyen (PCI tokenization)Cursor + Claude (vibe-coded)

Problem

roomMaster Cloud was a 40-year-old Clarion PMS running on Windows desktops over RDP across 1,500 hotels in APAC, UK, and the US. No mobile interface, no SSO, no centralized file storage, no clean API surface. Customers were stuck on a desktop client built for a decade that no longer existed.

The rest of the Valsoft hospitality portfolio — Booking Engine, Channel Management, AI Concierge, AI Revenue Management, AI Voice Agent, Metasearch — had no clean way to integrate. Each satellite team that wanted to plug into the legacy PMS had to navigate the same undocumented Clarion codebase and denormalized MariaDB schema independently.

The strategic answer was roomMaster Nova (cloud-native rebuild via AI PDLC). But Nova was a long-term effort by a four-person team and would not be customer-ready for months.

Approach

I designed and vibe-coded the roomMaster Web App as an interim modernization layer on top of legacy roomMaster Cloud — sharing the same Next.js + NestJS + MariaDB + Redis stack later adopted by Nova. It served two purposes simultaneously: existing customers got the modern functionality they were asking for, and every satellite product team got a single API surface to integrate against without ever touching Clarion.

  1. Single API surface, derived from the legacy.

    Built one stable HTTP/REST surface that wrapped the Clarion business logic. Every satellite product (Booking Engine, Channel Management, AI Concierge, AI RMS, AI Voice Agent, Metasearch) integrates against this contract — not the underlying Clarion. Owning the contract myself meant I could move it deliberately as the satellites' needs evolved.

  2. Database-per-tenant isolation, enforced at the request boundary.

    Multi-tenant DB-per-tenant model with a TenantGuard middleware running on every API request. Complete data isolation between properties at 1,500-hotel scale, with no cross-tenant query path even theoretically possible.

  3. PCI-compliant payments via Adyen tokenization.

    190+ payment methods globally, no cardholder data stored locally. The PCI scope sits with Adyen; we handle tokens. This is the kind of decision that's expensive to retrofit — got it right at the schema level on day one.

  4. Real-time dashboard via Server-Sent Events.

    Occupancy, revenue, arrivals, departures, housekeeping status — pushed to clients within 500ms of database changes. Avoided the WebSocket complexity tax by using SSE for the unidirectional reality of dashboards.

  5. Vibe-coded with Cursor + Claude.

    Prototyped, iterated, and shipped using AI-assisted development. The same toolchain pattern that the AI PDLC formalized later — proven first on this product at 1,500-hotel scale.

Desktop — the roomMaster Web App dashboard. Single API surface above legacy roomMaster Cloud, consumed by every satellite product in the portfolio.

To pressure-test the API contract before scaling it across all satellite teams, I built the Housekeeping experience first — desktop and a companion PWA that installs to home screen, works offline, and hits the same endpoints the rest of the platform would consume.

If the API broke for housekeeping (the highest-frequency, lowest-tolerance workflow on property), it would break for everyone. Building it myself meant I felt every round-trip cost and every response-shape mistake before they showed up in someone else’s sprint.

The web app is the connective tissue between a legacy system that couldn’t be touched, a long-term rebuild that couldn’t ship in time, and an entire portfolio that needed to ship on a quarterly cadence regardless.

rm-web-app launch retrospective

What shipped

Housekeeping PWA — installable to home screen, works offline, hits the same API surface the satellite teams consume.
  • Housekeeping on mobile.

    Auto-assignment algorithms and real-time task tracking, replacing paper-based workflows at hundreds of properties. Shipped as a PWA — solo build — to validate the API surface end-to-end.

  • FileStorage.

    Property documents, IDs, and operational artifacts unified across the portfolio. Per-tenant scoped, deduplicated at the storage layer.

  • SSO for hotel staff.

    Replaced per-machine local accounts. Single sign-on across the modern web app and the satellite ecosystem.

  • Integration APIs.

    The single contract that AI Concierge, Booking Engine, Channel Management, AI RMS, AI Voice Agent, and Metasearch all consume. No satellite team re-did the legacy archaeology.

  • PCI-compliant payments (Adyen).

    190+ payment methods, tokenized end-to-end, no cardholder data stored locally.

  • Real-time dashboard (SSE).

    Occupancy, revenue, arrivals, departures, housekeeping status — sub-500ms latency from DB to screen.

  • Multi-region rollout (APAC → UK → US).

    Localization and deployment playbooks repeatable across regions. Each cutover used the same runbook so the rollout data was directly comparable.

The architectural decisions validated here (multi-tenant isolation, real-time SSE, Adyen PCI, the AI integration surface, the full Next.js + NestJS + MariaDB + Redis stack) were carried forward into Nova — removing entire categories of risk from the cloud-native rebuild.

Region-by-region GTM (APAC → UK → US). Each cutover ran the same release runbook so the data on each rollout was directly comparable.

Outcome

Launch day

DAU +700%

The largest single-day usage spike in the product line. Customers who had been waiting on cloud parity moved within 24 hours of US launch.

Coverage

1,500+ hotels, three regions

APAC, UK, US live with a 99.9% uptime target. Every property migrated from Windows-desktop roomMaster Cloud to the web app as their interim home while Nova is being built.

Platform leverage

7 products unblocked

Booking Engine shipped measurable conversion lift, Channel Management hit 99.95% uptime, AI Concierge drove +35% bookings and +60% CSAT, AI RMS averaged +35% RevPAR, AI Voice Agent reached 30% auto-resolution. None ship on this timeline without a single API surface.

Quality

Zero P0s in launch week

The Housekeeping PWA caught two API-contract regressions in pre-prod that would otherwise have surfaced as P1s in week two of the rollout.

What I’d do differently

  • Wire the satellite teams' integration test suite earlier. The PWA was the canary, but a shared contract-test suite running in CI for every satellite would have caught the two pre-prod regressions in CI rather than QA.
  • Treat the GTM playbook as a product, not a doc. APAC → UK → US worked, but the playbook lived in Notion. Wrapping it in tooling (rollout scoreboard, automated cutover gates) would have saved a week per region.
  • Quantify the satellite leverage at decision time. "Single API surface unblocks 7 products" was rhetorically strong but only post-hoc obvious. A discounted-cash-flow view per satellite would have been the right artifact to defend the platform investment in P&L review.

Related work