HOW WE BUILD
How we build construction software.
The register says what; this page says how.
What we've built lists 14 systems, platforms and websites, and counts each of them from the repository that runs it. This page is the other half of that record: the problems that had no ready-made answer, the rules a build has to pass before it ships, and the stack the work runs on.
How the register's totals were counted, what they exclude and what they do not say stays with the totals, on What we've built.
Problems that didn't have
an off-the-shelf answer.
Each of these was solved for a live operation, and each is verifiable in the code that runs it.
- Insurance capacity, computed correctly: Builder cover is consumed per contract, per policy period. Contracts now attribute to the period of their signing date, expired policies zero out and archived projects release capacity: one algorithm, one file, one truth.
- A data model that matches reality: Building contracts were attached to buyers; reality attaches them to lots. We moved the model to one contract per lot, deleted the apportionment logic it made unnecessary, and migrated the live data.
- AI that reads, humans who decide: Quote extraction returns what a document says: the amount as stated, the tax wording as evidence, a confidence score. It never computes tax. Capture fields fell from 101 to 10, based on 162 real quotes.
- Email risk caught before send: 24 codified rules across three severities cover unconditioned commitments, contract-notice triggers and missing approvals. New commitments are extracted into a ledger, escalation is routed automatically, and a human releases every send.
- Airline GDS text, structured: A 1,700-line parser turns semi-structured Amadeus PNR output into passengers, segments, travel documents and multi-reissue ticket history: the format airlines actually emit, not the one the documentation promises.
- Benchmarks you can reproduce: Airfare references are computed by layered cohort matching on route, cabin, lead time and month, with minimum-sample guards. Using a language model for the arithmetic was considered and rejected, because a quoted number has to be reproducible.
- Drawings measured in the browser: Calibrate a plan PDF's scale, click to measure, and the dimensions become quote lines. pdf.js rendering under a canvas overlay replaced manual transcription from architectural drawings.
- Funds modelled the way the law is written: Each investment project carries its operating company, management company and trust as first-class records. Receipts issue idempotently and void without deleting, because the audit trail is the product.
- Permissions that fail closed: Page, project and tab-level scopes deny by default. The brokerage system carries 156 named permission codes re-checked at the service layer, with tests that attempt URL tampering and multi-role edge cases.
- Schema evolution without downtime: Frontends write new fields first and fall back automatically where a field does not exist yet. When the backend catches up, behaviour upgrades itself with no redeploy and no interruption.
- Big exports off the main thread: A 26,000-row by 88-column export froze the interface for five seconds. Moving spreadsheet generation into a Web Worker kept the desk interactive, and made long exports cancellable.
- Websites AI can actually read: Full prerendering verified at build time, llms.txt fact layers, edge-level soft-404 fixes and payload cuts from 1.3 MB to 21 KB. Search engines and AI assistants see the real site, or the build does not ship.
How every build stays honest.
- Quality gates, not promises: Builds fail on missing H1s, broken prerenders, absent configuration and blown performance budgets. More than 400 automated tests run before anything deploys.
- Proven, then productised: Ideas run as prototypes inside our own group first. The selections prototype lived four days as an experiment, and its best ideas now run in production for a real builder.
- AI inside boundaries: Five AI workflows are live across these systems. Each reads within an agreed data boundary, drafts or flags, and waits for a person. None commits, sends or publishes on its own.
- One chain, shared services: Group login, shared permission models and a common file layer connect the systems, so a builder, a fund and a development manager work from the same operating fabric.
- Honest numbers only: Sample-size guards on statistics, education-not-eligibility scoping on assessment tools, and evidence notes on public claims. If we cannot verify it, we do not publish it.
THE STACK
A small stack,
used on purpose.
Each entry on the register publishes the stack it was built with. Grouped by the job those tools are there to do, rather than listed as a wall of names, the set comes out like this.
Compiled from the stack line each register entry publishes. The four deep cases publish no stack line; their engineering is described on their own pages.
- One language across the builds: The same framework and the same typed language on nearly every build, so an engineer moving between two of these systems is reading familiar code on the first day. (React; React 18; React 19; TypeScript; Next.js 15): 9 of 10 builds
- Heavy work done in the browser: Spreadsheets, charts, plan PDFs and printable receipts are produced where the operator is sitting, instead of being queued on a server and waited for. (Web Workers; ECharts; pdf.js; A4 PDF receipt generation): 3 of 10 builds
- Pages that exist before JavaScript runs: Every public site is rendered to HTML at build time and then checked, so a reader or a crawler that never executes a script still gets the page. (static export; self-built prerender & perf-budget tooling; react-snap prerender; prerender verification): 5 of 10 builds
- Checks that run before the deploy: Structured data, copy rules and test suites are wired into the build itself, so a regression stops the release rather than reaching the reader. (build-gate chain; Schema.org; 57 test files): 3 of 10 builds
- Delivery we control end to end: Fonts, images and edge behaviour are ours to change, with no third-party runtime sitting between the reader and the page. (self-hosted fonts & assets; WebP pipeline; Cloudflare edge worker): 3 of 10 builds
- Two languages, one build: Where a build serves two languages, both are generated from one source and shipped together, so neither is a translated afterthought. (i18next; EN / 中文 dictionaries): 2 of 10 builds
Bring us the workflow
that keeps breaking.
Whether the problem is quoting, scheduling, reporting, procurement, document review, group finance or site coordination, Cyberate starts with the way your operation actually works.
Start with one workflow. If the system proves value, go deeper.