Back to Work

MushRoom

Multi-Tenant Property Software, Built and Operated by the Studio

app.mushroom — bookings
MushRoom dashboard showing the bookings list with guests, check-in and check-out times, and per-booking revenue across November and December
The live MushRoom bookings dashboard — multi-property, multi-currency, running in production.

MushRoom is software the studio built and operates for itself. It is not a SaaS we sell seats for — it is the proof point we point to when clients ask “can a single senior engineer ship and run something real?” Multi-tenant on AWS, AI-integrated, deployed daily, used in production. The same approach is available for client engagements where the shape fits.

What MushRoom proves

Full-Stack, SoloOne senior engineer owns the whole system: the multi-tenant backend, the web and iOS clients, the AI layer, and the AWS it runs on.
Shipped & OperatedNot a demo frozen at launch — deployed daily and kept running in production, the same way the studio runs client work.
Real Tenants, Real MoneyLive operators managing real bookings, guests, and finances across multiple properties and currencies.

Where the AI integration sits

MCP server with OAuth 2.1

Claude Desktop and similar AI clients connect via PKCE auth, not by pasting data into a chat window. Hierarchical mcp:read and mcp:write scopes; refresh tokens rotate on every exchange.

Eleven read tools, property-scoped

list_bookings, financial_summary, search_guest, list_tax_periods, and the rest. The AI only sees what its operator can see — multi-tenant boundaries enforced per call, not at the prompt layer.

Seven write tools, scope-gated

set_tax_target, create_expense, update_booking_checkin_time. mcp:read tokens cannot mutate; requireWriteScope() throws before the row is touched. Auto-generated rows stay read-only.

Per-request user context via AsyncLocalStorage

Every tool handler reads { userId, role } from an ALS context bound at request entry. Concurrent AI clients cannot see each other’s data, and tools cannot run without a user bound.

What multi-tenant looks like

Multi-CurrencyBookings, invoices, and P&L compute in EUR, USD, GBP, HUF and more — currency is a first-class dimension in the data model, not a display toggle.
Role-Based AccessAdmin, manager, and staff roles, with permissions enforced server-side per request.
Multi-PropertyAn operator's whole portfolio behind one sign-in; tenant boundaries enforced per query, not per screen.

What’s running in production

The operational span one engineer built and runs — a whole property business, not a demo.

Unified CalendarEvery property's bookings on one timeline.
Airbnb IntegrationReservations, guests, and availability sync from Airbnb into the same calendar.
Digital Check-InGuests submit check-in details before arrival, landing against the booking.
InvoicingPer-booking invoices generated in the operator's currency.
Profit & LossRevenue, expenses, and margin computed per property and per period.
Tax CalculationTax periods and targets tracked against real bookings.
Cleaning CoordinationTurnovers scheduled and tracked between guests.

See it running

MushRoom runs live in production every day at mushroom.avantmedia.uk. It is login-gated — the app holds real, multi-tenant client data (operators’ bookings, guests, and finances), so the studio does not expose tenant data publicly. But the running deployment is right there to see: the live sign-in confirms the “deployed daily, used in production” claim is a real product, not a mockup — something you can check for yourself without contacting us first.

See MushRoom running

The proof point

The same architecture, AI integration, and deploy discipline the studio brings to client work — visible in something it runs itself, every day.