A custom operating system for Elite Smart Build
Elite Smart Build, a Spanish hotel refurbishment contractor working in more than twenty countries, ran every site on spreadsheets and email. Polargate replaced that with eleven modules on Supabase and React: daily Gantt, role-masked margins, per-department alerts and material reception with automatic incidents.

- 11
- modules delivered in Phase 1
- 23
- Postgres tables with row-level security forced
- ~1 month
- from development start to first testable version in production
- 10
- role-based accounts live on the client's own domain
- 59
- audit findings confirmed and fixed before client testing
The problem
Elite Smart Build refurbishes hotels in more than twenty countries, and it ran every job on spreadsheets. Each site had its own workbook, the daily plan was a Gantt someone redrew by hand, and everything else moved by email between seven departments. Nobody was looking at the same version of the truth at the same time. One coordination failure between purchasing, logistics and site had already cost a six-figure loss on a single job: wrong material ordered, not caught at reception, installed, then torn out and done again.
What we built
Polargate started from the workbooks and the five-phase process map Elite already used, turned them into a normalised data model, and closed twelve open modelling questions with the client in writing before building anything. Scope was fixed in a signed specification: eleven modules for Phase 1, with the financial module and client invoicing explicitly out. We then built a mobile-first web application on Vite, React, TypeScript and Tailwind, with Supabase Postgres, Storage, Auth and Edge Functions behind it, deployed on Vercel and running on the client's own domain.
The outcome
The first testable version went live in production about a month after development started, with ten role-based accounts and the alert engine running every business day. Row-level security is forced on all 23 tables, and a database trigger writes every change to an immutable audit log. Before anyone logged in, an adversarial multi-agent audit produced 59 confirmed findings, one of them a blocker, and all of them were fixed. The application is in client testing on a weekly review cadence, and no adoption or return figures exist yet.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- React Router
- Supabase
- PostgreSQL
- Deno
- Resend
- Vercel
- GitHub
- Claude
The context
Elite Smart Build refurbishes hotels without structural works. Thirteen years in the market and more than 200 projects across twenty countries, ran every job from spreadsheets. Each site had its own workbook, the daily plan lived in a Gantt someone redrew by hand, and the rest travelled by email. Seven departments worked from copies of copies. A single coordination failure between purchasing, logistics and site had already cost a six-figure loss on one job: the wrong material was ordered, nobody caught it at reception, it was installed, and it had to be redone.
What we found in discovery
We started from what Elite already used, not from a blank page. We read five live workbooks (three site procedure files, the 2026 works calendar and the 2026 quotation list), the five-phase J-500 process map, and one email chain about a shipment that went wrong. From those we derived the entities that mattered: works, phases, departments, people, suppliers, quotations, shipments, receptions and incidents. Twelve open modelling questions went back to the client and were closed in writing before a line of application code existed. Scope was fixed in a signed specification: eleven modules for Phase 1, with the financial module and client invoicing explicitly out.
What we built
A mobile-first web application on Vite, React 19, TypeScript, Tailwind and shadcn/ui, with Supabase Postgres behind it and hosting on Vercel.
- Calendario: a daily Gantt of the active sites with the operatives assigned to each day.
- Presupuestos: cost and margin masked by role through a database view, so a site manager and a director see different columns of the same record.
- Agenda: tasks per department with a business-day traffic light and a written justification when something is missed.
- Incidencias and Recepción de material: reception is checked line by line, and a mismatch raises an incident with a photo automatically.
- Checklists per J-500 phase and department, plus suppliers, people, availability and notifications.
How it runs now
Access control lives in the database, not in the interface: row-level security is enabled and forced on all 23 tables, roles come from a ten value enum, and a trigger writes every change to an immutable audit log that only management can read. A Supabase Edge Function on Deno runs Monday to Friday and emails each department its open items from the client's own domain, verified for DKIM and SPF through Resend.
The application was scaffolded in Lovable and then fully detached: its own GitHub repository, its own Supabase project and its own Vercel deployment, with no dependency on a third-party runtime. Before the first user logged in we ran an adversarial multi-agent audit that produced 59 confirmed findings, one of them a blocker, and fixed all of them. The first testable version reached production about a month after development started, with ten role-based accounts and a weekly review cadence with the client team.
Questions about this project
How long does it take to replace our spreadsheets with a custom system?
Can we keep working on site while the system is being built?
Who can see costs and margins inside the system?
Does it work on a phone on the building site?
Do we own the code and the database?
Related work
Start the engine
Tell us what you are building in a few short questions. A senior engineer answers in writing within 48 business hours, with a first take on scope, timeline and price.
