<?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: Dan-Cristian Podina</title>
    <description>The latest articles on DEV Community by Dan-Cristian Podina (@dancristian_podina_0b537).</description>
    <link>https://dev.to/dancristian_podina_0b537</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%2F1823882%2Ff6fbfaf2-a29a-4abc-8632-12ab2df1b4c0.png</url>
      <title>DEV Community: Dan-Cristian Podina</title>
      <link>https://dev.to/dancristian_podina_0b537</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dancristian_podina_0b537"/>
    <language>en</language>
    <item>
      <title>Before you raise: what technical due diligence asks of an AI-built codebase (2026)</title>
      <dc:creator>Dan-Cristian Podina</dc:creator>
      <pubDate>Fri, 28 Aug 2026 13:11:03 +0000</pubDate>
      <link>https://dev.to/dancristian_podina_0b537/before-you-raise-what-technical-due-diligence-asks-of-an-ai-built-codebase-2026-59bl</link>
      <guid>https://dev.to/dancristian_podina_0b537/before-you-raise-what-technical-due-diligence-asks-of-an-ai-built-codebase-2026-59bl</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://systemtrails.com/resources/technical-due-diligence-ai-built-codebase/" rel="noopener noreferrer"&gt;systemtrails.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Technical due diligence on an AI-built codebase in 2026 asks five questions: does anyone on the team understand the code, is it secure today, can it be restored after a bad day, can it be maintained by someone who did not write it, and what breaks if the founder leaves. Reviewers no longer ask whether AI wrote it. They ask for evidence that a human made it hold, and that evidence takes two to three weeks to prepare.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Five questions a 2026 review asks of an AI-built product, and the evidence that answers each:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Comprehension over provenance&lt;/strong&gt;: someone walks the reviewer through auth, payments and data access from the code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security posture&lt;/strong&gt;: row-level security, secrets out of the bundle, a dependency scan, findings already fixed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separation and recoverability&lt;/strong&gt;: staging and production are different databases, and a restore has a date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability&lt;/strong&gt;: tests, CI, low duplication, changes that touch a few files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key-person risk&lt;/strong&gt;: a new senior engineer could ship in week one from the docs alone&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How a reviewer walks your codebase
&lt;/h2&gt;

&lt;p&gt;The review is a sequence, not a scan. Each step opens the next; a "no" at any step becomes a finding in the memo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the question changed
&lt;/h2&gt;

&lt;p&gt;In March 2025, Y Combinator managing partner Jared Friedman said that for a quarter of the W25 batch, &lt;strong&gt;95% of the codebase was AI-generated&lt;/strong&gt;, and that those founders were technically capable of writing it themselves (&lt;a href="https://techcrunch.com/2025/03/06/a-quarter-of-startups-in-ycs-current-cohort-have-codebases-that-are-almost-entirely-ai-generated/" rel="noopener noreferrer"&gt;TechCrunch, 6 March 2025&lt;/a&gt;). Eighteen months later that is the default, and reviewers have adjusted.&lt;/p&gt;

&lt;p&gt;The current framing from due-diligence practitioners is blunt: the first question is no longer "is the code good?" but &lt;strong&gt;"does anyone here understand it?"&lt;/strong&gt; A two-person team can now ship a codebase with the surface area of a fifty-person organization, which breaks the old assumption that team quality predicts code quality (&lt;a href="https://justinmckelvey.com/blog/technical-due-diligence" rel="noopener noreferrer"&gt;Justin McKelvey, Technical Due Diligence in 2026, 10 August 2026&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The five questions, and the evidence for each
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Comprehension over provenance
&lt;/h3&gt;

&lt;p&gt;Who can explain the auth, payment and data-access paths from the code, without the AI chat history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; an architecture map and a 20-minute recorded walkthrough of the three paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security posture
&lt;/h3&gt;

&lt;p&gt;What the app does when nobody is logged in. Row-level security, secrets, dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; RLS proven by a test, service-role key absent from the bundle, a dated scan, and the findings you already fixed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Separation and recoverability
&lt;/h3&gt;

&lt;p&gt;Whether staging and production share a database, who holds production write access, and when you last restored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; an environment diagram with credential boundaries and a restore log with a date and a duration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintainability
&lt;/h3&gt;

&lt;p&gt;How expensive the next change is: tests, CI, duplication, files touched per change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; CI green on main, a tenant-isolation test, and the duplication you already consolidated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key-person risk
&lt;/h3&gt;

&lt;p&gt;What happens if the founder leaves. The tools do not remember why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; a README that is true, the map, a deploy-and-restore runbook, a decisions log.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time to prepare
&lt;/h3&gt;

&lt;p&gt;Two to three weeks for a product that already works and has users. No rewrite. Every step produces a document the reviewer asks for anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Comprehension: can you walk me through it?
&lt;/h2&gt;

&lt;p&gt;The first hour of a good technical review is a conversation. The reviewer picks three paths, typically sign-in, the money path, and "show me how user A cannot see user B's data," and asks the person who built it to explain them &lt;strong&gt;from the code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AI-built codebases fail this in a specific way. McKelvey's list of tells is exact: five different patterns solving one problem, comments that describe rather than explain, and authentication that "works until two people log in."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; The founder explains what the app does and opens the AI chat to find how. Three patterns for one problem, no map, nobody can say where the session is validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; The founder opens the repo, points at the middleware that validates the session, the query that scopes by tenant, and the webhook that reconciles payments. One page architecture map on the table.&lt;/p&gt;

&lt;p&gt;Dan's &lt;a href="https://systemtrails.com/resources/architecture-map-template/" rel="noopener noreferrer"&gt;free architecture map template&lt;/a&gt; is a format reviewers accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Security posture: what does the code do when nobody is logged in?
&lt;/h2&gt;

&lt;p&gt;The base rate is not on your side. Veracode's 2025 GenAI Code Security Report tested more than 100 large language models in four languages and found that &lt;strong&gt;45% of generated code samples introduced an OWASP Top 10 vulnerability&lt;/strong&gt;; for cross-site scripting the failure rate was 86%, and Java samples failed 72% of the time (&lt;a href="https://www.veracode.com/blog/genai-code-security-report/" rel="noopener noreferrer"&gt;Veracode, 30 July 2025&lt;/a&gt;). A reviewer therefore assumes generated code was not secure by default and looks for proof that someone checked.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The reference incident: CVE-2025-48757&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lovable-generated apps called Supabase directly from the browser and relied entirely on row-level security, which was often missing. Researcher Matt Palmer found &lt;strong&gt;303 endpoints across 170 projects&lt;/strong&gt; exposing usernames, emails, phone numbers, payment status and API keys. Discovered 20 March 2025, disclosed 29 May 2025 (&lt;a href="https://mattpalmer.io/posts/2025/05/CVE-2025-48757/" rel="noopener noreferrer"&gt;disclosure&lt;/a&gt;, &lt;a href="https://www.superblocks.com/blog/lovable-vulnerabilities" rel="noopener noreferrer"&gt;Superblocks write-up&lt;/a&gt;). Reviewers know this case. The first thing they try on a Supabase-backed app is a read with the anonymous key.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the reviewer tries&lt;/th&gt;
&lt;th&gt;What proves you are fine&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reads a table with the anonymous key&lt;/td&gt;
&lt;td&gt;RLS enabled on every table, and a test that fails if it is not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Searches the client bundle for &lt;code&gt;service_role&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The key is server-side only; the bundle search comes back empty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asks for the last dependency scan&lt;/td&gt;
&lt;td&gt;A scan output with a date, and the fixes committed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asks what you found yourselves&lt;/td&gt;
&lt;td&gt;A short list of three real findings you already fixed, with commits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A team that found and fixed three real issues reads as competent. A clean scan with no history reads as untested.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Separation and recoverability: what happens on the bad day?
&lt;/h2&gt;

&lt;p&gt;On 18 July 2025, during a documented code freeze, Replit's agent deleted the production database of a SaaStr application holding records on about 1,200 executives and companies, then reported that rollback was impossible when it was not (&lt;a href="https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/" rel="noopener noreferrer"&gt;The Register, 21 July 2025&lt;/a&gt;). The founder's own diagnosis afterwards is the one a reviewer gives: &lt;strong&gt;nothing may overwrite a production database&lt;/strong&gt;, and preview, staging and production must be cleanly separated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; One database for preview and production. The AI tool and the deploy pipeline both hold production write credentials. Backups exist in theory; nobody has restored one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Staging and production are different databases with different credentials. No agent holds production write access. A restore was run on a known date and took a known number of minutes.&lt;/p&gt;

&lt;p&gt;If you have never restored, do it once before the data room opens: half a day of work that turns the most uncomfortable question in the review into a paragraph.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Maintainability: how expensive is the next change?
&lt;/h2&gt;

&lt;p&gt;Investors price the next twelve months of engineering, and AI-generated code has a measurable signature. GitClear's analysis of 211 million changed lines from 2020 to 2024 found copy-pasted code rising from &lt;strong&gt;8.3% to 12.3%&lt;/strong&gt; of changed lines while refactored code fell from &lt;strong&gt;25% to under 10%&lt;/strong&gt; (&lt;a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research" rel="noopener noreferrer"&gt;GitClear, 2025&lt;/a&gt;). In practice: the same validation logic in six places, and one rule change touches all of them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal the reviewer checks&lt;/th&gt;
&lt;th&gt;Weak&lt;/th&gt;
&lt;th&gt;Strong&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;None, or not run anywhere&lt;/td&gt;
&lt;td&gt;Run in CI on every push, cover the money path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Files touched by a small change&lt;/td&gt;
&lt;td&gt;Ten to fifteen&lt;/td&gt;
&lt;td&gt;Two or three&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ways to do one thing&lt;/td&gt;
&lt;td&gt;Five patterns for validation&lt;/td&gt;
&lt;td&gt;One, reused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplication&lt;/td&gt;
&lt;td&gt;Same logic copy-pasted across modules&lt;/td&gt;
&lt;td&gt;Consolidated, with the commits that did it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An enterprise security questionnaire and a new engineer's first week fail on exactly the same missing pieces.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Key-person risk: what if you leave?
&lt;/h2&gt;

&lt;p&gt;The team is usually one or two people, and the tools do not remember why. Developers themselves are cautious here: Stack Overflow's 2025 survey of over 49,000 developers found &lt;strong&gt;84% using or planning to use AI tools, while 46% distrust the accuracy&lt;/strong&gt; of the output and 66% name "almost right, but not quite" solutions as their top frustration (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey 2025&lt;/a&gt;). Reviewers apply the same caution to a codebase whose only documentation is a chat transcript.&lt;/p&gt;

&lt;p&gt;The question is simple: &lt;strong&gt;could a senior engineer you hire next month ship a real change in week one using only what is in the repo?&lt;/strong&gt; If the answer depends on you being in the room, that is the finding.&lt;/p&gt;

&lt;h3&gt;
  
  
  A README that is true
&lt;/h3&gt;

&lt;p&gt;How to run it, how to deploy it, where the secrets live, what is deliberately not done yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture map
&lt;/h3&gt;

&lt;p&gt;Systems, data stores, external services, and the boundaries between them, on one page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy and restore runbook
&lt;/h3&gt;

&lt;p&gt;The exact steps, the last time each was run, and how long it took.&lt;/p&gt;

&lt;h3&gt;
  
  
  The decisions log
&lt;/h3&gt;

&lt;p&gt;Why Supabase, why this auth provider, what you skipped and why. The part no chat transcript keeps.&lt;/p&gt;

&lt;p&gt;This is the trail a senior architect leaves after a hardening pass, and the same trail that keeps your first hire.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three weeks before the data room
&lt;/h2&gt;

&lt;p&gt;Nothing above requires a rewrite. For an AI-built product that already works, the preparation is a fixed-scope hardening pass:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Week&lt;/th&gt;
&lt;th&gt;Work&lt;/th&gt;
&lt;th&gt;Document it produces&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Fix the top security findings; prove isolation with a test; get the service-role key out of the client&lt;/td&gt;
&lt;td&gt;Findings-and-fixes list with commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Separate staging from production; rotate credentials; run and time a restore&lt;/td&gt;
&lt;td&gt;Environment diagram, restore log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Consolidate the worst duplication; get CI green; write the map, README and runbook&lt;/td&gt;
&lt;td&gt;Architecture map, runbook, decisions log&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you do one thing today&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run a restore from your most recent backup into a scratch database and write down the date and how long it took. It is the cheapest sentence in the whole data room, and almost nobody has it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The same preparation answers the other four trigger moments: the enterprise pilot's security questionnaire, the first engineering hire, the first real incident, and the first week of scale pain all ask for this evidence in a different order.&lt;/p&gt;

&lt;p&gt;If you want senior eyes on your actual code before an investor's, that is what the &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;free teardown&lt;/a&gt; is: three concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TechCrunch, "A quarter of startups in YC's current cohort have codebases that are almost entirely AI-generated", 6 March 2025: &lt;a href="https://techcrunch.com/2025/03/06/a-quarter-of-startups-in-ycs-current-cohort-have-codebases-that-are-almost-entirely-ai-generated/" rel="noopener noreferrer"&gt;https://techcrunch.com/2025/03/06/a-quarter-of-startups-in-ycs-current-cohort-have-codebases-that-are-almost-entirely-ai-generated/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Justin McKelvey, "Technical Due Diligence in 2026: Checklist + the AI-Code Question", 10 August 2026: &lt;a href="https://justinmckelvey.com/blog/technical-due-diligence" rel="noopener noreferrer"&gt;https://justinmckelvey.com/blog/technical-due-diligence&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Veracode, "2025 GenAI Code Security Report", 30 July 2025: &lt;a href="https://www.veracode.com/blog/genai-code-security-report/" rel="noopener noreferrer"&gt;https://www.veracode.com/blog/genai-code-security-report/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Matt Palmer, "CVE-2025-48757" disclosure, 29 May 2025: &lt;a href="https://mattpalmer.io/posts/2025/05/CVE-2025-48757/" rel="noopener noreferrer"&gt;https://mattpalmer.io/posts/2025/05/CVE-2025-48757/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Superblocks, "Lovable Vulnerability Explained: How 170+ Apps Were Exposed": &lt;a href="https://www.superblocks.com/blog/lovable-vulnerabilities" rel="noopener noreferrer"&gt;https://www.superblocks.com/blog/lovable-vulnerabilities&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Register, "Vibe coding service Replit deleted user's production database", 21 July 2025: &lt;a href="https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/" rel="noopener noreferrer"&gt;https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitClear, "AI Copilot Code Quality: 2025 Data Suggests 4x Growth in Code Clones" (211M changed lines, 2020 to 2024): &lt;a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research" rel="noopener noreferrer"&gt;https://www.gitclear.com/ai_assistant_code_quality_2025_research&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Stack Overflow, "2025 Developer Survey: AI": &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;https://survey.stackoverflow.co/2025/ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SystemTrails, "The Architecture Map Every AI-Built Startup Needs": /resources/architecture-map-template/&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Want this checked on your actual code? &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Free teardown&lt;/a&gt;: 3 concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

</description>
      <category>duediligence</category>
      <category>fundraising</category>
      <category>aimvp</category>
      <category>security</category>
    </item>
    <item>
      <title>What Is a Vibe Code Audit? (And What a Real One Should Cover)</title>
      <dc:creator>Dan-Cristian Podina</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:53:13 +0000</pubDate>
      <link>https://dev.to/dancristian_podina_0b537/what-is-a-vibe-code-audit-and-what-a-real-one-should-cover-4enn</link>
      <guid>https://dev.to/dancristian_podina_0b537/what-is-a-vibe-code-audit-and-what-a-real-one-should-cover-4enn</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://systemtrails.com/resources/what-is-a-vibe-code-audit/" rel="noopener noreferrer"&gt;systemtrails.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;vibe code audit&lt;/strong&gt; is a review of an app built with AI coding tools (Cursor, Claude Code, Copilot, Bolt, Lovable...) by someone who reads the actual code and tells you, in plain English:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What you actually have&lt;/strong&gt; — a map of the system the AI built for you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's risky&lt;/strong&gt; — security holes, silent failures, things that break under load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What to fix first&lt;/strong&gt; — a ranked list, not a 40-page dump&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A real audit covers security, architecture, data handling, and handover-readiness. Automated scans catch some of the first category and none of the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this is suddenly a thing
&lt;/h2&gt;

&lt;p&gt;AI coding tools made it possible to build a working product without knowing how it works. That's genuinely great — until the first moment you need to &lt;em&gt;trust&lt;/em&gt; the thing: real users, real payments, real data, a first hire, an investor's due-diligence call.&lt;/p&gt;

&lt;p&gt;At that moment founders discover an uncomfortable truth: &lt;strong&gt;"it works" and "it's sound" are different claims.&lt;/strong&gt; The app demos beautifully. Whether it leaks API keys, loses data on a failed payment, or collapses at 500 users — nobody knows, because nobody ever looked.&lt;/p&gt;

&lt;p&gt;A vibe code audit is somebody looking.&lt;/p&gt;




&lt;h2&gt;
  
  
  What a real audit covers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Exposed API keys, missing input validation, unprotected routes, auth shortcuts the AI took to make the demo work. This is the category that can hurt you &lt;strong&gt;today&lt;/strong&gt;, not at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;What the pieces are, how they connect, and where the God Files and mystery couplings live. This is what decides whether change #50 takes an afternoon or a week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data handling
&lt;/h3&gt;

&lt;p&gt;Where user data lives, what happens when a write fails halfway, whether there are backups, and what you're sending to third parties without realizing it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handover-readiness
&lt;/h3&gt;

&lt;p&gt;Could a developer you hire tomorrow understand this system? Is there a map, or is the only entity that understands your app an AI session that no longer exists?&lt;/p&gt;

&lt;p&gt;If an "audit" only covers the first box, it's a security scan. Useful — but it won't tell you why your app got slower, why every change breaks something else, or why the senior developer you tried to hire noped out after seeing the repo.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;Rough shape of the market:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated scanners&lt;/strong&gt; — free to low cost. They pattern-match known vulnerability shapes. Good hygiene, zero context. They can't tell you whether your architecture makes sense, only whether line 214 looks scary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human code review by a senior engineer&lt;/strong&gt; — anywhere from around a thousand to several thousand dollars depending on depth and codebase size. This is where architecture, data flows, and handover-readiness get covered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full consulting engagements&lt;/strong&gt; — five figures. Usually overkill before you have revenue that depends on the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For reference, SystemTrails starts with a &lt;strong&gt;&lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;free teardown&lt;/a&gt;&lt;/strong&gt; — a recorded senior review with 3 concrete findings and a fix-or-rebuild verdict in 72 hours — and paid &lt;a href="https://systemtrails.com/pricing/" rel="noopener noreferrer"&gt;Hardening Sprints run from $2,500, fixed&lt;/a&gt;, with every deliverable in plain English.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The honest disclaimer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, I sell the fixes, so read this section with that in mind. It's also why the rest of this post tells you exactly what to demand from &lt;em&gt;anyone&lt;/em&gt; reviewing your code — including me.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How to spot a shallow audit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Runs a scanner over your repo → sends you a 40-page PDF of findings sorted by scariness → half are false positives → no ranking, no context, no map → you're more anxious and no wiser&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Reads your actual code → explains what your system IS before what's wrong with it → ranks findings by what actually threatens your business → tells you what to fix now, what to fix next, and what to ignore&lt;/p&gt;

&lt;p&gt;Questions to ask anyone offering you an audit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Will you read the code yourself, or run a tool over it?"&lt;/strong&gt; Tools assist; they don't replace reading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Will I get a map of my system?"&lt;/strong&gt; If the answer is no, you're buying a list of symptoms without a diagnosis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Will the findings be ranked?"&lt;/strong&gt; Twenty findings with no priority order is homework, not help.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Will I understand the report without a CS degree?"&lt;/strong&gt; If the deliverable needs a translator, it wasn't written for you.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Do you actually need one?
&lt;/h2&gt;

&lt;p&gt;Not always. You probably &lt;strong&gt;don't&lt;/strong&gt; need an audit if you're pre-launch with no users and still iterating on what the product even is — you'd be auditing code you're about to throw away.&lt;/p&gt;

&lt;p&gt;You probably &lt;strong&gt;do&lt;/strong&gt; if any of these are true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real users, real payments, or real personal data are in the system&lt;/li&gt;
&lt;li&gt;You're about to hire your first developer&lt;/li&gt;
&lt;li&gt;An investor is starting due diligence&lt;/li&gt;
&lt;li&gt;The app has started behaving strangely and nobody knows why&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Find out in 60 seconds&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://systemtrails.com/#score-funnel" rel="noopener noreferrer"&gt;Take the free SystemTrails Score →&lt;/a&gt;&lt;/strong&gt; — 6 questions about your app, no email required to see your score. It tells you which risk patterns likely apply and whether an audit is worth it for you at all.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Already know you need eyes on the code? &lt;strong&gt;&lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Get your free teardown →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Want this checked on your actual code? &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Free teardown&lt;/a&gt;: 3 concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>aimvp</category>
      <category>architecture</category>
      <category>codequality</category>
    </item>
    <item>
      <title>The Architecture Map Every AI-Built Startup Needs (Free Template)</title>
      <dc:creator>Dan-Cristian Podina</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:52:18 +0000</pubDate>
      <link>https://dev.to/dancristian_podina_0b537/the-architecture-map-every-ai-built-startup-needs-free-template-nmm</link>
      <guid>https://dev.to/dancristian_podina_0b537/the-architecture-map-every-ai-built-startup-needs-free-template-nmm</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://systemtrails.com/resources/architecture-map-template/" rel="noopener noreferrer"&gt;systemtrails.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An architecture map is a simple diagram that shows &lt;strong&gt;what your app is made of and how the pieces connect.&lt;/strong&gt; You need one when you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hire&lt;/strong&gt; — so new developers can understand your system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fundraise&lt;/strong&gt; — so investors know the tech is real&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale&lt;/strong&gt; — so you know what will break first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This post includes a free template you can fill in yourself, plus examples from real AI-built apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  You built it. Can you explain it?
&lt;/h2&gt;

&lt;p&gt;Here's a question that makes AI-app founders uncomfortable: &lt;strong&gt;"Can you draw how your system works?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not the screens. Not the features. The actual system — what talks to what, where the data lives, what happens when a user signs up or makes a payment.&lt;/p&gt;

&lt;p&gt;If you built with Cursor, Claude Code, Bolt, Lovable, or Copilot, you probably can't. Not because you're not smart — because the AI never told you. It just... built things. Feature by feature. And now you have a working app that nobody fully understands.&lt;/p&gt;

&lt;p&gt;That's fine for a prototype. It's not fine when you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explain the tech stack to a potential investor&lt;/li&gt;
&lt;li&gt;Onboard a new developer&lt;/li&gt;
&lt;li&gt;Figure out why something broke at 2am&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need an &lt;strong&gt;architecture map.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What an architecture map actually is
&lt;/h2&gt;

&lt;p&gt;It's not complicated. An architecture map is a diagram that shows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The pieces&lt;/strong&gt; — your frontend, backend, database, third-party services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How they connect&lt;/strong&gt; — what calls what, what data flows where&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where the risks are&lt;/strong&gt; — single points of failure, unprotected routes, missing backups&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's what a typical AI-built SaaS looks like when mapped out:&lt;/p&gt;

&lt;p&gt;Even this simple diagram tells you a lot. You can see that &lt;strong&gt;everything goes through the API server&lt;/strong&gt; — that's a single point of failure. You can see that Auth writes directly to the database. You can see all the external services you depend on.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 3 moments you'll wish you had one
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hiring
&lt;/h3&gt;

&lt;p&gt;You post a job. A senior developer applies. They ask: "Can you show me the architecture?" You send them... a link to the repo? A 30-minute Zoom call trying to explain it from memory?&lt;/p&gt;

&lt;p&gt;With a map, you send them a single page. They understand your system in 5 minutes. They're excited to join, not scared.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fundraising
&lt;/h3&gt;

&lt;p&gt;An investor asks about your tech during due diligence. "Is this scalable? What's your infrastructure look like?"&lt;/p&gt;

&lt;p&gt;Without a map, you stumble through it. With a map, you pull up a clear diagram that shows you actually know what you've built. That's the difference between "technical risk" and "technical confidence" in their notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  When things break
&lt;/h3&gt;

&lt;p&gt;It's 11pm. Users are reporting errors. You need to figure out what's wrong, fast.&lt;/p&gt;

&lt;p&gt;Without a map, you're guessing — clicking through files, reading logs, trying to trace the path. With a map, you look at the diagram: "The error is in payments. Payments talk to Stripe and the database. Let me check those two things." Found in 5 minutes instead of 2 hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  What goes in the map
&lt;/h2&gt;

&lt;p&gt;Your architecture map should include these four layers:&lt;/p&gt;

&lt;h3&gt;
  
  
  Components
&lt;/h3&gt;

&lt;p&gt;Every piece of your system: frontend app, API server, database, cache, queues, external services. Give each one a name and a technology label.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connections
&lt;/h3&gt;

&lt;p&gt;What talks to what. Your frontend calls your API. Your API reads from the database. Your API calls Stripe. Draw the arrows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Flows
&lt;/h3&gt;

&lt;p&gt;Where does user data go? What gets stored where? What gets sent to external services? This is where privacy and compliance risks hide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Risk Zones
&lt;/h3&gt;

&lt;p&gt;Single points of failure. Components without backups. Unencrypted connections. Missing authentication. Mark these on the map.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example: What happens when a user signs up
&lt;/h2&gt;

&lt;p&gt;Let's trace a real flow through the map. Here's the typical sign-up process in an AI-built app:&lt;/p&gt;

&lt;p&gt;Now here's the important part: &lt;strong&gt;look at what could go wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What if the auth service creates the account but the API fails to create the profile? Now you have a user who can log in but has no profile.&lt;/li&gt;
&lt;li&gt;What if the email service is down? Does the signup still complete, or does the whole thing fail?&lt;/li&gt;
&lt;li&gt;Is the auth token stored securely, or is it sitting in localStorage where any script can read it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are exactly the questions an architecture map helps you answer &lt;strong&gt;before&lt;/strong&gt; they become real problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Explaining your app: without a map vs. with a map
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; &lt;em&gt;Investor:&lt;/em&gt; 'Walk me through your tech stack.' &lt;em&gt;You:&lt;/em&gt; 'So we have React on the front, and then there's an API, and Supabase, and we use Stripe, and there's also this thing with Clerk for auth, and...' &lt;em&gt;Investor:&lt;/em&gt; [writes 'technical risk' in their notes]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; &lt;em&gt;Investor:&lt;/em&gt; 'Walk me through your tech stack.' &lt;em&gt;You:&lt;/em&gt; 'Here's our architecture map. Six components, three external services. Data flows top to bottom. I've highlighted the two areas we're strengthening this quarter.' &lt;em&gt;Investor:&lt;/em&gt; [writes 'strong technical founder' in their notes]&lt;/p&gt;




&lt;h2&gt;
  
  
  The free template
&lt;/h2&gt;

&lt;p&gt;Here's what's included in the SystemTrails Architecture Map Template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blank architecture diagram&lt;/strong&gt; — fill in your components, connections, and data flows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component inventory checklist&lt;/strong&gt; — make sure you haven't missed anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk identification guide&lt;/strong&gt; — questions to ask about each component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example filled-in map&lt;/strong&gt; — based on a real AI-built SaaS (anonymized)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what a completed map looks like:&lt;/p&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%2F3o5pgw2rhyrggg273h6e.jpg" 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%2F3o5pgw2rhyrggg273h6e.jpg" alt="A sample SystemTrails Architecture Map showing components, connections, and risk assessment" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's the same template I use as the starting point for every client review.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get the free template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want the template? &lt;strong&gt;&lt;a href="https://cal.com/dan-podina-snqasy/15min" rel="noopener noreferrer"&gt;Book a 15-minute call&lt;/a&gt;&lt;/strong&gt; and I'll send it to you, plus walk you through how to fill it in for your specific app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or skip the template and get the real thing: a &lt;strong&gt;&lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;free teardown&lt;/a&gt;&lt;/strong&gt; — I walk your actual repo on video and you get 3 concrete findings plus a fix-or-rebuild verdict, within 72 hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want the full picture?
&lt;/h2&gt;

&lt;p&gt;The free template gives you the structure. But filling it in accurately requires reading the actual code, tracing real data flows, and understanding the runtime behavior of your system.&lt;/p&gt;

&lt;p&gt;That's what the &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;free SystemTrails teardown&lt;/a&gt; starts: senior eyes on your actual codebase, and if deeper work makes sense, a fixed-price Hardening Sprint that ships the fixes &lt;strong&gt;plus the trail&lt;/strong&gt; — an architecture map, docs, tests, and a runbook, all in plain English.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Not sure if you need it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://systemtrails.com/#score-funnel" rel="noopener noreferrer"&gt;Take the free SystemTrails Score →&lt;/a&gt;&lt;/strong&gt; — 6 questions, 60 seconds. Find out where your app stands.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Want this checked on your actual code? &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Free teardown&lt;/a&gt;: 3 concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>startup</category>
      <category>template</category>
      <category>aimvp</category>
    </item>
    <item>
      <title>I Audited 50+ AI-Built Codebases. Here's What They All Get Wrong.</title>
      <dc:creator>Dan-Cristian Podina</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:51:33 +0000</pubDate>
      <link>https://dev.to/dancristian_podina_0b537/i-audited-50-ai-built-codebases-heres-what-they-all-get-wrong-4jo2</link>
      <guid>https://dev.to/dancristian_podina_0b537/i-audited-50-ai-built-codebases-heres-what-they-all-get-wrong-4jo2</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://systemtrails.com/resources/audited-50-ai-codebases/" rel="noopener noreferrer"&gt;systemtrails.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After auditing 50+ codebases built with AI coding tools, the same 5 problems appear in almost every one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The God File&lt;/strong&gt; — one massive file runs everything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent Failures&lt;/strong&gt; — errors happen but nobody knows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets in Plain Sight&lt;/strong&gt; — API keys hardcoded in the code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Validation&lt;/strong&gt; — the app trusts all input blindly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Invisible Architecture&lt;/strong&gt; — no one can explain how the system connects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you built fast with AI, you probably have at least 3 of these. The good news: they're all fixable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI code works... until it doesn't
&lt;/h2&gt;

&lt;p&gt;Here's a way to think about it.&lt;/p&gt;

&lt;p&gt;Imagine you hired a brilliant contractor to build you a house. They work incredibly fast — walls go up overnight, plumbing appears, the kitchen looks great. You move in. Everything works.&lt;/p&gt;

&lt;p&gt;Then one day you want to add a second bathroom. The contractor who built it is gone. A new plumber looks at the pipes and says: &lt;em&gt;"Who did this? The kitchen pipes run through the bedroom wall, the gas line shares a duct with the electrical, and there's no shutoff valve."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's what AI-built code looks like from the inside. It &lt;strong&gt;works&lt;/strong&gt; — until you need to change it, scale it, or let someone else touch it.&lt;/p&gt;

&lt;p&gt;I've now audited over 50 apps built with Cursor, Claude Code, Copilot, Bolt, Lovable, and similar tools. The patterns are remarkably consistent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pattern 1: The God File
&lt;/h2&gt;

&lt;h3&gt;
  
  
  One file runs everything
&lt;/h3&gt;

&lt;p&gt;AI tools love to put everything in one place. Login logic, payment processing, email sending, database queries — all in a single file that's 2,000+ lines long.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Change one thing, break three others. It's like having every room in your house share the same wall — knock one down, the roof caves in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tell:&lt;/strong&gt; You have a file called &lt;code&gt;app.js&lt;/code&gt;, &lt;code&gt;main.py&lt;/code&gt;, or &lt;code&gt;index.ts&lt;/code&gt; that's longer than 500 lines and handles more than one job.&lt;/p&gt;

&lt;p&gt;Here's what happens when your code is tightly coupled — changing one piece causes a chain reaction:&lt;/p&gt;

&lt;p&gt;When things are properly separated, a change to login only affects login. Nothing else breaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pattern 2: Silent Failures
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Errors happen. Nobody knows.
&lt;/h3&gt;

&lt;p&gt;AI-generated code rarely includes proper error handling. When something goes wrong — a payment fails, a database query times out, an API returns unexpected data — the app just... keeps going. Silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Your users see weird behavior. Data gets corrupted. You find out about problems from angry customers, not from your system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tell:&lt;/strong&gt; Search your code for &lt;code&gt;catch&lt;/code&gt; blocks. If they're empty, or just log to console, you have this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Payment fails → app continues → user thinks they paid → no product delivered → support ticket → you find out 3 days later&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Payment fails → error caught → user sees clear message → alert sent to you → you fix it in 10 minutes&lt;/p&gt;




&lt;h2&gt;
  
  
  Pattern 3: Secrets in Plain Sight
&lt;/h2&gt;

&lt;h3&gt;
  
  
  API keys hardcoded in the code
&lt;/h3&gt;

&lt;p&gt;When you tell an AI tool "connect to Stripe" or "add authentication," it often puts the API key directly in the source code. If your code is on GitHub (even a private repo), those keys are one leak away from being compromised.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Anyone who sees your code sees your keys. Bots scan GitHub for exposed API keys constantly. A leaked Stripe key means someone else charges your customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tell:&lt;/strong&gt; Open your code and search for strings that look like &lt;code&gt;sk_live_&lt;/code&gt;, &lt;code&gt;AKIA&lt;/code&gt;, or any long random string. If they're in the code (not in environment variables), you have this problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This one is urgent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlike the other patterns, exposed secrets can be exploited &lt;strong&gt;today&lt;/strong&gt;. If you find hardcoded API keys, rotate them immediately and move them to environment variables. Don't wait for an audit.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Pattern 4: Zero Validation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The app trusts all input blindly
&lt;/h3&gt;

&lt;p&gt;AI tools build the "happy path" — what happens when everything goes right. They rarely add checks for what happens when things go wrong. A user enters a negative number for quantity? The app processes it. Someone submits a form with a script tag? It runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; This is how apps get hacked, data gets corrupted, and invoices show negative amounts. Every input from a user or external system should be validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tell:&lt;/strong&gt; Look at your form handlers and API endpoints. If they take the input and immediately use it without checking, you have this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; User enters '-5' as quantity → order created for -5 items → refund triggered → accounting is confused → you owe the user money somehow&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; User enters '-5' as quantity → form says 'Please enter a valid quantity' → order not created → everyone's happy&lt;/p&gt;




&lt;h2&gt;
  
  
  Pattern 5: The Invisible Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Nobody knows how the system connects
&lt;/h3&gt;

&lt;p&gt;AI builds each feature in isolation. Need login? Done. Need payments? Done. Need email notifications? Done. But there's no map of how these pieces connect. No documentation. No diagram. The only person who understands the system is... the AI that built it. And it doesn't remember.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; You can't hire a developer if they can't understand the system. You can't get investment if you can't explain the tech. You can't fix a bug if you don't know what talks to what.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tell:&lt;/strong&gt; Try to draw your system on a whiteboard right now — every service, database, API, and how they connect. If you can't, neither can anyone else.&lt;/p&gt;

&lt;p&gt;This is what the architecture of a typical AI-built app looks like vs. what it should look like:&lt;/p&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%2Fiwj9w6xpbl4l1rdywpvg.jpg" 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%2Fiwj9w6xpbl4l1rdywpvg.jpg" alt="Spaghetti Architecture vs Structured Architecture — a visual comparison" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The 60-Second Self-Check
&lt;/h2&gt;

&lt;p&gt;Answer these questions honestly:&lt;/p&gt;

&lt;p&gt;If you answered "yes" to even one of these, your app has technical debt that will slow you down when you try to hire, scale, or raise funding.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to do about it
&lt;/h2&gt;

&lt;p&gt;The good news: every one of these patterns is fixable. They don't require a rewrite. They require &lt;strong&gt;structure&lt;/strong&gt; — knowing what you have, where the risks are, and what to fix first.&lt;/p&gt;

&lt;p&gt;That's exactly what the &lt;a href="https://systemtrails.com/#score-funnel" rel="noopener noreferrer"&gt;SystemTrails Score&lt;/a&gt; measures. It takes 60 seconds, and you'll get a personalized risk report showing which of these patterns apply to your app.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Next step&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://systemtrails.com/#score-funnel" rel="noopener noreferrer"&gt;Take the free SystemTrails Score →&lt;/a&gt;&lt;/strong&gt; — 6 questions, 60 seconds, personalized risk report.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or if you already know you need help: &lt;strong&gt;&lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;get your free teardown&lt;/a&gt;&lt;/strong&gt; — I'll review your actual codebase on video and tell you exactly what to fix, in what order, within 72 hours.&lt;/p&gt;




&lt;p&gt;Want this checked on your actual code? &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Free teardown&lt;/a&gt;: 3 concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>aimvp</category>
      <category>architecture</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Your AI-built app connects to Gmail. Six things that have to hold before launch (2026)</title>
      <dc:creator>Dan-Cristian Podina</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:51:26 +0000</pubDate>
      <link>https://dev.to/dancristian_podina_0b537/your-ai-built-app-connects-to-gmail-six-things-that-have-to-hold-before-launch-2026-449m</link>
      <guid>https://dev.to/dancristian_podina_0b537/your-ai-built-app-connects-to-gmail-six-things-that-have-to-hold-before-launch-2026-449m</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://systemtrails.com/resources/gmail-connected-ai-built-app-before-launch/" rel="noopener noreferrer"&gt;systemtrails.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gmail-connected apps built with AI coding tools fail in six predictable places. Check these before launch, in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scopes&lt;/strong&gt;: ask for the narrowest Gmail scope, not full access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token storage&lt;/strong&gt;: refresh tokens encrypted, server-side, per user, revocable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user isolation&lt;/strong&gt;: one user can never read another user's messages, even through a bug&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google verification and CASA&lt;/strong&gt;: without it you are capped at 100 test users and 7-day tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch renewals&lt;/strong&gt;: push notifications expire after 7 days; renew and reconcile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deletion and data policy&lt;/strong&gt;: delete means delete, including Google's Limited Use rules&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you built an app on Gmail with Cursor, Claude Code, Lovable, Replit, or Bolt, it probably works. That is not the question before launch. The question is whether it keeps working with real users, real inboxes, and Google's reviewers watching. Here is what a senior architect checks first, with the numbers that matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scopes: the AI asked for more than you need
&lt;/h2&gt;

&lt;p&gt;Gmail's API has a ladder of OAuth scopes. &lt;code&gt;gmail.readonly&lt;/code&gt; reads. &lt;code&gt;gmail.send&lt;/code&gt; sends. &lt;code&gt;gmail.modify&lt;/code&gt; labels and archives. &lt;code&gt;https://mail.google.com/&lt;/code&gt; is full access, including permanent deletion. AI coding tools tend to request full access because every feature works on the first try.&lt;/p&gt;

&lt;p&gt;Three problems follow. Users see a scarier consent screen and drop off. Google's verification review asks you to justify every scope, and "the AI picked it" is not a justification. And a breach of a full-access token is a breach of the whole mailbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; open your OAuth client configuration and your code's scope list. If &lt;code&gt;mail.google.com&lt;/code&gt; is there and you do not delete messages, remove it. Expect to re-verify after a scope change.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Token storage: where the refresh tokens actually live
&lt;/h2&gt;

&lt;p&gt;A Gmail refresh token is a standing key to someone's inbox. The pattern in AI-built apps, seen repeatedly: the token is written to a database column in plain text, sometimes logged on every request, occasionally shipped to the browser so the frontend can "call Gmail directly."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What has to hold:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tokens are stored server-side only, encrypted at rest with a key from a KMS or vault, not a constant in the code.&lt;/li&gt;
&lt;li&gt;Each token is bound to exactly one user record; the lookup is by the authenticated session, never by a client-supplied user id.&lt;/li&gt;
&lt;li&gt;Logs redact tokens and message bodies.&lt;/li&gt;
&lt;li&gt;Deleting the account revokes the token at Google (&lt;code&gt;oauth2.revoke&lt;/code&gt;) and destroys the stored copy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; search the repo and the database schema for &lt;code&gt;refresh_token&lt;/code&gt;. Trace every read of that column. If any path returns it to the client or writes it to a log, that is finding number one of your teardown.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Per-user isolation: the bug that leaks someone else's inbox
&lt;/h2&gt;

&lt;p&gt;Every Gmail-connected app has a place where it decides &lt;em&gt;whose&lt;/em&gt; token to use. In AI-built code that decision is often made from a parameter in the request (&lt;code&gt;?userId=&lt;/code&gt;), from a cached "current user" variable that survives across requests, or from a background job that iterates users and reuses one client object.&lt;/p&gt;

&lt;p&gt;This is the failure mode that turns a bug into a breach: user A's sync job runs with user B's token, or a shared client retains the last user's credentials. It is invisible in single-user testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; find every construction of the Gmail client. Confirm it is built from the token of the authenticated user in that request or that job, and destroyed after. Then write the one test that matters: two users, two inboxes, assert that no call for user A ever carries user B's token.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Google verification and the CASA assessment
&lt;/h2&gt;

&lt;p&gt;Until your OAuth consent screen is published and verified, the project stays in &lt;strong&gt;Testing&lt;/strong&gt; mode: a maximum of &lt;strong&gt;100 test users&lt;/strong&gt;, refresh tokens that &lt;strong&gt;expire after 7 days&lt;/strong&gt;, and an "unverified app" screen for everyone. Founders hit this the week after launch, when the first cohort's connections silently die.&lt;/p&gt;

&lt;p&gt;Any restricted Gmail scope (read, modify, send) requires more than the standard brand verification: an independent &lt;strong&gt;CASA (Cloud Application Security Assessment)&lt;/strong&gt; by a Google-authorized assessor, &lt;strong&gt;renewed every year&lt;/strong&gt;. Plan for weeks of calendar time and an external cost, and expect the assessor to ask about the exact things in sections 2 and 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; in Google Cloud Console, look at the OAuth consent screen's publishing status and verification status. If it says Testing, your launch has a 100-user ceiling today.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Watch renewals: push notifications expire after 7 days
&lt;/h2&gt;

&lt;p&gt;If the app reacts to new mail, it uses &lt;code&gt;users.watch()&lt;/code&gt; to get push notifications through Pub/Sub. That subscription &lt;strong&gt;expires after 7 days&lt;/strong&gt;. Production integrations renew it on a schedule and, after any gap, catch up with &lt;code&gt;history.list&lt;/code&gt; from the last known &lt;code&gt;historyId&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;AI-generated code creates the watch once, during setup, and never again. The symptom: the app works in the demo, then goes quiet for every user about a week after they connected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; search for &lt;code&gt;watch(&lt;/code&gt;. If there is no scheduled renewal and no reconciliation on &lt;code&gt;historyId&lt;/code&gt;, the integration is a demo, not a product.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Deletion, retention, and Google's Limited Use rules
&lt;/h2&gt;

&lt;p&gt;Gmail data falls under Google's API Services User Data Policy, including the &lt;strong&gt;Limited Use&lt;/strong&gt; requirements: use the data only to provide the user-facing feature, do not sell it, do not use it for ads, and do not let humans read it except in narrow cases. Your privacy policy has to say this, and the app has to do it.&lt;/p&gt;

&lt;p&gt;AI-built apps commonly cache message bodies "for performance," keep them after the user disconnects, and feed them to a third-party model without telling the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The check:&lt;/strong&gt; disconnect a test account and look at the database. Anything left is a policy problem and, for employment or health data, a legal one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "ready" looks like
&lt;/h2&gt;

&lt;p&gt;A Gmail-connected app is launch-ready when: the scope list is minimal and justified; tokens are encrypted, server-side, per user, and revoked on deletion; the two-user isolation test passes; the consent screen is verified (with the CASA assessment scheduled if the scopes are restricted); watches renew on a schedule; and disconnect leaves nothing behind.&lt;/p&gt;

&lt;p&gt;None of this requires a rewrite. In most AI-built apps it is a fixed-scope hardening pass of one to two weeks, done once, with the trail left behind: the isolation test, the renewal job, the runbook for the day Google emails you about your assessment.&lt;/p&gt;

&lt;p&gt;If you want senior eyes on your actual code first, that is what the &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;free teardown&lt;/a&gt; is: three findings and a verdict, recorded, within 72 hours.&lt;/p&gt;




&lt;p&gt;Want this checked on your actual code? &lt;a href="https://systemtrails.com/free-teardown/" rel="noopener noreferrer"&gt;Free teardown&lt;/a&gt;: 3 concrete findings and a fix-or-rebuild verdict, recorded, within 72 hours.&lt;/p&gt;

</description>
      <category>gmail</category>
      <category>oauth</category>
      <category>aimvp</category>
      <category>security</category>
    </item>
  </channel>
</rss>
