The gap between an answer and a number
A homeowner fills out your "request a quote" form. Square footage, distance from your shop, a couple of add-ons. Then they hit send, and the form goes quiet.
On your side, someone opens the submission, opens a spreadsheet, and turns those answers into a price. A day later, the homeowner gets an email with a number they could have seen the moment they finished typing.
We wanted to close that gap. So in 0.9.9 a form can carry the pricing logic itself.
Business Functions: your logic, defined once
Under Automations → Functions, an org builds reusable business functions — small, no-code pieces of logic with typed inputs and one or more named outputs. The engine speaks about forty-five spreadsheet-style functions you already know: SUM, AVERAGE, MIN, MAX, IF, IFS, ROUND, CONCATENATE, and a DISTANCE that measures the miles between two points.
A solar installer's "system size" function takes a monthly usage number and exports { size, unit, base }. A mover's "trip fee" takes miles and returns 79 + MAX(0, miles - 40) / 5 * 10 — base price within forty miles, then a few dollars per five miles after that. Define it once; reference it from every form, and from other functions.
The calculation field
Drop a Calculation element onto a form and point it at a function — or write an inline formula right there. Map its inputs to other fields on the form, and the value computes live as the visitor types. A running total. An estimated install size. A delivery fee that updates when they change their address.
The visitor sees the number before they hit send. Your team sees a submission that already carries it.
Why the sensitive math stays on our side
Some logic you're happy to show. A delivery fee is just a delivery fee. But an eligibility score, a margin calculation, a rule you'd rather a competitor not read out of your page source — that logic should never reach the browser.
So every function carries a sensitive flag. Non-sensitive logic computes live in the visitor's browser. Sensitive logic is never published — it runs on our servers the moment the form is submitted, and only the result comes back. The formula stays yours.
Where it shows up
The calculation field renders three places from one definition: the builder preview while you design, the form on your own site, and the SDK <BiabForm/> on a customer's domain. The number is the same everywhere, because the engine is the same everywhere.
A quote form that quotes. An intake form that prices the job. A booking form that knows the deposit. The math lives where the customer is — and the logic you'd rather keep, you keep.
