FW Thorpe (Thorlux)
Three-week discovery sprint turning SmartScan IoT data into three-tier executive, manager, and department reports for a UK-listed lighting group.
A million-fitting IoT estate, and an engineer's dashboard where the buyer wanted a report.
FW Thorpe runs SmartScan, one of the largest connected lighting estates in the world: roughly one million luminaires across 661 buildings, every fitting carrying a passive infrared occupancy sensor and feeding into Tiger DB on PostgreSQL with TimescaleDB. The data is rich, the platform is mature. What was missing was a business-facing artefact on top of it.
Universities and large corporates make capital decisions on manual space utilisation analysis that takes two to four hours per site. Thorlux cannot scale that across a multi-thousand-site customer base. A single engineering dashboard cannot serve a board member, a facilities manager, and a department head equally well, and customer occupancy data has to stay inside UK jurisdiction, which rules out any default-to-OpenAI architecture.
- Customer occupancy data stays inside UK jurisdiction, end to end.
- Sensor data is the means, not the artefact; the buyer wants the recommendation.
- One source of truth, three audiences, three differently-shaped reports.
- Model selection backed by benchmarking, not vendor preference.
- Architecture sits inside the existing SmartScan deployment, no new data plane.
One Tiger DB source, three audience-shaped reports, models the client chose with eyes open.
We recommended dropping the single-dashboard ambition and producing three reports instead, shaped as a pyramid. A one-page executive summary for the C-suite, scoped to underutilised spaces because that is the call the reader is paid to make. A wider group-type report for facilities managers, with every space inside every category for context. A wider-still department report organised around organisational units instead of physical zones.
Each tier draws from the same Tiger DB SQL and the same pre-calculated metrics, but the prompt, language, and presentation change with the reader. A board member who receives a fifty-page facilities report will not read it; a facilities manager who receives a one-page executive summary cannot act on it.
One design rule sits underneath everything else: the language model never sees raw data. Python computes every utilisation percentage, every action flag, and every department aggregation first. The prompt is a structured payload of pre-verified numbers plus a task description. The model writes narrative around verified arithmetic instead of doing the arithmetic itself, which is what makes the output auditable.
Data sovereignty was a hard constraint. The architecture targets AWS Bedrock in a UK region with Langfuse for observability, and the strategic preference throughout was for private models over public AI APIs so customer occupancy data never crosses jurisdiction.
- Python AI reporting service: data extraction, pandas pre-calculation, model call, structured report write.
- Thin PHP display layer inside the existing SmartScan codebase, with PDF export.
- AWS Bedrock UK region, Azure UK South as a code-free fallback path.
- Langfuse traces for every model call, scheduled-only generation to cap operational cost.
- Model-as-judge validation during development, source-anchored arithmetic at runtime.
- Architecture parameterised on site_id so the pilot extends across the estate without rework.
One source, three readers, one pyramid that holds them all.
The funnel below was the structural call: a narrow executive tier at the top, a wider facilities tier in the middle, the widest department tier at the base. Same SQL, same metrics, three differently-shaped reports.
A strategy report and a build-ready pilot specification.
For engineering
Python service spec, PHP display spec, SQL queries, and prompt schemas. Architecture sized to one site for the pilot and parameterised on site_id so it extends across the estate without rework.
For procurement
Model selection rationale, not vendor preference. Seven candidates tested against four report types with an explicit evaluation framework. Documented default with the option to switch as the market moves.
For compliance
AWS Bedrock eu-west-2 only, Langfuse for observability, no occupancy data leaving UK jurisdiction at any point in the pipeline. The architecture answers the review question before it gets asked.
For Thorlux customers
A Monday-morning report that tells facilities directors, finance leads, and board members which buildings are paying off and which are not. Instead of a portal to click into and a chart to interpret.
Seven models. Four report types. One cost-per-report comparison.
The chart below is the strategy-report appendix that drove the pilot model choice. Sorted ascending by relative cost per report. Widths are relative, never absolute. Self-hosted open-weight models hold their own against hosted Claude Haiku 4.5 on a Tiger DB workload of this shape.
Strategy report appendix, relative cost per report. Quality assessment ran alongside cost: response validity against each tier's output schema, and a qualitative read of the narrative against manual analysis the Thorlux team produces today.
The strategy report carries a full risk register. These are the three the team has to live with.
The numbers matched the live dashboard for the same site. That settled it.
Discovery week one moved from interviews into the database. We mapped the five tables that mattered and wrote a proof-of-concept SQL query against roughly 6.5 million occupancy records for Thorlux HQ, using the same utilisation formula the existing SmartScan OccupancyService uses. The numbers reconciled to the live dashboard for the same site, which confirmed the data was fit for AI reporting and gave us a concrete dataset to work the rest of the sprint against.
How we delivered it.
Stack
Capabilities
Compliance
From scoping to live.
- Discovery workshopsThree sessions with the Lighting Controls Director, Technical Lead, and Analytics Lead. Mapped buyer, report, and the gap between SmartScan today and what customers want to read. Week 1
- Data validationHands-on Tiger DB work: five tables mapped, proof-of-concept SQL against ~6.5M occupancy records for Thorlux HQ, numbers matched the live dashboard for the same site. Week 1-2
- Model benchmarkingSeven candidate LLMs (gpt-oss-20b, gpt-oss-120b, Qwen3 32B, Qwen3 235B A22B 2507, Minimax M2, DeepSeek-V3.1, Claude Haiku 4.5) evaluated on cost per report across four report types. Week 2
- Strategy and pilot specAI strategy report and pilot technical specification, backed by three sample reports generated against real Thorlux HQ data. Recommendation defensible on artefacts, not slides. Week 3
- Internal pilot buildThorlux's engineering team taking the specification forward. Post-engagement
Bring your team's next AI project to a 30-minute call.
No deck. We listen, sketch a delivery shape, and tell you honestly whether AI is the right tool for the problem.