SO Labs · Build Log

From Concept to Running Tool in Three Weeks

The brief

The brief for the SO Labs hotel BI platform was deliberately constrained. Build something a revenue manager can actually use, on a budget a small hotel group can actually justify, in a timeframe that proves the concept rather than exhausts it. The result should show what AI-powered analytics looks like when it's real — not a demo environment with synthetic data, but a working system pointed at real hotel reservations.

Three weeks. One developer. €40 per month in infrastructure. 29,151 reservation rows from a real hotel operation. That was the scope.

What broke

What broke first —
and how we fixed it

The first thing that broke was the Vanna AI integration with Retool. Vanna, by design, is its own application with its own session management and its own rendering logic. The plan was to integrate it natively into Retool's component model — wiring its query flow into Retool's state management system. In practice, every integration attempt created friction between two frameworks with fundamentally different assumptions about how data flows.

The fix was the iframe. Not elegant, but correct. The iframe gives Vanna its own context, lets it do what it does well, and surfaces the result inside the dashboard without pretending the integration is tighter than it is.

The second thing that broke was the Claude briefing architecture. The initial design tried to call the Anthropic API directly from a Retool JavaScript query. This worked for single calls but became brittle as filter state grew more complex. The solution was a two-query pattern: a JavaScript query builds the prompt from current filter state and data, then triggers a dedicated REST query to the API. Components read from the REST query's .data object directly. Once this pattern was established, the briefing layer became stable.

What surprised us

What genuinely
surprised us

The most surprising thing about the build was how quickly the Claude briefing layer became the most used feature. The hypothesis going in was that revenue managers would primarily use the KPI cards and the pace charts — the structured, visual information they were already used to. The briefing was expected to be a nice-to-have.

In practice, the briefing is what people look at first. The natural language summary that reads the current filter state, identifies the most significant number, explains its implication, and recommends an action — that's the output that generates the most engagement. The charts and tables become context for the briefing rather than the primary information layer.

This has implications beyond hotel BI. The most valuable output of an AI analytics system might not be a better visualization of the data. It might be a well-structured sentence about what the data means.

The architecture

What the €40/month
architecture looks like

The running cost of €40 per month covers the Anthropic API calls for the Claude briefing layer. The rest of the infrastructure runs on free or existing tiers: MySQL on a shared host, Vanna AI on its standard tier, Retool on the free plan for internal tools.

The architecture is deliberately lean. One database. One AI SQL layer. One language model for interpretation. One dashboard framework. Nothing that requires a data engineering team to maintain, nothing that breaks when a vendor updates their API, nothing that creates a dependency that outlasts the project's usefulness.

This is the SO Labs design principle in practice: legacy-free by design, deployable by a team of two, and designed to get smarter the longer it runs — not more expensive. The hotel BI platform is the proof of concept. Meridian and Alma are the next layer of the same foundation.

Newsletter

Checked In.

What actually works when hotels put AI to use. No slide decks. Straight to your inbox — bi-weekly.