Declared data model
Collections and fields are declared and validated before any code is written, and the app reads them through one runtime contract.
AI web app builder
Tervane generates working collections, forms, actions, and end-user sign-in behind server-routed endpoints, so the generated app never carries a database key you would have to rotate.
Collections, forms, actions, and roles in the first build.
No model-authored SQL, ever.
Every version is saved and restorable.
Most AI builders will happily render a table of customers. The interesting question is what happens on the second day: where those rows live, who is allowed to read them, what occurs when a form is submitted by someone who is not signed in, and whether any of that survives the next edit.
Tervane treats the data model as the thing being generated. Collections, their fields, the forms that write to them, the actions that run, and the roles that can see them are declared as a validated structure first. The interface is generated against that structure, which is why a later change to a field does not quietly leave a form pointing at nothing.
The most dangerous thing an AI app builder can do is author its own security rules. A policy that reads plausibly and is subtly wrong is worse than no policy, because it looks reviewed.
Here the policies are generated from the validated model by ordinary code, one rule per operation, and the resulting migration is passed through a linter that rejects destructive statements. The model chooses what the app is for. It does not get to choose who can read the rows. That boundary is the reason the backend surface is deliberately narrower than some alternatives.
Generated apps talk to their data through server routes owned by the platform. There is no client-side database client holding a project key, which removes an entire class of failure — the one where a builder ships a working app and a scraped credential in the same download.
Uploads, record reads and writes, sign-in, and external data fetches all pass through those routes, which is also what makes rate limiting, quota accounting, and audit trails possible at all.
Apps that need accounts get end-user authentication with the roles declared in the model, and the interface is generated for each of them — an admin view and a member view are different generated screens, not one screen with a hidden button.
The browser verification step exercises this directly: it drives two separate signed-in contexts and confirms that one member cannot reach the other member's records, before the build is accepted.