<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Vibe Coding on KnightLi Blog</title>
        <link>https://www.knightli.com/en/tags/vibe-coding/</link>
        <description>Recent content in Vibe Coding on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 16 May 2026 22:44:43 +0800</lastBuildDate><atom:link href="https://www.knightli.com/en/tags/vibe-coding/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>easy-vibe: A Learning Map for Vibe Coding Beginners</title>
        <link>https://www.knightli.com/en/2026/05/16/easy-vibe-vibe-coding-learning-map/</link>
        <pubDate>Sat, 16 May 2026 22:44:43 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/16/easy-vibe-vibe-coding-learning-map/</guid>
        <description>&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/datawhalechina/easy-vibe&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;easy-vibe&lt;/a&gt; is an open source Vibe Coding learning project from Datawhale. It is not aimed at developers who are already fluent with AI coding tools. It is aimed at students, product managers, designers, operators, indie developers, and technical hobbyists who are just starting with Vibe Coding.&lt;/p&gt;
&lt;p&gt;The value of this project is not that it lists another batch of AI tools. It turns &amp;ldquo;how to start building projects with AI&amp;rdquo; into a learning path that is easier to understand. For many beginners, the hard part is not knowing that Claude Code, Cursor, MCP, or Agents exist. The hard part is knowing what to learn first, how to practice, and when to move into more advanced tools.&lt;/p&gt;
&lt;h2 id=&#34;beginners-need-a-path-most&#34;&gt;Beginners Need a Path Most
&lt;/h2&gt;&lt;p&gt;Vibe Coding has become popular in recent years, but it is not very friendly to beginners.&lt;/p&gt;
&lt;p&gt;On the surface, as long as you can describe a requirement, you can ask AI to write code. In reality, as soon as the task becomes slightly more complex, problems appear: the requirement is unclear, the model edits the wrong file, the project structure is confusing, errors are hard to handle, dependencies fail to install, prompts become messier, and the workflow falls back to &amp;ldquo;copy code into a chat box&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;So getting started with Vibe Coding cannot only mean learning &amp;ldquo;how to write prompts&amp;rdquo;. It needs to solve several things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to split an idea into executable tasks;&lt;/li&gt;
&lt;li&gt;How to let AI understand a project structure;&lt;/li&gt;
&lt;li&gt;How to read code generated by the model;&lt;/li&gt;
&lt;li&gt;How to handle errors and iterate;&lt;/li&gt;
&lt;li&gt;How to use the terminal and local development environment;&lt;/li&gt;
&lt;li&gt;How to move from web chat to real AI coding tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where easy-vibe matters: it tries to organize these topics into a learning route, instead of leaving beginners lost among tools, tutorials, and terminology.&lt;/p&gt;
&lt;h2 id=&#34;it-is-a-roadmap-not-a-single-tutorial&#34;&gt;It Is a Roadmap, Not a Single Tutorial
&lt;/h2&gt;&lt;p&gt;According to the project description, easy-vibe covers basic tutorials, interactive exercises, visual content, RAG, terminal tools, AI coding tools, and more advanced topics such as Claude Code, MCP, Skills, and Agent Teams.&lt;/p&gt;
&lt;p&gt;This structure is suitable for beginners because AI coding is not a single skill. It is a combination of abilities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Describing requirements;&lt;/li&gt;
&lt;li&gt;Splitting tasks;&lt;/li&gt;
&lt;li&gt;Reading projects;&lt;/li&gt;
&lt;li&gt;Asking the model to edit code;&lt;/li&gt;
&lt;li&gt;Running and verifying results;&lt;/li&gt;
&lt;li&gt;Iterating based on errors;&lt;/li&gt;
&lt;li&gt;Turning repeated workflows into tools or skills.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you only learn one tool, it is easy to be constrained by that tool&amp;rsquo;s interface. Switch models, editors, or CLIs, and the workflow becomes unclear again. A roadmap helps build the working method first, then places tools where they belong.&lt;/p&gt;
&lt;h2 id=&#34;especially-useful-for-non-programmers&#34;&gt;Especially Useful for Non-Programmers
&lt;/h2&gt;&lt;p&gt;The biggest appeal of Vibe Coding is that it lets non-professional programmers build prototypes.&lt;/p&gt;
&lt;p&gt;Product managers can turn product ideas into interactive demos. Designers can validate interaction logic. Operators can write internal tools. Students can quickly build course projects. Founders can validate demand early. These people do not necessarily need to become full-time engineers in the traditional sense, but they do need a method for &amp;ldquo;letting AI help me turn ideas into working things&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This is also why easy-vibe fits the Chinese community. Many Chinese users already know AI can write code, but they still lack systematic beginner materials. Development environment, prompts, project structure, debugging methods, and Agent tools are easier to learn when explained clearly in Chinese and paired with exercises.&lt;/p&gt;
&lt;p&gt;For these users, the most important thing is not to learn a complex framework immediately. It is to complete a full loop first: propose a requirement, generate a project, run it, find problems, keep modifying, and finally get a usable version.&lt;/p&gt;
&lt;h2 id=&#34;the-advanced-part-moves-toward-real-ai-development-workflows&#34;&gt;The Advanced Part Moves Toward Real AI Development Workflows
&lt;/h2&gt;&lt;p&gt;The Claude Code, MCP, Skills, and Agent Teams mentioned in easy-vibe are no longer just beginner concepts.&lt;/p&gt;
&lt;p&gt;Claude Code represents terminal coding Agents: the model can enter a local project, read files, edit code, and run commands. MCP solves tool and data source integration, so the model is not trapped in a chat box. Skills preserve reusable workflows, such as fixed project generation, document organization, test checks, or content production processes. Agent Teams further split tasks across multiple agents.&lt;/p&gt;
&lt;p&gt;These topics may feel distant for beginners, but they are worth understanding early. The direction of Vibe Coding is already clear: from &amp;ldquo;let AI write a piece of code&amp;rdquo; to &amp;ldquo;let AI participate in a complete project workflow&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;If a learning route stops at prompts, it will quickly fall behind tool evolution. On the other hand, if every advanced concept is thrown at beginners immediately, they will not know where to start. The useful part of easy-vibe is that it places these topics on a gradual upgrade path.&lt;/p&gt;
&lt;h2 id=&#34;two-mistakes-to-avoid&#34;&gt;Two Mistakes to Avoid
&lt;/h2&gt;&lt;p&gt;The first mistake is thinking that Vibe Coding means you can ignore code entirely.&lt;/p&gt;
&lt;p&gt;AI can generate a lot, but the user still needs to judge whether the result is correct. At minimum, you need to understand the project structure, know how to run it, and roughly know where an error is happening. Even if you do not write complex code, you still need basic engineering common sense.&lt;/p&gt;
&lt;p&gt;The second mistake is thinking that more advanced tools are always better.&lt;/p&gt;
&lt;p&gt;Beginners do not necessarily need Claude Code, MCP, or multiple Agents at the start. A better order is to first build a feedback loop with simple projects, then gradually introduce the terminal, version control, testing, tool calling, and automated workflows. Tools should match task complexity; otherwise they look powerful but have no clear use.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-it&#34;&gt;How to Use It
&lt;/h2&gt;&lt;p&gt;If you are just starting with Vibe Coding, you can use easy-vibe as a learning checklist.&lt;/p&gt;
&lt;p&gt;Start with basic concepts and simple exercises. Do not rush to chase every tool. Build a small project, such as a personal homepage, data dashboard, form tool, automation script, or knowledge base demo. During the process, observe where AI helps and where you still need to confirm things yourself.&lt;/p&gt;
&lt;p&gt;Once you can complete small projects consistently, move into more complex topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use terminal tools to work with local projects;&lt;/li&gt;
&lt;li&gt;Use Git to manage each change;&lt;/li&gt;
&lt;li&gt;Use RAG to connect your own materials;&lt;/li&gt;
&lt;li&gt;Use MCP to connect external tools;&lt;/li&gt;
&lt;li&gt;Use Skills to solidify repeated workflows;&lt;/li&gt;
&lt;li&gt;Use Agent Teams to split complex tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learning Vibe Coding this way is not just learning to ask AI. It is learning to put AI into your own workflow.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;easy-vibe is best seen as a Chinese learning map for Vibe Coding. It organizes scattered AI coding concepts, tools, and exercises into a route that helps beginners move from &amp;ldquo;I heard AI can write code&amp;rdquo; to &amp;ldquo;I can build a project with AI&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The real value of Vibe Coding is not that it lets people skip all learning. It lowers the threshold from idea to prototype. You still need to understand requirements, organize tasks, verify results, and control risks. But many repetitive, tedious, and blocking steps can be handled with AI assistance.&lt;/p&gt;
&lt;p&gt;If you want a systematic entry point into AI coding, without getting trapped immediately in tool names and complex engineering setup, easy-vibe is a good place to start.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Do Not Push API Keys to GitHub: A Secret-Leak Prevention Guide for AI Coding</title>
        <link>https://www.knightli.com/en/2026/05/16/ai-coding-api-key-leak-github/</link>
        <pubDate>Sat, 16 May 2026 16:26:50 +0800</pubDate>
        
        <guid>https://www.knightli.com/en/2026/05/16/ai-coding-api-key-leak-github/</guid>
        <description>&lt;p&gt;AI coding lowers the barrier to building software, but it also brings many engineering security problems to beginners and non-engineering users.&lt;/p&gt;
&lt;p&gt;One of the most common incidents is pushing &lt;code&gt;API Key&lt;/code&gt;, &lt;code&gt;Secret&lt;/code&gt;, &lt;code&gt;Token&lt;/code&gt;, database connection strings, or &lt;code&gt;.env&lt;/code&gt; files to a public repository. Locally, these files may look like ordinary configuration that keeps the app running. Once they enter a public GitHub repository, they become credentials that can be scanned, called, and abused automatically.&lt;/p&gt;
&lt;p&gt;Secret leaks are not rare. GitGuardian&amp;rsquo;s 2026 report says public GitHub commits in 2025 contained about 28.65 million new hardcoded credentials, and AI-service credential leaks grew 81% year over year. The issue is no longer just carelessness. AI coding, rapid prototyping, and public hosting are amplifying the scale.&lt;/p&gt;
&lt;h2 id=&#34;why-beginners-leak-keys-more-easily&#34;&gt;Why Beginners Leak Keys More Easily
&lt;/h2&gt;&lt;p&gt;Many AI agents and small tools have two &amp;ldquo;repositories&amp;rdquo;: one on the local disk, and one visible to the world on GitHub. The problem is that beginners often do not understand the boundary between the two.&lt;/p&gt;
&lt;p&gt;During local development, &lt;code&gt;config.json&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, and &lt;code&gt;settings.yaml&lt;/code&gt; may contain API keys. After &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;, and &lt;code&gt;git push&lt;/code&gt;, those files may be uploaded in full. Once a repository is public, scanning bots do not need to understand your business logic. They only need to match a secret pattern.&lt;/p&gt;
&lt;p&gt;AI coding makes this worse:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AI-generated examples may place &lt;code&gt;OPENAI_API_KEY = &amp;quot;sk-...&amp;quot;&lt;/code&gt; directly in source code.&lt;/li&gt;
&lt;li&gt;Beginners often hardcode secrets in frontend code, scripts, or config files just to get the project running.&lt;/li&gt;
&lt;li&gt;Many vibe coding platforms can deploy apps directly without going through GitHub push protection.&lt;/li&gt;
&lt;li&gt;Users may not know which files, APIs, or default permissions exist inside an AI-generated project.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In short, AI can help you build something that runs faster. It does not automatically take over the security responsibility.&lt;/p&gt;
&lt;h2 id=&#34;gitignore-is-not-decoration&#34;&gt;&lt;code&gt;.gitignore&lt;/code&gt; Is Not Decoration
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Git&lt;/code&gt; manages version history, &lt;code&gt;GitHub&lt;/code&gt; hosts code, and &lt;code&gt;.gitignore&lt;/code&gt; tells Git which files should not enter that history.&lt;/p&gt;
&lt;p&gt;A basic AI project should at least ignore these:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.env.*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config.local.*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;secrets.*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;credentials.*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;But &lt;code&gt;.gitignore&lt;/code&gt; alone is not enough. It only prevents untracked files from being added later. If a secret file has already been committed, adding it to &lt;code&gt;.gitignore&lt;/code&gt; will not remove it from history.&lt;/p&gt;
&lt;p&gt;A safer habit is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;.gitignore&lt;/code&gt; at the beginning of a project.&lt;/li&gt;
&lt;li&gt;Store API keys only in environment variables or local config.&lt;/li&gt;
&lt;li&gt;Provide &lt;code&gt;.env.example&lt;/code&gt; with placeholders, not real secrets.&lt;/li&gt;
&lt;li&gt;Run a secret scanner before committing, such as &lt;code&gt;gitleaks&lt;/code&gt;, &lt;code&gt;trufflehog&lt;/code&gt;, or GitHub Secret Scanning.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;deleting-the-file-is-not-enough&#34;&gt;Deleting the File Is Not Enough
&lt;/h2&gt;&lt;p&gt;If a key has already been pushed to a public repository, the first reaction should not be &amp;ldquo;delete the file and commit again.&amp;rdquo; Revoke or rotate the key first.&lt;/p&gt;
&lt;p&gt;Git records history. Even if the latest commit removes the file, old commits, forks, clones, caches, and scanners may still contain it. GitHub&amp;rsquo;s documentation also recommends revoking or rotating passwords, tokens, and credentials as the first step.&lt;/p&gt;
&lt;p&gt;Recommended order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Revoke the old key in the provider console and create a new one.&lt;/li&gt;
&lt;li&gt;Check billing, usage logs, suspicious IPs, and unusual traffic.&lt;/li&gt;
&lt;li&gt;Remove hardcoded secrets and switch to environment variables or a secret manager.&lt;/li&gt;
&lt;li&gt;Clean sensitive files from repository history with &lt;code&gt;git filter-repo&lt;/code&gt; or BFG.&lt;/li&gt;
&lt;li&gt;Enable GitHub Secret Scanning and Push Protection.&lt;/li&gt;
&lt;li&gt;Check CI/CD, deployment platforms, cloud functions, and frontend build artifacts for the old key.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For OpenAI, Anthropic, DeepSeek, cloud providers, payment services, email services, and databases, a leaked key can lead to more than unexpected bills. It may expose data, enable abuse, affect the supply chain, or get business accounts banned.&lt;/p&gt;
&lt;h2 id=&#34;real-secrets-do-not-belong-in-frontend-code&#34;&gt;Real Secrets Do Not Belong in Frontend Code
&lt;/h2&gt;&lt;p&gt;Many beginners put API keys into frontend JavaScript because the page works:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apiKey&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;sk-xxxxxxxx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is effectively public. Browser code, network requests, source maps, and build artifacts can all be inspected. Any key that must remain secret should not appear on the client side.&lt;/p&gt;
&lt;p&gt;The correct approach is to let the frontend call your own backend, and let the backend read environment variables and call the third-party API:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// frontend
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/api/chat&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then the server uses the environment variable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apiKey&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This keeps the secret in the server environment instead of exposing it to every visitor.&lt;/p&gt;
&lt;h2 id=&#34;vibe-coding-does-not-remove-security-responsibility&#34;&gt;Vibe Coding Does Not Remove Security Responsibility
&lt;/h2&gt;&lt;p&gt;Vibe coding is not only a GitHub leak problem. Many apps are published directly from AI coding platforms to the public internet, bypassing traditional code review, repository scanning, and security testing.&lt;/p&gt;
&lt;p&gt;Recent RedAccess research found a large number of publicly accessible assets generated or hosted by AI coding tools, some exposing corporate data, personal information, or internal files. The lesson is simple: when &amp;ldquo;can deploy&amp;rdquo; becomes too easy, people often forget to ask &amp;ldquo;should this be public?&amp;rdquo;, &amp;ldquo;should this only be internal?&amp;rdquo;, and &amp;ldquo;does it have access control?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Before publishing an AI-generated app, ask:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Does this app really need public access?&lt;/li&gt;
&lt;li&gt;Does it have login, authentication, and permission isolation?&lt;/li&gt;
&lt;li&gt;Are database URLs, API keys, tokens, or webhook URLs exposed in frontend code?&lt;/li&gt;
&lt;li&gt;Are third-party API quota, domain, permission, and expiry limits configured?&lt;/li&gt;
&lt;li&gt;Can keys be disabled and deployments rolled back quickly after an incident?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AI-generated code still needs security review. The less code you personally wrote, the less you should assume it is safe.&lt;/p&gt;
&lt;h2 id=&#34;checks-to-run-now&#34;&gt;Checks to Run Now
&lt;/h2&gt;&lt;p&gt;Start with your own GitHub account. Search your username together with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SECRET
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TOKEN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENAI_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ANTHROPIC_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DEEPSEEK_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;credentials
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you find a real key, rotate first and clean up later. If it ever entered a public repository, treat it as leaked.&lt;/p&gt;
&lt;p&gt;For future AI projects, use a fixed process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Write &lt;code&gt;.gitignore&lt;/code&gt; before writing business code.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;.env.example&lt;/code&gt; to document required variables.&lt;/li&gt;
&lt;li&gt;Put all secrets in environment variables, not source code.&lt;/li&gt;
&lt;li&gt;Give API keys minimal permissions, quotas, and expiry dates.&lt;/li&gt;
&lt;li&gt;Enable GitHub Secret Scanning and Push Protection.&lt;/li&gt;
&lt;li&gt;Let AI help with a security review before publishing, but do not trust AI alone.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The danger of AI coding is not simply that it may write bad code. It gives many people the ability to publish unsafe apps to the public internet for the first time. Writing fast is not the problem. Handing out secrets, data, and permissions is.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.gitguardian.com/state-of-secrets-sprawl-report-2026&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitGuardian State of Secrets Sprawl 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.github.com/articles/remove-sensitive-data&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub Docs: Removing sensitive data from a repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.github.com/code-security/secret-scanning/push-protection-for-repositories-and-organizations&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub Docs: About push protection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.axios.com/2026/05/07/loveable-replit-vibe-coding-privacy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Axios: AI vibe-coding apps leak sensitive data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
