<?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>Forem: Mesut Özsoy</title>
    <description>The latest articles on Forem by Mesut Özsoy (@mfelat).</description>
    <link>https://forem.com/mfelat</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%2F3711686%2Fb51c3eae-a5f3-40bc-a75c-07c48784e021.png</url>
      <title>Forem: Mesut Özsoy</title>
      <link>https://forem.com/mfelat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mfelat"/>
    <language>en</language>
    <item>
      <title>I’m Building Landing Pages in ~20 Seconds Now! How vibehtml Changed My Workflow</title>
      <dc:creator>Mesut Özsoy</dc:creator>
      <pubDate>Wed, 14 Jan 2026 22:06:16 +0000</pubDate>
      <link>https://forem.com/mfelat/im-building-landing-pages-in-20-seconds-now-how-vibehtml-changed-my-workflow-c3j</link>
      <guid>https://forem.com/mfelat/im-building-landing-pages-in-20-seconds-now-how-vibehtml-changed-my-workflow-c3j</guid>
      <description>&lt;h2&gt;
  
  
  I’m Building Landing Pages in ~20 Seconds Now (Yep) — How vibehtml Changed My Workflow
&lt;/h2&gt;

&lt;p&gt;I’ve been tinkering with &lt;strong&gt;vibehtml&lt;/strong&gt; for a while, and I still catch myself doing a double take when it spits out a decent landing page before I’ve even finished my coffee.&lt;/p&gt;

&lt;p&gt;If you’ve built a “simple” landing page in 2026, you know the trap: you start with good intentions and end up bootstrapping an entire small universe.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create-next-app&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tailwind config&lt;/li&gt;
&lt;li&gt;routing you don’t really need&lt;/li&gt;
&lt;li&gt;builds, bundlers, plugins, “just one more optimization”&lt;/li&gt;
&lt;li&gt;and somehow a &lt;code&gt;node_modules&lt;/code&gt; folder that looks like it’s trying to eat your SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All that… for a page that’s basically a headline, some features, a pricing table, and a CTA.&lt;/p&gt;

&lt;p&gt;At some point I just thought: &lt;strong&gt;why are we doing this to ourselves?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What if landing pages were just… HTML again?
&lt;/h3&gt;

&lt;p&gt;That’s the whole point of vibehtml. Not “HTML-ish.” Not a template system that &lt;em&gt;eventually&lt;/em&gt; becomes HTML.&lt;/p&gt;

&lt;p&gt;Just a &lt;strong&gt;single, plain HTML file&lt;/strong&gt; with &lt;strong&gt;Tailwind classes&lt;/strong&gt; baked in.&lt;/p&gt;

&lt;p&gt;The workflow is almost embarrassingly straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You describe what you want (like: “SaaS landing page with pricing, testimonials, clean and modern”)&lt;/li&gt;
&lt;li&gt;You wait ~20 seconds&lt;/li&gt;
&lt;li&gt;You get &lt;strong&gt;one HTML file&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You open it in a browser, tweak it, ship it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No build step. No framework scaffolding. No dependency drama. Just: &lt;em&gt;here’s the page.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I leaned into the boring solution
&lt;/h3&gt;

&lt;p&gt;For a long time my default answer was “React.” For everything. Even when the thing didn’t really deserve it.&lt;/p&gt;

&lt;p&gt;But most landing pages are static. They don’t need hydration. They don’t need client-side routing. They don’t need a fancy state management setup. They need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;load fast&lt;/li&gt;
&lt;li&gt;look good&lt;/li&gt;
&lt;li&gt;be easy to edit&lt;/li&gt;
&lt;li&gt;not break when a framework updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So vibehtml generates &lt;strong&gt;clean, semantic HTML&lt;/strong&gt; with Tailwind utility classes already in place. If you want to change a headline or spacing? Open it in any editor and do it. If you want a tiny bit of interactivity? Drop in a script tag. You’re not “working against the framework” because there isn’t one.&lt;/p&gt;

&lt;h3&gt;
  
  
  The “vibe coding” part (which is honestly the fun part)
&lt;/h3&gt;

&lt;p&gt;The generation isn’t perfect — nothing is — but it’s surprisingly good at understanding the &lt;em&gt;feel&lt;/em&gt; you’re aiming for.&lt;/p&gt;

&lt;p&gt;I started calling it &lt;strong&gt;vibe coding&lt;/strong&gt; because you’re not describing implementation details. You’re describing the mood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Make it feel premium”&lt;/li&gt;
&lt;li&gt;“Corporate but not soulless”&lt;/li&gt;
&lt;li&gt;“Startup-y, gradients, but don’t make it look like 2018 crypto Twitter”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And somehow it gets close more often than it misses.&lt;/p&gt;

&lt;p&gt;The real win is iteration speed. If you hate the layout, you don’t start rearranging components for an hour. You just regenerate. Twenty seconds later you’re looking at a totally different direction. It’s like rapid prototyping without the part where you slowly lose your will to live.&lt;/p&gt;

&lt;h3&gt;
  
  
  What surprised me while building it
&lt;/h3&gt;

&lt;p&gt;The hardest part wasn’t plugging in AI. The hardest part was &lt;strong&gt;not overengineering the whole thing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every developer instinct kicks in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We should make this a full framework”&lt;/li&gt;
&lt;li&gt;“What about a plugin system?”&lt;/li&gt;
&lt;li&gt;“What if we add a build pipeline?”&lt;/li&gt;
&lt;li&gt;“We could support 12 render targets!”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the whole reason this works is because it stays simple. The output is always the same: &lt;strong&gt;one HTML file you can ship immediately&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I did add an image studio because landing pages are better with visuals, and I put together a components library so you can mix sections without starting from zero. But the core rule didn’t change: &lt;strong&gt;export → one file → done.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Who this is (and isn’t) for
&lt;/h3&gt;

&lt;p&gt;If you’re building something with real app complexity — auth, dashboards, dynamic content, heavy interactivity — you’re probably still going to want a proper framework.&lt;/p&gt;

&lt;p&gt;But for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;marketing pages&lt;/li&gt;
&lt;li&gt;product launches&lt;/li&gt;
&lt;li&gt;portfolio sites&lt;/li&gt;
&lt;li&gt;quick MVP landing pages&lt;/li&gt;
&lt;li&gt;side projects you want to ship &lt;em&gt;this weekend&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…it’s kind of perfect.&lt;/p&gt;

&lt;p&gt;My workflow lately has basically been:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open vibehtml&lt;/li&gt;
&lt;li&gt;type what I want&lt;/li&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;li&gt;throw it on GitHub Pages&lt;/li&gt;
&lt;li&gt;move on with my life&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No config files to babysit. No dependency upgrades. No weird build errors that show up right before you want to deploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you want to play with it
&lt;/h3&gt;

&lt;p&gt;I put it up at &lt;strong&gt;vibehtml.com&lt;/strong&gt; if you’re curious. You can start from templates or just generate something from scratch.&lt;/p&gt;

&lt;p&gt;It’s a funny feeling going “backwards” to plain HTML in 2026 — but honestly, for landing pages, the old way still holds up. We just got distracted by the tooling arms race.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>html</category>
      <category>tailwindcss</category>
    </item>
  </channel>
</rss>
