<?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: Matt Senter</title>
    <description>The latest articles on DEV Community by Matt Senter (@mattsenter).</description>
    <link>https://dev.to/mattsenter</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%2F3931606%2F17899b14-3035-4135-be09-fc925e0215c7.png</url>
      <title>DEV Community: Matt Senter</title>
      <link>https://dev.to/mattsenter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mattsenter"/>
    <language>en</language>
    <item>
      <title>I Built Reusable Claude Code Skills to Ship Production Websites Faster</title>
      <dc:creator>Matt Senter</dc:creator>
      <pubDate>Thu, 14 May 2026 16:53:54 +0000</pubDate>
      <link>https://dev.to/mattsenter/i-built-reusable-claude-code-skills-to-ship-production-websites-faster-2b49</link>
      <guid>https://dev.to/mattsenter/i-built-reusable-claude-code-skills-to-ship-production-websites-faster-2b49</guid>
      <description>&lt;h1&gt;
  
  
  I Built Reusable Claude Code Skills to Ship Production Websites Faster
&lt;/h1&gt;

&lt;p&gt;Most AI-generated websites don’t fail because the homepage looks bad.&lt;/p&gt;

&lt;p&gt;They fail because all the boring production details get skipped.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEO metadata&lt;/li&gt;
&lt;li&gt;prerendering&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;social share images&lt;/li&gt;
&lt;li&gt;CSP headers&lt;/li&gt;
&lt;li&gt;Lighthouse optimization&lt;/li&gt;
&lt;li&gt;mobile polish&lt;/li&gt;
&lt;li&gt;sitemap generation&lt;/li&gt;
&lt;li&gt;robots.txt&lt;/li&gt;
&lt;li&gt;deployment configuration&lt;/li&gt;
&lt;li&gt;IndexNow&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;environment setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The actual React components are often the easy part now.&lt;/p&gt;

&lt;p&gt;The operational infrastructure is what still slows everything down.&lt;/p&gt;

&lt;p&gt;After building a few AI-assisted projects with Claude Code, I realized I was repeatedly solving the same problems over and over again. Not just visually, but operationally.&lt;/p&gt;

&lt;p&gt;So instead of writing larger prompts, I started building reusable Claude Code skills.&lt;/p&gt;

&lt;p&gt;The result became an open source repository of production-oriented workflows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/MattSenter/senternet-site-skills" rel="noopener noreferrer"&gt;senternet-site-skills on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains reusable production-focused skills for things like SEO, prerendering, mobile optimization, social sharing, CSP configuration, Lighthouse tuning, analytics setup, deployment workflows, and more.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Problem With “Vibe Coding”
&lt;/h1&gt;

&lt;p&gt;I actually like AI-assisted development.&lt;/p&gt;

&lt;p&gt;A lot.&lt;/p&gt;

&lt;p&gt;Claude Code is incredibly powerful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rapid iteration&lt;/li&gt;
&lt;li&gt;frontend generation&lt;/li&gt;
&lt;li&gt;restructuring layouts&lt;/li&gt;
&lt;li&gt;writing utility code&lt;/li&gt;
&lt;li&gt;integrating APIs&lt;/li&gt;
&lt;li&gt;content scaffolding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But after the initial excitement wears off, a pattern emerges:&lt;/p&gt;

&lt;p&gt;The AI can generate pages faster than you can operationalize them.&lt;/p&gt;

&lt;p&gt;You end up spending huge amounts of time fixing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEO issues&lt;/li&gt;
&lt;li&gt;deployment inconsistencies&lt;/li&gt;
&lt;li&gt;broken metadata&lt;/li&gt;
&lt;li&gt;poor mobile behavior&lt;/li&gt;
&lt;li&gt;missing analytics&lt;/li&gt;
&lt;li&gt;performance regressions&lt;/li&gt;
&lt;li&gt;social preview problems&lt;/li&gt;
&lt;li&gt;incomplete production setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And ironically, these are often the least exciting tasks for humans to repeatedly perform manually.&lt;/p&gt;

&lt;p&gt;That made them perfect candidates for reusable skills.&lt;/p&gt;




&lt;h1&gt;
  
  
  From Giant Prompts to Reusable Workflows
&lt;/h1&gt;

&lt;p&gt;At first, I tried solving this with increasingly large prompts.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Please make sure this page is mobile responsive, optimized for SEO, uses prerendering, has proper metadata, social sharing support, CSP headers, analytics integration, and production-safe deployment settings…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That approach quickly became unreliable.&lt;/p&gt;

&lt;p&gt;Claude would focus heavily on one instruction while quietly ignoring another. Sometimes it would partially implement features. Other times it would regress working functionality while trying to “help.”&lt;/p&gt;

&lt;p&gt;The breakthrough came when I stopped treating prompts like conversations and started treating them like infrastructure.&lt;/p&gt;

&lt;p&gt;Instead of giant prompts, I created focused reusable skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;senternet-site-metatags&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-prerender&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-mobile-optimize&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-share-images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-csp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-lighthouse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-indexnow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;senternet-site-firebase&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each skill had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;narrowly scoped responsibilities&lt;/li&gt;
&lt;li&gt;deterministic expectations&lt;/li&gt;
&lt;li&gt;operational guardrails&lt;/li&gt;
&lt;li&gt;reusable implementation logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The outputs became dramatically more stable.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Most Important Idea: Operational Consistency
&lt;/h1&gt;

&lt;p&gt;One thing I learned very quickly:&lt;/p&gt;

&lt;p&gt;AI is surprisingly good at generating components.&lt;/p&gt;

&lt;p&gt;It is much worse at consistently maintaining production infrastructure across multiple projects.&lt;/p&gt;

&lt;p&gt;Humans naturally remember things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Did we set OpenGraph tags?”&lt;/li&gt;
&lt;li&gt;“Are we prerendering this route?”&lt;/li&gt;
&lt;li&gt;“Did we configure robots.txt?”&lt;/li&gt;
&lt;li&gt;“Will this social image crop correctly?”&lt;/li&gt;
&lt;li&gt;“Are Lighthouse scores still acceptable?”&lt;/li&gt;
&lt;li&gt;“Did analytics get added to the production layout?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI often forgets these details entirely unless explicitly guided.&lt;/p&gt;

&lt;p&gt;That’s where reusable skills become powerful.&lt;/p&gt;

&lt;p&gt;Instead of depending on memory or repetitive prompting, operational standards become encoded into reusable workflows.&lt;/p&gt;

&lt;p&gt;The goal wasn’t full automation.&lt;/p&gt;

&lt;p&gt;It was reducing forgotten work.&lt;/p&gt;




&lt;h1&gt;
  
  
  The “Uber Skill” Concept
&lt;/h1&gt;

&lt;p&gt;One of the most useful patterns ended up being what I started calling “uber-skills.”&lt;/p&gt;

&lt;p&gt;Instead of handling a single isolated task, these workflows orchestrate multiple setup steps together.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detect what’s already configured&lt;/li&gt;
&lt;li&gt;skip completed setup&lt;/li&gt;
&lt;li&gt;identify missing production features&lt;/li&gt;
&lt;li&gt;apply only incremental improvements&lt;/li&gt;
&lt;li&gt;avoid destructive rewrites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point became especially important.&lt;/p&gt;

&lt;p&gt;One of the biggest failure modes with AI coding tools is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;asking for one change and getting an accidental full-project refactor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The skills helped constrain that behavior significantly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;senternet-create-site&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Orchestrate the full Senternet site build by running foundation, favicon, SEO, analytics, prerender, image, and performance skills in order.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="c1"&gt;# Create a Complete Optimized Marketing Site&lt;/span&gt;

&lt;span class="s"&gt;Spin up or upfit a fully optimized marketing site by executing all site skills in sequence.&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="c1"&gt;## Mode Detection&lt;/span&gt;

&lt;span class="s"&gt;Before asking anything, check whether the user provided a path to an existing directory&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;**Existing directory** — run in **upfit mode**&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;navigate to that directory and detect what's already implemented before each step. Skip steps that are complete, patch steps that are partial.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;**No directory provided** — run in **create mode**&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ask the intake questions below and build from scratch. If the user does not have a design zip, directory, or HTML export, default to a barebones Hello World site using the requested project and directory names.&lt;/span&gt;

&lt;span class="c1"&gt;## Upfit Feature Inventory&lt;/span&gt;

&lt;span class="s"&gt;In upfit mode, surface a visible feature inventory before the optional phases so the user can see what is already enabled and what is still available to add.&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;For each optional capability, detect whether the repo already has it.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Report each one as either `enabled` or `available`.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;If one or more optional capabilities are `available`, present them to the user as a single enablement menu instead of separate yes/no prompts.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Only offer options for capabilities that are not already enabled.&lt;/span&gt;

&lt;span class="na"&gt;Optional capabilities to inventory in upfit mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Transactional email via Resend&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Reddit pixel for ad campaigns&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Spanish `/es/` multilingual support&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Ad landing pages for paid campaigns&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SEO blog&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Competitor comparison / alternative pages&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;reCAPTCHA Enterprise protection for forms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  What Actually Improved
&lt;/h1&gt;

&lt;p&gt;The biggest gains weren’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing code faster&lt;/li&gt;
&lt;li&gt;generating prettier components&lt;/li&gt;
&lt;li&gt;reducing typing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest gains were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer regressions&lt;/li&gt;
&lt;li&gt;fewer forgotten deployment details&lt;/li&gt;
&lt;li&gt;fewer SEO mistakes&lt;/li&gt;
&lt;li&gt;fewer repetitive setup tasks&lt;/li&gt;
&lt;li&gt;more consistent production readiness&lt;/li&gt;
&lt;li&gt;reduced decision fatigue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;The AI became more useful once the workflow became more structured.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real-World Usage
&lt;/h1&gt;

&lt;p&gt;These workflows eventually became part of the production process behind projects like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.stockcar.app" rel="noopener noreferrer"&gt;StockCar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.beeready.buzz" rel="noopener noreferrer"&gt;Bee Ready&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both projects benefited from repeatedly applying the same operational standards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;metadata handling&lt;/li&gt;
&lt;li&gt;mobile optimization&lt;/li&gt;
&lt;li&gt;share image workflows&lt;/li&gt;
&lt;li&gt;SEO structure&lt;/li&gt;
&lt;li&gt;deployment consistency&lt;/li&gt;
&lt;li&gt;performance optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without reusable skills, I found myself re-solving the same infrastructure problems on every project.&lt;/p&gt;




&lt;h1&gt;
  
  
  Where AI-Assisted Development Still Struggles
&lt;/h1&gt;

&lt;p&gt;Even with reusable skills, there are still clear limitations.&lt;/p&gt;

&lt;p&gt;Claude Code can still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;over-refactor working code&lt;/li&gt;
&lt;li&gt;hallucinate architecture decisions&lt;/li&gt;
&lt;li&gt;regress responsive layouts&lt;/li&gt;
&lt;li&gt;invent unnecessary abstractions&lt;/li&gt;
&lt;li&gt;partially apply instructions&lt;/li&gt;
&lt;li&gt;miss subtle UX inconsistencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And frontend polish still requires human judgment.&lt;/p&gt;

&lt;p&gt;A lot of human judgment.&lt;/p&gt;

&lt;p&gt;But structured workflows dramatically reduce the chaos.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Current Take
&lt;/h1&gt;

&lt;p&gt;I increasingly think the future of AI-assisted development looks less like prompting and more like operational engineering.&lt;/p&gt;

&lt;p&gt;The developers getting the best results probably won’t be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the people writing the longest prompts&lt;/li&gt;
&lt;li&gt;the people trying to remove all constraints&lt;/li&gt;
&lt;li&gt;the people chasing fully autonomous agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’ll be the people building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reusable workflows&lt;/li&gt;
&lt;li&gt;constrained systems&lt;/li&gt;
&lt;li&gt;composable tooling&lt;/li&gt;
&lt;li&gt;deterministic infrastructure&lt;/li&gt;
&lt;li&gt;operational guardrails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real leverage comes from encoding consistency.&lt;/p&gt;

&lt;p&gt;Not just generating code.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;AI coding tools are already extremely capable.&lt;/p&gt;

&lt;p&gt;But there’s still a huge difference between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;generating a demo&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;repeatedly shipping production-ready websites.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For me, reusable Claude Code skills became a way to bridge that gap.&lt;/p&gt;

&lt;p&gt;Not by replacing engineering discipline.&lt;/p&gt;

&lt;p&gt;But by making it easier to apply consistently.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>claude</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
