<?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: Aleksey Suvorov</title>
    <description>The latest articles on DEV Community by Aleksey Suvorov (@nekutuzov).</description>
    <link>https://dev.to/nekutuzov</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4144938%2F0d253774-3ee2-4591-bf68-b62aae94c59d.png</url>
      <title>DEV Community: Aleksey Suvorov</title>
      <link>https://dev.to/nekutuzov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nekutuzov"/>
    <language>en</language>
    <item>
      <title>I asked an AI agent to test my framework. It found the bugs I couldn't see, then built me a debugger.</title>
      <dc:creator>Aleksey Suvorov</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:55:02 +0000</pubDate>
      <link>https://dev.to/nekutuzov/i-asked-an-ai-agent-to-test-my-framework-it-found-the-bugs-i-couldnt-see-then-built-me-a-2c2d</link>
      <guid>https://dev.to/nekutuzov/i-asked-an-ai-agent-to-test-my-framework-it-found-the-bugs-i-couldnt-see-then-built-me-a-2c2d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part 3. &lt;a href="https://dev.to/nekutuzov/your-vibe-coded-mvp-works-now-make-it-something-an-ai-agent-can-keep-building-i0a"&gt;Part 1&lt;/a&gt; is about converting vibe-coded MVPs. &lt;a href="https://dev.to/nekutuzov/how-a-struggling-react-project-and-an-old-delphi-habit-led-me-to-build-a-framework-1a09"&gt;Part 2&lt;/a&gt; is the origin story.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My first TypeScript project was a mess
&lt;/h2&gt;

&lt;p&gt;UECA-React was my first real TypeScript work. A year or so after the first version, I looked at it critically. It worked, but it was functionality piled in a heap. Bindings, low-level MobX plumbing, things that should never leak into a business application. My teammates couldn't follow it, and I started hitting bugs I couldn't fix without restructuring. So I rewrote it into proper classes. That was version 2.&lt;/p&gt;

&lt;p&gt;It was better, but I still had a problem: the only person who really understood the failure modes was me.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Can you cover this with tests?"
&lt;/h2&gt;

&lt;p&gt;By then I was using Claude Code with Opus 5. I had a few integration tests, written by hand, but little time for more. So I asked the agent to cover the framework with tests.&lt;/p&gt;

&lt;p&gt;It read the code, wrote documentation of how it works, noticed my test style, and started writing tests the same way: tiny UECA applications, with an application component at the root and test components plugged in.&lt;/p&gt;

&lt;p&gt;And it started finding bugs. A lot of them. The framework worked in normal situations. In abnormal ones, bindings didn't fire, events were skipped. A framework like this is a complicated state machine, and one human brain can't cover all its transitions. The agent fixed what it found, and the fixing produced new ideas.&lt;/p&gt;

&lt;p&gt;Coverage is now above 90%. This is what became &lt;strong&gt;version 3.0&lt;/strong&gt;: mistakes that used to be logged and dropped now throw and reach a single error handler, and &lt;code&gt;React.StrictMode&lt;/code&gt; is supported.&lt;/p&gt;

&lt;h2&gt;
  
  
  The debugger I always wanted
&lt;/h2&gt;

&lt;p&gt;I had known for years that a visual trace viewer could be built, but never had the time. The agent saw my tracing system, improved it to carry more useful information, and built the viewer: component tree, message bus traffic, bindings, with stop and playback.&lt;/p&gt;

&lt;p&gt;I didn't write a line of it. It comes straight out of the architecture, because everything in a UECA app is the same kind of component, so everything can be traced the same way.&lt;/p&gt;

&lt;p&gt;Even if an AI writes the whole application, you can open the viewer and see whether the architecture is right: components created when they shouldn't be, messages flying where you didn't expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  A plot twist
&lt;/h2&gt;

&lt;p&gt;I first asked the agent to write the viewer in plain React, deliberately. Then I had it rewrite the viewer in UECA-React, the framework the viewer inspects. I measured both versions. The UECA one was faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does architecture still matter?
&lt;/h2&gt;

&lt;p&gt;Honestly, I don't know. Future models may write raw low-level React from scratch, and nobody will be able to check it by eye or care. We are already at the point where reading all the generated code isn't realistic.&lt;/p&gt;

&lt;p&gt;But if there's a chance to take a step toward a better architecture, I think it's worth taking. Same shape everywhere, predictable behavior, an agent that can't drift because the pattern leaves no room to. That's the bet UECA-React makes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/ueca-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/ueca-react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Architecture and ideas, explained in an app built with UECA-React itself: &lt;a href="https://nekutuzov.github.io/ueca-react-website-public/" rel="noopener noreferrer"&gt;https://nekutuzov.github.io/ueca-react-website-public/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do you let agents write most of your code? What's the thing that breaks first?&lt;/p&gt;

</description>
      <category>react</category>
      <category>ai</category>
      <category>testing</category>
      <category>typescript</category>
    </item>
    <item>
      <title>How a struggling React project and an old Delphi habit led me to build a framework</title>
      <dc:creator>Aleksey Suvorov</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:46:03 +0000</pubDate>
      <link>https://dev.to/nekutuzov/how-a-struggling-react-project-and-an-old-delphi-habit-led-me-to-build-a-framework-1a09</link>
      <guid>https://dev.to/nekutuzov/how-a-struggling-react-project-and-an-old-delphi-habit-led-me-to-build-a-framework-1a09</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part 2. &lt;a href="https://dev.to/nekutuzov/your-vibe-coded-mvp-works-now-make-it-something-an-ai-agent-can-keep-building-i0a"&gt;Part 1&lt;/a&gt; shows how to turn a vibe-coded MVP into something an AI agent can keep extending. Here is where UECA-React came from.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A project in trouble
&lt;/h2&gt;

&lt;p&gt;In 2022 my company was rewriting a legacy web app: .NET Core on the server, React with Blueprint.js and MobX on the client. We are a small team. No dedicated designer, no business analyst.&lt;/p&gt;

&lt;p&gt;I was on other projects and watched from the side. After a year of work, the code looked like a pile of low-level React with props drilled everywhere, and every developer had their own idea of how to build a layout. I could see it wasn't going to fly. I was worried the project would be shut down and the team cut.&lt;/p&gt;

&lt;p&gt;So I decided to help.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Delphi habit
&lt;/h2&gt;

&lt;p&gt;I'm not a web developer by background. I grew up on Delphi, which I first saw in 1995. What struck me then was how clear frontend development could be: a component has properties, events and a visual part, and you build applications from them.&lt;/p&gt;

&lt;p&gt;Even in Delphi I never wrote low-level code. I built reusable building blocks first and assembled applications from them. One more idea came from my old report-writer IDE: a &lt;strong&gt;message bus&lt;/strong&gt;. A component shouldn't know who answers it, only that someone will. Picture a loud party where someone shouts "turn the music down!" The shouter doesn't know who is at the stereo, but the music gets quieter.&lt;/p&gt;

&lt;p&gt;I spent a few months learning JavaScript, TypeScript, HTML and CSS properly. Then it clicked: with TypeScript's literal types you can generate things like &lt;code&gt;onChange&lt;/code&gt; events for every property automatically. A component could be a black box with state, events, methods, children and a view, and every component could look the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rails
&lt;/h2&gt;

&lt;p&gt;I wrote the first version and showed it to the team. Developers are conservative, and they were wary. But the pattern leaves little room for improvisation. You write it the way the documentation says, like riding on rails.&lt;/p&gt;

&lt;p&gt;After a couple of screens, the speed difference was obvious. Within a few months the team was rewriting those tangled screens on their own. The project was saved, and so were the jobs. Everyone still works there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The name and the first AI help
&lt;/h2&gt;

&lt;p&gt;The name, &lt;em&gt;Unified Encapsulated Component Architecture&lt;/em&gt;, came from ChatGPT, which also helped me write the first documentation. I had designed the pattern with machine-generated code in mind before ChatGPT even existed. When models got good enough, the idea simply worked. I wrapped MUI components with Copilot, then moved to Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The most surprising chapter was version 3.0, when an AI agent found bugs in my own code, wrote the tests, and built the framework's trace viewer. That's the next post.&lt;/p&gt;

&lt;p&gt;In the meantime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/ueca-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/ueca-react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Architecture and ideas, explained in an app built with UECA-React itself: &lt;a href="https://nekutuzov.github.io/ueca-react-website-public/" rel="noopener noreferrer"&gt;https://nekutuzov.github.io/ueca-react-website-public/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>architecture</category>
      <category>ai</category>
    </item>
    <item>
      <title>Your vibe-coded MVP works. Now make it something an AI agent can keep building.</title>
      <dc:creator>Aleksey Suvorov</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:31:45 +0000</pubDate>
      <link>https://dev.to/nekutuzov/your-vibe-coded-mvp-works-now-make-it-something-an-ai-agent-can-keep-building-i0a</link>
      <guid>https://dev.to/nekutuzov/your-vibe-coded-mvp-works-now-make-it-something-an-ai-agent-can-keep-building-i0a</guid>
      <description>&lt;p&gt;You asked an AI for an app and got a working prototype: one HTML file, some dashboard, maybe a 3D model you can spin around. It's impressive.&lt;/p&gt;

&lt;p&gt;Then you ask for the next feature, and the agent breaks two old ones.&lt;/p&gt;

&lt;p&gt;This is the usual end of a vibe-coded MVP. Everything lives in one pile, with no real architecture. As the code grows, the agent's context fills up, it gets confused, and every change becomes a gamble. A human can't easily make sense of it either.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: give the prototype a skeleton
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;UECA-React&lt;/strong&gt;, a React framework designed for AI agents. Every component has exactly the same shape: a &lt;code&gt;struct&lt;/code&gt; (props, events, methods, children, lifecycle), a model hook, and a functional component. At every level of the app, top or bottom, the structure is identical.&lt;/p&gt;

&lt;p&gt;That uniformity is what helps the agent. It doesn't need your whole codebase in its head, because once it has seen one component, it has seen the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to convert an MVP
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the agent skills that ship inside the package:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install &lt;/span&gt;ueca-react
   npx ueca-react-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Give your agent the prototype and say:&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Rewrite this app using UECA-React.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Keep developing from there.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my experience the rewrite looks nearly identical on screen, but underneath you now have a real project: components composed into screens, a barebone app structure to build on, and a message bus that abstracts the API, so the agent works only with components and their interactions.&lt;/p&gt;

&lt;p&gt;From that point, adding features is incremental. No rabbit holes, no collateral damage.&lt;/p&gt;

&lt;h2&gt;
  
  
  And you can see what it built
&lt;/h2&gt;

&lt;p&gt;Add &lt;code&gt;&amp;lt;UECA.TraceViewerButton /&amp;gt;&lt;/code&gt; to your app root to open a live view of the component tree, the message bus, and every binding. Even if an agent wrote all the code, you can check the architecture without reading it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/ueca-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/ueca-react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Architecture and ideas, explained in an app built with UECA-React itself: &lt;a href="https://nekutuzov.github.io/ueca-react-website-public/" rel="noopener noreferrer"&gt;https://nekutuzov.github.io/ueca-react-website-public/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll share the origin story in the next post: how a legacy-app rescue and an old Delphi habit led to this framework.&lt;/p&gt;

&lt;p&gt;Have a vibe-coded prototype stuck at "works, but can't grow"? Tell me in the comments what it is.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>react</category>
    </item>
  </channel>
</rss>
