<?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: Throttle Bird</title>
    <description>The latest articles on DEV Community by Throttle Bird (@throttlebird).</description>
    <link>https://dev.to/throttlebird</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%2F4192410%2F9c1d865f-de1b-4d4b-a903-e5b185a2b2c4.jpg</url>
      <title>DEV Community: Throttle Bird</title>
      <link>https://dev.to/throttlebird</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/throttlebird"/>
    <language>en</language>
    <item>
      <title>I ran a free launch check on 34 vibe-coded apps shared this week. Here's what I found.</title>
      <dc:creator>Throttle Bird</dc:creator>
      <pubDate>Sat, 24 Oct 2026 22:54:53 +0000</pubDate>
      <link>https://dev.to/throttlebird/i-ran-a-free-launch-check-on-34-vibe-coded-apps-shared-this-week-heres-what-i-found-1b3n</link>
      <guid>https://dev.to/throttlebird/i-ran-a-free-launch-check-on-34-vibe-coded-apps-shared-this-week-heres-what-i-found-1b3n</guid>
      <description>&lt;p&gt;Every day on X, people share apps they just built with Lovable, Base44, Bolt or Cursor. I wanted to know what those apps look like from the outside on the day they're shared, so this week I ran our free Throttle Bird check on 34 of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm not naming any app, and I never will.&lt;/strong&gt; Everything below is totals. If you built one of these apps, nobody can tell from this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I checked &lt;strong&gt;34 live apps&lt;/strong&gt; that their makers shared publicly on X between Oct 20 and Oct 24, 2026. Most were built with Lovable or Base44. 15 were on a lovable.app address, 11 on a base44.app address, and 8 on their own domain.&lt;/li&gt;
&lt;li&gt;The good news first: &lt;strong&gt;none&lt;/strong&gt; had a secret key sitting in the page, and &lt;strong&gt;none&lt;/strong&gt; had a database that answered a stranger.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100%&lt;/strong&gt; were missing basic browser safety settings (called "security headers").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;85%&lt;/strong&gt; had no sitemap and &lt;strong&gt;79%&lt;/strong&gt; didn't tell Google which address is the real one, so new visitors from search will have a hard time finding them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;47%&lt;/strong&gt; had a first load that was slower than it should be.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;29%&lt;/strong&gt; had missing or incomplete social preview tags, so a shared link can show up blank.&lt;/li&gt;
&lt;li&gt;Grades: &lt;strong&gt;8 B's, 23 C's, 3 D's, no A's.&lt;/strong&gt; The typical app had &lt;strong&gt;4&lt;/strong&gt; things to fix, and most of them take one prompt to your builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two more apps I picked were already offline when I checked, so I left them out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters on launch day
&lt;/h2&gt;

&lt;p&gt;None of this means these apps are bad. Most of them are genuinely cool, and a C here usually means a handful of boring settings nobody told the maker about. But launch day is when strangers show up for the first time, and it's also when a missing setting is most likely to cost you a visitor, a signup, or a bad first impression.&lt;/p&gt;

&lt;p&gt;Here's what each one means and what to paste into your builder to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Security headers (every app was missing them)
&lt;/h2&gt;

&lt;p&gt;Security headers are short instructions your site sends to the browser, like "don't let other sites put my page inside a frame" or "only load scripts from places I trust." Visitors never see them, but they close the door on whole kinds of attacks. Builder tools almost never add them for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add standard security headers to every page of my site: Content-Security-Policy
(start with a policy that allows my current scripts, fonts and images),
Strict-Transport-Security, X-Content-Type-Options: nosniff,
Referrer-Policy: strict-origin-when-cross-origin, and a frame-ancestors rule so
other sites can't put my pages in a frame. Use my hosting platform's headers
config. Then tell me in plain English what each one does and check nothing on
the site broke.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some builder hosting doesn't let you set these yourself yet. If yours doesn't, it's worth asking their support, or connecting your own domain through a host that lets you add headers. We have a longer guide here: &lt;a href="https://throttlebird.com/blog/how-to-add-security-headers-to-your-vibe-coded-app" rel="noopener noreferrer"&gt;how to add security headers to your vibe-coded app&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Google can't find you easily (85% had no sitemap)
&lt;/h2&gt;

&lt;p&gt;A sitemap is a list of your public pages that Google reads. A canonical tag is a hidden line on each page that says "this is the real address." Without them, a brand-new app with few links can take weeks to show up in search, or show up under the wrong address.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a sitemap.xml at the root of my site that lists every public page with
its full https address on my real domain, and a robots.txt that allows search
engines and points to the sitemap. Add a canonical link tag to every page that
points to that page's own main https address. Leave out login, dashboard and
account pages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want the full walkthrough, read &lt;a href="https://throttlebird.com/blog/why-is-my-vibe-coded-app-not-on-google" rel="noopener noreferrer"&gt;why your vibe-coded app isn't on Google&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A slow first load (47%)
&lt;/h2&gt;

&lt;p&gt;About half the apps took longer than they should to send the first page. On a phone with a weak connection, that's the moment people give up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make my homepage load faster for first-time visitors: compress and resize
images, lazy-load anything below the fold, remove unused libraries, and set
sensible cache headers for static files. Tell me what you changed and how much
smaller the page got.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Blank link previews (29%)
&lt;/h2&gt;

&lt;p&gt;When someone shares your link on X, iMessage or Slack, the preview card comes from a few hidden tags. If they're missing, your launch post shows a bare link.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Open Graph and Twitter card tags to my homepage: og:title, og:description,
og:image (a 1200x630 image of my app), og:url with my real address, and
twitter:card set to summary_large_image.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The good news, again
&lt;/h2&gt;

&lt;p&gt;I want to say this clearly because the "vibe-coded apps are a security disaster" take is everywhere: in this sample, &lt;strong&gt;no app leaked a secret key in the page and no database answered a stranger.&lt;/strong&gt; That's better than I expected. What's left is mostly settings that take a few minutes each.&lt;/p&gt;

&lt;p&gt;That matches what we saw earlier this month when we &lt;a href="https://throttlebird.com/blog/we-checked-live-vibe-coded-apps" rel="noopener noreferrer"&gt;checked 76 apps from public directories&lt;/a&gt;. Almost every app was missing security headers, and the dangerous problems were rare.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I did this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I picked apps their makers had shared publicly on X this week, mostly from "built with Lovable" posts and the Base44 challenge. I didn't choose apps based on how they looked.&lt;/li&gt;
&lt;li&gt;Each homepage got exactly one run of the same free check anyone can run on &lt;a href="https://throttlebird.com/?utm_source=devto#scan" rel="noopener noreferrer"&gt;throttlebird.com&lt;/a&gt;. No logins, no extra probing, homepage only.&lt;/li&gt;
&lt;li&gt;I only kept totals. I didn't store any key, table name, or detail that could help someone target a specific app.&lt;/li&gt;
&lt;li&gt;34 apps is a small sample, so treat the percentages as a rough picture, not a census. I'm going to run this again next week and compare.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're about to launch, you can run the same &lt;a href="https://throttlebird.com/?utm_source=devto#scan" rel="noopener noreferrer"&gt;free check&lt;/a&gt; on your own app. It takes under a minute and you don't need to sign up. If you shared your app on X this week and want the full report, reply to me &lt;a href="https://x.com/ThrottleBirdhq" rel="noopener noreferrer"&gt;@ThrottleBirdhq&lt;/a&gt; and I'll send it over free.&lt;/p&gt;

&lt;p&gt;Jordan&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I checked 76 live vibe-coded apps. Only 3 got an A.</title>
      <dc:creator>Throttle Bird</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:13:42 +0000</pubDate>
      <link>https://dev.to/throttlebird/i-checked-76-live-vibe-coded-apps-only-3-got-an-a-596d</link>
      <guid>https://dev.to/throttlebird/i-checked-76-live-vibe-coded-apps-only-3-got-an-a-596d</guid>
      <description>&lt;p&gt;Everyone has an opinion about whether vibe-coded apps are "safe" or "ready to launch." We wanted numbers instead.&lt;/p&gt;

&lt;p&gt;So in October 2026 we took 76 apps that their makers had already launched and listed publicly (mostly built with Lovable, plus a few other builder tools) and ran each homepage through the same free, rule-based check that anyone can run. One check per app, nothing more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We're not naming any app, and we never will.&lt;/strong&gt; Everything below is totals and percentages. If you built one of these apps, nobody can tell from this post, and that's on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Grades: &lt;strong&gt;3 A's, 53 B's, 18 C's, 2 D's, 0 F's.&lt;/strong&gt; Only about 4% got an A.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;97%&lt;/strong&gt; were missing basic browser safety settings (called "security headers").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;67%&lt;/strong&gt; had at least one problem that makes it harder for Google to find them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;22%&lt;/strong&gt; had a slow or heavy first load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8%&lt;/strong&gt; had broken link previews, so a shared link shows up blank or half-finished.&lt;/li&gt;
&lt;li&gt;The scary stuff never showed up: &lt;strong&gt;0&lt;/strong&gt; apps with a database that answered a stranger, and &lt;strong&gt;0&lt;/strong&gt; with private keys sitting in the page's code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the grades landed
&lt;/h2&gt;

&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdsbn3j2appyrwkctgfye.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdsbn3j2appyrwkctgfye.png" alt="Grades across 76 live vibe-coded apps" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most apps landed in the B range. That's better than the "vibe coding is a security disaster" headlines suggest. It's also not great: a B usually means a few easy fixes are still waiting, and about a quarter of apps (20 of 76) scored a C or lower.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most common problems
&lt;/h2&gt;

&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhc1n41htybm4sfvlub3b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhc1n41htybm4sfvlub3b.png" alt="Most common problems, as a share of apps checked" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The good news is that the top problems are boring and fixable. Here's what each one means, and exactly what to paste to fix it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 1: Add security headers (97% of apps were missing them)
&lt;/h3&gt;

&lt;p&gt;Security headers are short instructions your site sends to the browser, like "don't let other sites put my page inside a frame" or "only load scripts from places I trust." Visitors never see them, but they shut the door on whole kinds of attacks. Builder tools almost never add them for you, which is why nearly every app was missing them.&lt;/p&gt;

&lt;p&gt;The easiest route is to paste this into your builder tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add standard security headers to every page of my site: Content-Security-Policy
(start with a policy that allows my current scripts, fonts and images),
Strict-Transport-Security, X-Content-Type-Options: nosniff,
Referrer-Policy: strict-origin-when-cross-origin, and a frame-ancestors rule so
other sites can't put my pages in a frame. Use my hosting platform's headers
config. Then tell me in plain English what each one does and check nothing on
the site broke.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you'd rather add them by hand and your site is on Netlify, a file named &lt;code&gt;_headers&lt;/code&gt; in your published folder looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*
  Strict-Transport-Security: max-age=31536000; includeSubDomains
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  X-Frame-Options: DENY
  Permissions-Policy: camera=(), microphone=(), geolocation=()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Vercel, the same idea goes in &lt;code&gt;vercel.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/(.*)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Strict-Transport-Security"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"max-age=31536000; includeSubDomains"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"X-Content-Type-Options"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nosniff"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Referrer-Policy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"strict-origin-when-cross-origin"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"X-Frame-Options"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DENY"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We left Content-Security-Policy out of the hand-written versions on purpose. It's the most powerful header, but a wrong one can blank your site. Let your builder tool write it for your actual scripts, then click through every page afterward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 2: Tell Google which address is real, and give it a map (67% had a Google issue)
&lt;/h3&gt;

&lt;p&gt;Two problems drove most of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No canonical tag (54% of apps).&lt;/strong&gt; If your app answers at both &lt;code&gt;www.&lt;/code&gt; and the plain address, or with and without a trailing slash, Google may treat those as different pages and split your ranking between them. A canonical tag tells Google which address counts. In each page's &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://yourdomain.com/pricing"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each page should point to &lt;em&gt;its own&lt;/em&gt; address on your real domain. A common mistake is pointing every page at the homepage, or at a preview address like &lt;code&gt;something.lovable.app&lt;/code&gt;. The prompt version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a canonical link tag to every page that points to that page's main https
address on my real domain (not a preview or .app address). Make sure each
page's canonical is its own address, not always the homepage.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;No sitemap (28% of apps).&lt;/strong&gt; A sitemap is a list of your pages that Google reads. Without one, Google has to find pages by following links, and new pages can take weeks to show up. A minimal &lt;code&gt;sitemap.xml&lt;/code&gt; at the root of your site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;urlset&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitemaps.org/schemas/sitemap/0.9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://yourdomain.com/&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://yourdomain.com/pricing&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/urlset&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a &lt;code&gt;robots.txt&lt;/code&gt; next to it that points Google there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leave login, dashboard and account pages out of the sitemap.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 3: Make your link previews work (8% were broken)
&lt;/h3&gt;

&lt;p&gt;This one is less common, but it hurts exactly when it matters: launch day. When you paste your link into X, Slack, iMessage or a Discord server, the preview card comes from a few tags in your page's &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Without them, your link shows up as a bare address with no picture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your App – what it does in a few words"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"One sentence a stranger would care about."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://yourdomain.com/og-image.png"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://yourdomain.com/"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a full &lt;code&gt;https://&lt;/code&gt; address for the image (not &lt;code&gt;/og-image.png&lt;/code&gt;), and make the image 1200×630. Then paste your link into a private chat with yourself before you post it anywhere public.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: the slow first load (22% of apps)
&lt;/h3&gt;

&lt;p&gt;About one in five homepages took noticeably long to arrive or were heavy. On a phone with weak signal, that's when people give up. The usual causes are huge images and big scripts loading before anything shows. Ask your builder tool to find the biggest causes, fix them without removing features, and tell you the before and after sizes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The good news: the scary stuff was rare
&lt;/h2&gt;

&lt;p&gt;Here's what surprised us. The check also looks at whether your database answers strangers who aren't logged in, and whether private keys are visible in your page's code. In this sample, &lt;strong&gt;neither showed up even once.&lt;/strong&gt; Plenty of these apps talk to Supabase straight from the browser. That's normal and fine when it's locked down, and none of them let a stranger read data on the checks we ran.&lt;/p&gt;

&lt;p&gt;A fair warning, though: the check only looks at the homepage and what it loads. It can't log in, so it doesn't see what's behind your sign-in page, and "we didn't find it" isn't the same as "it isn't there." If your app stores anything private, test it like a stranger would: open it in a private window, signed out, and see what loads.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we did this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Which apps:&lt;/strong&gt; 76 apps whose makers had already listed them publicly with a live link, mostly from community showcase pages. We left out a few that were offline or wouldn't load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What we ran:&lt;/strong&gt; one free check per homepage, the same request any visitor can make, at the same speed limit. No logins, no guessing at hidden pages, no extra probing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What we kept:&lt;/strong&gt; only the grade and the type of each problem. No keys, data or other details from the apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limits:&lt;/strong&gt; homepage plus the scripts it loads, not every page. It's a snapshot from one day in October 2026, and apps change all the time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What this means if you're about to launch
&lt;/h2&gt;

&lt;p&gt;The apps in this study weren't broken. Most were one or two prompts away from an A. The problems that showed up most are the invisible ones builder tools skip and nobody notices, until Google ignores your site or your launch link shows up blank.&lt;/p&gt;

&lt;p&gt;We built Throttle Bird to run these checks: &lt;a href="https://throttlebird.com/?utm_source=devto" rel="noopener noreferrer"&gt;free scan, with paid reports for deeper fixes&lt;/a&gt;. The full original write-up is &lt;a href="https://throttlebird.com/blog/we-checked-live-vibe-coded-apps" rel="noopener noreferrer"&gt;on our blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What's the first thing you check before you ship? I'd love to hear it in the comments.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>security</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
