<?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: Actuant</title>
    <description>The latest articles on DEV Community by Actuant (@actuant).</description>
    <link>https://dev.to/actuant</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%2F4045529%2F453fb144-bebd-4909-8cb8-545bf0911026.png</url>
      <title>DEV Community: Actuant</title>
      <link>https://dev.to/actuant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/actuant"/>
    <language>en</language>
    <item>
      <title>What is llms.txt and why your small product needs one</title>
      <dc:creator>Actuant</dc:creator>
      <pubDate>Fri, 07 Aug 2026 13:16:24 +0000</pubDate>
      <link>https://dev.to/actuant/what-is-llmstxt-and-why-your-small-product-needs-one-4iek</link>
      <guid>https://dev.to/actuant/what-is-llmstxt-and-why-your-small-product-needs-one-4iek</guid>
      <description>&lt;h2&gt;
  
  
  The file nobody asked for
&lt;/h2&gt;

&lt;p&gt;llms.txt is a plain-text file, placed at the root of your domain, that describes your site in a format large language models can read directly. It was proposed by Jeremy Howard in 2024 as a convention: a simple, structured summary of a website's content, written for the machines that now answer questions on behalf of users.&lt;/p&gt;

&lt;p&gt;The idea is straightforward. When someone asks ChatGPT or Claude "is there a tool that does X?", the model does not browse your site the way a human would. It reads what it has been trained on, and increasingly, it reads the pages it is allowed to fetch at query time. A well-formed llms.txt gives it a concise, accurate map of what you offer, what you don't, and where to look for details.&lt;/p&gt;

&lt;p&gt;For a small product with no brand recognition, this file is one of the few places you can speak directly to an AI assistant without competing for a Google ranking. It is cheap, static, and within your control.&lt;/p&gt;

&lt;h2&gt;
  
  
  How llms.txt differs from robots.txt and sitemap.xml
&lt;/h2&gt;

&lt;p&gt;The three files are often confused because they live in the same directory and all start with a dot or end in .txt or .xml. They do different jobs.&lt;/p&gt;

&lt;p&gt;robots.txt is a set of permissions. It tells crawlers which parts of your site they may or may not fetch. It does not describe your content. It says "you may crawl /public but not /admin." It is about access.&lt;/p&gt;

&lt;p&gt;sitemap.xml is a list of URLs. It tells search engines which pages exist and how often they change. It does not say what those pages mean. It is about discovery.&lt;/p&gt;

&lt;p&gt;llms.txt is a summary. It tells an AI what your site is about, who it is for, and what the key pages are. It is about understanding.&lt;/p&gt;

&lt;p&gt;The three are complementary, not interchangeable. A crawler that respects robots.txt will still fetch a page it finds in a sitemap. But a language model that reads your llms.txt can answer a question about your product without fetching a single page. That is the difference that matters for a small product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a useful llms.txt contains
&lt;/h2&gt;

&lt;p&gt;A useful llms.txt is not a marketing page. It is a factual brief. It should answer the questions a stranger would ask before they decide whether to click.&lt;/p&gt;

&lt;p&gt;Here is a minimal structure that works for a small product:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Product Name&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; One sentence on what the product does and who it is for.&lt;/span&gt;

&lt;span class="gu"&gt;## What it does&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Bullet point of a core capability
&lt;span class="p"&gt;-&lt;/span&gt; Bullet point of another core capability
&lt;span class="p"&gt;-&lt;/span&gt; Bullet point of a third core capability

&lt;span class="gu"&gt;## What it does not do&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; A limitation or boundary
&lt;span class="p"&gt;-&lt;/span&gt; Another boundary

&lt;span class="gu"&gt;## Who it is for&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; A description of the primary user
&lt;span class="p"&gt;-&lt;/span&gt; A description of the secondary user

&lt;span class="gu"&gt;## Key pages&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Home: https://example.com/
&lt;span class="p"&gt;-&lt;/span&gt; Pricing: https://example.com/pricing
&lt;span class="p"&gt;-&lt;/span&gt; Docs: https://example.com/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The content should be written for a reader who has never heard of you. It should not assume context. It should state what you do, what you don't, and where to find the details.&lt;/p&gt;

&lt;p&gt;One thing to note: the file is not a ranking signal. It does not make you appear higher in a search engine. It makes you more likely to be described accurately when an AI is asked about your space. For a product with no reputation, accuracy is the first win.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete example from a real product
&lt;/h2&gt;

&lt;p&gt;Actuant, a launch-readiness audit tool for AI-built apps, ships an llms.txt that follows this pattern. It opens with a one-line description, then lists what the product does, what it does not do, who it is for, pricing, and key pages.&lt;/p&gt;

&lt;p&gt;The "What it does not do" section is the part most small products skip. Actuant states plainly that it does not audit source code and that running an audit requires a free account. That honesty serves two purposes. It prevents an AI from overstating the product's capabilities, and it sets expectations for a human reader who might be evaluating the tool.&lt;/p&gt;

&lt;p&gt;The file also includes a section written directly for AI agents. It tells them to fetch a specific plain-text brief for MCP installation steps, and it points coding agents to a skill file. This is a newer pattern: llms.txt as a routing document, not just a summary.&lt;/p&gt;

&lt;p&gt;That is the direction the format is heading. It is no longer just a description. It is a way to tell an AI what to fetch, what to do with it, and where the authoritative instructions live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens when you skip it
&lt;/h2&gt;

&lt;p&gt;When a product has no llms.txt, an AI assistant has to rely on whatever it can infer from the rest of the web. That inference is often wrong.&lt;/p&gt;

&lt;p&gt;A model might describe your product based on a competitor's page. It might say you offer a feature you removed last month. It might say your pricing is free when you moved to a paid plan. It might say your app is a mobile app when it is a web app. Each of those errors costs you a user who asked a question and got a confident, wrong answer.&lt;/p&gt;

&lt;p&gt;The cost is invisible. You will not see it in your analytics because the user never arrived. But it is real. For a small product, the difference between being described accurately and being described vaguely is the difference between being considered and being skipped.&lt;/p&gt;

&lt;p&gt;The fix is a single file. It takes an hour to write and it does not require a developer. It is one of the cheapest visibility investments a small product can make.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checks that matter
&lt;/h2&gt;

&lt;p&gt;If you are building a small product, here is a short checklist for your llms.txt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file is served at the root of your domain, not in a subdirectory.&lt;/li&gt;
&lt;li&gt;The first line is a clear, one-sentence description of what you do.&lt;/li&gt;
&lt;li&gt;You list what you do not do, not just what you do.&lt;/li&gt;
&lt;li&gt;You name your primary audience explicitly.&lt;/li&gt;
&lt;li&gt;You include a key pages section with the most important URLs.&lt;/li&gt;
&lt;li&gt;The file is plain text, not HTML or markdown with heavy formatting.&lt;/li&gt;
&lt;li&gt;You update it when your product changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last point is the one most people miss. An llms.txt that describes a product from six months ago is worse than none, because it gives an AI a confident, outdated answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actuant: the layer after deploy
&lt;/h2&gt;

&lt;p&gt;Your app is live. A stranger can open it. But nobody has heard of it, and an AI that is asked about your space has nothing accurate to say. That is the gap Actuant exists to close.&lt;/p&gt;

&lt;p&gt;Actuant runs a launch-readiness audit on a deployed web app in a real browser, scoring it out of 100 across 52 deterministic checks worth 172 weighted points. The checks cover reachability, AI-search visibility, analytics, social previews, security headers, performance, and more. No model decides the score. The engine probes a header, a file, a redirect, a tag, and returns the same verdict every time.&lt;/p&gt;

&lt;p&gt;Where something is missing, Actuant opens a pull request with the fix. That includes an llms.txt, a robots.txt, a sitemap, and metadata. You review the changes and merge them. You stay in control.&lt;/p&gt;

&lt;p&gt;Actuant is in early access. It is not a replacement for writing well, but it is a way to make sure the machine-readable layer of your product is not silently missing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>seo</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Actuant</dc:creator>
      <pubDate>Sat, 25 Jul 2026 08:42:37 +0000</pubDate>
      <link>https://dev.to/actuant/-10li</link>
      <guid>https://dev.to/actuant/-10li</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3" class="crayons-story__hidden-navigation-link"&gt;What actually breaks when you deploy an AI-built app&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/actuant" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4045529%2F453fb144-bebd-4909-8cb8-545bf0911026.png" alt="actuant profile" class="crayons-avatar__image" width="256" height="256"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/actuant" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Actuant
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Actuant
                
              
              &lt;div id="story-author-preview-content-4223723" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/actuant" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4045529%2F453fb144-bebd-4909-8cb8-545bf0911026.png" class="crayons-avatar__image" alt="" width="256" height="256"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Actuant&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3" id="article-link-4223723"&gt;
          What actually breaks when you deploy an AI-built app
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>What actually breaks when you deploy an AI-built app</title>
      <dc:creator>Actuant</dc:creator>
      <pubDate>Fri, 24 Jul 2026 12:04:15 +0000</pubDate>
      <link>https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3</link>
      <guid>https://dev.to/actuant/what-actually-happens-when-you-ship-an-ai-built-app-50f3</guid>
      <description>&lt;p&gt;I ran launch audits on &lt;strong&gt;20 AI-built apps&lt;/strong&gt;, &lt;strong&gt;Lovable&lt;/strong&gt;, &lt;strong&gt;Bolt&lt;/strong&gt;, &lt;strong&gt;v0&lt;/strong&gt;, a couple of Cursor builds. Same checks on each, run against the live deployed URL, not the code. These were the most common problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14/20&lt;/strong&gt; had a canonical tag pointing at the wrong domain. Usually the builder's preview URL. The site works fine on the custom domain, but it's telling Google the real version lives at something.lovable.app.&lt;/p&gt;

&lt;p&gt;Your domain never ranks and you'd never know why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12/20&lt;/strong&gt; had broken or missing basic SEO. No meta description, no OG image (so every shared link is a grey rectangle), or a sitemap listing pages that 404.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9/20&lt;/strong&gt; had analytics installed but not firing. Added early, then the AI rewrote the layout and dropped the snippet, or it fires on the homepage and nowhere else. Traffic arrives, you learn nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7/20&lt;/strong&gt; had no way for anyone to contact them. No email, no form, nothing. Someone wants to pay you and can't tell you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5/20&lt;/strong&gt; had an open database. Row level security off, so the anon key that ships in the bundle can read whatever it wants. This is the scary one and it takes 30 seconds to check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2/20&lt;/strong&gt; had an actual secret key in the client bundle. Pasted in at 2am to make something work, then shipped to every visitor's browser.&lt;/p&gt;

&lt;p&gt;And the one that applied to all 20: &lt;em&gt;nothing&lt;/em&gt; was watching any of this. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every prompt is a redeploy, and any redeploy can reintroduce all of the above.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your app doesn't email you when its meta description disappears.&lt;/p&gt;

&lt;p&gt;None of these are exotic. The AI tools are &lt;strong&gt;judged on whether the app runs&lt;/strong&gt;, so that's what they're good at. Nobody's judging what a real browser actually loads at your real domain, and that gap is where launches die quietly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I found all of this&lt;/em&gt; with a tool I'm building called Actuant (&lt;a href="https://www.actuant.dev" rel="noopener noreferrer"&gt;https://www.actuant.dev&lt;/a&gt;), it audits your deployed app in a cloud browser and watches it after you ship.&lt;/p&gt;

&lt;p&gt;Join the waitlist (&lt;a href="https://www.actuant.dev/early-access" rel="noopener noreferrer"&gt;https://www.actuant.dev/early-access&lt;/a&gt;) if you want it on your app.&lt;/p&gt;

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