<?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: AQnorman</title>
    <description>The latest articles on DEV Community by AQnorman (@aqnorman).</description>
    <link>https://dev.to/aqnorman</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%2F977263%2F1615ccb4-3bf7-4b7f-89d2-ab2746340cc9.png</url>
      <title>DEV Community: AQnorman</title>
      <link>https://dev.to/aqnorman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aqnorman"/>
    <language>en</language>
    <item>
      <title>The Vibe Coding Trap: I Let an AI Agent Refactor My Next.js Codebase and It Was a Catastrophe</title>
      <dc:creator>AQnorman</dc:creator>
      <pubDate>Wed, 24 Dec 2025 11:34:49 +0000</pubDate>
      <link>https://dev.to/aqnorman/the-vibe-coding-trap-i-let-an-ai-agent-refactor-my-nextjs-codebase-and-it-was-a-catastrophe-4hj3</link>
      <guid>https://dev.to/aqnorman/the-vibe-coding-trap-i-let-an-ai-agent-refactor-my-nextjs-codebase-and-it-was-a-catastrophe-4hj3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8414ggz54y51dxww1hvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8414ggz54y51dxww1hvn.png" alt="The Vibe Coding Trap" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI promised clean, modern patterns. It delivered a fragile, unmaintainable monster. This is the hidden cost of being a passenger in your own IDE.
&lt;/h2&gt;

&lt;p&gt;I fell for it.&lt;/p&gt;

&lt;p&gt;I fell for the “Vibe.” You’ve seen the demos: a developer prompts an agent to “modernize the stack,” and within seconds, hundreds of files are rewritten, technical debt vanishes, and the UI looks like a linear-inspired masterpiece.&lt;/p&gt;

&lt;p&gt;I had a Next.js project I’ve been nursing for years. It’s a production app with real users. It was solid, but it had that “written in 2023” smell — lots of useEffect hooks and manual state management.&lt;/p&gt;

&lt;p&gt;Last night, I gave my new Agentic IDE (running a custom Claude 4.5 build) a simple command: &lt;strong&gt;“Refactor the /components directory to use modern React 19 patterns and TanStack Query. Improve performance. Clean up the vibes.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It was the most productive hour of my life. Until it wasn’t.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1: The “Boring” Baseline&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The target was UserProfile.tsx. It wasn’t pretty, but it was battle-tested. It handled the critical logic of switching between profiles on an Admin dashboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Copy&lt;/span&gt;&lt;span class="c1"&gt;// components/UserProfile.tsx - THE ORIGINAL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setUser&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// We intentionally reset and fetch on every userId change&lt;/span&gt;
    &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/users/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- The "Old School" heart of the component&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Skeleton&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2: The Illusion of “Vibe Coding”&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Agent went to work. It replaced my verbose fetch calls with &lt;strong&gt;TanStack Query&lt;/strong&gt;, introduced a clean lib/api.ts layer, and even updated the UI to use the new Next.js 16 &lt;strong&gt;use cache&lt;/strong&gt; directive for secondary data.&lt;/p&gt;

&lt;p&gt;The diff was beautiful. It looked like the code of a Senior Staff Engineer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Copy&lt;/span&gt;&lt;span class="c1"&gt;// components/UserProfile.tsx - THE AI "UPGRADE"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useQuery&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tanstack/react-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getUser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/lib/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Clean, declarative, and utterly broken.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
    &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Skeleton&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tests passed. The linter was green. I merged it. I felt like a “Product Architect” who had successfully delegated the “grunt work.”&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Part 3: The Slow-Motion Train Wreck&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The bug reports started trickling in Friday morning.&lt;br&gt;&lt;br&gt;
&lt;em&gt;“The Admin panel is showing the same user info no matter who I click on.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I opened the app. I clicked User A: &lt;strong&gt;John Doe.&lt;/strong&gt; I clicked User B: &lt;strong&gt;John Doe.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
My stomach dropped. I saw it instantly.&lt;/p&gt;

&lt;p&gt;The AI, in its pursuit of “clean code,” had hallucinated a static query key: queryKey: [‘user’].&lt;/p&gt;

&lt;p&gt;In the 2025 Agentic era, we call this &lt;strong&gt;“Semantic Hallucination.”&lt;/strong&gt; The AI understood what a query key &lt;em&gt;was&lt;/em&gt;, but it didn’t understand the &lt;strong&gt;intent&lt;/strong&gt; of the component. It saw “User Profile” and assumed a singular, global user context. It missed the fact that userId was a dynamic dependency.&lt;/p&gt;

&lt;p&gt;The original “ugly” useEffect with its [userId] array wasn’t technical debt; &lt;strong&gt;it was documentation of intent.&lt;/strong&gt; The AI had optimized the intent right out of the codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Part 4: From Passenger to Pilot (The Recovery)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I spent the next four hours manually auditing every “modernized” component. I found three more instances where the AI had simplified complex logic into “clean” code that broke edge cases — specifically around Next.js &lt;strong&gt;Server Actions&lt;/strong&gt; and &lt;strong&gt;Parallel Routes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;Architect’s Recovery Plan&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context is a Shared Responsibility:&lt;/strong&gt; The AI failed because I didn’t give it the “Why.” In 2025, if you aren’t using &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; to feed your agent your Jira tickets or documentation alongside your code, you’re playing Russian Roulette.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The “Vibe” is a Lie:&lt;/strong&gt; Clean code that doesn’t work is just high-quality garbage. We are moving from an era of &lt;em&gt;writing&lt;/em&gt; code to an era of &lt;em&gt;reviewing&lt;/em&gt; code. Reviewing is actually &lt;strong&gt;harder&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Architect-Approved Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Copy&lt;/span&gt;&lt;span class="c1"&gt;// The Fix: Teaching the Agent about Dependency &lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// The "Architect" knows this is the identity&lt;/span&gt;
    &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;staleTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Adding constraints the AI missed&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;The New Reality&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I didn’t stop using the AI. That would be like a pilot going back to paper maps because the autopilot glitched.&lt;/p&gt;

&lt;p&gt;But I did change my role. I no longer “prompt and pray.” I treat the AI as a high-speed intern. I use the &lt;strong&gt;Next.js DevTools MCP&lt;/strong&gt; to let the agent see the running state so it can witness its own failures in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson?&lt;/strong&gt; In the era of Vibe Coding, the most important skill isn’t knowing how to use TanStack Query. It’s knowing exactly why your “ugly” code worked in the first place.&lt;/p&gt;

&lt;p&gt;Don’t let the vibes fool you. Stay in the cockpit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— The field report continues. Follow for more dispatches from the front lines of AI-powered development. —&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>vibecoding</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Mentabyte.app | Voice Driven Coding Platform</title>
      <dc:creator>AQnorman</dc:creator>
      <pubDate>Thu, 03 Jul 2025 03:26:26 +0000</pubDate>
      <link>https://dev.to/aqnorman/mentabyteapp-voice-driven-coding-platform-1am0</link>
      <guid>https://dev.to/aqnorman/mentabyteapp-voice-driven-coding-platform-1am0</guid>
      <description>&lt;p&gt;Recently I just participated in Bolt's World's Largest Hackathon. The name Mentabyte came from Mentor + Byte. I had a great idea but not too complex and unique. An AI powered coding and learning platform.&lt;/p&gt;

&lt;p&gt;Preview Link - &lt;a href="https://mentabyte.app" rel="noopener noreferrer"&gt;https://mentabyte.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bolt Hackathon | Here Comes Mentabyte&lt;/strong&gt;&lt;br&gt;
The rise of AI-powered learning tools inspired me to build something tailored specifically for coders and programmers — a platform where AI doesn't just assist but mentors. I envisioned Mentabyte as a personal AI coding coach that grows with the learner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mentabyte helps developers enhance their coding skills through:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Daily personalized coding challenges&lt;br&gt;
AI-generated feedback with voice responses&lt;br&gt;
Conversational mentoring via Tavus&lt;br&gt;
Progress tracking and improvement suggestions&lt;br&gt;
It’s not just about solving problems — it's about growing as a programmer through real-time AI interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next for Mentabyte&lt;/strong&gt;&lt;br&gt;
Mentabyte is just getting started. Future plans include:&lt;/p&gt;

&lt;p&gt;Expanding challenge types (debugging, code improvement, system design)&lt;br&gt;
Adding user profiles and streak-based motivation&lt;br&gt;
Real-time AI feedback loops with voice, video, and code diffs&lt;br&gt;
Launching mobile support for coding on the go&lt;br&gt;
Implementing Voice First Coding Feature&lt;br&gt;
Learning Section to be added (now it is not just a coding platform)&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/45bAso5Tp8M"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>bolt</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
