Tech USP: Source of truth is the feature file (defineFeature.ts). The Designer (visual editor) and the AI builder (prompt) produce the same output via a code patcher. 100 % coverage — no “70/30 dropout” like Bubble.
How it works
- Pattern schema: typed representation of all
r.*calls (30 pattern kinds) - Reader: parses the feature file → typed pattern list
- Patcher: adds, replaces or removes patterns. Custom code between patterns survives
- Renderer: writes a canonical object form (
r.entity({ name, fields })) - Designer: forms for each pattern kind. Save = git commit
- AI builder: prompt → patcher calls. Custom code areas stay code, AI generates via tool use
What you get
- No platform lock-in — code lives in your repo
- Audit trail = git log — every Designer change is a commit
- CI/CD picks up immediately — no “Designer DB drifts from code repo” problem
- Custom code stays — Designer edits what it recognizes as patterns, ignores custom handler bodies
Architecture deep dive
packages/framework/src/engine/feature-ast/(code) — 30 pattern kinds, parse + render + patch + patcherfeature-structure— feature-file conventions
Where this lands in the pitch
- Across both markets: “You get a repo, not a black-box service”
- Differentiation vs Bubble/Webflow: full code coverage, custom code survives
- Differentiation vs Lovable/v0: backend generation, not just UI