Enterprise Hospitality ERP

One Guest.
One Itinerary.
Infinite Experiences.

The first Modular Monolith engineered to unify Hotels, Tours, and Transport into a single Guest View. Powered by .NET 9, Clean Architecture, and AI.

🏨

Lodging Context

Manages Rates, Inventory, Housekeeping, and Channel Managers.

🛶

Experience Context

Manages Departures, Guides, Equipment, and Capacity Slots.

🚍

Logistics Context

Manages Routes, Vehicle Dispatch, Driver Rosters, and Pickups.

The Unified
Kernel

Shared Identity
Single Cart Saga
Universal Ledger

Strict Bounded Contexts enforced by Clean Architecture.
Connected by Domain Events and a Single Guest View.

01 // POLYMORPHIC ORCHESTRATION

The Unified Itinerary Engine.

Most systems fail here. They can book a room OR a tour. Journii books a Lifestyle. Our BookingItem aggregate handles polymorphic inventory types (Room Night vs. Boat Seat) in a single transactional Saga.

Metadata-Driven Saga
RabbitMQ
CheckoutSaga.cs
1public async Task ExecuteCheckoutAsync(Itinerary cart) 2{ 3 var saga = _sagaFactory.Create(cart.Id); 4 5 await saga 6 .Step("ReserveHotel", _hotelModule.HoldRooms) 7 .Step("ReserveTour", _tourModule.HoldSeats) 8 .Step("ReserveVan", _transportModule.SchedulePickup) 9 .WithCompensation(async () => await ReleaseAllHolds(cart)) 10 .ExecuteAsync(); 11}
Is the pool heated? Also, can I get a vegan lunch?
Yes, the infinity pool is heated to 28°C. For lunch, "The Green Leaf" restaurant offers a full vegan menu. Would you like me to reserve a table?

02 // SQL VECTOR RAG

The AI Concierge.

We don't use generic chatbots. Journii uses SQL Server 2025 Vectors to index your specific Property Policies (PDFs) and Points of Interest.

When a guest asks a question in the MAUI app, we perform a Similarity Search against your Knowledge Base to generate a legally compliant, context-aware answer.

SQL Vectors
ONNX Runtime

03 // REAL-TIME OPS

Live Dispatch & Housekeeping.

Operations run on Blazor WebAssembly. We use a "Materialized Availability View" cached in Redis to serve inventory queries in microseconds.

SignalR connects the Front Desk to the Housekeeping mobile view instantly. When a room is marked "Clean", the Front Desk sees it green immediately.

AvailabilityCalendar.cs
1public class AvailabilityCalendar 2{ 3 public DateOnly Date { get; set; } 4 public int SoldCapacity { get; set; } 5 6 public void ApplyBooking(BookingCreatedEvent e) 7 { 8 this.SoldCapacity += e.PaxCount; 9 _redisCache.Set($"Avail:{Date}", this); 10 _signalR.NotifyInventoryUpdate(this); 11 } 12}