genuiform
Team consisting of a CTO, a full-stack mobile founder (Uni Wien), and a TouchDesigner video artist building agentic interfaces with TypeScript, Elixir, and Spring Boot.
YouTube Video
Project Description
genuiform — Generative UI Forms for Flutter, bounded by a typed contract
genuiform reframes the form as a conversation with a goal. Instead of rendering a fixed sequence of fields, an agent powered by Vertex AI Gemini decides each turn what to ask, in what order, with what wording — and renders the input controls (sliders, segmented choices, free text, multi-select chips, scale pickers) on the fly to match. When the contract is satisfied, the agent emits an A2UI v0.9 Surface that the flutter/genui SDK renders as a fully interactive terminal screen — a recommendation card, a triage dashboard, a booking confirmation — whose buttons dispatch A2UI actions back into the form runtime, closing the loop.
What’s original: every “generative UI” demo we’ve seen lets the LLM draw whatever it wants. genuiform does the opposite — it gives the LLM bounded generative freedom via four orthogonal primitives:
Contract — the typed schema that must be populated (deterministic completion check, not LLM vibes)
Constraints — runtime-enforced invariants the LLM cannot bypass (NeverCollect(‘payment_info’), EscalateIf(‘user mentions injury’), MaxSteps(15))
Posture — soft style knobs (persistence, exploration, voice) the LLM interprets
Outcomes — the closed set of terminal screens the conversation may land on
Two are hard (runtime-enforced), two are soft (LLM-interpreted). A safety incident traces to a constraint, an ergonomics complaint to posture, a routing bug to outcomes, a missing-data bug to contract — no conflation.
Working code, end-to-end: the repo ships three packages — the genuiform library (form runtime + Gemini client), the genuiform_a2ui adapter (Gemini → A2UI v0.9 JSON → flutter/genui Surface, with action dispatch back), and a workbench Flutter web app that demonstrates the full round-trip live: form completes → Gemini generates the outcome Surface → user clicks the in-Surface Restart button → A2UI action dispatches → form restarts. Two real demos run on it: a B2B lead-discovery form (sales posture, EU-budget exploratory field) and GymGeist, a fitness intake with hard medical-escalation constraints.
Stack: Flutter 3.x · Vertex AI Gemini 2.x via google_generative_ai · A2UI v0.9 protocol · flutter/genui SDK for Surface rendering · structured-output JSON mode for typed QuizStepSpec emission. No CopilotKit or MCP — the choice was deliberate: A2UI is the right protocol when the agent owns the UI and the host owns the invariants, which is exactly genuiform’s split.
Generative inside, predictable outside. For form authors who want LLM-driven adaptivity — bounded by a typed schema, hard never-collect rules, and a closed set of allowed completions.
Built for the Generative UI Global Hackathon · Vienna · May 9 2026 · freye.tech / GymGeist / draht.dev
Prior Work
The core concept and architecture were designed by Oskar Freye on May 2, 2026 —
one week before the hackathon. This pre-hackathon work included the four-primitive
DSL design (Contract, Constraints, Posture, Outcomes), the library architecture,
and the README/spec documents outlining the genuiform vision.
Active implementation began on May 9, 2026 at 11:00 AM CET (local Vienna time),
coinciding with the hackathon day. All code, the Flutter workbench UI, the DSL
parser, Gemini API integration, the landing page, and the generative mascot
feature were built during or immediately around the hackathon session.