-
-
Revit: cross the FSI or height limit and Datum tells you by how much and which clause.
-
AutoCAD: draw past the setback and the extra area turns red, with the FSI bar updating as you draw.
-
Webapp: every issue in 3D, with its clause, the measured value against the limit, and how much to change.
-
How a rule is made: Nemotron Super drafts it from the bylaw text, code tests it, Nemotron Ultra reviews it, and an architect approves it.
-
NVIDIA Nemotron Nano, Super and Ultra, served by Nebius Token Factory.
-
A printable report, with every result citing its clause and page.
-
617 clauses checked in under a minute on a 12-storey tower.
-
Try Datum free at compliance.getperspec.com.
Inspiration
We are architects in India. Every building here has to clear a rulebook before it can be built: the National Building Code, the state's regulations (in Maharashtra, UDCPR 2020, about 600 pages), and a growing stack of city notifications. Today that rulebook is read by hand, and the design only gets a proper check at the very end, when the drawings go to AutoDCR scrutiny. That is where you find out a side margin is 0.3 m short or the FSI is over: after weeks of drawing and coordination, when fixing it means redesigning.
These mistakes are rarely about skill. They come from checking too late. We wanted the check to sit inside the tools we already draw in, at the moment a decision is made. So we built Datum: a compliance checker that works like a colleague who has read every bylaw and looks over your shoulder while you design.
What it does
Datum checks a building against Pune's bylaws (UDCPR 2020, with NBC 2016 as the fallback) while you design it.
- In Revit: run a check once and Datum draws the buildable line around the plot, the height limit for your road width, and an FSI bar docked on the left. As you model, the bar rises floor by floor. Anything past the setback is hatched red, and when you cross the FSI or height limit, Datum tells you by how much and which clause. Failing elements are coloured in a dedicated 3D view; your model elements are never modified.
- In AutoCAD: the same live checks on a 2D drawing, on PreDCR layers or your own. Draw a room past the setback and it turns red. Issues come back as revision clouds: red for a failure, yellow for a clause Datum can't verify yet.
- In the browser: upload an IFC model or a DXF drawing. The site comes straight from the file (address, north, plot, road), every clause is checked in about a minute, and each issue is shown in 3D with its clause, a page excerpt, the measured value against the limit, and how much to change. The report prints or exports as BCF.
- Can't verify, never a silent pass. If a rule needs something the design doesn't contain, like the Development Plan road width, Datum says so and asks one question, ranked by how many checks it unlocks.
- Rules from the bylaw's own text. Paste a clause: Nemotron Super drafts an executable rule, code tests it, Nemotron Ultra reviews it, and an architect approves it. On every check, Tavily looks for newer government notifications that may supersede a rule.
Datum doesn't replace AutoDCR, which stays the official gate. It helps architects arrive there with a design that already passes.
How we built it
- One contract. A JSON Schema
BuildingModelis the single format. The Revit add-in (C#, .NET 8), the IFC reader (IfcOpenShell) and the DXF reader (ezdxf) all produce it, and the AutoCAD plug-in sends a DXF of the open drawing, so a building gets the same result wherever it is checked. Types for Python, TypeScript and C# are generated from the schemas. - A deterministic engine decides. Rules are YAML files holding the clause reference and excerpt, plus small expressions evaluated by an allow-listed interpreter with three-valued logic. A missing input becomes "unknown", which is how can't verify works. No model ever decides pass or fail.
- NVIDIA Nemotron on Nebius Token Factory does the language work, by role.
- Nano runs on every check: it classifies unfamiliar room names, suggests what each drawing layer is, and triages Tavily search hits.
- Super compiles clauses into rules under a strict JSON Schema.
- Ultra reviews each compiled rule for reversed comparisons or wrong units. Model IDs live in one config file, so swapping a model is a one-line change. In development we made 273 logged calls with no failed requests.
- A live pack for the plug-ins. The server condenses the rules into a small bundle of geometry and numbers: the buildable envelope per height band, the FSI budget and the height limit, each with its clause. That lets Revit and AutoCAD move the FSI bar and redraw the setback highlights on every edit, without a network call.
- Stack: FastAPI, SQLite, React with Vite, Tailwind, Leaflet and three.js, with WPF panels in Revit and AutoCAD. One Docker container on Railway serves it at compliance.getperspec.com.
Challenges we ran into
- Keeping models away from the verdict. It is tempting to just ask an LLM "does this comply?" We kept Nemotron to drafting, classifying and wording, and made "unknown" a first-class result instead of a default pass.
- Clause accuracy. Clause numbers and excerpts had to come from the source PDFs, never from memory. We built a search index over the extracted pages, and the compiler rejects any rule whose numbers don't appear in its clause. Precedence matters too: PMC's height rule (UDCPR 10.1.1) opens with "notwithstanding", so it overrides the general one.
- 2D drawings have no floors. Architects draw every floor side by side in one file. We find each floor's frame and title, then align the floors on the stair and lift core, the one element that is the same on every floor.
- Live, but fast. Updating FSI on every edit meant computing the exact union of overlapping room outlines on each floor. In the browser, the 3D tower ran at 8 fps until we batched its meshes; it now runs at 65.
- Model quirks. Nano's latency had a long tail (median 2.1 s, 95th percentile 22.6 s), and a typographic space inside a strict-JSON answer silently broke ID matching. We wrote both up in our feedback to Nebius.
- Showing results without touching the design. In Revit, results go into a dedicated view with graphic overrides. In AutoCAD, Datum only adds its own tagged entities on its own layer.
Accomplishments that we're proud of
- The check lives inside the tools architects already use: a live FSI bar, setback highlights and height limits in both Revit and AutoCAD.
- The same result from Revit, AutoCAD, IFC and DXF, tested against hand-written golden reports.
- Nemotron Super compiled real UDCPR clauses into rules that passed every deterministic check, and Ultra caught real mistakes before they went live.
- Every result cites its clause, its page and how much to change. Nothing is a silent pass.
- 313 backend tests and 38 plug-in tests.
What we learned
- Give the language to the model and the judgement to code. Nemotron is very good at turning legal prose into structure; a deterministic engine makes the result defensible in front of an authority.
- Timing beats coverage. A handful of rules checked while you draw saves more rework than the whole rulebook checked at the end.
- "Can't verify" builds trust. Architects would rather answer one question than get a confident wrong answer.
- Pick the model size per job. Nano, Super and Ultra behind one API kept everyday calls fast and cheap, and saved the large model for review, where a mistake costs the most.
What's next for Datum by PerSpec
- Unified platform for India
- PreDCR-layered DWG export from Revit, so architects never redraw for AutoDCR.
- More of UDCPR, then more cities and states, compiled from their own text with an architect verifying each rule.
- Other Indian languages in the freshness check, since many circulars are published in state languages first.
- Scanned permit drawings, read with a vision Nemotron model.
- "Ask UDCPR": questions answered with page citations.
- Expand to international building laws and regulations
Built With
- .net
- autocad-api
- c#
- docker
- ezdxf
- fastapi
- ifcopenshell
- json-schema
- leaflet.js
- nebius-token-factory
- nvidia-nemotron
- openai-sdk
- openstreetmap
- pydantic
- python
- react
- revit-api
- sqlite
- tailwindcss
- tavily
- three.js
- typescript
- vite
- wpf
Log in or sign up for Devpost to join the conversation.