GenUI Portal by Very Good Ventures
Make generative UI pay.
Every generated screen costs money. GenUI Portal serves generative UI into your app and tests it against the UI you ship today, so you know whether it benefits your customers and business.
I need shoes for a wet trail race next month.
-
Ridgeline GTX trail runner
$149
-
Mudguard waterproof gaiter
$34
-
Wet-grip race sock, 2 pack
$22
In GenUI Portal · pilot results
- Revenue per session
- $2.64
- vs. $2.13 baseline
- Token cost per session
- −$0.03
- Net lift vs. baseline
- +$0.48
Why GenUI Portal exists
Every GenUI experience has to prove it pays.
Generative UI can tailor every screen to the person looking at it. It also sends a model call with every turn, and those calls add up. Product teams need more than a good demo to keep it. They need proof that it moves a number the business cares about, and that the lift is bigger than the bill.
Measure the impact of GenUI
Know whether GenUI benefits your customers and business.
- A/B tests against the UI you ship today, on real traffic
- Goals with a dollar value, such as a purchase or a sign-up
- Return reported net of token cost
Pilot results · illustrative
- Token cost
- $0.03
- Net lift per session
- +$0.48
- Sessions per arm
- 18,240
Works on any platform
Works on any platform.
- Flutter SDK for iOS, Android, and web from one codebase
- Web SDK for React and plain JavaScript
- Native iOS and Android SDKs for Swift and Kotlin apps
- Backend SDKs that mint session tokens on your server
Works with any model or vendor
Use the model that fits, and switch when a better one ships.
- Gemini, GPT, and Claude with your own API key
- Open-weight models hosted where you choose
- Generation options tuned per model
- Switch models in a new version, then A/B test the change
Models on this project · illustrative
- Gemini Published v3
- Claude Testing in v4
- GPT
- Open-weight, self-hosted
Control costs
See what every turn costs, then spend less on the next one.
- Input tokens, output tokens, and dollar cost on every turn
- Totals per conversation and per project
- Token-saving techniques applied for you
Recent turns · illustrative
- “Shoes for a wet trail race”1,610 in · 230 out · $0.0041
- “Show me something lighter”1,050 in · 162 out · $0.0027
- “Compare the top two”1,288 in · 218 out · $0.0034
- Catalog trimmed to 12 items−22% input tokens
Efficient workflow
Change the model, the prompt, the catalog, or the tools. Preview it in your app.
- Swap models and tune generation options
- Version the system prompt, catalog, and tools together
- Preview a draft inside your own app before customers see it
- Publish when it is ready, and roll back if it is not
Project versions
- New system prompt and a Comparison componentDraft v4
- Previewing on your phone, in your appPreview
- Serving customers todayPublished v3
Measure the impact of those changes
Every change is an experiment.
- A/B test a new version against the one serving today
- Both arms measured on the same goal and the same cost basis
A/B test · illustrative
A v1
Serving today
- Net lift per session
- +$0.31
B v2
New layout
- Net lift per session
- +$0.48
+55% uplift. v2 earns more per session after token cost.
18,240 sessions per arm, same goal, same cost basis.
Guardrails
Generated UI that stays inside the lines.
- Schema validation against your catalog on every response
- ID checking for products and other entities before they render
Checks on one response
- Schema validProductCard and Comparison are in your catalog
- IDs resolveAll 3 products exist in your product service
- Blocked before renderA made-up product id never reaches the screen
Safe
Protection against prompt injection and data leaks.
- Model Armor screening on what customers send and what the model returns
- Unsafe turns stopped on the server before anything renders
Screening on every turn
- Customer message screenedInbound
- Model and tools runTurn
- Response screenedOutbound
- Safe UI renderedDelivered
Save your customers time
Find the slow step and make it faster.
- A trace of every request, step by step
- Time spent in the model, each tool, and each check
- Logs you can search by conversation
One turn, step by step · illustrative
- Screen input
- 84 ms
- Model
- 1.2 s
- searchProducts
- 540 ms
- Validate
- 31 ms
- Screen output
- 92 ms
For engineers
Your components, our serving path.
The model never draws pixels. It picks from a catalog of your own components and emits A2UI, an open protocol for generated UI. The platform validates every message against your catalog, and your app renders it with the widgets you already ship. Your design system and your accessibility work stay in your codebase.
- Your app sends a turn
- Safety screening
- Model and your tools
- Schema and ID checks
- Your widgets render it
// A conversation against a published project version.
final conversation = GenUiPortalConversation(
config: const GenUiPortalConfig(organizationId: 'org_acme'),
projectId: 'prj_storefront',
version: '3',
catalog: GenUiPortalCatalog(items: [
...genUiPortalBuiltInLayouts(),
const ProductCard(), // your widget
]),
sessionToken: backend.mintSessionToken,
);
// Render whatever the model generates.
GenUiPortalConversationBuilder(
conversation: conversation,
builder: (context, surfaces) => Column(children: [
for (final surface in surfaces)
GenUiPortalSurfaceBuilder(surface: surface),
]),
); -
Versioned projects
Model, system prompt, catalog, and tools are pinned to a project version. Your app asks for a version, so a publish never changes a screen you did not mean to change.
-
Session tokens from your backend
Backend SDKs mint short-lived session tokens on your server, so no secret key ever ships in your app.
-
An MCP server for coding agents
Agents can draft catalog items and project versions through the same public API the dashboard uses. Publishing stays with a person.
-
Observable from day one
The API emits OpenTelemetry traces and metrics, and every response carries a trace id that finds its request in your logs.
Built by Very Good Ventures
Made by a team that ships Flutter apps every day.
Very Good Ventures helps companies design and build digital products in Dart and Flutter. GenUI Portal comes out of that work, and we hold it to the same bar we hold client code to. It is built for a team to live with for years.
Talk to us
Tell us what you would use first.
We are building GenUI Portal with the teams who will use it. Tick the parts that matter to you and send us a note. We will set up a conversation about your product and your goals.
Nothing ticked yet. Use “I'm interested in this” on any section above.
You're interested in:
Or write to genui@verygood.ventures