<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: László Csiki</title>
    <description>The latest articles on DEV Community by László Csiki (@lcssgml).</description>
    <link>https://dev.to/lcssgml</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3252221%2Fa7cf7e0f-c4db-4dbf-a387-40d3370d1885.png</url>
      <title>DEV Community: László Csiki</title>
      <link>https://dev.to/lcssgml</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lcssgml"/>
    <language>en</language>
    <item>
      <title>AI Prototyping That Actually Ships</title>
      <dc:creator>László Csiki</dc:creator>
      <pubDate>Mon, 29 Dec 2025 11:58:58 +0000</pubDate>
      <link>https://dev.to/lcssgml/ai-prototyping-that-actually-ships-29ij</link>
      <guid>https://dev.to/lcssgml/ai-prototyping-that-actually-ships-29ij</guid>
      <description>&lt;h2&gt;
  
  
  INTRO
&lt;/h2&gt;

&lt;p&gt;We build mobile and web products for clients - design, PM, QA, and dev teams working together.&lt;/p&gt;

&lt;p&gt;This year we started exploring AI tools seriously. We wanted to see what fits our workflow and what's just hype. Ran experiments, broke a few things, learned a lot.&lt;/p&gt;

&lt;p&gt;This is the first in a series sharing what we found. This post covers prototyping.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AI prototyping tools generate code you can't use - their patterns don't match your architecture&lt;/li&gt;
&lt;li&gt;Converting React to Angular doesn't work - you get Angular syntax with React patterns&lt;/li&gt;
&lt;li&gt;The fix: Claude Code with custom agents that follow your standards&lt;/li&gt;
&lt;li&gt;Result: Non-technical team members create prototypes that developers can actually ship&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Our PMs and designers explored AI prototyping tools like Figma Make, Firebase Studio, Replit. They were excited, we were excited.&lt;/p&gt;

&lt;p&gt;Then we looked at the code...&lt;/p&gt;

&lt;p&gt;We were wrong, 90% of it was rewritten anyway. The prototypes looked great in demos, but they were useless in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Here's what nobody tells you about AI-generated prototypes: the code isn't bad, it's just not your code.&lt;/p&gt;

&lt;p&gt;Figma Make generates React, but we use Angular with signals. Firebase Studio also generates React... But where are the tools for generating Flutter?&lt;/p&gt;

&lt;p&gt;These tools work exactly as advertised - they just don't work for us.&lt;br&gt;
We tried to convert the generated code to our stack using AI. React to Angular, React to Flutter respecting our architecture, however the result was terrible...&lt;/p&gt;

&lt;p&gt;AI conversion loses architectural intent - you end up with Angular syntax but React patterns. It's like translating a book word-by-word: technically accurate, completely unreadable. We spent more time fixing converted code than writing from scratch.&lt;/p&gt;

&lt;p&gt;It's like ordering a burger and getting a salad. Both are food, but neither is what you asked for, right?&lt;/p&gt;
&lt;h2&gt;
  
  
  The Real Issue
&lt;/h2&gt;

&lt;p&gt;The problem isn't the AI tools, they're doing their job. The problem is expecting generic tools to understand specific architecture.&lt;/p&gt;

&lt;p&gt;Our Angular apps use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standalone components with signals&lt;/li&gt;
&lt;li&gt;Flat folder structure (never nested components)&lt;/li&gt;
&lt;li&gt;Modern template syntax (&lt;code&gt;@if&lt;/code&gt;, &lt;code&gt;@for&lt;/code&gt;, not &lt;code&gt;*ngIf&lt;/code&gt;, &lt;code&gt;*ngFor&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Specific state management patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our Flutter apps use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BLoC pattern with clean architecture&lt;/li&gt;
&lt;li&gt;Specific folder structure&lt;/li&gt;
&lt;li&gt;Our design system tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No generic AI tool knows this - why would it?&lt;/p&gt;
&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;Here's what actually worked for us: &lt;strong&gt;teach the AI our rules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And here comes &lt;strong&gt;Claude Code&lt;/strong&gt; in the picture, which lets you create custom agents - instruction files that tell the AI exactly how to generate code using our architecture, our patterns and our folder structure.&lt;/p&gt;

&lt;p&gt;We built two prototyper agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;flutter-prototyper&lt;/code&gt; - knows our Flutter architecture&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;angular-prototyper&lt;/code&gt; - knows our Angular architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we wrapped them in a single command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/prototype fitness app with dashboard and workout tracking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. A PM runs one command, picks Flutter or Angular, describes what they want, and gets a working prototype that follows our standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The agent knows our rules because we documented them. It reads our architecture file, understands our patterns, and generates code accordingly.&lt;/p&gt;

&lt;p&gt;Here's the simplified structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# flutter-prototyper agent&lt;/span&gt;

You generate Flutter prototypes following our standards:
&lt;span class="p"&gt;-&lt;/span&gt; Use BLoC pattern for state management
&lt;span class="p"&gt;-&lt;/span&gt; Follow our folder structure
&lt;span class="p"&gt;-&lt;/span&gt; Apply our design tokens
&lt;span class="p"&gt;-&lt;/span&gt; Generate mock data with TODO markers for API integration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The slash command handles the user experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/prototype [description]
→ Choose: Flutter or Angular?
→ Agent generates working app
→ Preview opens in browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Non-technical team members don't see the complexity - they see one command and a working app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making It Friendly
&lt;/h2&gt;

&lt;p&gt;Our designers and project managers aren't technical, and they shouldn't have to be.&lt;/p&gt;

&lt;p&gt;The whole process had to be simple. We simplified it to four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single entry point&lt;/strong&gt; - &lt;code&gt;/prototype&lt;/code&gt;, not &lt;code&gt;/flutter-prototype&lt;/code&gt; or &lt;code&gt;/angular-prototype&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framework choice as a question&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile-first preview&lt;/strong&gt; - prototypes display at phone proportions in the browser in the case of Flutter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero setup required&lt;/strong&gt; - everything installs and runs automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last point was critical. A non-technical person shouldn't see "Flutter SDK not found" and have to figure out what that means.&lt;/p&gt;

&lt;p&gt;The agents handle it automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-install dependencies&lt;/strong&gt; - Missing Flutter SDK? It installs via Homebrew. No Node.js? Same thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-run preview&lt;/strong&gt; - After generation, the app launches in Chrome immediately. No "now run this command" instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-fix common errors&lt;/strong&gt; - Port 4200 busy? It switches to 4201. Build failed? It tries &lt;code&gt;flutter clean&lt;/code&gt; or &lt;code&gt;npm install&lt;/code&gt; and retries. Dependencies missing? It fetches them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The user sees: "Creating your prototype... Starting preview..." and then a working app in their browser. They don't see the twenty or more things that happened behind the scenes to make that work.&lt;/p&gt;

&lt;p&gt;One more detail about the mobile-first preview: Flutter web apps expand to fill the browser window, and that's not what a mobile app looks like. We added a viewport wrapper that constrains the prototype to phone dimensions (430px), so reviewers see exactly what the app looks like on a device.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MobileViewport&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Constrains app to 430px width (iPhone 14 Pro Max)&lt;/span&gt;
  &lt;span class="c1"&gt;// Adds phone-like frame for visual clarity&lt;/span&gt;
  &lt;span class="c1"&gt;// Does nothing on actual mobile devices&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;What changed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prototypes are starting points, not throwaway demos.&lt;/strong&gt; Developers extend the generated code instead of rewriting it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-technical team members understand the structure.&lt;/strong&gt; They see the same folders and patterns that production code uses, which makes handoff conversations much easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster client feedback.&lt;/strong&gt; Prototypes go from idea to shareable demo in minutes, not days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less frustration on both sides.&lt;/strong&gt; Designers feel productive, and developers don't feel like they're cleaning up messes.&lt;/p&gt;

&lt;p&gt;The code still needs work before production, sure, but it has the right foundation - not a completely different architecture that needs translation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing Prototypes
&lt;/h2&gt;

&lt;p&gt;Last thing is deploying prototypes, because why not? A prototype nobody can see is useless. Clients and stakeholders need URLs, not "run this command in your terminal".&lt;/p&gt;

&lt;p&gt;We added a deployment command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/prototype-deploy firebase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The command detects whether it's Angular or Flutter, builds the project, creates a Firebase Hosting site, and gives you a shareable URL like &lt;code&gt;my-prototype-a3f2.web.app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Each prototype gets its own unique URL on a shared Firebase project. Redeploy from the same folder and the URL stays the same - perfect for iteration cycles with clients.&lt;/p&gt;

&lt;p&gt;We're still fine-tuning this part. The current version handles Firebase well, but we're exploring Vercel integration and possibly other hosting options. The goal is always the same: one command, shareable URL, zero configuration for the person running it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The tools don't need to change - our expectations do. Generic AI generates generic code, but custom AI generates custom code.&lt;/p&gt;

&lt;p&gt;Those tools are good - they're just not for us. I wanted to point out that there are other possibilities when the generic approach doesn't fit your workflow.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>prototyping</category>
      <category>flutter</category>
      <category>angular</category>
    </item>
  </channel>
</rss>
