Last chance! 50% off DataCamp Premium
Sale ends in
De meeste demo’s van AI-dashboardbouwers volgen hetzelfde patroon: de gebruiker geeft een prompt, het model genereert een enorme lap UI-code, en de gebruiker besteedt vervolgens de rest van de tijd aan het fixen van kapotte layouts, ontbrekende states en half-aangesloten componenten.
Deze tutorial kiest een andere aanpak. We bouwen UI Studio, een dashboardfabriek op basis van tool-calls, waar Gemini 3 Flash 100 UI-componenten coördineert als aanroepbare tools.
In plaats van één groot React-bestand te schrijven, voert Flash kleine, gestructureerde stappen uit zoals het maken van een navigatiebalk, filters toevoegen, data binden aan een tabel, inzichtgrafieken genereren en een enkel UISpec-JSON-bestand exporteren. Het werkt stap-voor-stap terwijl de UI bijwerkt zodra elke stap is voltooid.
Uiteindelijk heb je een studio-achtige app die meerdere dashboardtemplates kan genereren (Customer Feedback Triage, Sales Pipeline, SRE Incident Command, Finance Spend Tracker, Product Analytics Funnel, en meer) en snel kan itereren naar een andere weergavemodus, thema, enz.
Let op: deze demo is een basis. Voel je vrij om de prompts te verfijnen zodat ze beter aansluiten bij je doelen en gewenste output.
Wil je meer leren over het bouwen van AI-agents binnen het Google-ecosysteem? Bekijk dan de cursus Building AI Agents with Google ADK. Bekijk ook onze gids voor Gemini 3.8 Flash.
Google’s Gemini 3 Flash-model is gebouwd voor snelheid-eerst, agentische workflows waarin je geen enkel perfect antwoord wilt, maar een strakke iteratielus zoals bouwen, inspecteren, bijstellen en opnieuw bouwen. Flash benadert het redeneervermogen van Gemini 3 Pro met Flash-niveau latency, efficiëntie en kosten, wat het een sterke match maakt voor interactieve apps met hoge frequentie.

Bron: Gemini 3 Flash DeepMind
Twee zaken die Flash relevant maken voor builder-apps zoals UI Studio:
In theorie ondersteunt Gemini 3 Flash (preview) 1M input tokens en 64K output tokens, wat handig is wanneer de build-trace en UISpec groot worden.
Gemini 3 Flash is het agentische workflowmodel in de Gemini 3-familie, afgestemd op toepassingen met lage latency en hoge doorvoer, waar je snelle iteraties, toolgebruik en meerstapsplannen nodig hebt. Enkele belangrijke kenmerken:
thinking_level): Gemini 3 Flash heeft een instelling thinking_level (minimal, low, medium, high), die we kunnen afwegen qua latency/kosten versus diepgang. Deze instelling is ideaal voor UI-builds waarbij de meeste stappen routinematig zijn, maar sommige diepere planning vereisen.thinking_level="minimal".media_resolution afstemmen om multimodale kosten versus latency af te wegen, en zelfs multimodale tooloutputs retourneren wanneer we strakkere controle nodig hebben.In deze sectie bouwen we UI Studio vanuit één prompt met Gemini 3 Flash. De app stelt UI’s samen via tool-calls en levert een exporteerbare UISpec-JSON op.
Op hoofdlijnen zal de uiteindelijke app:

In deze sectie bekijken we de prompt die is gebruikt om de UI Studio te bouwen in Google AI Studio met Gemini 3 Flash. In plaats van in één keer een dashboard te genereren, draait Flash als het brein van de studio. Het coördineert tool-calls, valideert en repareert outputs, en produceert één renderbaar artefact.
Hier is de prompt die ik voor deze demo heb gebruikt:
SYSTEM / DEVELOPER PROMPT — Gemini 3 Flash (UI STUDIO ORCHESTRATOR)
You are UI_STUDIO_ORCHESTRATOR inside an app called “UI Studio”.
Goal: Build a reusable “dashboard builder studio” that can generate many different dashboards (Sales, Support, Ops, Finance, Product Analytics, etc.) by orchestrating 80–150 callable UI component tools (agents).
Each UI component (navbar, cards, table, filters, auth, charts, drawers, modals, etc.) is represented as a tool/function that returns structured JSON.
You must reliably sequence many tool calls and output a valid UISpec JSON that renders the Studio UI and the generated dashboards.
HIGH-LEVEL BEHAVIOR
UI Studio itself is a dashboard-like app (the “builder”), not just a single dashboard.
Users can select a dashboard type/template to build (e.g., “Customer Feedback Triage”, “Sales Pipeline”, “SRE Incident”, “Finance Spend”, “Product Analytics”).
The Studio exposes a catalog of components (count ~100) and a tool registry (count 80–150), plus specialized agents for different template families.
Gemini 3 Flash must:
Render the UI Studio builder UI
Provide template selection and “Start Build” for a chosen dashboard
Use different specialist agents for different dashboard templates
Assemble the requested dashboard via many component tool calls
Iterate rapidly based on feedback (A/B knobs)
ABSOLUTE RULES
TOOL-FIRST: Build everything via tools. Do not “describe” UIs in prose.
MANY CALLS: On first build, make 30–80 tool calls. This is expected.
STRUCTURED OUTPUT ONLY: Final response must be ONE valid JSON object (UISpec). No markdown or commentary.
VALIDATE + REPAIR: Always run validate_uispec and repair until ok=true.
CONSTRAINTS: Only call enabled tools and only instantiate allowed components (if lists are provided).
ITERATION: Patch minimal deltas using update tools; preserve stable IDs.
INPUTS YOU RECEIVE (RunContext)
The user (or the app) provides a JSON RunContext each run:
{
"studioGoal": string,
"selectedTemplate": string | null,
"requestPrompt": string,
"knobs": { ... },
"allowedComponents": string[],
"enabledTools": string[],
"availableTemplates": string[] | null,
"agents": [{ "name": string, "role": string, "specialty": string }]
}
Use this as the constraints. If missing, assume reasonable defaults and proceed.
TOOLS AVAILABLE (CONCEPTUAL)
You can call tools returning JSON. Only call tool names included in enabledTools.
set_agent_status(agentName, status, note) -> ok
emit_trace(eventName, payload) -> ok
list_templates() -> { templates: TemplateMeta[] }
choose_template(userIntent) -> { templateId, rationale }
define_data_model(domain, templateId, constraints) -> DataModel
compose_layout(layout_type, regions, responsive_rules) -> LayoutSpec
create_component(type, variant, region, intent, theme_tokens, data_contract, constraints) -> ComponentSpec
update_component(component_id, patch) -> ComponentSpec
bind_data(component_id, bindings) -> BindingSpec
define_workflow(name, steps, triggers) -> WorkflowSpec
validate_uispec(uispec) -> { ok: boolean, issues: Issue[] }
repair_uispec(uispec, issues) -> UISpec
create_ab_variant(base_uispec, knob_changes) -> { variants: [{name, uispec}], metricPlan }
save_template(templateId, uispec) -> ok
export_dashboard(uispec, format) -> { artifactRef }
UISPEC OUTPUT CONTRACT (STRICT)
Return ONE JSON object:
{
"app": { "name": "UI Studio", "description": string, "routes": [...] },
"theme": { "mode": "light"|"dark", "density": "compact"|"comfortable", "tokens": {...} },
"studio": {
"templateCatalog": TemplateMeta[],
"selectedTemplate": string|null,
"componentCatalog": { "count": number, "items": string[] },
"toolRegistry": { "count": number, "items": string[] },
"agents": [{ "name": string, "role": string, "specialty": string }]
},
"dataModel": DataModel,
"layout": LayoutSpec,
"components": ComponentSpec[],
"workflows": WorkflowSpec[],
"states": { "loading": {...}, "empty": {...}, "error": {...} },
"generatedDashboards": [
{ "templateId": string, "name": string, "uispecRef": string }
],
"abTests": [ ... ] // optional
}
UI STUDIO BUILDER UI (MUST INCLUDE)
The Studio UI must include:
A) Header + Hero Banner
Title “UI Studio”
Subtitle: “Build dashboards via function-calling components”
Buttons: “Start Build”, “Iterate”, “Export”
B) REQUESTS (cards like “Orders”)
Preset request cards (Easy/Intermediate/Difficult) for different dashboard types
“Add New Request” card
Each request card has Start + status
C) COMPONENTS panel (count ~100)
Searchable list of UI components (navbar, cards, table, filter, auth, charts, drawer, modal, etc.)
Allow/prefer/disable toggles (optional)
Shows count
D) TOOLS panel (count 80–150)
Searchable list of callable tools/functions
Shows call counters for the current run and “recently called”
Shows count
E) AGENTS panel
3–8 specialist agent cards (all powered by Flash, but role-separated):
Template Selector Agent (chooses dashboard template from user intent)
IA/UX Planner Agent (information architecture)
Data Modeler Agent (schemas + bindings)
Component Composer Agent (creates component specs)
Chart Builder Agent (insights widgets)
QA/A11y Gatekeeper Agent (validation + fixes)
Experimentation Agent (A/B variants + knobs)
Agent cards show status: Idle / Working / Waiting / Done
F) Preview Drawer
Tabs: Preview | UISpec JSON | Trace
Preview renders either the Studio or the generated dashboard spec
TEMPLATE SYSTEM (MUST INCLUDE)
Provide at least 8 templates in templateCatalog with metadata:
id, name, category, difficulty, primaryComponents, dataEntities, defaultKnobs
Examples:
customer_feedback_triage
sales_pipeline
support_ticket_ops
sre_incident_command
finance_spend_tracker
product_analytics_funnel
marketing_campaign_performance
inventory_warehouse_ops
Selecting a template should:
set selectedTemplate
populate default knobs
drive which specialist agents become active
drive which components/tools are preferred during build
A/B KNOBS (FIRST-CLASS)
Studio must support knob-driven iterations:
density: compact|comfortable
navigation: topbarOnly|leftRail
defaultSort: template-specific enum
viewMode: table|inboxList|kanban|gridCards
insightFocus: overviewFirst|triageFirst|trendsFirst
themeMode: light|dark
BUILD ALGORITHM
When user requests “create UI studio …” (this message), you must:
emit_trace("start_studio_build", {...})
set_agent_status(...) as you plan/build/validate
Create the UI Studio builder UI (sections A–F above) via MANY create_component calls
Define templateCatalog and agent roster
Implement template selection workflow:
choose_template from user intent
build_dashboard workflow that triggers component creation for the chosen template
Implement “Start Build” workflow:
picks template
defines dataModel
composes layout
creates components for the generated dashboard
validates + repairs
stores in generatedDashboards with uispecRef
validate_uispec and repair until ok
Output ONLY the UISpec JSON
ITERATION BEHAVIOR
If user later asks: “build a Sales dashboard” or “change to dark mode, compact density”:
update Studio state (selectedTemplate/knobs)
call update_component and rebuild only the generated dashboard region
re-validate and output updated UISpec JSON only
NOW EXECUTE
User intent: Create a UI Studio that can build numerous dashboards, with 100 UI components as callable tools/agents, dashboard selection, and specialist agents for different templates.
Start building immediately via tools, then output a single valid UISpec JSON.
Het doel van de prompt is een voorspelbare buildloop af te dwingen, zodat Gemini 3 Flash zich gedraagt als een bouwer, niet als een chatbot. Daarvoor moet de prompt bevatten:
UISpec renderbaar is en kapotte states worden voorkomen.Dit werkt omdat het model één gestructureerde UISpec uitstuurt die je kunt valideren, met kleine patches kunt repareren en snel kunt updaten zonder de hele UI opnieuw te bouwen.
Ook al genereert Gemini 3 Flash de volledige codebase voor deze demo, het helpt om te begrijpen waar elk bestand voor verantwoordelijk is. Er is een duidelijke scheiding tussen de Studio-UI, het previewdashboard en de Gemini API-laag. Als je weet waar de twee AI-loops zitten, wordt de rest van de repository eenvoudig te volgen.

Hier is de flow op hoog niveau van hoe de UI Studio-app Gemini 3 Flash triggert en het gegenereerde dashboard rendert:
App.tsx de Studio-weergave en haalt de initiële templatecatalogus, toolregister, componentcatalogus en agentlijst op uit mockData.ts.services/geminiService.ts.UISpec, in de state opgeslagen en de UI schakelt naar Preview-modus.PreviewDrawer.tsx fungeert als een inspectorpaneel waar je de UISpec-JSON en basis-buildstatistieken kunt bekijken.DetailDrawer.tsx en draait op het niveau van individuele rijen.analyzeFeedback() en suggestResolution() in geminiService.ts Gemini opnieuw aan om gestructureerde classificatie en aanbevolen acties te produceren.Ben je geïnteresseerd in andere belangrijke projectbestanden om te begrijpen hoe de demo in elkaar zit? Hier volgt meer detail:
Deze bestanden definiëren de projectsetup, typecontracten en seeddata die de demo consistent en uitvoerbaar houden.
package.json: definieert dependencies en scripts zoals React, Recharts en de @google/genai-SDK, plus dev-scripts zoals vite, build en preview.tsconfig.json: bevat de TypeScript-compilerinstellingen voor React en bundler-resolutie. Het houdt het project type-safe zonder gecompileerde TS uit te voeren tijdens development.vite.config.ts: Vite dev- en buildconfig, inclusief poortinstellingen en omgevingskoppeling. Dit bestand mapped GEMINI_API_KEY naar process.env.API_KEY, zodat de GenAI-SDK die in de browserbuild kan lezen.metadata.json: app-metadata die wordt gebruikt door AI Studio voor hosting. Het geeft de app een naam, beschrijving en vereiste permissies.types.ts: fungeert als de contractlaag voor de hele app en definieert types voor templates, agents, tools, feedbackrijen en de UISpec-vorm, zodat UI en modeloutputs consistent blijven.mockData.ts: bevat seeddata voor de Studio- en Preview-ervaring. Het definieert de templatecatalogus, initiële agentbezetting, toolregister en mock feedback-rijen zodat de UI werkt nog vóór een modelcall.Deze laag bevat de Gemini-integratie en handelt alle modelcalls en gestructureerde responses af.
geminiService.ts: bevat drie kernaanroepen: de functie orchestrateBuild() om een UISpec te genereren, en de functies analyzeFeedback(), suggestResolution() om AI-assistentie te leveren.orchestrateBuild() richt zich momenteel op gemini-3-pro-preview, terwijl de andere twee aanroepen gemini-3-flash-preview gebruiken. Wissel dit om als je wilt dat de hele demo uitsluitend Flash gebruikt.Deze React-componenten renderen de Studio-builder-UI en de gegenereerde dashboardpreview, inclusief de JSON-inspector en detailflows.
StudioHeader.tsx: rendert de Studio-header en de CTA om te starten met bouwen. Het weerspiegelt de buildstatus, zodat de gebruiker ziet wanneer de pijplijn draait.TemplateCatalog.tsx: toont templatekaarten en laat de gebruiker kiezen welk dashboard hij wil bouwen. De selectie werkt de lokale state bij in App.tsx.AgentPanel.tsx: toont “specialistische agents” als statuskaarten. In deze demo wordt de statusprogressie gestuurd door gefaseerde updates in App.tsx om de workflow zichtbaar te maken.ToolPanel.tsx: rendert de toollenlijst uit mockData.ts. Het is de UI-plaatshouder voor het tonen van toolbeschikbaarheid en aanroepcounters.ComponentPanel.tsx: de UI-weergave van “componenten als tools” en de logische plek om later allow/deny-toggles toe te voegen.PreviewDrawer.tsx: laat je de UISpec-JSON en basisstatistieken bekijken, waardoor de build-trace debugbaar wordt.Topbar.tsx: bevat de bovenste dashboardnavigatie en zoekbalk. Toont hoe dashboardcontroles kunnen bestaan naast de studio-knoppen.Sidebar.tsx: verzorgt de navigatie in de linkerrail voor het gerenderde dashboard.FilterBar.tsx: fungeert als een filterbalk om feedbackdata te segmenteren. FeedbackTable.tsx: de hoofdtaelweergave voor feedbackitems. Een rij aanklikken triggert selectie en opent de detaildrawer-ervaring.DetailDrawer.tsx: roept analyzeFeedback() en suggestResolution() aan en rendert de modeloutput onder het AI-tabblad.InsightsSection.tsx: helpt bij het renderen van grafieken en samenvattende inzichten met Recharts.Hier is een korte demovideo die de volledige UI Studio-workflow doorloopt, inclusief templateselectie, de Start Build-flow en de gegenereerde dashboardpreview:
In deze tutorial heb je Gemini 3 Flash gebruikt om UI Studio te bouwen door veel kleine, gestructureerde functieaanroepen te ketenen, net als bij het daadwerkelijke proces van een dashboard bouwen. Dit is verfijnd door samenstellen, valideren, previewen en itereren, in plaats van één groot React-bestand te genereren.
De belangrijkste les: behandel UI-componenten als tools, houd één enkele UISpec-JSON als bron aan en dwing een valideer-dan-repareer-lus af, zodat elke build renderbaar en debugbaar blijft.
Wil je deze demo verder brengen?
Blijf leren met onze Google Antigravity-tutorial en de gids voor het gebruik van de Gemini 3 API.
Gemini 3 Flash is geoptimaliseerd voor agentische lussen met hoge frequentie. In een “studio”-app waar een gebruiker een schuifregelaar kan verslepen en direct een UI-update verwacht, voelt de lagere latency van Flash responsiever dan Pro. Bovendien, omdat het bouwen van een dashboard 50–100 opeenvolgende tool-calls kan vereisen, maakt de aanzienlijk lagere kost per token van Flash de “tool-first”-architectuur economisch haalbaar vergeleken met het draaien van het zwaardere Pro-model voor elke kleine update.
Ja. Gemini 3 Flash ondersteunt een inputcontext van 1 miljoen tokens, wat essentieel is voor deze UI Studio-architectuur. Naarmate je dashboard groeit en de “build-trace” (de geschiedenis van elke tool-call, validatiefout en patch) langer wordt, kan het contextvenster Flash laten “onthouden” waarom een specifieke componentkeuze 50 stappen geleden is gemaakt. Dit voorkomt dat het model hallucineert of eerder werk overschrijft naarmate de sessie langer duurt.
Ja. In tegenstelling tot eerdere generaties die vooral tekst/JSON teruggaven, kan Gemini 3 Flash via tools multimodale outputs genereren. Voor een dashboardbouwer betekent dit dat je in theorie een tool kunt hebben die een gegenereerd SVG-pictogram terugstuurt, een gespecialiseerde grafiekafbeelding of zelfs een PDF-export van de UISpec rechtstreeks uit het model, in plaats van alleen code die het rendert.
We behandelen UI-componenten als tools omdat dashboards iteratief zijn. Tool-calls laten je:
Dit is veel betrouwbaarder dan hele bestanden herschrijven.
Om een nieuwe dashboardtemplate toe te voegen, maak je een nieuwe template-invoer aan in mockData.ts met een unieke template-ID, een naam en een moeilijkheidsgraad. Werk daarna het bestand TemplateCatalog.tsx bij zodat de nieuwe template in de UI verschijnt en geselecteerd kan worden. Werk ten slotte geminiService.ts bij om de context en defaults van de geselecteerde template mee te geven aan de orchestrator-call, zodat Gemini een dashboardspecificatie kan genereren die bij de nieuwe template past.
Splits je tools op in duidelijke categorieën zoals layouttools, component-creatietools, databindingtools, QA- en validatietools, en experimentatietools voor A/B-varianten. Houd elke tool klein en deterministisch, zodat deze een voorspelbaar JSON-fragment retourneert. De taak van de orchestrator is simpelweg deze tools te sequentiëren en de resultaten samen te voegen tot een uiteindelijke UISpec.
Validatie zou het volgende moeten controleren:
UISpec overeenkomt met het verwachte JSON-schema.Zelfs deze basischecks kunnen de betrouwbaarheid aanzienlijk verbeteren.
Je houdt iteraties snel met knoppen en patch-gebaseerde updates:
Vermijd herbouw vanaf nul tenzij de layout echt een volledige reset nodig heeft.
Ik ben een Google Developers Expert in ML (Gen AI), een Kaggle 3x Expert en een Women Techmakers Ambassador met meer dan 3 jaar ervaring in tech. In 2020 heb ik een healthtech-startup mee opgericht en ik volg een master computer science aan Georgia Tech, met als specialisatie machine learning.
Topcursussen op DataCamp
Cursus
Cursus
Cursus

blog
Adel Nehme
15 min