A:\saisitIn Progress · MVP Integration

in progress eject· back to the shelf

Go + Python · Multi-Agent PipelineConstruction Tech · Saudi Arabia

Saisit

Turning 848-page Saudi Building Code PDFs and 2D CAD drawings into automated, trustworthy compliance verdicts.

January 2026 – Ongoing MVP Integration Phase

SAISIT

Building Code Compliance

Rule Extraction
98%
DWG Fidelity
100%
Compliance Agents
6
Structure dashboard
Client
Saisit
Industry
Construction Tech · Saudi Arabia
Engagement
Full-stack platform + multi-agent compliance pipelines
Status
In Progress · MVP Integration
Duration
January 2026 – Ongoing
Scope
Compliance Checker live · Advisor + Generator on roadmap

01 Overview

Who is the client?

Saisit is a compliance platform for the Saudi construction market, where every building permit must demonstrate conformity with the Saudi Building Code — a family of regulation documents (SBC 201, 301, 401, 501, 601/602, 701–704) covering fire safety, structural requirements, egress, and MEP. SBC 201 alone runs 848 pages. The product vision is three tools in one: a Compliance Checker, a Compliance Advisor, and a Submission Generator — the engagement so far has focused on the first, the technical foundation for the other two.

One market reality shaped the whole build: despite Saudi Arabia's BIM-first mandate, most architects still work in AutoCAD. So the platform can't be IFC-only — it has to accept 2D DWG files too, and reconstruct enough building understanding from them to run real code checks.

02 Problem Statement

What problem were they facing?

Checking a building design against the code is currently a manual, expert-driven process — slow, expensive, and inconsistent enough that two reviewers can reach different conclusions on the same drawing.

  1. 848 pages of regulation, zero structure

    SBC documents are long PDFs full of tables, cross-references between documents ("per SBC 701 Section 3.2..."), and applicability conditions scattered across three levels — document, section, and rule. A project is checked against whichever SBC version was in force at permit time, so the corpus has to stay versioned.

  2. Drawings don't carry the data checks need

    A 3D IFC model carries explicit walls, doors, and spaces. A 2D DWG carries lines and text — the fire rating of a door isn't in the drawing at all, it's in a schedule, sometimes a separate PDF, linked only by a tag like "DR-1000."

  3. Most of the market still draws in AutoCAD

    Despite Saudi Arabia's BIM-first mandate, the platform can't be IFC-only. It has to extract real building understanding from the 2D CAD files architects actually produce.

  4. A hallucinated PASS is worse than no tool

    Any system using an LLM for compliance judgments faces an obvious trust problem — false confidence on a fire-safety rule is a liability, not a feature.

03 Solution

How did we solve it?

What exists today is a full pipeline from regulation PDF to interactive compliance report, built as a Go modular monolith orchestrating Python computation workers over gRPC, with every workflow driven through Redis queues rather than request handlers.

Regulations become data. An admin uploads an SBC PDF; Docling parses it into pages and a table of contents; a structure agent maps the document, then chunked extraction tasks fan out through a rate-limited queue consumer, and an extractor/verifier agent pair pulls out each rule with its text, applicability, cross-references, and source location. Rules land in Postgres for admin review and approval — the pipeline runs end to end at roughly 98% extraction accuracy against SBC 201.

Buildings become data. IFC files go through an IfcOpenShell worker that extracts full topology. For DWG, extraction is built on Aspose.CAD and pulls rooms, unit counts, door and window positions and tags, wall thicknesses, and storey heights — verified 100% against Autodesk's own output on real project files, including one with eight building types in a single drawing.

Checking is a team of agents, not one prompt. A compliance run flows through six specialized agents — classifier, rule loader, deterministic math checker, LLM checker, recommender, and aggregator — with draft → review → retry loops keeping hallucinated verdicts out of interpretive results. Findings come back as a PDF report with rendered screenshots, a BCF file that opens directly in Revit or Navisworks, and JSON that powers an in-browser 3D viewer built on ThatOpen/Three.js.

  1. GO Go Backend Orchestrator + Queues chi routerasynq queuesSSE events
  2. PY Python Workers gRPC Satellites IfcOpenShellAspose.CADBlender
  3. LLM Agent Pipelines Regulation + Compliance Geminidraft → review → retry
Go owns all state · Python workers stay stateless · everything moves through Redis queues
  • Go
  • chi
  • Python
  • gRPC
  • PostgreSQL
  • Redis + asynq
  • MinIO
  • IfcOpenShell
  • Aspose.CAD
  • Docling
  • Gemini
  • Next.js
  • ThatOpen / Three.js

Live pages — the rebuilt UX, mock-data-driven

Gap dashboard
Gap Dashboard
Smart upload
Smart Upload

04 Project Timeline

Key milestones and duration

  1. Phase 1 Jan 25 – Feb 1, 2026

    Validation Spikes

    Tested the riskiest assumptions first: rule extraction from SBC 201, IFC topology for real checks, and the extraction pipeline design. The LLM quality spike (Jan 29–30) turned the compliance checker from zero determinations into real PASS/FAIL verdicts.

  2. Phase 2 Feb 1 – 12, 2026

    Core Pipelines

    Go backend with seven queue-driven workers, Python geometry and rendering services, the six-agent compliance flow, PDF/BCF report generation, and the regulation ingestion pipeline running end to end. Complete inventory by Feb 12: 31 API endpoints, two production pipelines, one 3D viewer.

  3. Phase 3 Feb 12 – 26, 2026

    DWG Capability

    A two-week investigation into 2D CAD support — nine documented spike sessions against real Saudi project files, ending with the LibreDWG-to-Aspose.CAD decision and a designed architecture for DWG-based compliance.

  4. Phase 4 March 1, 2026 – Ongoing

    UX-First MVP Rebuild

    The product surface redesigned from scratch: 11 flow groups covering 107 user flows, each through spike → mock implementation → code review → live browser verification. All 11 groups built and verified by March 10; remaining work covers design-system alignment and wiring the new frontend to the live backend.

05 Challenges & Resolutions

What obstacles did we face, and how did we overcome them?

  1. The LLM that wouldn't commit

    problemThe pipeline ran end to end, but the model returned SKIPPED for all 62 interpretation rules — technically working, practically useless.

    resolutionDiagnosed five compounding causes — no temperature control, no worked examples, 62 rules crammed into one request, an easy escape hatch, and thin element data. Fixing all five turned the checker into something that actually renders verdicts.

  2. Trusting an LLM with compliance verdicts

    problemA report full of confident-sounding but wrong verdicts is worse than no automation at all, especially on fire-safety and life-safety rules.

    resolutionRules reducible to a table lookup go through a deterministic math checker where the LLM never gets a vote. Interpretive rules pass through draft, review, and retry stages. Where data is insufficient, the platform locks the check — no force-run option.

  3. DWG support nearly didn't survive its first library

    problemThe initial extraction approach came up short on real files, including a drawing with eight building types in one file.

    resolutionRather than patch around it, the team ran a structured two-week spike series against actual Saudi project drawings before switching to Aspose.CAD and verifying its output entity-by-entity against Autodesk's.

  4. An 848-page PDF doesn't fit through an LLM in one piece

    problemA single regulation document is too large and too dense to extract reliably in one pass, and cross-references between SBC documents need to resolve correctly.

    resolutionThe ingestion pipeline chunks documents, fans chunks out through a rate-limited queue consumer, and runs an extractor/verifier agent pair per chunk so one model's output is checked by another before a rule is stored.

  5. State discipline in an asynchronous system

    problemA system this asynchronous — Go orchestration, stateless Python workers, real-time UI updates — needed a clear rule for who owns what, or state would end up everywhere.

    resolutionGo owns all state and orchestration; Python workers are stateless computation reached over gRPC; the API never triggers workflows directly. Real-time updates ship as one SSE stream per project with typed events, not a tangle of per-operation connections.

06 Before & After

Comparison of the situation before and after the project

BeforeAfter
Regulations: 848-page PDFs, human lookupStructured, versioned, queryable rules with applicability and cross-references (~98% extraction accuracy)
Rule review: no dedicated workflowAdmin pipeline: upload, extraction progress, rule table, edit and approve
IFC checking: manual expert reviewAutomated topology extraction + six-agent compliance run
DWG support: not machine-readable in practiceVerified extraction of rooms, areas, units, doors, windows, walls, storeys — 100% parity with Autodesk on test files
Missing drawing data: chased manually across schedule PDFsSchedule import with tag matching, review drawer, and questionnaire fallback
Trust in LLM verdicts: none establishedDeterministic checks where possible, draft-review-retry where not, hard locks where data is insufficient
Deliverables: written review notesPDF report with renders, BCF for Revit/Navisworks, interactive 3D viewer with highlighted findings
Product surface: engine-first prototype UI107 redesigned flows across 11 groups: tenancy, projects, gaps, versioning, runs, library, export, admin
Compliance regulation selection
SBC 801 is locked — "Missing interior finish data. Upload interior specification documents." No force-run option. The honest-refusal principle, visible in the product.

07 Client Benefits & Outcomes

What value did the client gain?

Extraction Accuracy
98%
vs SBC 201, measured not estimated
DWG Fidelity
100%
parity vs Autodesk on real files
API Endpoints
31
as of Feb 12, 2026
UX Flows Rebuilt
107
11 flow groups, all verified
  • A validated technical core for a genuinely hard product

    The two riskiest claims — that code PDFs can become reliable structured rules, and that usable building data can be extracted from the 2D CAD files the market actually produces — have both been proven against real documents and real project drawings, with measured accuracy rather than optimism.

  • The agent architecture is the durable asset

    Regulation ingestion and compliance checking are built as composable agent pipelines with verification stages — the Compliance Advisor and Submission Generator on the roadmap reuse the same rules, the same extracted geometry, and the same agents pointed at different questions.

  • Outputs meet the industry where it is

    BCF files open in the tools architects already use, PDF reports serve the permit process, and the 3D viewer gives non-BIM stakeholders a way to see findings in context — adoption doesn't require anyone to change their toolchain.

  • Protected against knowledge loss

    Every session is logged, every architectural decision recorded with its reasoning, every spike's findings written up — for an R&D-heavy build, that documentation discipline is worth as much as the code.

Compliance run summary
Run #3 on Al-Madina Heights: 68 passed, 12 failed, 19 skipped for missing data, 66% pass rate against SBC 201, SBC 704, and RMR 2024 — exportable straight to BCF or PDF.

08 Key Learnings & Takeaways

What did we learn from this project?

  1. Spike the scary parts first

    The two assumptions the whole product rests on — extractable rules, extractable drawings — were tested in week one and week four respectively, before heavy investment. The DWG spike changed the chosen library; better in week four than in month six.

  2. When an LLM underperforms, audit the boring things

    The all-SKIPPED failure wasn't a model limitation — it was temperature, prompt structure, batch size, an easy escape hatch, and thin input data, stacked. Each fix was small; the diagnosis was the work.

  3. Don't let the LLM do what a table can

    Splitting deterministic rules from interpretive ones shrank the surface where hallucination is even possible, and made the remaining LLM judgments cheaper to safeguard.

  4. Honest refusal beats confident noise

    Locking regulations that lack sufficient data — with no override — is a product decision, not a technical one, and it's the difference between a compliance tool and a liability.

  5. Mocks-as-spec is a real methodology

    Rebuilding UX against mock data with the explicit contract that every mock becomes an API spec kept design moving during a backend blocker and produced backend requirements grounded in actual screens instead of guesses.

  6. Write everything down

    Session logs, decision records, and spike findings meant that a project spanning dozens of working sessions never depended on anyone's memory of why a choice was made.

How it actually runs · queue to queue

The Pipeline

Two flows power the platform: regulations becoming structured rules, and buildings getting checked against them.

Regulation Ingestion · PDF → Structured Rules
  1. 01 PDF Upload Admin uploads an SBC regulation document
  2. 02 Docling Parse Pages and table of contents extracted
  3. 03 Structure Agent Maps document → sections → rules
  4. 04 Chunked Extraction Rate-limited queue, fanned out per chunk
  5. 05 Extractor / Verifier Agent pair pulls each rule, cross-checked
  6. 06 Admin Review Approve or edit — 98% accuracy vs SBC 201
Compliance Check · Six Agents, Not One Prompt
  1. 01 Classifier Determines which rules apply to this building
  2. 02 Rule Loader Loads applicable rules and conditions
  3. 03 Math Checker Deterministic table lookups — no LLM vote
  4. 04 LLM Checker Draft → review → retry for interpretive rules
  5. 05 Recommender Turns failures into prioritized actions
  6. 06 Aggregator Compiles the PDF, BCF, and 3D viewer output

Built screens · mock-data-driven, live against the redesigned UX

The Product

From project login to platform admin — every screen shown here is a real render of the running app. Click any to expand.

Sign In
Sign In Mock-authenticated entry point
Projects
Projects Org-level project list with completeness
Structure Dashboard
Structure Dashboard Per-domain completeness + recent uploads
Smart Upload
Smart Upload DWG, IFC, and schedule file intake
Gap Dashboard
Gap Dashboard Property completeness by element type
Compliance Setup
Compliance Setup Regulation selection — locked when data is missing
Findings
Findings PASS / FAIL / WARNING / SKIP, rule by rule
Run Summary
Run Summary Pass rate, regulations checked, BCF + PDF export
Export
Export IFC, DWG, DXF, gLTF, and full submission packages
Element Library
Element Library Org-wide door, window, wall type definitions
Team Settings
Team Settings Seats, roles, invites, lockouts
Platform Admin
Platform Admin Multi-tenant orgs, plans, and platform-wide stats
disk label
Saisit's own palette and type
ground
[TBD]
accent
#4C7FD6
soft
[TBD]
ink
[TBD]
mat (sampled from its screens)
#FFFFFF
type
[TBD]