FIDIC.uz: designing a contract knowledge operating system
The challenge was not another brochure, but a navigable professional platform for dense infrastructure-contract knowledge.
Content as product architecture
Contract books, clauses, glossary terms, certification material and expert articles each need their own user journey while sharing one knowledge model. The data layer is typed TypeScript rather than a CMS: every clause, term and quiz question holds all three language variants in its own structure, so a missing translation fails the build instead of shipping a half-empty page. 117 articles, 27 dissected clauses and 26 glossary terms sit on that model.
Tools, not just reading
The distinguishing part is not the articles, it is sixteen working tools that calculate rather than describe: a 28-day time-bar under Sub-Clause 20.2, extension-of-time and delay models, liquidated damages against the cap, interim payment under Clause 14, DAAB procedural timelines, a claim-readiness questionnaire scored across twelve checkpoints. Every calculation runs in the browser, so nothing a user types about a live dispute leaves their device.
A data layer that maintains itself
A daily job merges World Bank procurement notices into a cumulative archive of more than 2,900 records across eight countries, back to 2019. The upstream API only ever returns a rolling window, so a notice that drops out of the feed is gone for good — which is why the pipeline merges rather than overwrites, and exits non-zero on an upstream failure instead of quietly saving an empty snapshot. Each bot commit carries the current open-versus-total count, so the archive's health is readable from the git log alone.
Search at platform scale
429 static pages need structure a crawler can reason about: stable routes with a single trailing-slash policy, a canonical everywhere, complete hreflang clusters, and thirty-two distinct schema.org types describing what each page actually is. One deliberate exception is documented — a Georgian landing page is kept out of the three-language cluster on purpose, so it cannot send a contradictory signal about which version serves whom.
Trust that has to be verifiable
Training certificates are issued by a CLI script into a versioned registry with a QR code, and anyone can verify one on a public page. Certificate pages are force-noindexed so personal data never reaches search results, and verification is built to stay reachable independently of the rest of the site — someone holding a document should not depend on the portal's publication status to prove they hold it.
Performance as an editing decision
Four Three.js scenes, smooth scroll and a custom cursor shipped, then got measured. Smooth scroll was dropped on mobile because it cost LCP, page CSS was inlined so a failed request cannot strip a page of styling, and reveal logic was moved outside the build bundle so content survives a broken asset. The tender table rebuilds itself as cards on a phone. Most of the engineering was subtraction.
Solo delivery with AI assistance
Creative direction, scope and final acceptance stayed human, and on subject-matter work that is not a preference but a requirement: a generated paragraph about a FIDIC clause reads exactly as confident when it is wrong, so the model drafts and domain knowledge decides. Roughly 48,000 lines of code across 2,512 versioned files, shipped and maintained by one person.