Generative UI lets AI build the screen each user needs, in real time. What it is, how it works, the trade-offs, and two working demos we built.
12 min read
Insights, stories, and experiments from our team.

AI
UX Design
Generative UI lets AI build the screen each user needs, in real time. What it is, how it works, the trade-offs, and two working demos we built.
Santiago Chiappa
·
Jul 17, 2026
·
12 min read
Generative UI is a full-stack architecture that lets AI create, modify, and render user interfaces in real time, based on what each user needs at that exact moment. Instead of static, predefined screens, the interface assembles itself on the fly: a bar chart, a table, a comparison card when you're comparing things.
We've been building proofs of concept with it for the past few weeks. Most of what's written about generative UI is either too abstract or too exciting, so this is our attempt at neither: what it is, how it works, where it helps, where it doesn't, and what we learned from two demos we built.
Generative UI is a full-stack architecture: the backend talks to the LLM, decides what the answer should look like, and picks the components, while the frontend renders them and handles how the user interacts with what’s on screen.
Compare that with how interfaces have always worked. A designer decides what goes on each screen, a developer builds it, and every user sees the same thing. Forever, or until the next redesign.
Generative UI flips that. The interface becomes dynamic and personal instead of static and universal. The AI doesn't just answer your question, it designs the screen that answers your question.
Dashboards and reporting are the most common use cases, but they're far from the only one. The same pattern works for dynamic forms, onboarding flows, and customer support, as it takes input just as easily as it presents output. It can even adjust font size, contrast, or layout for users with low vision, color blindness, or cognitive load.
There are three levels of generative UI, from most constrained to most open (Google Cloud, 2026):
Most production systems today use the declarative approach, and that's what this post assumes from here on. The AI isn't writing HTML or CSS freestyle. It selects components, fills in pre-designed widgets, and composes them into the right screen.
Generative UI works by turning a user request into structured data that describes an interface, then rendering that data as real components. The flow looks like this:
To the user, the result feels like magic. Behind the scenes, it's structured data flowing through a well-defined pipeline. We prefer the second description. It's the one you can build on.
Generative UI trades real personalization and faster development for added latency, inference costs, and less predictable layouts. That's the honest version. Here are the details.
None of these are dealbreakers. There are known techniques to mitigate each one.
We built two demos. One with fictional data, one on top of a tool we use every day.
Aurora Goods is a fictional consumer e-commerce platform we created for the demo. The interface is simple: chat on the left, canvas on the right. You ask about the business, the LLM figures out what you need, pulls the data, and renders it visually.
Ask about 2025 sales and it shows the numbers on cards, with a short note on anything relevant. Ask it to break that down by region and it extends the same view instead of starting over, because it understands the second question builds on the first. This part took us a while to get right, and it's what makes the whole thing feel like a conversation rather than a search box.
The canvas isn't output-only either. You can click into any element and drill down: revenue by category, then inside electronics, then which products sold most.
You configure the widgets once. The system combines them and adds relevant commentary on the spot.
The second demo is closer to home: a generative reporting layer on top of the time-tracking tool we use every day at Kaizen. The questions in this demo are questions someone here has actually asked.
Instead of building dozens of hyper-specific reports, a small amount of code now handles virtually unlimited queries. How many hours were logged in May? Which anomalies showed up in April? How do billable and non-billable hours compare across two months? Who worked on a given project last month, and for how long? Each answer arrives as the right visualization: cards, lists, bar charts, plus a short summary that's easy to scan.
Two details won us over. The LLM suggests next steps, so exploring the data becomes a conversation. And when it's not sure, it asks instead of assuming. Ask for the hours of someone named Alex and, since we have more than one Alex on the team, it asks which one before answering.
Generative UI is a complement, not a replacement. Standard interfaces still win for stable, repetitive workflows where consistency matters. Nobody wants their checkout button to be creative. Generative UI wins where the workflow is complex and the questions are unpredictable.
It also changes what design systems are for. Beyond designing components and screens, teams will need to define semantic rules: how the AI should react to uncertainty, which interfaces match which intentions, and the guardrails that keep generated screens functional and safe.
That's a new kind of design work. And it's already starting.
We build working proofs of concept in two weeks. Your data, your workflows, a real thing you can click.
Generative UI lets AI build the screen each user needs, in real time. What it is, how it works, the trade-offs, and two working demos we built.
12 min read
·
Aug 14, 2026
A synthetic user research framework, turned into a Claude Code plugin that runs automated UX tests with AI agents, step by step.
12 read time
A synthetic user is a constrained AI decision agent defined by twelve fields, from functional role and context to assumptions and abandonment rules.
In the previous post I built an early, working implementation, and the next question was whether the same rules could hold up in a repeatable, automated test.
This post is that next step: how I turned the framework into a Claude Code plugin, and the technical decisions behind adapting methods designed for people into something an AI can execute without cheating.
Give a model a URL and ask it to “find the usability issues.” It works halfway. And the “halfway” is the interesting part, It gives you a generic list, correct in the abstract, useless in practice.
A usability issue matters because of who encounters it and under what conditions.
Using an app from bed is not the same as using it on a factory floor. Urgency changes, lighting changes, attention changes, previous knowledge changes. The same confusing button can be irrelevant to a power user and an abandonment point for an operator wearing gloves.
The whole design comes from that observation: the AI does not evaluate the interface. It acts as a specific person in front of the interface.
The person brings the context with them. And the context turns a list of defects into a list of priorities.
An orchestrator controls the browser through Playwright MCP. It reads each screen as an accessibility snapshot: text, roles, states, no guessing pixels. Then it acts on specific elements.
The decision on each screen is made by an isolated subagent, which returns a JSON for each step:
{
"action": "...",
"clarityLevel": "High|Medium|Low",
"doubtDetected": true,
"reason": "...",
"abandoned": false,
"estimatedTimeSeconds": 40,
"emotionalState": "...",
"memory": "..."
}
Two rules make this look more like a person and less like an oracle.
The evaluator receives one screen at a time, without knowing how many are left or what comes next in the flow.
If the interface leaves room for a mistake, the synthetic user makes the mistake. It clicks where a person would click, not where it is convenient to click in order to complete the test. This is where the framework’s forbidden assumptions live. The agent cannot assume backend logic or mentally complete what the screen does not show.
The memory field travels from one step to the next. The emotional state is inherited and accumulates. A frustration +1 persists. This detects something that is structurally invisible to any test that evaluates screens separately.
Screen five does not necessarily fail because of screen five. It fails because the user gets there with accumulated frustration.
Evaluated alone, that screen passes. Evaluated by someone carrying three doubts and one broken promise, it triggers abandonment. In the first post, I wrote that doubt is not failure. It is the signal that reveals structural friction.
Emotional memory is that idea turned into architecture.
Each subagent gets a clean context. It knows the minimum required to do its job.
That ignorance is deliberate.
The agent acting as the user does not know what the orchestrator knows. It cannot compensate for bad design with knowledge a real person would not have.
Subagent
What it does
A textbook heuristic evaluation uses three to five human evaluators because each human finds different problems.
My first experiment was literal, and it went meh.
I iterated until I reached two synthetic detection runs with different agents, coverage was extremely high, but it exposed another problem: an unmanageable list. Dozens of valid issues, very few important ones.
The final design separates those two jobs.
Based on Nielsen’s literature, an expert goes through each screen and is forced to produce a verdict for every heuristic:
Each verdict includes textual evidence from the snapshot, forced enumeration breaks the habit of reporting only the things that stand out.
Three synthetic personas are generated according to the business being evaluated:
They score the findings without seeing the expert’s conclusions. The same issue can matter very differently depending on what each persona brings to it.
The formula is business impact × usability impact, with agreement between personas as the tiebreaker.
This keeps issue detection and user impact as separate jobs: the expert identifies the violations, and the personas help determine which ones deserve attention first.
The plugin currently has three modes.
simulation-run (custom)
You build a profile field by field in the Synthetic User Builder, the tool I built to materialize the framework.

First come the attributes:
Only after that, and separately, comes the task.
The profile describes how someone decides, never what they have to do. That is why the same profile can be reused across tests.
simulation-auto (inferred)
You only give it the URL.
It researches the business, infers the typical roles, proposes users with tasks, and you adjust that proposal in natural language before anything runs.
heuristic-test (inspection)
The heuristic test described above, for one screen, one flow, or the entire site.
Every run leaves Markdown artifacts inside the project:
user-simulation-tests/
├── simulation/
│ ├── profiles/ ← users: the .md used for simulation + a .builder.json
│ │ that can be imported back into the Builder and edited manually
│ └── results/ ← one report per run + the consolidated report from auto mode
└── heuristic/
├── personas/ ← the 3 raters + business research, reused across runs
└── results/ ← reports with the prioritized findings table
Simulation reports include the full step by step flow, the emotional arc, risks, and a single “Fix this first.”
The consolidated report classifies findings by convergence: did one user suffer from this, or did all of them?
The decision to keep everything as accumulating .md files is strategic.
These are different runs, using different lenses, that can be analyzed together later, crossing heuristic violations with simulated emotions answers something no individual test gives us:
Of everything that is wrong, what actually matters?
What worked for me for the synthesis subagents:
A complete run consumes between 100k and 400k tokens, depending on the model and mode, in around 20 minutes.
That is the cost of a test that previously required coordinating the schedules of three professionals, and that can now run against every iteration of the product.
Here's a complete run against our site, kzsoftworks.com: a skeptical "Business Leader" profile, five live browser steps, and a full Markdown audit in under three minutes that names the exact moment the executive persona lost trust.
Every rule in the framework became an architectural constraint: clean context, one screen at a time, emotional memory, forbidden assumptions.
The plugin is open source: github.com/PabloManzoni/user-simulation.
Three commands, and the inferred mode only needs your URL.
If you try it and your synthetic user abandons on screen three, you already know what it means:
It is not failure. It is the signal.
·
Aug 14, 2026
Generative UI can adapt interfaces to each user, but it adds risks around reliability, latency, cost, security, and accessibility. Learn the architecture that keeps those risks under control.
12 read time
Generative UI assembles the interface around what each user is trying to do, instead of showing everyone the same fixed screen. That flexibility comes with real considerations: keeping the experience consistent, secure, and easy to support once it's live. This post covers what generative UI is worth building for, what it costs, and how teams keep it under control.
Generative UI works best when the experience is dynamic, but the system behind it stays tightly controlled.
Start by defining which parts of the interface can change, which cannot, and what must be validated before anything reaches the user.
The interface can adapt to what a person is trying to do instead of relying only on a persona defined at design time. Steps can reorder or disappear based on intent. It can change how much information it shows and what it emphasizes. Copy can adapt to the user's locale and context instead of relying on literal translation.
A small set of components can support many variations without designing each screen separately. The system can also support workflows the team did not design as individual screens, as long as the required components and actions already exist.
The interface can hide controls a task does not need, reducing the number of steps required to complete it. Generative UI can also help teams test different ways of presenting the same task. Whether that improves completion or conversion depends on the workflow.
When layouts change between users or sessions, they can break muscle memory and make support harder. They can also drift from the design system or disrupt accessibility patterns that depend on consistent structure.
The system should not trust model output by default. A model can render a button that does nothing, display fabricated data in a component, or produce a state the team never tested. Prompt injection can push it toward components, content, or actions the system should not allow. Weak controls can expose sensitive data or allow actions and interface states the product should block.
A generative interface also inherits the model layer's latency, cost, and availability risks. Waiting on an LLM to generate a layout adds delay before a page renders. Each generation uses processing resources, and hosted models usually add usage-based cost. Relying on one provider also exposes your product to outages, API changes, price increases, and deprecations.
Standard analytics often assume a fixed set of screens. Heatmaps and funnels become harder to compare when users see different layouts. Reproducing a bug also gets harder when you cannot reopen the exact screen the user saw.
Prompts can reduce unwanted behavior, but they cannot enforce which components the system may render or which actions it may allow. Those limits need to be enforced in the architecture around the model.
Keep global navigation, account and security controls, primary actions, critical transaction controls, and accessibility-critical structure fixed. Let the model modify only the content and controls that benefit from adaptation.
Fixed navigation preserves familiar interaction patterns. A stable structure also makes accessibility testing, branding, and support more predictable.
Do not let the model generate arbitrary UI code. Have it return structured configuration instead. The schema should specify the component, its data, and its position. Validate that output against a closed catalog before rendering it.
The model should not write HTML, CSS, or JavaScript or choose anything outside that catalog. This reduces invalid layouts and unsupported combinations. This is the declarative approach we covered in Part 1.
Treat model output as untrusted input. Validate it against the schema and component allowlist, sanitize content, and keep authorization outside the model.
Add content security policies and prompt-injection defenses based on what the model can access and what actions it can trigger. Pay particular attention to user-provided content, privileged actions, sensitive data, and external tools.
Limit valid component combinations, then use visual regression and property-based tests to exercise unexpected inputs and edge cases.
Minimize sensitive data sent to the model. Mask or anonymize it before generation when the task does not require the original values.
Record enough context to reconstruct each generated interface. That includes detected intent, model version, generated configuration, rendered components, task completion, and errors, all tied to the session.
That record lets teams segment analytics by generated experience and reconstruct what a user saw during a specific session.
Cache reusable results where freshness and privacy allow. Show a skeleton layout immediately and stream the rest in. Route simpler requests to smaller or local models, and reserve larger ones for complex requests. Put providers behind the same integration layer so you can switch models or fall back to a static experience during an outage.
Keeping more of the interface fixed protects consistency but limits personalization. Limiting combinations makes the system easier to test but reduces how much it can vary. Caching lowers cost, but cached output can go stale.
Running models locally can reduce how much sensitive data leaves your infrastructure, but it adds systems your team has to operate and maintain. Detailed session logs can make support easier, but they also create storage, retention, and privacy requirements.
No architecture maximizes flexibility, reliability, privacy, performance, and cost at once. You need to decide which trade-offs matter most for each workflow and design around them.
·
Jul 16, 2026
We built an internal dashboard to track how AI crawlers like ChatGPT, Perplexity, Claude, and Google read our website. Here’s what it revealed about AI visibility, analytics blind spots, and the new risks facing B2B companies.
12 read time
Somewhere between a prospect Googling your company and a prospect never visiting your site at all, a new kind of visitor showed up.
It doesn't click. It doesn't scroll. It doesn't show up in Google Analytics. But it scans your website, decides what matters, and quietly influences whether your business gets mentioned the next time someone asks ChatGPT, Perplexity, or Google's AI Overviews for a recommendation.
We had no real way to know what these AI bots were finding on our own site. So, before telling anyone else what to do about it, we built something to find out for ourselves.
Google Analytics tracks human sessions, not server-side crawler activity. That's the blind spot. A person searches, sees a list of links, clicks one, lands on your site; that's the journey it was designed to track.
That journey is changing. Fewer people start their research by typing a query into Google and scanning ten blue links. Most of them are asking an AI assistant directly: "who are good software partners for X," "what's the best tool for Y," and trusting the shortlist it hands back. To build that answer, the AI first sent something to read the web on its behalf: a bot with a name like GPTBot, PerplexityBot, or ClaudeBot, crawling pages much like search engines have for decades.
None of that shows up in your dashboards. Those bot visits don't count as sessions, don't trigger conversion tracking, and don't appear anywhere you're already looking. If your site is hard for those bots to read, poorly structured, or quietly blocking them without anyone realizing it, you're not losing a ranking position. You're being left out of a conversation you never knew was happening. It's a new kind of competitive risk. Not "we got outranked," but "we were never in the running, and nothing told us."
That's the gap we set out to close, starting with our own site.
Inside our Innovation Hub, the group that experiments with new tools and workflows before we bring them into client work, someone asked a simple question: are AI bots even visiting our site? And if they are, what are they actually able to see?
Nobody could answer that with confidence. Not because it's a hard problem to reason about, but because the tool to answer it didn't exist among the tools we already had. So instead of guessing, or buying something built for someone else's website, we built a small internal dashboard for our own.
The idea is simple, even if getting there wasn't: a small piece of code sits quietly in front of our website and notes every time a known AI bot stops by. It records which one it was, which page it looked at, whether it got a clean response or hit an error, and how deep into the site it went.
Right now we're tracking bots from OpenAI (the ones behind ChatGPT), Anthropic (Claude), Perplexity, Google, Microsoft's Bing, Meta, and Apple. That list will keep growing. New AI crawlers show up faster than anyone can keep a definitive catalog.
All of that gets pulled into a dashboard the team can check the same way we'd check any other business metric: how much of the site is actually getting crawled, where bots are hitting dead ends, whether they're respecting the instructions we leave for them, and how that changes over time.

We didn't have to wait long to see the point of building this. Two things came up in the first few weeks alone.
An llms.txt is a simple file some AI models look for to understand what a site is about. Like a lot of sites getting ready for an AI-driven web, we added one, checked it was live, and moved on, assuming that box was checked.
The dashboard said otherwise. Weeks in, not a single bot had requested it.
So we went digging, and read that crawlers rely on robots.txt to know an llms.txt file exists in the first place, and ours didn't reference it. We added the missing line. Bots still weren't picking it up.
Third attempt: we added plain, visible links to the file in the site's header and footer, the same way we'd link to any other page. That's what did it. Two weeks of zero requests, and on the exact day we shipped that change, the file got six requests from five different AI companies.

The detail we only noticed because the dashboard breaks bots down by type: those six requests were all from indexer and training bots, the ones that crawl the web to build a general picture of it, not yet from retrieval bots, the ones that fetch a page in real time to answer someone's specific question right now. That's a useful distinction. It's the difference between "we're now on the map" and "we're being pulled up live," and it tells us what to check for next.
None of that would have surfaced anywhere else. Not in Analytics, not in Search Console. We would have gone on believing the file was doing its job, simply because we remembered adding it.
The second finding was less comforting: several of our most important pages, the ones describing what we actually do, were barely being crawled at all. Not blocked, not broken. Just quietly skipped by many bots.
We built a graphic on the dashboard specifically for this: crawl coverage per bot, broken down page by page. Now, instead of assuming coverage is even across the site, we can see exactly which high-value pages each AI bot is actually reading, and which ones it's ignoring.

We're still working on closing that gap. The first fix we tried didn't move things the way we expected, so for now the coverage graphic itself is doing the real work: telling us, page by page and bot by bot, whether the next attempt actually helps instead of just hoping it does.
Neither of these was something we could have reasoned our way into. We only found them because we were finally looking.
It's tempting to jump straight to fixes: restructure content, add an llms.txt file, rewrite pages to be more "AI-friendly." We did some of that too. But our own llms.txt sat unused for weeks and we had no idea, because we had nothing telling us otherwise. Without a baseline, you can do all the "right" things and still have no idea whether any of them worked.
Our approach here mirrors how we tend to approach any technology problem: understand what's actually happening before deciding what to change. It's a small dashboard, built quickly, answering one honest question. It's already paid for itself twice over, and we're still early.
We'll keep sharing what we find as the picture gets clearer. If you're curious what your own numbers might look like, that's a conversation we're happy to have.
·
Jun 29, 2026
How we pick the next UX Tiny Knowledge Byte speaker, with a spinning wheel and a Magic 8 Ball.
12 read time
A while ago we noticed something pretty common: everyone wanted to share more knowledge internally, but nobody wanted another heavy corporate ritual.
Internal talks usually start with good intentions and slowly disappear. They take time, preparation, and energy. And at some point people start feeling like they need to be experts before presenting anything.
So we tried the opposite.
15 minute talks.
Small topics.
Low pressure.
And one important rule: every session had to leave something useful behind. A tool, a workflow, an idea, a shortcut, a new way to approach a problem. Something people could actually use after the talk ended.
We didn’t want theory that went nowhere.
Somehow, that ended up working much better than we expected.

Tiny Knowledge Bytes is intentionally simple:
The goal was making knowledge sharing feel lightweight instead of exhausting.
Some of the best talks start with:
“I tried this yesterday and it was weird.”
Over time, topics started coming from everywhere.
Sometimes someone took a course and used a Tiny Knowledge Byte as a way to give something back to the team. Other times, a client problem triggered research into new tools, workflows or AI approaches.
A lot of sessions start from curiosity or necessity more than planning.
The pool slowly filled up with things like:
And honestly, the mix is part of what makes it interesting.
Sometimes a UX session drifts into Computer Vision. Sometimes someone technical shares a visual workflow that half the design team ends up adopting later.
There’s not much curation. It behaves more like a constant exploration system.
And this is where things became unnecessarily dramatic.
Nobody wanted to be “the person who chooses”. So we started adding absurd layers of randomness until we somehow ended up building a full internal app called 2FS.
Two Factor Sorteo.
Yes, it’s real.
The logic is simple.
First, a wheel picks someone.
Then a Magic 8 Ball decides whether destiny approves the selection.
If the oracle rejects the person, the process starts again.
That’s it.

2FS originally started as an excuse to experiment with:
Eventually those same explorations turned into future Tiny Knowledge Bytes.
The tool we used to select speakers started generating new topics itself.
One of the most interesting side effects is that people started building things outside their usual role because of previous Tiny Knowledge Bytes.
2FS itself is a good example. A designer saw sessions about Claude tooling and AI workflows and thought:
“Maybe I can actually build this.”
What started as a ridiculous speaker selection tool became a real product experiment involving Claude Code, interface systems and interaction design.
Then it came back into the Tiny Knowledge Bytes circuit as a new talk.
That loop became surprisingly valuable:
someone learns something,
tries it,
builds something with it,
and eventually inspires someone else to do the same.

Over time we realized knowledge sharing works much better when:
At that point, it stops feeling like another internal obligation and starts feeling like something people genuinely want to keep alive.
·
May 27, 2026
What happens when you build a design system from v0, Figma, and Windsurf, and let AI handle the speed while you keep the judgment.
12 read time
Just this month, I built a full design system in about 20 hours.
What used to take weeks, sometimes months, is now dramatically faster. So… what actually changed? And more importantly: what didn’t?
Design systems take time. On complex platforms, they can take hundreds of hours.
We were working with a large and complex product where inconsistencies had started to pile up. Different modules had evolved in isolation, teams were making independent decisions, and there were no shared guidelines. The answer was clear: we needed a design system.
AI tools were just starting to emerge back then. They were mostly useful for simple tasks as they tended to hallucinate when things got complex. Developers had started using them earlier than designers, MCP didn't exist yet, and Figma plugins were the best automation we had.
But the context has changed. Fast.
We did what most teams did. We stopped, and we built it. Manually.
Picture two designers, a mountain of inconsistencies, and no map. We had to cross-reference information manually, digging through the code, detecting what could be merged, agreeing on naming conventions, deciding how to name components. Hours and hours of discussion until we finally landed on a solution.
In the end, we got there. A cleaner system, faster workflows, and for the first time, both teams speaking the same visual language. Hard-won, but it worked.
But now every month a new AI model seems to be released. Design is finally catching up with what developers faced about two years ago. New tools arose, and with that, the scope of our work as designers completely changed.
For an internal project, I used our Kaizen site as a reference, combined with documentation from industry leaders as a guideline.
I started in v0, which is essentially a chat interface where you can generate UI components through prompts. I fed it the colors, typographies, and a reference image, and from there it was a back-and-forth: the AI generated, I reacted, adjusted, and pushed until the output matched what I had in my head. And just like that, I started prompting my way through a Design System.
Once a component was ready, I used the html.to.design plugin to bring it into Figma (yes, plugins are still alive!). Think of it as a bridge: the plugin exports designs directly from the browser into a Figma file.
Inside Figma, the intervention was more hands-on. First, I checked that everything was visually consistent with what was defined in v0: colors, typography, styles. Then I used Figma's built-in AI to rename all the component layers using BEM convention (something that would have taken a significant amount of time to do so manually).
BEM, which stands for Block Element Modifier, is a widely adopted naming convention in CSS. It structures layer names hierarchically and predictably, for example: button__label--disabled.
Using it keeps the code clean, readable, and consistent, especially when you're working alongside a developer who needs to understand what came out the other side.
Beyond naming, I also made sure the layer structure would generate the right properties when building component sets in Figma, so that all the variants would be correctly exposed and usable. My team also pointed out that adding descriptions to components and variants was key as context for any agent using them through an MCP.
The last step was connecting everything to Windsurf via MCP. With a frame selected in Dev Mode, Windsurf could read the Figma file and use the components to build more complex screens.
We worked closely with a developer throughout this phase. Not just for the technical knowledge, but because having someone who reads code fluently meant catching things we wouldn't have spotted otherwise. The design role here was direction and supervision: making sure the AI used the components correctly and didn't invent solutions where context was missing.
Every step of the process had a human decision behind it.

At one point, before we had any of the naming conventions figured out, I selected a frame and asked Windsurf to build a form using the components inside it, styled to match a specific card. The developer next to me was skeptical until he saw the result, and then he was just as surprised as I was.
What we realized is that the MCP wasn't reading layer names to understand context. It was reading everything inside the frame, even the loose text sitting alongside the components. Good naming is still worth doing. But the MCP doesn't need it to understand what it's looking at.

The more specific and contained your prompt, the better the outcome. We started with the most atomic component: the button, and worked outward from there. Each approved component became context for the next one, so the system gradually picked up the visual language we were building.
At some point I got ambitious and asked for five cards in a single prompt: blog card, service card, testimonial card, stats card, feature card… structures, states and all. The AI delivered.
Visually, everything looked fine. Then the developer looked at the code and pointed out that all five cards were independent components instead of variants of one. For a design system, that breaks everything.
One correction prompt fixed it. But it was a good reminder: the AI does exactly what you ask, not what you mean. And fixing it after the fact can cost more than getting it right from the start.
Through all of this, a few things became very clear. These are the parts that didn’t change:
The tools changed, and that gave me the chills, but throughout this experience I found that the designer's role is more alive than ever.
What once took a team weeks can now be prototyped in hours. That’s not a threat; it’s an invitation to get curious.
I'm still figuring a lot of this out, and I suspect most of us are. There's no right workflow yet, and honestly, that's fine. We are in a transition where tools change faster than standards. The best thing you can do is experiment. Don't wait for a "definitive" workflow, it might be obsolete by next month.
Go ahead, try prompting your way through a component. You might be surprised how fast the system starts to take shape.
·
May 15, 2026
AI can update microservices safely, but only when it understands the system’s architecture, ownership, and service relationships.
12 read time
Applying changes across microservices is difficult because business logic is distributed across multiple services, each with its own data, contracts, and responsibilities.
In our experiment at Kaizen Softworks, we tested whether an AI system could safely apply coordinated changes across a microservices architecture using only minimal input.
Short answer: Yes, but only when the AI has enough architectural context.
In distributed systems, a single business change rarely affects just one service.
It often requires:
The complexity is not in the code, it’s in the relationships between components.
We designed a controlled experiment to test whether an AI model could apply system-wide changes with limited information.
In other words, the AI had to behave like a software architect, not just a code generator.
The biggest challenge was not technical, it was contextual.
.png)
Instead of descriptive names like:
Our services were named:
This removed any semantic clues about responsibility.
Result: The AI could not infer which service owned which domain logic.
To solve this, we introduced a simple but powerful structure:
This created a clear relationship between domain concepts and system components.
Once ownership was explicit, the architecture became understandable.
Instead of building this mapping manually, we used AI to analyze the codebase and extract:
The result was a machine-readable architecture map.
In practice, we used AI to generate the context that AI itself needed.
With the architecture map in place, the AI was able to:
While not perfect, the system worked reliably as a proof of concept.
The main limitation of AI is not code generation, it’s architectural understanding.
Without knowing:
AI cannot safely modify a distributed system.
AI performance depends more on context quality than model capability.
Simple rule: If the architecture is clear, AI can reason. If not, it guesses.
This experiment revealed something important:
AI doesn’t fail because it can’t write code.
It fails because it can’t see the system.
As teams move toward AI-assisted development, the focus will likely shift from:
Writing better code to Designing better systems for machines to understand
At Kaizen Softworks, we see this as a foundational shift.
Because when AI can understand architecture, it doesn’t just generate code, it helps evolve systems.
·
Mar 4, 2026
LLMs can break in weird ways. Guardrails are what keep things usable in production.
12 read time
In 2026, building AI-powered features has become relatively easy. While working on AI initiatives within the Innovation Hub at Kaizen Softworks, we kept running into the same pattern: PoCs worked, demos looked impressive, and stakeholders were happy. But production hit red flags.
When you move from an internal prototype to production, uncomfortable questions start showing:
AI guardrails and evaluations have shifted from "extra safety work" to core product concerns.
AI Guardrails are secondary checks that sit between the user and the Large Language Model (LLM). They act as a validation checkpoint, monitoring, filtering, and validating both the input (prompts) and the output (responses) to ensure they meet safety, accuracy, and brand standards.
Instead of trusting the model blindly, you are defining the boundaries of "valid behavior, which usually means:
We’ve already seen public cases of large AI-powered products responding to almost any topic-not because the models were bad, but because clear boundaries weren’t defined. As systems become more agentic (taking actions on behalf of users), these risks only grow.
The value of these patterns, which are covered in the DeepLearning.ai "Safe and Reliable AI" course, is that they provide a model for building responsible AI.
Guardrails aren't a silver bullet, but they are the difference between a prototype that "looks cool" and a system you can actually trust with your brand and your users' data. At Kaizen Softworks, this way of thinking is becoming increasingly important as we explore and ship AI-driven solutions.
To move beyond the demo, we recommend implementing these four technical validation layers:
In a RAG (Retrieval-Augmented Generation) system, a hallucination is usually a lack of grounding. A way to verify that every statement is explicitly supported by trusted source text is through Natural Language Inference (NLI).
Instead of asking "Does this answer look right?", we use a secondary, smaller model to ask if the output is logically entailed by the source context. This makes hallucinations something you can programmatically reason about and block in real-time.
Another common problem is the "Everything Bot"—that answers questions about your business, but also gives recipes or writes poetry if asked.
While you can try to "prompt" an LLM to stay on topic, it’s expensive and slow. We prefer Zero-Shot Classification. It’s a dedicated layer that categorizes the intent before it even hits the expensive LLM. It’s:
Data privacy is the #1 reason AI projects stall in legal. PII (Personally Identifiable Information) handling is easy to ignore in demos but is a dealbreaker in production.
Tools like Microsoft Presidio allow you to:
This makes data privacy risks very tangible, especially when working with third-party LLM providers.
There are also examples of guardrails for:
Again, the focus is not on theory, but on patterns you can actually apply.
To dig deeper into this topic, I took the short course “Safe and Reliable AI via Guardrails” by DeepLearning.ai.
This course is not about training models or prompt engineering. It’s about everything that surrounds the LLM when you want to ship an AI feature safely and reliably.
You won’t leave this course as a “guardrails expert”. What you will get:
It’s a very good entry point, especially for engineers who are starting to ship AI features beyond PoCs.
For me, the biggest takeaway was a mindset shift. When you think in PoC mode, many questions don’t even come up:
In production, those questions stop being theoretical. The course reinforces the idea that once an AI feature goes to prod, “it works” is not enough.
You start designing:
And once you start thinking this way, you don’t really go back.
·
Mar 2, 2026
If someone on our team asked where to learn AI today, these are the courses we’d point them to.
12 read time
Learning AI engineering is about developing judgment: knowing when to use models, how to control them, and where they actually add value.
At our Innovation Hub, we’ve been actively experimenting, building, breaking, and refining AI-powered systems in real-world environments. Based on that hands-on experience, we curated this list of AI engineering courses we’d confidently recommend to our own team.
This list is for software engineers, tech leads, and AI practitioners who already ship production code and want to learn how to build AI systems that are reliable, maintainable, and usable.
TABLA
Standard LLMs are constrained by static training data and context limits. In real products, that’s a deal-breaker. Retrieval-Augmented Generation (RAG) has become the industry standard for connecting AI systems to private, real-time, and domain-specific data.
What You’ll Learn:
How do you test a system that doesn’t always give the same answer? Traditional unit tests break down when applied to LLMs. TestGenAI tackles that problem head-on by showing how AI can be used to test AI systems themselves, across UI, APIs, databases, and workflows.
What You’ll Learn:
As AI systems become user-facing, safety is no longer optional. Guardrails are programmable layers that sit between users and LLMs to prevent harmful, non-compliant, or simply incorrect outputs.
What You’ll Learn:
For engineers working in larger organizations, this certification is one of the most complete overviews of how AI systems live inside real enterprise infrastructure.
It goes beyond models and into architecture, governance, and deployment constraints.
What You’ll Learn:
We’re moving from copilots to agents.
Windsurf is an AI-native IDE that allows agents to autonomously refactor, search, debug, and modify code across an entire codebase. This course shows how to work with those agents instead of fighting them.
What You’ll Learn:
Claude Code brings AI directly into your terminal, allowing it to read, reason about, and modify your local codebase. It’s one of the most practical examples of LLMs as real development tools, not chatbots.
What You’ll Learn:
There’s no single “best” path. The right course depends on what you’re building, who your users are, and how close you are to production.
If you’re deciding where to start:
·
Feb 20, 2026
Synthetic users are AI-driven test agents that help reveal where a design creates doubt, confusion, or unnecessary friction.
12 read time
Karen has no patience.
If a button is disabled without explanation, she gets annoyed.
If an empty state looks like an error, she assumes the system is broken.
If a loading spinner doesn’t explain what’s happening, she asks for the manager.
Karen isn’t a real person.
She’s a synthetic user.
And she might be one of the most useful ways I’ve found to stress-test a design before putting it in front of real users.
A synthetic user is a constrained AI decision agent embedded in a controlled simulation framework.
It is not just a profile. It is a structured behavioral model with:
It operates only within what is defined and cannot compensate for ambiguity, missing signals, or structural gaps in the interface.
A synthetic user is not:
A synthetic user interacts strictly with what is visible in the interface and nothing more. It does not infer intent, fill gaps, or compensate for ambiguity. When the path forward is unclear, it hesitates. That hesitation is not failure. It is the signal that reveals structural friction.
.avif)
If you want this to be more than “ChatGPT pretending to be someone,” you need structure. You must define:
Synthetic users don’t validate whether something “works.” What they actually do is expose where a design forces users to interpret instead of confirming things explicitly. They surface structural ambiguity that often goes unnoticed in internal reviews and help distinguish between friction that affects everyone and friction that only impacts less experienced users.
In practice, they make design discussions more concrete because you’re no longer debating opinions, you’re observing constrained behavior. They don’t replace usability testing, but they significantly improve how prepared you are before running it.
If you want to try it today:
If the synthetic user never hesitates, your constraints are too weak
I’ve pulled together the exact resources I use:
Agent-based simulation is not a new idea.
What is still underdeveloped is how to apply it in a structured, practical way inside UX workflows. There is no widely adopted standard yet. No clear implementation pattern most teams follow.
What I’m sharing here is not an academic breakthrough. It’s a working implementation.
It can evolve. It can scale into automation.
But even in its current form, it has helped me detect structural friction before running formal usability testing, that alone makes it worth exploring.
No blogs matched this category, try applying different filters.