<?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: Samantha Start</title>
    <description>The latest articles on DEV Community by Samantha Start (@sstart).</description>
    <link>https://dev.to/sstart</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%2F3842649%2Ffc89cfab-e259-4064-aa69-be67773a8884.jpeg</url>
      <title>DEV Community: Samantha Start</title>
      <link>https://dev.to/sstart</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sstart"/>
    <language>en</language>
    <item>
      <title>You added an MCP server to your AI assistant. Did you check what it can touch?</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Sat, 15 Aug 2026 12:10:29 +0000</pubDate>
      <link>https://dev.to/sstart/you-added-an-mcp-server-to-your-ai-assistant-did-you-check-what-it-can-touch-2399</link>
      <guid>https://dev.to/sstart/you-added-an-mcp-server-to-your-ai-assistant-did-you-check-what-it-can-touch-2399</guid>
      <description>&lt;h1&gt;
  
  
  You added an MCP server to your AI assistant. Did you check what it can touch?
&lt;/h1&gt;

&lt;p&gt;MCP servers give your AI assistant new abilities: read your filesystem, query your database, call an API, run a shell command. That is the whole point of them. It is also the whole point of the risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The permission question nobody asks
&lt;/h2&gt;

&lt;p&gt;When you install a normal browser extension, you at least see a permission prompt. When you add an MCP server to your AI coding assistant, you usually do not. You add a config entry, restart, and the assistant now has whatever access that server exposes. Most people never read the server's source to see what that actually is.&lt;/p&gt;

&lt;p&gt;This matters more with AI-built or AI-suggested MCP servers specifically. If the assistant wrote the server for you, or you copied one from a repo you have not read closely, you have no independent confirmation of what it does versus what its description says it does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;p&gt;Three patterns show up repeatedly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A server meant to read files ends up with write access too, because the broader permission was easier to implement and nobody scoped it down.&lt;/li&gt;
&lt;li&gt;A server that talks to an external API embeds a credential directly in its config or source, so anyone who can read the server's files can read the key.&lt;/li&gt;
&lt;li&gt;A server built for local development gets pointed at a production database or production credentials once it "works," without a second look at what commands it now accepts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires anyone to be careless in an obvious way. It is the same gap as any fast-shipped code: the server works, so it ships, and the access-scoping step that would normally happen in review gets skipped because there was no review.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical check before you trust an MCP server
&lt;/h2&gt;

&lt;p&gt;Before you add an MCP server to a live setup, or before you point an existing one at anything real:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read what the server can actually do, not just its stated purpose. Check the tool definitions it exposes, not the README.&lt;/li&gt;
&lt;li&gt;Check where its credentials live. A server that needs a database password should not have that password sitting in plaintext in its own repo.&lt;/li&gt;
&lt;li&gt;Scope permissions to the minimum the task needs. A read-only use case does not need write access, even if write access was easier to build.&lt;/li&gt;
&lt;li&gt;Treat any MCP server you did not write yourself the same way you would treat a new dependency: know what it can reach before you grant it that reach.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want a second check on what a repo, including one holding an MCP server, actually exposes in its history and current config, &lt;a href="https://repofortify.com/get-started?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=mcp-server-scope" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt; scans for exactly this kind of overlooked access. Free to try, no install required.&lt;/p&gt;

&lt;p&gt;The convenience of an assistant that can just do things is real. So is the fact that "can just do things" is a permission grant, whether or not anyone treated it like one.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The starter template your AI assistant used was built for demos, not for prod</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Wed, 12 Aug 2026 12:39:05 +0000</pubDate>
      <link>https://dev.to/sstart/the-starter-template-your-ai-assistant-used-was-built-for-demos-not-for-prod-53nf</link>
      <guid>https://dev.to/sstart/the-starter-template-your-ai-assistant-used-was-built-for-demos-not-for-prod-53nf</guid>
      <description>&lt;h1&gt;
  
  
  The starter template your AI assistant used was built for demos, not for prod
&lt;/h1&gt;

&lt;p&gt;You asked your AI assistant to build a SaaS app. It picked a starter template, wired up auth, added a database, and scaffolded routes in minutes. That speed comes from the template doing most of the work. The template was written to get you to a working demo fast. It was not written with your production data in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  What starter templates optimize for
&lt;/h2&gt;

&lt;p&gt;Most public starter templates exist to remove friction for a first-time user. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth that works out of the box, often with a default admin account or a seed user&lt;/li&gt;
&lt;li&gt;Example API routes left in place so you can see the pattern, sometimes including a debug or test endpoint&lt;/li&gt;
&lt;li&gt;Permissive CORS settings so the demo works from any origin during setup&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;.env.example&lt;/code&gt; file with placeholder values that looks enough like a real config that it gets copied and half-filled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is a bug in the template. It is a reasonable choice for a starting point. The problem is that these choices are meant to be replaced before launch, and "replace before launch" is a step that depends on you remembering to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI assistants make this worse, not better
&lt;/h2&gt;

&lt;p&gt;An AI assistant scaffolding from a template is optimizing for the same thing the template author was: get something running. It will happily leave the seed admin account in place if removing it was not part of your instruction. It will keep the debug route because deleting it wasn't the task. It is doing exactly what you asked. You asked for a working app, and the template already gave it a working shape.&lt;/p&gt;

&lt;p&gt;The gap is not new. Developers have shipped forked templates with default credentials still active for years. What changed is the speed. A template that used to take a day to adapt can now be fully wired to a live database and pushed to production in an afternoon, which means the "replace before launch" step has to happen just as fast, or it gets skipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before you connect it to real users
&lt;/h2&gt;

&lt;p&gt;Before a template-based app touches real customer data:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Look for any account, key, or credential that shipped with the template itself, not one you created. Rotate or remove it.&lt;/li&gt;
&lt;li&gt;Check every route the template included, not just the ones you built on top of. If you didn't write it and don't use it, remove it.&lt;/li&gt;
&lt;li&gt;Confirm CORS and auth settings match your actual deployment, not the template's local-dev defaults.&lt;/li&gt;
&lt;li&gt;Check the full git history, not just the current files. A template's default &lt;code&gt;.env&lt;/code&gt; sometimes gets committed once during setup and never fully removed from history.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want a second pair of eyes on this, &lt;a href="https://repofortify.com/get-started?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=starter-template-scan" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt; scans a repository, including its full commit history, for exactly this kind of leftover. Free to try, no install required.&lt;/p&gt;

&lt;p&gt;Templates are a genuine shortcut. The part they cannot shortcut is the decision about what stays and what gets removed before real users show up. That decision is still yours.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What your AI coding assistant left in your git history</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Tue, 11 Aug 2026 23:45:55 +0000</pubDate>
      <link>https://dev.to/sstart/what-your-ai-coding-assistant-left-in-your-git-history-31jk</link>
      <guid>https://dev.to/sstart/what-your-ai-coding-assistant-left-in-your-git-history-31jk</guid>
      <description>&lt;h1&gt;
  
  
  What your AI coding assistant left in your git history
&lt;/h1&gt;

&lt;p&gt;You are building fast. You shipped a real app in a weekend. The AI wrote most of it, you connected it to GitHub, and you pushed.&lt;/p&gt;

&lt;p&gt;Here is the part that does not show up in the UI: your git history is a permanent timeline. It remembers every version of every file you have ever committed.&lt;/p&gt;

&lt;p&gt;When the AI wrote your config file on day one, it may have put a real API key in there to make the code run. You moved it to an environment variable later. The current version of your file is clean. The commit from day one is still there, and so is the key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why deleting the file does not help
&lt;/h2&gt;

&lt;p&gt;When you push a commit, that commit becomes part of your repository's permanent history. If you later delete the file or rotate the key and push a new commit, the old commit is still there.&lt;/p&gt;

&lt;p&gt;Anyone who clones the repo gets the full history, including the old commits. Automated scanners comb public GitHub repositories for exactly this pattern. A leaked key from six months ago is still a working key if you did not rotate it.&lt;/p&gt;

&lt;p&gt;Private repositories are not immune. A compromised account, an accidental visibility change, or a contractor you no longer trust all turn a private history into an exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the AI-specific version looks like
&lt;/h2&gt;

&lt;p&gt;Coding assistants write code that works. They fill in values so the code runs during your session. Those values sometimes land in commits.&lt;/p&gt;

&lt;p&gt;The AI is not making a security mistake. It is doing what you asked: making things work. The security decision belongs to you, and it has to happen before you push to shared infrastructure.&lt;/p&gt;

&lt;p&gt;The gap is not a problem with AI tools. It is the gap between "it runs" and "it is safe to ship." That gap has always existed. AI just makes the first part faster, which makes the gap more important to close deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tends to end up in history
&lt;/h2&gt;

&lt;p&gt;Four patterns come up most often in AI-built repos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;API keys or tokens in config files, even if you moved them to environment variables afterward&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; files committed before being added to &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Database connection strings used during early development&lt;/li&gt;
&lt;li&gt;Hardcoded service account keys in serverless or cloud function files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A rough manual check: &lt;code&gt;git log -p | grep -iE "api_key|secret|password|token|sk-|AKIA"&lt;/code&gt;. This will catch obvious patterns but misses anything outside those strings.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical check before you ship
&lt;/h2&gt;

&lt;p&gt;Before you connect an AI-built repo to real infrastructure or make it public:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run a full git history scan for secrets. Not just the current files. Every commit.&lt;/li&gt;
&lt;li&gt;Rotate any credentials that show up, even if they look expired or test-only.&lt;/li&gt;
&lt;li&gt;If you want to fully clean the history, &lt;code&gt;git filter-repo&lt;/code&gt; (the modern replacement for &lt;code&gt;git filter-branch&lt;/code&gt;) can rewrite commits to remove the secret at the source.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to skip the manual work, &lt;a href="https://repofortify.com/get-started?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=git-history-ai" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt; scans your full git history for secrets and flags them at the commit level. Free to try. No install required: paste your repo URL and it runs in the browser.&lt;/p&gt;

&lt;p&gt;The question is not whether AI coding tools introduce security risk. Every tool that speeds up development moves faster than the developer's mental security review. The question is whether you have a check that runs before it matters.&lt;/p&gt;

&lt;p&gt;A full git history scan takes a few minutes. It belongs before you push to prod, not after your first incident report.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>git</category>
      <category>opensource</category>
    </item>
    <item>
      <title>You built an app with AI this weekend. Here are the security holes it probably has.</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Sun, 12 Jul 2026 00:13:52 +0000</pubDate>
      <link>https://dev.to/sstart/you-built-an-app-with-ai-this-weekend-here-are-the-security-holes-it-probably-has-ape</link>
      <guid>https://dev.to/sstart/you-built-an-app-with-ai-this-weekend-here-are-the-security-holes-it-probably-has-ape</guid>
      <description>&lt;p&gt;You had an idea on Friday. By Sunday you had a working app. The AI wrote most of the code, you wired it together, and it just worked.&lt;/p&gt;

&lt;p&gt;Here is the part nobody says out loud: you did not read every line the AI wrote. Almost nobody does. That is fine, it is how building works now. But it means there are probably a few security holes sitting in your app that you cannot see, because you never looked at the code that made them.&lt;/p&gt;

&lt;p&gt;The good news: the most common holes in AI-built apps are a short, predictable list. You can check for them in about 15 minutes. Here are the three that cause the most real trouble, in plain terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A secret written straight into the code
&lt;/h2&gt;

&lt;p&gt;AI assistants love to put your API key or database password right in the code to make things work. It runs great. The problem shows up later: that secret ends up in your git history, and public repos get scanned by bots within minutes of going up.&lt;/p&gt;

&lt;p&gt;Deleting the line does not fix it. The secret still lives in your past commits. Anyone who clones the repo can read it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to check:&lt;/strong&gt; search your code for anything that looks like a key or password. If you find one, or if one was ever committed, rotate it now (create a new one, revoke the old), then move secrets into environment variables instead of the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. An API route with no lock on the door
&lt;/h2&gt;

&lt;p&gt;When the AI builds a route that returns data, it often does not add a check for who is asking. It works in testing because you are the only user. Then it ships, and anyone who finds the URL can pull the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to check:&lt;/strong&gt; for every route that returns user or account data, confirm there is a login or permission check in front of it. If a route hands back private data to anyone who asks, that is the first thing to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A public default that should be private
&lt;/h2&gt;

&lt;p&gt;Storage buckets, databases, and file uploads often start with a default that is more open than you meant. The AI picks a setting that works, not the one that is safe. So your uploads or your database might be readable by the whole internet without you knowing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to check:&lt;/strong&gt; look at your storage and database settings. Anything holding real user data should be private by default, with access granted on purpose, not by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 15-minute pre-launch checklist
&lt;/h2&gt;

&lt;p&gt;Before you put your app in front of real people, run this list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No API keys, passwords, or tokens in the code. Rotate anything that was ever committed.&lt;/li&gt;
&lt;li&gt;Every route that returns user data has a login and permission check.&lt;/li&gt;
&lt;li&gt;Storage, databases, and buckets are private by default.&lt;/li&gt;
&lt;li&gt;Dependencies are up to date, with no known-vulnerable versions.&lt;/li&gt;
&lt;li&gt;Error messages do not leak stack traces, config, or secrets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That covers the large majority of real incidents in fast-built apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want it done for you
&lt;/h2&gt;

&lt;p&gt;You do not have to eyeball all of this. An independent scan can run the whole checklist and hand you the exact fixes, so you can ship with confidence instead of a nagging worry. That is the problem we built RepoFortify to solve, and it plugs into Claude Code, Cursor, and Windsurf so the fixes show up right where you are already working. But even if you never use a tool, the checklist above will catch most of what matters.&lt;/p&gt;

&lt;p&gt;Ship fast. Just do the 15-minute check first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://repofortify.com/get-started?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=vibe-security" rel="noopener noreferrer"&gt;https://repofortify.com/get-started?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=vibe-security&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What Google Lighthouse Did for Web Performance, We Need for Code Repos</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Fri, 10 Apr 2026 23:33:25 +0000</pubDate>
      <link>https://dev.to/sstart/what-google-lighthouse-did-for-web-performance-we-need-for-code-repos-20j8</link>
      <guid>https://dev.to/sstart/what-google-lighthouse-did-for-web-performance-we-need-for-code-repos-20j8</guid>
      <description>&lt;p&gt;Remember before Lighthouse? Web performance was a black box. You knew your site felt slow, but you didn't have a standardized way to measure it, benchmark it, or explain it to stakeholders.&lt;/p&gt;

&lt;p&gt;Lighthouse changed that. One URL, one score, actionable breakdown. Suddenly performance was a conversation everyone could have, not just the senior engineer who profiled Chrome DevTools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code repos have the same problem today
&lt;/h2&gt;

&lt;p&gt;Most developers can tell you whether a repo 'feels' well-maintained. But there's no standardized score. No quick way to benchmark. No shared language between the developer who maintains it and the manager who funds it.&lt;/p&gt;

&lt;p&gt;The signals exist — CI pipelines, test coverage, dependency health, branch protection, type safety, dead code, security — but nobody aggregates them into a single, comparable number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters now
&lt;/h2&gt;

&lt;p&gt;Two trends are colliding:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI coding tools are producing repos faster than ever.&lt;/strong&gt; Claude Code, Cursor, Windsurf — developers are shipping in hours what used to take weeks. But the AI focuses on working code, not operational readiness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open-source dependency chains are deeper than ever.&lt;/strong&gt; When you pick a starter template or library, you're inheriting its infrastructure patterns. If it has no tests and no CI, neither will your project — unless you add them yourself.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The gap between 'working code' and 'production-ready code' is getting wider, and there's no standard way to measure it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Lighthouse for repos looks like
&lt;/h2&gt;

&lt;p&gt;We built &lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt; to be that standard. Paste a public GitHub URL, get a score out of 100 across 9 signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI pipeline (15%)&lt;/li&gt;
&lt;li&gt;Test coverage (25%)&lt;/li&gt;
&lt;li&gt;Dependency health (10%)&lt;/li&gt;
&lt;li&gt;Branch protection (10%)&lt;/li&gt;
&lt;li&gt;Type safety (10%)&lt;/li&gt;
&lt;li&gt;Dead code (10%)&lt;/li&gt;
&lt;li&gt;Exposed routes (5%)&lt;/li&gt;
&lt;li&gt;Documentation (10%)&lt;/li&gt;
&lt;li&gt;Security headers (5%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No signup, no paywall for public repos. We also ship an MCP package (&lt;code&gt;npx @repofortify/mcp&lt;/code&gt;) so AI coding tools can run scans inline.&lt;/p&gt;

&lt;p&gt;The goal isn't to shame anyone. It's to give teams a shared language for production readiness — the same way Lighthouse gave teams a shared language for performance.&lt;/p&gt;




</description>
      <category>opensource</category>
      <category>devops</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>We Scanned 6 SaaS Starter Templates — Here's What We Found</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Fri, 10 Apr 2026 21:15:55 +0000</pubDate>
      <link>https://dev.to/sstart/we-scanned-6-saas-starter-templates-heres-what-we-found-116d</link>
      <guid>https://dev.to/sstart/we-scanned-6-saas-starter-templates-heres-what-we-found-116d</guid>
      <description>&lt;p&gt;Starter templates promise a head start. But how production-ready are they out of the box? We scanned 6 popular templates across Next.js, Remix, and SvelteKit using 9 production readiness signals.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 9 Signals
&lt;/h2&gt;

&lt;p&gt;Our scanner checks: CI pipeline, test coverage, dependency health, branch protection, type safety, dead code detection, exposed routes, documentation quality, and security headers. Each is weighted by impact — tests are 25% of the total score, CI is 15%.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Template&lt;/th&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Stars&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;epic-stack&lt;/td&gt;
&lt;td&gt;Remix&lt;/td&gt;
&lt;td&gt;5,531&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;next-starter&lt;/td&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;974&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remix-saas&lt;/td&gt;
&lt;td&gt;Remix&lt;/td&gt;
&lt;td&gt;1,465&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMSaasStarter&lt;/td&gt;
&lt;td&gt;SvelteKit&lt;/td&gt;
&lt;td&gt;2,297&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chadnext&lt;/td&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;1,323&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kitforstartups&lt;/td&gt;
&lt;td&gt;SvelteKit&lt;/td&gt;
&lt;td&gt;734&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Averages:&lt;/strong&gt; Remix 86.5, Next.js 67.5, SvelteKit 39.0. Overall average: 64/100.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stars don't predict quality
&lt;/h3&gt;

&lt;p&gt;chadnext has 350 more stars than next-starter but scores 37 points lower. Community popularity measures how many people found something useful, not whether it's production-ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  Framework ecosystem maturity matters
&lt;/h3&gt;

&lt;p&gt;Remix starters both scored 84+. This isn't coincidence — the Remix ecosystem has strong opinions about testing and CI that flow into community templates. SvelteKit's ecosystem is newer and more varied.&lt;/p&gt;

&lt;h3&gt;
  
  
  The gap is operational, not code quality
&lt;/h3&gt;

&lt;p&gt;Most of these templates have clean, well-structured code. Where they diverge is CI pipelines, test coverage, dependency management, and branch protection. The 'boring' infrastructure that keeps production stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means For You
&lt;/h2&gt;

&lt;p&gt;If you're picking a starter template:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check if it has CI that actually runs on PRs&lt;/li&gt;
&lt;li&gt;Look for any test coverage at all (many have zero)&lt;/li&gt;
&lt;li&gt;Check dependency freshness — stale deps = security risk&lt;/li&gt;
&lt;li&gt;Consider that the template's infrastructure patterns become YOUR patterns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can scan any public GitHub repo at &lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;repofortify.com&lt;/a&gt; — free, no signup.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Scanned 10 Popular TypeScript Repos — Stars Don't Predict Production Readiness</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Thu, 26 Mar 2026 04:16:32 +0000</pubDate>
      <link>https://dev.to/sstart/i-scanned-10-popular-typescript-repos-stars-dont-predict-production-readiness-1joe</link>
      <guid>https://dev.to/sstart/i-scanned-10-popular-typescript-repos-stars-dont-predict-production-readiness-1joe</guid>
      <description>&lt;p&gt;I couldn't help myself. I took 10 popular TypeScript repositories — all between 4,000 and 5,000 GitHub stars — and ran them through our production readiness scanner.&lt;/p&gt;

&lt;p&gt;The results surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scores
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo&lt;/th&gt;
&lt;th&gt;Stars&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;What I noticed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mengxi-ream/read-frog&lt;/td&gt;
&lt;td&gt;4,941&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;79/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Translation browser extension with its infrastructure together. Genuinely impressed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tagspaces/tagspaces&lt;/td&gt;
&lt;td&gt;4,985&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;77/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Offline-first document manager. When your app works offline, you &lt;em&gt;have&lt;/em&gt; to get the engineering right.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;useplunk/plunk&lt;/td&gt;
&lt;td&gt;4,933&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open-source email platform. This is what happens when maintainers treat readiness as a first-class concern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;microsoft/FluidFramework&lt;/td&gt;
&lt;td&gt;4,917&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;72/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time collab library. Building distributed systems for others to build on — you can't fake the infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;extension-js/extension.js&lt;/td&gt;
&lt;td&gt;4,963&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cross-browser extension framework. Solid. Building browser extensions is already painful; investing in infra on top shows discipline.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;microsoft/tsdoc&lt;/td&gt;
&lt;td&gt;4,943&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;65/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript doc comment standard. Expected higher from Microsoft tbh — but it's a spec project, not an app.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;opennextjs/opennextjs-aws&lt;/td&gt;
&lt;td&gt;4,974&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js adapter for AWS. Someone thought about deployment beyond "it works on my machine."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gluestack/gluestack-ui&lt;/td&gt;
&lt;td&gt;4,994&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;49/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React/React Native component library. Nearly 5K stars, below 50. The components are gorgeous. The infrastructure has gaps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tinyplex/tinybase&lt;/td&gt;
&lt;td&gt;4,980&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;44/100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reactive data store. Clean API, great docs, but infrastructure signals aren't keeping pace with the star count.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stars don't predict production readiness. At all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The highest-starred repo in my set (gluestack-ui, 4,994 stars) scored 49. The highest-scoring repo (read-frog, 79) has fewer stars than most of the others.&lt;/p&gt;

&lt;p&gt;The repos that scored well had something in common: someone invested in CI, tests, dependency management, and configuration &lt;em&gt;as foundational work&lt;/em&gt;, not as an afterthought.&lt;/p&gt;

&lt;p&gt;The repos that scored poorly had great code and great docs — but the engineering infrastructure around the code was thin or missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern
&lt;/h2&gt;

&lt;p&gt;Every time I scan repos, the same pattern emerges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The code is usually fine.&lt;/strong&gt; Whether human-written or AI-assisted, the application logic works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The infrastructure is where it breaks.&lt;/strong&gt; CI pipelines, test coverage, branch protection, secrets management, dependency health — these are the signals that separate "it runs" from "it's production-ready."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stars measure popularity, not readiness.&lt;/strong&gt; A repo can have 5,000 stars and still be missing half the production basics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What We Check
&lt;/h2&gt;

&lt;p&gt;Our scanner looks at 9 production readiness signals:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CI enforcement&lt;/li&gt;
&lt;li&gt;Test coverage&lt;/li&gt;
&lt;li&gt;Type safety&lt;/li&gt;
&lt;li&gt;Dependency health&lt;/li&gt;
&lt;li&gt;Branch protection&lt;/li&gt;
&lt;li&gt;Dead code&lt;/li&gt;
&lt;li&gt;Dead exports&lt;/li&gt;
&lt;li&gt;Linter configuration&lt;/li&gt;
&lt;li&gt;Route coverage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each signal is a binary or scored check. No AI-generated suggestions, no hallucinated fixes — just structural verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;If you maintain an open-source TypeScript project (or any project, really), I'm genuinely curious how it scores. The scanner is free, no signup required:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;repofortify.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste your repo URL, get a score in seconds. I'd love to see what the dev.to community's projects look like.&lt;/p&gt;

&lt;p&gt;And if you score above 75 — seriously, tell me. I want to celebrate the repos that are doing it right.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Samantha Start builds production readiness scanning tools at &lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt;. She scans too many repos and can't stop talking about what she finds.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>opensource</category>
      <category>devops</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Two Types of AI Code Debt — And Only One Is Scannable</title>
      <dc:creator>Samantha Start</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:14:26 +0000</pubDate>
      <link>https://dev.to/sstart/two-types-of-ai-code-debt-and-only-one-is-scannable-4216</link>
      <guid>https://dev.to/sstart/two-types-of-ai-code-debt-and-only-one-is-scannable-4216</guid>
      <description>&lt;p&gt;After scanning 200+ repos built with Claude Code, Cursor, and Copilot, we've identified two distinct types of debt:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Structural Debt — Scannable and Fixable
&lt;/h2&gt;

&lt;p&gt;Missing CI pipeline, zero test coverage, hardcoded secrets, unmanaged dependencies. This is measurable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;73% of AI-built repos&lt;/strong&gt; have no CI pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;68%&lt;/strong&gt; have zero tests
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;41%&lt;/strong&gt; have hardcoded secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are binary checks. Either CI exists or it doesn't. Either secrets are in env vars or they're hardcoded. A scanner can catch all of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Comprehension Debt — Harder to Measure
&lt;/h2&gt;

&lt;p&gt;Code that works but nobody understands because nobody wrote it with intent. AI generates 200 lines where 40 would do. The abstractions are illogical. The reviewer's eyes glaze over.&lt;/p&gt;

&lt;p&gt;This debt compounds because each untested module interacts with other untested modules. The failure modes multiply faster than the code volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap
&lt;/h2&gt;

&lt;p&gt;Most teams don't realize they have both types until the first production incident. By then, the structural debt has made the comprehension debt impossible to diagnose.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;RepoFortify&lt;/a&gt; to catch Type 1 — the structural gaps that AI coding tools consistently skip. It checks 9 production readiness signals in seconds.&lt;/p&gt;

&lt;p&gt;Type 2 is the next frontier. But you can't fix comprehension debt if your CI is broken and your tests don't exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with structure. The rest follows.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Free scan: &lt;a href="https://repofortify.com" rel="noopener noreferrer"&gt;repofortify.com&lt;/a&gt; — paste your repo URL, get a production readiness score across 9 signals. No signup required.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>codequality</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
