<?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: Davis George</title>
    <description>The latest articles on DEV Community by Davis George (@zhuanxyz).</description>
    <link>https://dev.to/zhuanxyz</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%2F4234130%2F6c3c66a3-1196-477f-816b-54053fb63eea.png</url>
      <title>DEV Community: Davis George</title>
      <link>https://dev.to/zhuanxyz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhuanxyz"/>
    <language>en</language>
    <item>
      <title>From One Sentence to a Working App: What Vibe Coding Gets Right — and Where It Still Needs You</title>
      <dc:creator>Davis George</dc:creator>
      <pubDate>Mon, 09 Nov 2026 13:40:49 +0000</pubDate>
      <link>https://dev.to/zhuanxyz/from-one-sentence-to-a-working-app-what-vibe-coding-gets-right-and-where-it-still-needs-you-3iam</link>
      <guid>https://dev.to/zhuanxyz/from-one-sentence-to-a-working-app-what-vibe-coding-gets-right-and-where-it-still-needs-you-3iam</guid>
      <description>&lt;p&gt;This week my feed has been full of the same demo: type one sentence — "Design a modern habit tracker app" — and watch a complete app appear. Screens, charts, forms, then production code, then a live backend. No editor open, no dependencies installed, no bill at the end.&lt;/p&gt;

&lt;p&gt;It is a good demo. It is also, like most good demos, only half the story. I spent the weekend taking the prompt-to-app workflow seriously — building a small real app end to end — and the interesting part is not how much the tools can do. It is where they quietly stop, and what you still have to bring.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline that actually works
&lt;/h2&gt;

&lt;p&gt;The modern vibe-coding stack is really four tools chained together, and each one solves a different problem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Design from a sentence.&lt;/strong&gt; A prompt-to-UI tool turns plain English into screens: dashboard, progress charts, forms. You get something clickable in seconds, which is genuinely useful for killing bad ideas fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI to code.&lt;/strong&gt; Export the design into a real codebase — typically React — instead of leaving it as a mockup. This is the step that separates a toy from a starting point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend as a service.&lt;/strong&gt; Auth, database, and hosting from one provider, so the app can store real data without you provisioning anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A coding agent.&lt;/strong&gt; An agent that reads the generated code, wires the pieces together, and iterates when something breaks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When the chain holds, the experience is remarkable: idea on Monday morning, working app with real users by Monday night. The tools are free to start with, which is why the demos spread so fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked example: the habit tracker
&lt;/h2&gt;

&lt;p&gt;Here is the prompt I started with — specific enough to be useful, vague enough to test the tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Design a modern habit tracker app. Home screen with today's habits,
a weekly progress chart, streak counters, and an add-habit form.
Dark theme, mobile-first, calm colors.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The design tool returned five screens in under a minute. The export produced a React app with components, routing, and state already wired. So far, so magical.&lt;/p&gt;

&lt;p&gt;Then I asked the coding agent to connect it to a real backend, and that is where the demo ended. The generated code had no auth, no data model, and placeholder data hard-coded into the components. Getting it to production meant writing the boring parts myself — starting with security rules, because a database with no rules is a public database:&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;rules_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firestore&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;database&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/documents &lt;/span&gt;&lt;span class="err"&gt;{
&lt;/span&gt;    &lt;span class="c1"&gt;// Users can only read and write their own habits&lt;/span&gt;
    &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;habits&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;habitId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;allow&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&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;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;resource&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="nx"&gt;ownerId&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is ten lines, and no demo shows them — but they are the difference between an app and a liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the demo breaks
&lt;/h2&gt;

&lt;p&gt;After a weekend of this, four failure modes kept repeating:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The code looks finished before it is.&lt;/strong&gt; Generated components are clean and convincing, and they hide missing error handling, unvalidated inputs, and hard-coded values. Read every file before you trust it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The data model is an afterthought.&lt;/strong&gt; A habit tracker is easy until you ask: what happens when a user deletes a habit mid-streak? What does "weekly progress" mean across time zones? The tool will not ask these questions. You have to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The agent invents APIs.&lt;/strong&gt; Ask for a feature the backend does not support and the agent may confidently call a function that does not exist. Type-checking and a test run catch this in minutes; skipping them costs hours later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. There are no tests.&lt;/strong&gt; Generated apps ship with zero tests. One small test file for the core logic — streak calculation, in my case — catches the regressions the agent introduces while "fixing" things.&lt;/p&gt;

&lt;p&gt;None of this is a reason to dismiss the tools. It is the reason to use them like a senior developer uses a junior developer: fast, tireless, and in need of review.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist that makes vibe coding production-safe
&lt;/h2&gt;

&lt;p&gt;Before I ship anything built this way, it has to pass five checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I can explain the data model in one paragraph.&lt;/strong&gt; If I cannot, the app is not ready.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth and database rules are written by hand&lt;/strong&gt;, not generated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every generated file has been read&lt;/strong&gt;, not just run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core logic has at least one test.&lt;/strong&gt; Streaks, totals, billing math — whatever the app cannot afford to get wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets live in environment variables&lt;/strong&gt;, never in generated code or committed files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That list takes about an hour on a small app. It is the hour that turns a demo into software.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verdict
&lt;/h2&gt;

&lt;p&gt;Vibe coding is real, and it is not going away. The right mental model is not "AI replaces developers" — it is "the cost of a first draft just fell to near zero." First drafts were never the hard part of software. Decisions were: what to build, what the data means, what can go wrong, and who is responsible when it does.&lt;/p&gt;

&lt;p&gt;Those decisions are still yours. The tools just give you more time to make them well — if you spend the time you saved on review instead of on shipping faster.&lt;/p&gt;

&lt;p&gt;Build the demo. Then do the hour of real engineering. That is the whole workflow.&lt;/p&gt;

&lt;p&gt;— Davis George · zhuan.xyz&lt;/p&gt;

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