Insights
Four decisions from building Majal that were harder than they looked, written up because the reasoning is more useful than the feature list. Each one comes out of the design notes in the repository, and each one changed what shipped.
An approval trail is only as good as its enforcement point
Fourteen approve buttons, each guarded by a groups attribute in a view.
A quantity surveyor — the person who writes the bill — could approve the bill, and
it took four lines of console output to prove it. What that cost, and what replaced
it.
What "offline" actually costs on a construction site
Three different asks get called "a mobile app" and they cost very different amounts. How field teams keep drafts, evidence and next actions moving when connectivity is unreliable - and how to choose the right offline promise.
BIMA model that colours everything at once tells you nothing
A structural export arrives pre-coloured by object class, and drawing the file's own colours puts twenty saturated tones on screen at once. Why Majal's default is one grey material and a set of edges, and what colour is saved for.
Operations"We take backups" is not a recovery position
A backup you have never restored is a hypothesis. What a verified recovery point actually requires: a checksum that is checked twice, a manifest, and a restore path the running application is structurally unable to trigger.