Skip to content
GAT.
Work · Production proof

The AI system I run under my own name, with the guardrails written down.

baxie is a multi-tenant SaaS for residential general contractors, in paid beta. Vision extraction on architectural plan sets, multi-model routing, a human review gate enforced in code, and a markup engine that refuses to guess. This page says what runs, what does not, and what I will not claim about it.

The product

Where a contractor's margin actually leaks.

A general contractor prices a job, wins it, builds it, and finds out months later whether it made money. The estimate lives in one place, the actual costs in another, and nothing connects them while the job is still running. baxie closes that gap: CRM, estimating, proposals, budgeting, scheduling, field logs, change orders, closeout, on one system with the cost data joined up.

The buyer is a situation, not a revenue band. A contractor who escaped spreadsheets or bounced off Procore and Buildertrend, who prices from memory, and who cannot tell you today which scope on which job is running over. California first, because the production cost library is built on California labor and county permitting.

What it does about margin, stated precisely. baxie computes a markup multiplier from the contractor's own overhead and profit targets, adjusts it by job size so a small job is not asked to carry the same overhead as a large one, and compares estimate to actual per budget line as field logs and expenses come in. When gross profit on a quote falls below what that job needs to contribute toward annual overhead, it raises a flag. It does not block the quote and it does not price the job for you. baxie gives a contractor visibility into margin while there is still time to act on it. It cannot protect margin, and any tool telling you otherwise is selling you something.

Public surface at baxiehq.com. App at app.baxiehq.com. Paid beta, currently on v0.20.0.

The vision pipeline

Reading architectural plans, and the part that is hard.

A contractor uploads an architectural plan set as a PDF. The current production path sends the whole set to one Claude Opus model in a single pass, so the model reasons over the full set in one context instead of page by page. It comes back with a quantity table: one row per scope and unit, carrying the quantity, which structure it belongs to, the source page and sheet revision, a confidence score, and a "show your work" breakdown whose parts have to sum to the total.

Constraint

A closed scope catalog

The model can only emit scopes from a fixed list of 20, each tagged with the unit it must be measured in. The list is closed on purpose. It stops the model from inventing a scope name and from returning a count where an area is required. Anything off-list comes back null rather than mis-mapped into something that looks right.

Check

A verifier that is not a model

A deterministic pass checks the model's numbers against geometric primitives and against the model's own shown work, then flags outliers like roof undershoot or double-counted transoms and lowers the confidence on that row. It never overwrites the number. Each flag carries a suggested alternative a human can accept.

Gate

Nothing gets priced unreviewed

Every AI-extracted quantity is written as pending_review and cannot enter a price until the contractor accepts it row by row. That is enforced in the data layer, not by convention. A run below 0.6 overall confidence, or one that returns nothing, is marked needs-review rather than complete.

The known limitation, because it matters more than the feature list. A 35-by-24 inch plan sheet gets rasterized at roughly 74 DPI before the model sees it, which puts 3/32-inch printed dimension text at about seven pixels tall. The model frequently cannot read the dimension strings the prompt asks it to read, and says so. That is the dominant failure mode, it is the reason the review gate exists, and it is the problem the next architecture has to solve rather than route around.

What I will not claim

The part most vendor pages leave out.

If you are evaluating me to run your AI program, the useful signal is what I say about my own system when the numbers are not flattering. So, plainly:

  • I have no accuracy number for the takeoff. The only measurement in the tree is an internal baseline on a single plan set, and it was poor. There is no golden dataset large enough to quote and no benchmark I would stand behind. Building that dataset is the current work.
  • The eval suites are not wired to production. The logging integration has been dark for a year on an environment variable name mismatch, and there is no continuous-integration gate on prompt changes. The guardrails above are real and enforced in code. The measurement layer is not, and I will not call it evals until it is.
  • Production volume is small. This is a paid beta with a handful of contractors, not a system with a throughput number worth quoting. Large plan sets still hit a serverless timeout before they finish.
  • The learning loop is partly unproven. Field actuals do feed a calibration nudge the contractor accepts by hand, and only base-scope overruns feed it so one asbestos surprise does not permanently inflate a framing rate. The half that links estimate lines back to reusable templates is matching at close to zero in production. That is a bug I am fixing, not a feature I am selling.

None of that stops the system from being useful to the contractors running it, because the guardrails were designed for exactly this state. It does stop me from putting a percentage on a slide.

What transfers

The patterns a client engagement actually reuses.

baxie is the reference implementation. These are the code paths I maintain, which is why moving one onto a client stack is a port rather than a research project.

Document intake

Vision extraction with a review gate

Plan sets and receipts both land as structured candidates a human confirms. The receipt reader prefills a pending expense with vendor, date and total, and never confirms money on its own. Below its confidence floor it touches no money fields at all. The same shape fits legal redlines, claims intake, and lease ingestion.

Cost control

Multi-model routing

Opus where the reasoning is hard, Sonnet by default, Haiku for high-frequency routine calls where latency and cost beat ceiling. Model choice is configuration, not code, so a workflow swaps models when pricing moves. This is the argument a CFO signs off on.

Refusal

Systems that fail loudly

The markup engine throws rather than return a nonsense multiplier when overhead plus profit reaches 100% or a split does not sum. Estimate generation hard-fails for an org that has not set its markup, instead of shipping a raw-cost draft that looks like a real price. Refusing is a feature.

Documents arriving from outside are treated as untrusted input. Text pulled out of a PDF is sanitized before it reaches any downstream prompt, and no extracted field has a path to act as an instruction. That is table stakes for any document pipeline touching money, and it is skipped constantly.

Why it matters

You are hiring someone who carries the pager for his own AI.

AI consultants pitch frameworks. A smaller group ships demos. Very few maintain a production system where a wrong number reaches a contractor's price, which is the situation that teaches you where the guardrails have to go. Every pattern on this page exists because something in baxie needed it, and the failure modes I design around in a client engagement are ones I have had in my own logs.

  • The guardrail decisions are the transferable part. Where the human stays in the loop, what a system is allowed to decide alone, what it should refuse to answer. Those are the questions a scoped build actually turns on.
  • The org questions show up here too. What absorbs into the agent, what stays with a person, and how observability earns budget. That is the same conversation as a fractional engagement, at a smaller scale.
  • You can check my work. The product is live and the limitations are on this page. If I describe your system this plainly six months in, you will know what you actually have.
Ready to talk?

See the build, then book the call.

baxiehq.com is the live product. If the patterns map to your stack, book a call and I will tell you which ones are worth porting and which are not.

Questions

What buyers ask about this one.

Can you show examples of AI agents shipped into an existing stack without a migration?

baxie is the reference implementation. Vision extraction on architectural plan sets, a receipt reader that prefills but never confirms money, and multi-model routing all run inside the stack that was already there. Nothing about that pattern is construction-specific.

How do you decide build versus buy for AI at a mid-size services firm?

Buy anything that is not the thing you are differentiated on, and build where your own data is the advantage. In baxie the cost engine is built because a contractor's overhead math is the product, and the models are bought because nobody wins by training their own.

What guardrails belong on an AI system that touches money?

A human acceptance gate enforced in the data layer rather than the interface, a confidence floor below which the system declines to act, a deterministic check that flags the model's outliers without overwriting them, and sanitization of any text pulled out of an uploaded document before it reaches another prompt.

Do you have accuracy numbers for the plan takeoff?

No, and I will not invent one. The only measurement is an internal baseline on a single plan set and it was poor. Building a dataset worth quoting is the current work. The guardrails are designed for exactly the state where the number is not yet known.

Why does the vision pipeline need a human review gate?

Because a 35-by-24 inch plan sheet gets rasterized at roughly 74 DPI, which puts printed dimension text at about seven pixels tall. The model frequently cannot read the dimensions it is asked to read. The gate exists because of a limitation I can measure, not as a formality.