The client had already done the hard regulatory work: legal registers for 21 countries, a gap analysis against their own standards, and inspection checklists covering seven HSE topics per country. All of it lived in Excel. That was fine for authoring and hopeless for everything after. No way to see how the estate was performing, no way to track whether a finding had actually been fixed, and no way for around 50 inspectors to work from one source of truth.
02
What the source files revealed
Before designing anything, I read the actual workbooks. Three findings shaped the whole project, and none of them were visible from the brief.
The 140 checklists were one form, not 140. Every checklist shared an identical structure, and roughly 62 percent of the content was international standards identical in every country. Only the national regulation sections differed. That turned a 140 file build into one form engine plus a country reference overlay, and turned a maintenance burden of 280 file reviews a year into 7 templates plus 21 overlays.
The same file defined compliance status three different ways. The in sheet guide, a separate scoring tab and the actual cell dropdown each used a different vocabulary, and risk level conflicted between them. The same score was labelled High in one place and Very High in another, while the dropdown offered neither. Any dashboard grouping by severity would have been counting phantom categories.
The requested KPIs needed data the checklist never captured. The analytics team asked for new versus closed non conformities over time, and a queue of overdue items. Neither is computable from a checklist, because a checklist records a finding but has no concept of that finding being closed. The platform needed a non conformity lifecycle the source documents did not have.
03
One canonical scoring model
A single mapping from score to compliance status, risk level and corrective action deadline, applied everywhere. Risk is derived from the score rather than entered separately, so an inspector cannot record a critical non conformity at low risk. This resolved the three conflicting vocabularies and made every downstream metric coherent.
| Score | Status | Risk | Action due within |
| 100% | Compliant | Low | None |
| 75% | Partially compliant | Medium | 35 days |
| 50% | Minor non conformity | Medium | 22 days |
| 25% | Major non conformity | High | 10 days |
| 0% | Critical non conformity | High | 2 days |
Submit locks the audit. In Excel an audit is never finished, because the file keeps getting edited. Making submission a one way event is what turns a document into countable data. Without it, total inspections is just a count of files somebody happened to save.
Conflicts designed out rather than merged. An audit belongs to one inspector and one site, so two inspectors in different countries never collide. Only the original submitter may amend an audit after it lands. The single field a second person touches is non conformity status, since the inspector raises it and the hotel closes it, so that lives in its own table with its own permission check.
Dashboards never read line items. Every non conformity is extracted to its own row at submit time, and aggregation runs over summary tables only. This is the decision that keeps the dashboard fast in month twelve rather than month one.
No app store. Delivered as an installable web app. It gets a home screen icon, runs full screen, works offline. Updates reach all inspectors the moment they open it, with no review queue in the way. On a twelve month contract where fixes ship weekly, that matters more than anything native would have offered.
Static hosting, a serverless API and a managed database. Inspectors run an installable web app that works offline and queues submissions when there is no signal, including in basements and plant rooms. Everyone else sees a live dashboard scoped by role: inspectors see their own audits, hotels see their site, country managers see their countries, administrators see everything. Scope is enforced in the database query, never in the browser.
Storage was measured from the real files rather than estimated. One checklist is 14.5 KB and one completed audit is 7.8 KB, so a heavy year across the whole estate lands around 85 MB, under one percent of the allowance.
Built on a restrained design system: a single interactive accent colour, one typographic ladder, two button shapes, no decorative shadow. This is a document a compliance team prints and puts in front of a regulator, so the visual language needs to carry authority rather than energy. The one deliberate exception is the severity palette. Compliance colours are not decoration, they are data, so green through dark red survives intact while every interactive element stays a single blue.
Four screens: sign in with a single access code, so there are no passwords to manage across 50 field users. A library where checklist workbooks are dragged in and a parse report flags any that need fixing. An inspection screen where corrective action fields appear automatically below 100 percent with the deadline pre filled from severity. And a dashboard carrying portfolio score, inspection count, open and overdue findings, a geographic view sized by open findings and coloured by score, compliance over time, severity mix by country, sites ranked worst first, and the live corrective action queue.
The importer refuses bad files. It reads workbooks by locating the structure rather than by fixed row numbers, so a checklist with a different section count still imports. Anything that does not match the template is reported as failed rather than partially imported, because a checklist that imports wrong is worse than one that fails. Nobody notices until an inspector is standing in a plant room.
Excel is still an output. The platform re exports each completed audit in the original checklist layout, same columns, same document control block. Digitising a process does not mean taking away the artefact people already know how to file.
Data portability was designed in. A full export in a standard format takes minutes. Procurement always asks what happens to the data if the contract ends, and having that answer ready is worth more than most features.
A working platform: offline inspections, automatic sync, one shared dashboard, role based access, Excel round trip, running at about five dollars a month against an estate of hundreds of hotels.
The part worth highlighting is not the build. It is that the important decisions came from reading the client actual files rather than the brief: the conflicting scoring vocabularies, the 62 percent duplication across the checklist set, and the missing lifecycle behind the requested KPIs. Fixing those first is what made the dashboard mean anything.