<?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: Avery</title>
    <description>The latest articles on DEV Community by Avery (@avery_code).</description>
    <link>https://dev.to/avery_code</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3837121%2F51bc1289-fc3a-49a8-ace7-d5052dd80cd9.png</url>
      <title>DEV Community: Avery</title>
      <link>https://dev.to/avery_code</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/avery_code"/>
    <language>en</language>
    <item>
      <title>GitHub Copilot Without Rules Does Not Just Produce Bad React Code. It Produces Expensive React Code.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Wed, 15 Apr 2026 11:47:16 +0000</pubDate>
      <link>https://dev.to/avery_code/github-copilot-without-rules-does-not-just-produce-bad-react-code-it-produces-expensive-react-code-20kk</link>
      <guid>https://dev.to/avery_code/github-copilot-without-rules-does-not-just-produce-bad-react-code-it-produces-expensive-react-code-20kk</guid>
      <description>&lt;p&gt;Bad code is obvious. You see it in the review. You fix it. You move on.&lt;/p&gt;

&lt;p&gt;Expensive code is different.&lt;/p&gt;

&lt;p&gt;It looks fine. It passes the review. It ships. And then it costs you in ways that are hard to trace back to a single decision, a single prompt, a single session with GitHub Copilot.&lt;/p&gt;

&lt;p&gt;This is what happens when your AI has no rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost is not in the bugs
&lt;/h2&gt;

&lt;p&gt;Most developers think about AI output quality in terms of bugs. Does it work? Does it break anything?&lt;/p&gt;

&lt;p&gt;That is the wrong question.&lt;/p&gt;

&lt;p&gt;The real cost is in the time spent after the code exists.&lt;/p&gt;

&lt;p&gt;The ten minutes in every pull request explaining why this component should have been reusable. The hour spent refactoring a component that Copilot built for exactly one use case. The afternoon untangling logic that should have lived in a hook but ended up inline in the UI. The sprint planning conversation about why the codebase is getting harder to work with.&lt;/p&gt;

&lt;p&gt;None of these show up as bugs. All of them cost time. And time, for a developer or a freelancer, is money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inconsistency has a compounding cost
&lt;/h2&gt;

&lt;p&gt;One inconsistent component is a minor annoyance.&lt;/p&gt;

&lt;p&gt;Ten inconsistent components across a project is a maintenance problem. Every new developer who joins needs extra time to understand which pattern is correct. Every design change needs to happen in multiple places instead of one. Every refactor takes longer because nothing is predictable enough to change in bulk.&lt;/p&gt;

&lt;p&gt;The cost of no rules does not stay flat. It grows with the project.&lt;/p&gt;

&lt;p&gt;A codebase built with GitHub Copilot and no rules is not a codebase that has a few rough edges. It is a codebase that gets progressively more expensive to work with every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hidden cost for freelancers
&lt;/h2&gt;

&lt;p&gt;For freelancers the cost is even more direct.&lt;/p&gt;

&lt;p&gt;Inconsistent output means more correction time. More correction time means less time for billable work. Or it means delivering work that looks less professional than it should and clients notice.&lt;/p&gt;

&lt;p&gt;A freelancer who cannot trust their AI output spends part of every session cleaning up instead of building. That is not a productivity gain. That is a productivity tax on every project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What rules actually save you
&lt;/h2&gt;

&lt;p&gt;When GitHub Copilot has rules, the correction loop shrinks.&lt;/p&gt;

&lt;p&gt;The output is consistent from the first prompt. Components are reusable by default. Logic lives where it belongs. TypeScript is correct. Accessibility is handled.&lt;/p&gt;

&lt;p&gt;You stop spending time fixing what the AI should have gotten right. You stop writing the same pull request comments. You stop explaining the same patterns to the same AI every session.&lt;/p&gt;

&lt;p&gt;The rules do not just improve the code. They change the economics of working with AI.&lt;/p&gt;

&lt;p&gt;I have been working this way for several months. The time I used to spend correcting Copilot output is now time I spend building. That is the real return on a rule system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;Every hour you spend correcting GitHub Copilot output is an hour the rules would have saved.&lt;/p&gt;

&lt;p&gt;Define the output before the first prompt. Make consistency the default. Make expensive code impossible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to know where your React project is losing time?
&lt;/h2&gt;

&lt;p&gt;I built a free 20 point checklist that helps you find exactly that. The structural gaps that make AI output inconsistent and your codebase expensive to maintain.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-audit-checklist" rel="noopener noreferrer"&gt;Get the React AI Audit Checklist — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, accessibility, state, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A New Developer Joined Your Team. GitHub Copilot Has No Idea What Your Standard Is.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Mon, 13 Apr 2026 15:24:59 +0000</pubDate>
      <link>https://dev.to/avery_code/a-new-developer-joined-your-team-github-copilot-has-no-idea-what-your-standard-is-49dg</link>
      <guid>https://dev.to/avery_code/a-new-developer-joined-your-team-github-copilot-has-no-idea-what-your-standard-is-49dg</guid>
      <description>&lt;p&gt;The first week of a new developer on the team is always the same.&lt;/p&gt;

&lt;p&gt;They read the docs. They look at existing code. They try to understand how things are done here. What patterns the team uses. What the naming conventions are. How components are structured.&lt;/p&gt;

&lt;p&gt;It takes time. But eventually they get it.&lt;/p&gt;

&lt;p&gt;GitHub Copilot never gets it.&lt;/p&gt;

&lt;p&gt;Every session starts from zero. No memory of the decisions your team made. No knowledge of the patterns you established. No awareness of the standard that took months to build.&lt;/p&gt;

&lt;p&gt;The new developer learns your standard over time. The AI never does. Unless you give it rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens without an AI standard
&lt;/h2&gt;

&lt;p&gt;The new developer opens their first ticket. They start working with Copilot. They prompt naturally, the way they always have.&lt;/p&gt;

&lt;p&gt;And Copilot generates code that works. Technically correct. No errors. And completely inconsistent with everything the rest of the team built.&lt;/p&gt;

&lt;p&gt;Different naming. Different component structure. Different TypeScript patterns. Not because the new developer did anything wrong. Because Copilot had no standard to follow.&lt;/p&gt;

&lt;p&gt;The pull request comes in. The review takes longer than it should. Half the comments are about consistency, not logic. The new developer fixes it. The next PR looks the same.&lt;/p&gt;

&lt;p&gt;This is not an onboarding problem. It is a missing AI standard problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The standard lives in your head. Not in the AI.
&lt;/h2&gt;

&lt;p&gt;Most teams have a standard. It is just not written down in a way the AI can follow.&lt;/p&gt;

&lt;p&gt;It lives in the codebase. In the pull request comments. In the institutional knowledge of developers who have been there for years. New developers absorb it over weeks. Senior developers enforce it in reviews.&lt;/p&gt;

&lt;p&gt;But GitHub Copilot does not absorb anything. It does not learn from your codebase over time. It does not read your pull request comments. It generates based on what it sees in the prompt and the immediate context.&lt;/p&gt;

&lt;p&gt;If the standard is not explicitly defined as rules, Copilot does not know it exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the AI has a standard to follow
&lt;/h2&gt;

&lt;p&gt;When every developer on the team uses the same rule system, the AI stops improvising.&lt;/p&gt;

&lt;p&gt;The new developer starts on day one with the same rules as everyone else. Copilot follows the same structure, the same naming, the same separation of concerns. The pull request looks like it came from a developer who has been on the team for months.&lt;/p&gt;

&lt;p&gt;Not because the new developer is exceptional. Because the rules are the same for everyone. Including the AI.&lt;/p&gt;

&lt;p&gt;Onboarding becomes faster. Reviews become shorter. Consistency is not something you enforce in comments. It is built into every session from the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;A new developer should not need weeks to figure out what consistent AI output looks like on your team.&lt;/p&gt;

&lt;p&gt;Define the standard once. Give it to the AI as rules. Every developer, every session, every prompt produces the same output.&lt;/p&gt;

&lt;p&gt;That is what an AI onboarding standard actually looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to see what those rules look like?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF. The starting point for consistent AI output across your entire team from day one.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, accessibility, state, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your React Codebase Has the Same Component Three Times. GitHub Copilot Built All of Them.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Fri, 10 Apr 2026 10:36:43 +0000</pubDate>
      <link>https://dev.to/avery_code/your-react-codebase-has-the-same-component-three-times-github-copilot-built-all-of-them-4f8b</link>
      <guid>https://dev.to/avery_code/your-react-codebase-has-the-same-component-three-times-github-copilot-built-all-of-them-4f8b</guid>
      <description>&lt;p&gt;Most React projects start clean.&lt;/p&gt;

&lt;p&gt;One Button component. One Card. One Input. Everything in its place.&lt;/p&gt;

&lt;p&gt;Three months later the same project has three versions of the same Button. Different file names. Different props. Same purpose. Nobody planned it. Nobody noticed until the design changed and suddenly three places needed updating instead of one.&lt;/p&gt;

&lt;p&gt;GitHub Copilot built all of them. One prompt at a time. Because nobody gave it a rule that said check before you build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this keeps happening
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot does not scan your entire codebase before it generates.&lt;/p&gt;

&lt;p&gt;It works with what is in context. What you show it. What it can see in the current file and the files around it.&lt;/p&gt;

&lt;p&gt;If you prompt for a button component without pointing Copilot to the one that already exists, it builds a new one. Clean, functional, no errors. And completely redundant.&lt;/p&gt;

&lt;p&gt;This is not a bug. It is the expected behavior of a tool that has no rule telling it to check before it builds.&lt;/p&gt;

&lt;p&gt;The result is a codebase that grows in the wrong direction. More files. More components. More surface area to maintain. More places where a design change needs to happen three times instead of one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost of duplicate components
&lt;/h2&gt;

&lt;p&gt;At first it feels fine. Everything works. The app looks correct.&lt;/p&gt;

&lt;p&gt;Then the design changes. You update the Button in one place. Two weeks later a developer finds the other two. They look different now. The codebase is inconsistent and nobody knows which version is the correct one.&lt;/p&gt;

&lt;p&gt;Or a bug appears in a component. You fix it. The same bug exists in the duplicate. You find it three sprints later in production.&lt;/p&gt;

&lt;p&gt;Duplicate components are not a style problem. They are a maintenance problem that compounds over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when reuse is a rule
&lt;/h2&gt;

&lt;p&gt;When your AI has a rule that says check what exists before building anything new, the behavior changes completely.&lt;/p&gt;

&lt;p&gt;Copilot stops generating redundant components. It finds what already exists and extends it. One Button. One Card. One Input. Used everywhere. Changed in one place.&lt;/p&gt;

&lt;p&gt;Not because the prompt was better. Because the rule was always there.&lt;/p&gt;

&lt;p&gt;I have been working this way for several months. The components folder stays clean. Duplicates do not appear. When the design changes, it changes once.&lt;/p&gt;

&lt;p&gt;That is what reuse as a rule looks like in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;You cannot fix duplicate components by describing reuse in every prompt.&lt;/p&gt;

&lt;p&gt;You will forget. The prompt will be short. The context will be missing. And Copilot will build a new one because nothing told it not to.&lt;/p&gt;

&lt;p&gt;Define reuse as a rule. Make it impossible for your AI to build something new without checking what already exists.&lt;/p&gt;

&lt;p&gt;Your codebase should grow in depth. Not in duplicates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to see what those rules look like?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF. The exact starting point for consistent, reuse-first AI output in every React project.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, accessibility, state, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>cleancode</category>
    </item>
    <item>
      <title>GitHub Copilot Can Produce Accessible React Code. It Just Needs the Right Rules.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Wed, 08 Apr 2026 08:36:03 +0000</pubDate>
      <link>https://dev.to/avery_code/github-copilot-can-produce-accessible-react-code-it-just-needs-the-right-rules-eii</link>
      <guid>https://dev.to/avery_code/github-copilot-can-produce-accessible-react-code-it-just-needs-the-right-rules-eii</guid>
      <description>&lt;p&gt;Accessibility is one of those things most React developers agree on in theory.&lt;/p&gt;

&lt;p&gt;Semantic HTML. Keyboard navigation. Screen reader support. Proper labels. Everyone knows it matters.&lt;/p&gt;

&lt;p&gt;And then they open a pull request and find a clickable div where a button should be. An icon with no label. A form input with no associated label element. A modal that traps focus nowhere.&lt;/p&gt;

&lt;p&gt;Not because the developer forgot. Because GitHub Copilot generated it that way and nobody defined what accessible output actually looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI does not skip accessibility on purpose
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot is not making a judgment call when it generates a clickable div instead of a button.&lt;/p&gt;

&lt;p&gt;It is taking the path of least resistance. A div works. It renders. It does not throw an error. Without a rule that says "interactive elements must always use semantic HTML", Copilot has no reason to reach for a button instead.&lt;/p&gt;

&lt;p&gt;The same is true for form labels. For ARIA attributes. For focus management in modals. For keyboard operability.&lt;/p&gt;

&lt;p&gt;Copilot will generate accessible code when the rules define that it must. Without those rules, it improvises. And improvised accessibility looks like the pull request nobody wants to review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessibility is not a prompt problem
&lt;/h2&gt;

&lt;p&gt;You cannot fix this by describing accessibility requirements in every prompt.&lt;/p&gt;

&lt;p&gt;You will forget sometimes. You will be in a hurry sometimes. The prompt will be vague sometimes. And the moment the description is missing, Copilot falls back to whatever it defaults to.&lt;/p&gt;

&lt;p&gt;Accessibility built on prompt discipline is fragile. It works when you remember. It breaks when you do not.&lt;/p&gt;

&lt;p&gt;The only way to make accessibility consistent is to move it out of the prompt and into the rules. Rules that define what every piece of generated UI must look like before Copilot writes a single line.&lt;/p&gt;

&lt;p&gt;Semantic HTML by default. Labels always present. Interactive elements always keyboard operable. Focus management always handled. Not sometimes. Every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What consistent accessible output actually looks like
&lt;/h2&gt;

&lt;p&gt;I have been working with a rule system for GitHub Copilot for several months now.&lt;/p&gt;

&lt;p&gt;Accessibility is not something I think about per prompt anymore. It is defined in the system. Every component that comes out follows the same accessible patterns. Semantic HTML. Proper labels. Keyboard support. ARIA only where semantic HTML is not enough.&lt;/p&gt;

&lt;p&gt;The output is accessible by default. Not because every prompt asks for it. Because the rules make it impossible for Copilot to generate anything else.&lt;/p&gt;

&lt;p&gt;That is what the right rules do. They remove the dependency on memory, discipline, and perfect prompts. The standard is always there. The output always follows it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;Accessible React output is not a question of how well you describe accessibility to your AI.&lt;/p&gt;

&lt;p&gt;It is a question of whether your AI has rules that make accessible output the only option.&lt;/p&gt;

&lt;p&gt;Give it those rules. Stop reviewing for accessibility issues after the fact. Start defining what accessible means before the first line is generated.&lt;/p&gt;

&lt;p&gt;The prompt doesn't matter. The rules do.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to see what those rules look like?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF. The starting point for consistent, rule-driven AI output in every React project.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — including accessibility rules, architecture, typing, state, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>a11y</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop Reviewing GitHub Copilot Output. Here Is How to Define It Instead.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Mon, 06 Apr 2026 08:46:37 +0000</pubDate>
      <link>https://dev.to/avery_code/stop-reviewing-github-copilot-output-here-is-how-to-define-it-instead-m0k</link>
      <guid>https://dev.to/avery_code/stop-reviewing-github-copilot-output-here-is-how-to-define-it-instead-m0k</guid>
      <description>&lt;p&gt;Most developers have the same routine with GitHub Copilot.&lt;/p&gt;

&lt;p&gt;Generate. Review. Correct. Generate again.&lt;/p&gt;

&lt;p&gt;It works. Slowly. Expensively. And it never really ends because the next session starts the same way.&lt;/p&gt;

&lt;p&gt;There is a different approach. And it changes everything about how AI-assisted development feels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reviewing is a symptom of missing rules
&lt;/h2&gt;

&lt;p&gt;When you review Copilot output, you are doing one thing: checking whether the AI guessed your standard correctly.&lt;/p&gt;

&lt;p&gt;Sometimes it did. Sometimes it did not. And you correct accordingly.&lt;/p&gt;

&lt;p&gt;But the standard was never communicated. Copilot invented it based on your prompt, the visible code, and whatever patterns it has seen before. You are reviewing a guess.&lt;/p&gt;

&lt;p&gt;The more you correct, the more follow-up prompts you write, the more time you spend steering — the clearer it becomes that something is missing upstream.&lt;/p&gt;

&lt;p&gt;That something is a definition of what the output should look like before Copilot starts generating.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difference between reviewing and defining
&lt;/h2&gt;

&lt;p&gt;Reviewing happens after the output exists. You read it, judge it, fix it.&lt;/p&gt;

&lt;p&gt;Defining happens before the output exists. You tell the AI what structure, naming, separation, and conventions every piece of code must follow — regardless of what you ask for.&lt;/p&gt;

&lt;p&gt;When you define upfront, Copilot stops guessing. It follows. And the output looks the same whether the prompt was precise or vague, whether it was Monday morning or Friday afternoon.&lt;/p&gt;

&lt;p&gt;You stop correcting the same things over and over. You stop writing follow-up prompts that start with "actually" or "wait, no." You stop spending the first ten minutes of every session re-establishing context.&lt;/p&gt;

&lt;p&gt;The review becomes a formality instead of a necessity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What defining actually looks like
&lt;/h2&gt;

&lt;p&gt;It is not about writing longer prompts. Longer prompts still disappear at the end of the session.&lt;/p&gt;

&lt;p&gt;It is about giving your AI a system it follows every time. Rules that define architecture. Rules that define naming. Rules that define where logic lives, what TypeScript discipline looks like, how components are structured.&lt;/p&gt;

&lt;p&gt;I have been working this way for three months with GitHub Copilot. The output is consistent. The reviews are fast. The corrections are rare.&lt;/p&gt;

&lt;p&gt;Not because Copilot got smarter. Because I stopped asking it to guess and started telling it what to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;This is the shift.&lt;/p&gt;

&lt;p&gt;Stop optimizing your prompts. Start defining your output.&lt;/p&gt;

&lt;p&gt;Your AI does not need better questions. It needs a system that tells it what every answer must look like.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to see what that system looks like?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF. The exact rules I use before every Copilot session so the output is defined before the first line is generated.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why GitHub Copilot Produces Inconsistent React Code. Even in the Same Project.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:40:34 +0000</pubDate>
      <link>https://dev.to/avery_code/why-github-copilot-produces-inconsistent-react-code-even-in-the-same-project-25m6</link>
      <guid>https://dev.to/avery_code/why-github-copilot-produces-inconsistent-react-code-even-in-the-same-project-25m6</guid>
      <description>&lt;p&gt;Open any React project where GitHub Copilot was involved for more than a few weeks.&lt;/p&gt;

&lt;p&gt;Scroll through the components. Look at the naming. Check how state is handled. See where the logic lives.&lt;/p&gt;

&lt;p&gt;Chances are it does not look like one codebase. It looks like three.&lt;/p&gt;

&lt;p&gt;Not because the team was bad. Not because the AI failed. Because nobody defined what consistent output should look like before the first prompt was written.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every session starts from zero
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot has no memory of your previous sessions.&lt;/p&gt;

&lt;p&gt;It does not remember that two weeks ago you decided components should always be presentational. It does not know about the naming convention you established last sprint. It does not care about the folder structure you refactored toward on Tuesday.&lt;/p&gt;

&lt;p&gt;The moment you open a new chat, everything resets. No memory of your last session. No knowledge of the decisions you made yesterday.&lt;/p&gt;

&lt;p&gt;If you do not bring the rules, Copilot invents them. And invented rules look different every single time.&lt;/p&gt;

&lt;p&gt;One session produces clean TypeScript with proper separation. The next one puts everything inline. One component follows the domain naming. The next one uses whatever made sense in the moment.&lt;/p&gt;

&lt;p&gt;Same project. Same AI. Completely different results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt is not the problem
&lt;/h2&gt;

&lt;p&gt;Most developers try to fix this with better prompts.&lt;/p&gt;

&lt;p&gt;They get more specific. They add more context. They write longer instructions at the start of each session.&lt;/p&gt;

&lt;p&gt;And the output improves — sometimes. On good days with focused prompts. But it still drifts. Still varies. Still looks different depending on who wrote the prompt and when.&lt;/p&gt;

&lt;p&gt;Because the problem was never the prompt.&lt;/p&gt;

&lt;p&gt;The problem is that there is nothing telling Copilot what the standard looks like before it starts generating. No rules about structure. No rules about naming. No rules about where logic belongs.&lt;/p&gt;

&lt;p&gt;A better prompt is still just a prompt. It disappears the moment the session ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually creates consistency
&lt;/h2&gt;

&lt;p&gt;I have been using a rule system with GitHub Copilot for eight months now.&lt;/p&gt;

&lt;p&gt;Not better prompts. Rules that define what every output must look like regardless of how I ask.&lt;/p&gt;

&lt;p&gt;The prompt stops mattering as much. It does not matter if the prompt is vague or precise. The rules define the output before Copilot even starts generating.&lt;/p&gt;

&lt;p&gt;Same structure. Same naming. Same separation of concerns. Every session. Whether it is a focused Monday morning or a tired Friday afternoon.&lt;/p&gt;

&lt;p&gt;That is what consistency actually requires. Not better prompts. A system that runs underneath every prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;This is the shift that changes everything.&lt;/p&gt;

&lt;p&gt;Stop trying to control Copilot through the prompt. Start defining what every output must look like regardless of how you ask.&lt;/p&gt;

&lt;p&gt;Your codebase should look like it came from one senior engineer. Not from every version of you on every kind of day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to see what those rules look like?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF. The exact rules I use before every Copilot session to keep output consistent regardless of how I prompt.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why GitHub Copilot Produces Different Code for Every Developer on Your Team</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Wed, 01 Apr 2026 08:09:00 +0000</pubDate>
      <link>https://dev.to/avery_code/why-github-copilot-produces-different-code-for-every-developer-on-your-team-324o</link>
      <guid>https://dev.to/avery_code/why-github-copilot-produces-different-code-for-every-developer-on-your-team-324o</guid>
      <description>&lt;p&gt;Six months ago your team started using GitHub Copilot.&lt;/p&gt;

&lt;p&gt;Everyone was excited. Faster code. Less boilerplate. More time for actual problems.&lt;/p&gt;

&lt;p&gt;Then you opened a pull request last week and spent ten minutes trying to figure out who wrote what.&lt;/p&gt;

&lt;p&gt;Not because the code was bad. Because nothing looked the same anymore.&lt;/p&gt;

&lt;p&gt;One component uses a custom hook. The next one puts everything inline. One file has strict TypeScript. The next one is full of any. One developer names things after the domain. Another names things after whatever made sense at 2pm on a Thursday.&lt;/p&gt;

&lt;p&gt;Same project. Same AI tool. Completely different results.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not a skill problem
&lt;/h2&gt;

&lt;p&gt;Nobody on your team is doing it wrong.&lt;/p&gt;

&lt;p&gt;Everyone is just prompting differently. And GitHub Copilot does exactly what it is told — nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;The problem is that Copilot has no idea what your project standard is. It does not know how your team names things. It does not know which patterns you agreed on. It does not know what the last five developers already built.&lt;/p&gt;

&lt;p&gt;Every prompt starts from zero. Every developer brings their own habits. And the codebase slowly becomes a collection of five different coding styles held together by a shared package.json.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem compounds over time
&lt;/h2&gt;

&lt;p&gt;In the beginning it feels fine. Everyone is shipping fast. Reviews are quick.&lt;/p&gt;

&lt;p&gt;Then the project grows.&lt;/p&gt;

&lt;p&gt;A new developer joins and spends three days trying to understand which pattern is the actual standard. A bug appears in a component that looks slightly different from all the others — because it was generated with a different prompt six weeks ago. A refactor takes twice as long because nothing is consistent enough to change in bulk.&lt;/p&gt;

&lt;p&gt;The AI did not slow you down. The missing standard did.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the AI has rules
&lt;/h2&gt;

&lt;p&gt;When every developer on your team uses the same system, Copilot stops improvising.&lt;/p&gt;

&lt;p&gt;It does not matter who writes the prompt. It does not matter how they phrase it. It does not matter if it is Monday morning or Friday afternoon.&lt;/p&gt;

&lt;p&gt;The output follows the same structure. The same naming. The same separation of concerns. The same TypeScript discipline.&lt;/p&gt;

&lt;p&gt;Not because the AI got smarter. Because the rules are the same for everyone.&lt;/p&gt;

&lt;p&gt;That is what consistency actually means in AI-assisted development. Not hoping everyone prompts the same way. Defining what the output must look like — regardless of the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt does not matter. The rules do.
&lt;/h2&gt;

&lt;p&gt;This is the shift most teams have not made yet.&lt;/p&gt;

&lt;p&gt;They invest in prompt engineering. They write guides on how to ask Copilot the right questions. They review AI output and give feedback in comments.&lt;/p&gt;

&lt;p&gt;And the codebase still looks different every week.&lt;/p&gt;

&lt;p&gt;Because the problem was never the prompt. The problem is that there are no rules defining what the output should look like.&lt;/p&gt;

&lt;p&gt;Give your AI a system. Every developer on your team uses the same rules. Every output looks like it came from the same senior engineer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want the rules that make this work?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF — the exact starting point for consistent AI output across any project.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules" rel="noopener noreferrer"&gt;Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The prompt doesn't matter. The rules do.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>githubcopilot</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why GitHub Copilot Defaults to 'any' in React TypeScript Projects</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Mon, 30 Mar 2026 09:10:29 +0000</pubDate>
      <link>https://dev.to/avery_code/why-github-copilot-defaults-to-any-in-react-typescript-projects-2m47</link>
      <guid>https://dev.to/avery_code/why-github-copilot-defaults-to-any-in-react-typescript-projects-2m47</guid>
      <description>&lt;p&gt;There is a pattern that shows up constantly in React TypeScript projects where GitHub Copilot was involved.&lt;/p&gt;

&lt;p&gt;It looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [data, setData] = useState&amp;lt;any&amp;gt;(null)

const handleResponse = (response: any) =&amp;gt; {
  setData(response.data)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;TypeScript is installed. The project is set up correctly. And Copilot still reaches for any — every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this happens
&lt;/h2&gt;

&lt;p&gt;Copilot is not trying to write bad TypeScript. It is taking the path of least resistance.&lt;/p&gt;

&lt;p&gt;any works. It compiles. It does not throw errors. And without explicit constraints telling Copilot what the actual types are, it defaults to the safest assumption it can make — which is no assumption at all.&lt;/p&gt;

&lt;p&gt;The result is TypeScript that looks correct but provides zero protection. You have all the overhead of a typed language with none of the benefits.&lt;/p&gt;

&lt;h2&gt;
  
  
  What any actually costs you
&lt;/h2&gt;

&lt;p&gt;TypeScript exists to catch errors before they reach production. The moment you use any, that protection disappears for that value — and everything that touches it.&lt;/p&gt;

&lt;p&gt;A component that receives any as a prop passes any down the tree. A function that returns any spreads uncertainty through the entire codebase. One any becomes ten. Ten becomes a codebase where TypeScript is installed but not actually working.&lt;/p&gt;

&lt;p&gt;And the worst part is that it fails silently. No warnings. No errors. Just runtime surprises that TypeScript was supposed to prevent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when you give Copilot explicit types
&lt;/h2&gt;

&lt;p&gt;When you define your domain types clearly and tell Copilot to use them, the output changes completely.&lt;/p&gt;

&lt;p&gt;Instead of any, Copilot reaches for the types you have already defined. Props are typed correctly. API responses are mapped to real interfaces. State has a shape.&lt;/p&gt;

&lt;p&gt;The key is that Copilot needs the context. It cannot invent your domain types. You have to give them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deeper problem
&lt;/h2&gt;

&lt;p&gt;TypeScript any is just one symptom of a bigger issue.&lt;/p&gt;

&lt;p&gt;GitHub Copilot generates code based on what it can see. If your types are vague, your constraints are missing, or your project structure gives it nothing to work with — it improvises.&lt;/p&gt;

&lt;p&gt;And improvised TypeScript in a React project is TypeScript in name only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to find where your React project is missing structure?
&lt;/h2&gt;

&lt;p&gt;I built a free 20 point checklist that helps you identify exactly this. Structural and typing weaknesses that make AI output unpredictable and your codebase fragile.&lt;/p&gt;

&lt;p&gt;No guessing. No endless follow up prompts. Just a clear picture of what to fix before you prompt again.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="//averylabs.gumroad.com/l/avery-code-react-ai-audit-checklist"&gt;Get the React AI Audit Checklist free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-debug-checklist" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GitHub Copilot Stores Derived State in useEffect. This Is Why That Breaks Your App.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Fri, 27 Mar 2026 13:03:15 +0000</pubDate>
      <link>https://dev.to/avery_code/github-copilot-stores-derived-state-in-useeffect-this-is-why-that-breaks-your-app-4agd</link>
      <guid>https://dev.to/avery_code/github-copilot-stores-derived-state-in-useeffect-this-is-why-that-breaks-your-app-4agd</guid>
      <description>&lt;p&gt;There is a pattern that shows up in almost every React project where AI was involved.&lt;/p&gt;

&lt;p&gt;It looks harmless. It works on first glance. And it silently creates bugs that are annoying to track down.&lt;/p&gt;

&lt;p&gt;It looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [total, setTotal] = useState(0)

useEffect(() =&amp;gt; {
  setTotal(items.reduce((sum, i) =&amp;gt; sum + i.price, 0))
}, [items])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;GitHub Copilot writes this confidently. No warnings. No errors. Just broken logic waiting to happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually wrong here
&lt;/h2&gt;

&lt;p&gt;Total is not state. Total is a calculation.&lt;/p&gt;

&lt;p&gt;It depends entirely on items. Every time items changes, total gets recalculated anyway. Storing it in useState and syncing it with useEffect adds a second source of truth that never needed to exist.&lt;/p&gt;

&lt;p&gt;The result is a component that renders twice when it should render once. State that is always one step behind. And a useEffect that exists for no reason other than that the AI had no rule against it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GitHub Copilot does this
&lt;/h2&gt;

&lt;p&gt;Copilot is not broken. It is pattern matching.&lt;/p&gt;

&lt;p&gt;It has seen thousands of examples where useState and useEffect are used together. So it reaches for that pattern by default even when the situation does not call for it.&lt;/p&gt;

&lt;p&gt;It has no concept of derived state. It does not ask whether something should be stored or computed. It just generates what looks plausible.&lt;/p&gt;

&lt;p&gt;And plausible is not the same as correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix is one line
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const total = items.reduce((sum, i) =&amp;gt; sum + i.price, 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;No useState. No useEffect. Just a variable that is computed directly from items on every render.&lt;/p&gt;

&lt;p&gt;One render instead of two. One source of truth instead of two. Zero unnecessary state.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deeper problem
&lt;/h2&gt;

&lt;p&gt;useEffect misuse is one of the most common AI coding mistakes in React projects.&lt;/p&gt;

&lt;p&gt;Not because the pattern is rare. Because Copilot reaches for it constantly for derived state, for synchronous logic, for things that should never be effects in the first place.&lt;/p&gt;

&lt;p&gt;Every area where your AI has no explicit constraints is an area where it improvises. And improvised useEffect logic compounds fast in a real React codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to find where your React project has these problems?
&lt;/h2&gt;

&lt;p&gt;I built a free 20 point checklist that helps you identify exactly this. Structural weaknesses that make AI output unpredictable and your app fragile.&lt;/p&gt;

&lt;p&gt;No guessing. No endless follow up prompts. Just a clear picture of what to fix before you prompt again.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="//averylabs.gumroad.com/l/avery-code-react-ai-audit-checklist"&gt;Get the React AI Audit Checklist free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system, rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;Avery Code React AI Engineering System&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Same AI. Different rules.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;© Avery Labs — Avery Code&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>ai</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Spent an Hour Fixing Tailwind Classes GitHub Copilot Created in 10 Seconds</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Wed, 25 Mar 2026 09:43:54 +0000</pubDate>
      <link>https://dev.to/avery_code/i-spent-an-hour-fixing-tailwind-classes-github-copilot-created-in-10-seconds-23i2</link>
      <guid>https://dev.to/avery_code/i-spent-an-hour-fixing-tailwind-classes-github-copilot-created-in-10-seconds-23i2</guid>
      <description>&lt;p&gt;I still remember the moment clearly.&lt;/p&gt;

&lt;p&gt;I asked GitHub Copilot to build a simple React component. Ten seconds later it was done. Clean, functional, no errors.&lt;/p&gt;

&lt;p&gt;Then I looked at the Tailwind classes.&lt;/p&gt;

&lt;p&gt;The same combination of fifteen utilities scattered across four different places in my React project. Inline on every element. No abstraction. No pattern. Just raw utility chains copied pasted into existence.&lt;/p&gt;

&lt;p&gt;It looked fine. Until I had to change the design.&lt;/p&gt;

&lt;p&gt;Then I spent an hour hunting through files, fixing the same styling in place after place after place.&lt;/p&gt;

&lt;p&gt;Ten seconds to create. One hour to fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem is not Tailwind
&lt;/h2&gt;

&lt;p&gt;The problem is not Tailwind. It is that Copilot has no styling rules.&lt;/p&gt;

&lt;p&gt;Tailwind is fast by design. You write utility classes inline and move on.&lt;/p&gt;

&lt;p&gt;That works when you are the only one writing the code. When you remember what you wrote. When the project is small enough to hold in your head.&lt;/p&gt;

&lt;p&gt;GitHub Copilot does not remember anything.&lt;/p&gt;

&lt;p&gt;Every prompt is a fresh start. No memory of what you wrote last session. No awareness of the patterns you have established. No idea that you already used those fifteen classes somewhere else.&lt;/p&gt;

&lt;p&gt;So it inlines everything. Every time. Confidently.&lt;/p&gt;

&lt;p&gt;And your React project slowly turns into a styling mess that nobody including you can maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changed when I gave Copilot one rule
&lt;/h2&gt;

&lt;p&gt;I added one constraint to my Copilot sessions.&lt;/p&gt;

&lt;p&gt;Never repeat the same Tailwind utility combination. If a pattern appears more than once, extract it.&lt;/p&gt;

&lt;p&gt;That is it.&lt;/p&gt;

&lt;p&gt;The inline chaos stopped. Repeated patterns got extracted automatically. When the design changed I changed it in one place.&lt;/p&gt;

&lt;p&gt;One rule. One constraint. Completely different output.&lt;/p&gt;




&lt;h2&gt;
  
  
  The deeper problem
&lt;/h2&gt;

&lt;p&gt;Tailwind chaos is just one symptom.&lt;/p&gt;

&lt;p&gt;Your AI coding tool has no styling rules, no architecture rules, no component rules unless you give them explicitly.&lt;/p&gt;

&lt;p&gt;Every area without constraints is an area where GitHub Copilot improvises. And improvised Tailwind in a React project compounds fast.&lt;/p&gt;

&lt;p&gt;That is what makes AI coding in React predictable. Not a better prompt, but explicit rules your AI has to follow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want the exact rules I use?
&lt;/h2&gt;

&lt;p&gt;I packaged my first three React AI rules as a free PDF including the exact prompt blocks ready to paste into GitHub Copilot or Cursor before your next session.&lt;/p&gt;

&lt;p&gt;&lt;a href="//averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules"&gt;👉 Get My First 3 React AI Rules — free&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system, rules across architecture, typing, state, accessibility, and more:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;👉 Avery Code — React AI Engineering System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>tailwindcss</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why GitHub Copilot Ignores Your React Project Structure</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Mon, 23 Mar 2026 13:14:01 +0000</pubDate>
      <link>https://dev.to/avery_code/why-github-copilot-ignores-your-react-project-structure-ha</link>
      <guid>https://dev.to/avery_code/why-github-copilot-ignores-your-react-project-structure-ha</guid>
      <description>&lt;p&gt;I have been a freelance frontend developer for a while now.&lt;/p&gt;

&lt;p&gt;I use GitHub Copilot and Cursor every day. AI coding tools that are supposed to make me faster.&lt;/p&gt;

&lt;p&gt;And one thing kept happening that drove me completely crazy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Everything worked. And everything was wrong.
&lt;/h2&gt;

&lt;p&gt;I would ask Copilot to build something.&lt;/p&gt;

&lt;p&gt;It would build it.&lt;/p&gt;

&lt;p&gt;Clean. Working. No errors.&lt;/p&gt;

&lt;p&gt;And completely disconnected from everything else in my project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong folder
&lt;/li&gt;
&lt;li&gt;Wrong naming convention
&lt;/li&gt;
&lt;li&gt;New utility function even though one already existed
&lt;/li&gt;
&lt;li&gt;New component even though one was three files away
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every single time.&lt;/p&gt;

&lt;p&gt;I kept thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does this thing even see my project? Or is it just generating into a void?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After a lot of frustration, I realized the answer is both.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your AI does not read your project. It reads your prompt.
&lt;/h2&gt;

&lt;p&gt;This sounds obvious when you say it out loud.&lt;/p&gt;

&lt;p&gt;But it took me an embarrassingly long time to actually understand it.&lt;/p&gt;

&lt;p&gt;When you open a new Copilot session and write a prompt, it does not automatically scan your entire codebase.&lt;/p&gt;

&lt;p&gt;It works with what is in context.&lt;br&gt;&lt;br&gt;
What you give it.&lt;br&gt;&lt;br&gt;
What it can see.&lt;/p&gt;

&lt;p&gt;If you do not explicitly point it to your React project structure, it improvises.&lt;/p&gt;

&lt;p&gt;And improvised structure looks clean on the surface.&lt;/p&gt;

&lt;p&gt;But underneath, it creates a parallel system next to yours.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two naming conventions
&lt;/li&gt;
&lt;li&gt;Two utility patterns
&lt;/li&gt;
&lt;li&gt;Two ways of organizing the same thing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not because Copilot is broken.&lt;/p&gt;

&lt;p&gt;Because it had no map.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I started doing differently
&lt;/h2&gt;

&lt;p&gt;I stopped assuming Copilot knew where it was.&lt;/p&gt;

&lt;p&gt;Before every session, I now tell it explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the React project structure looks like
&lt;/li&gt;
&lt;li&gt;Where components live
&lt;/li&gt;
&lt;li&gt;What naming conventions we use
&lt;/li&gt;
&lt;li&gt;What already exists before it builds anything new
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sounds like extra work.&lt;/p&gt;

&lt;p&gt;It takes about thirty seconds per session.&lt;/p&gt;

&lt;p&gt;The drift stopped almost immediately.&lt;/p&gt;

&lt;p&gt;No more parallel systems.&lt;br&gt;&lt;br&gt;
No more rebuilding what already existed.&lt;br&gt;&lt;br&gt;
No more wrong folders.&lt;/p&gt;




&lt;h2&gt;
  
  
  The deeper problem
&lt;/h2&gt;

&lt;p&gt;React project structure is just one thing your AI does not know unless you tell it.&lt;/p&gt;

&lt;p&gt;There is also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typing
&lt;/li&gt;
&lt;li&gt;State management
&lt;/li&gt;
&lt;li&gt;Accessibility
&lt;/li&gt;
&lt;li&gt;Component boundaries
&lt;/li&gt;
&lt;li&gt;useEffect patterns
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every area where you have not given your AI explicit constraints, it improvises.&lt;/p&gt;

&lt;p&gt;And improvised code looks fine until it does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually makes AI coding predictable
&lt;/h2&gt;

&lt;p&gt;It is not a better prompt.&lt;/p&gt;

&lt;p&gt;It is a better structure.&lt;/p&gt;

&lt;p&gt;The question is not whether your AI is good enough.&lt;/p&gt;

&lt;p&gt;The question is whether you have given it enough structure to work with.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to find the gaps in your project?
&lt;/h2&gt;

&lt;p&gt;If your AI output feels inconsistent, the problem is usually not the tool.&lt;/p&gt;

&lt;p&gt;It is the structure underneath.&lt;/p&gt;

&lt;p&gt;I built a free 20 point checklist that helps you identify exactly that.&lt;/p&gt;

&lt;p&gt;The structural gaps that make AI output unpredictable.&lt;/p&gt;

&lt;p&gt;No guessing.&lt;br&gt;&lt;br&gt;
No endless follow up prompts.&lt;br&gt;&lt;br&gt;
Just a clear picture of what to fix before you prompt again.&lt;/p&gt;

&lt;p&gt;&lt;a href="//averylabs.gumroad.com/l/avery-code-react-ai-audit-checklist"&gt;👉 Get the React AI Audit Checklist — free&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  And if you want the full system
&lt;/h2&gt;

&lt;p&gt;Rules across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture
&lt;/li&gt;
&lt;li&gt;Typing
&lt;/li&gt;
&lt;li&gt;State
&lt;/li&gt;
&lt;li&gt;Accessibility
&lt;/li&gt;
&lt;li&gt;And more
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;👉 Avery Code React AI Coding System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>ai</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Work as a Freelancer. My AI Coding Tool Was Making Me Look Bad.</title>
      <dc:creator>Avery</dc:creator>
      <pubDate>Sat, 21 Mar 2026 15:18:40 +0000</pubDate>
      <link>https://dev.to/avery_code/i-work-as-a-freelancer-my-ai-coding-tool-was-making-me-look-bad-2i5m</link>
      <guid>https://dev.to/avery_code/i-work-as-a-freelancer-my-ai-coding-tool-was-making-me-look-bad-2i5m</guid>
      <description>&lt;p&gt;I still work as a freelancer.&lt;/p&gt;

&lt;p&gt;Deadlines. Clients. Code reviews. The whole thing.&lt;/p&gt;

&lt;p&gt;I use GitHub Copilot every day. Not because it is perfect, but because it is fast. And as a freelancer, fast matters.&lt;/p&gt;

&lt;p&gt;But somewhere along the way, fast stopped feeling fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  I wasn’t building anymore. I was babysitting.
&lt;/h2&gt;

&lt;p&gt;Every session turned into a back and forth.&lt;/p&gt;

&lt;p&gt;I would ask Copilot for something.&lt;br&gt;&lt;br&gt;
It would go in a direction I did not want.&lt;br&gt;&lt;br&gt;
I would correct it.&lt;br&gt;&lt;br&gt;
It would drift again.&lt;br&gt;&lt;br&gt;
I would correct it again.&lt;/p&gt;

&lt;p&gt;I was not building anymore.&lt;/p&gt;

&lt;p&gt;I was babysitting.&lt;/p&gt;




&lt;h2&gt;
  
  
  And the worst part? Things slipped through.
&lt;/h2&gt;

&lt;p&gt;Not obvious bugs.&lt;/p&gt;

&lt;p&gt;Subtle things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A component that already existed got rebuilt slightly differently
&lt;/li&gt;
&lt;li&gt;Styling did not match the rest of the project
&lt;/li&gt;
&lt;li&gt;Structure worked in isolation but broke patterns elsewhere
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I only noticed when someone else did.&lt;/p&gt;

&lt;p&gt;Code review. Client feedback.&lt;/p&gt;

&lt;p&gt;That moment where you think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would never have written it this way myself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the moment it stopped being a productivity tool&lt;br&gt;&lt;br&gt;
and started feeling like a liability.&lt;/p&gt;




&lt;h2&gt;
  
  
  The real problem
&lt;/h2&gt;

&lt;p&gt;The problem was not Copilot.&lt;/p&gt;

&lt;p&gt;It was me.&lt;/p&gt;

&lt;p&gt;I gave it nothing to work with.&lt;/p&gt;

&lt;p&gt;No rules.&lt;br&gt;&lt;br&gt;
No constraints.&lt;br&gt;&lt;br&gt;
No structure it had to follow.&lt;/p&gt;

&lt;p&gt;So it improvised.&lt;/p&gt;

&lt;p&gt;Every single time.&lt;/p&gt;




&lt;h2&gt;
  
  
  That is the thing about AI coding tools
&lt;/h2&gt;

&lt;p&gt;If you do not give them rules&lt;br&gt;&lt;br&gt;
they will make them up.&lt;/p&gt;

&lt;p&gt;And they do it fast.&lt;br&gt;&lt;br&gt;
Confidently.&lt;br&gt;&lt;br&gt;
And wrong.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I wrote rules
&lt;/h2&gt;

&lt;p&gt;Not a full system.&lt;/p&gt;

&lt;p&gt;Just the things that kept going wrong.&lt;/p&gt;

&lt;p&gt;The first three were simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not build new React components when one already exists
&lt;/li&gt;
&lt;li&gt;Do not scatter Tailwind classes. Extract what repeats
&lt;/li&gt;
&lt;li&gt;Check the project before you generate anything
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three rules.&lt;/p&gt;

&lt;p&gt;That was it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;The back and forth got shorter.&lt;/p&gt;

&lt;p&gt;The drift stopped.&lt;/p&gt;

&lt;p&gt;Things stopped slipping through during code review.&lt;/p&gt;

&lt;p&gt;I was not babysitting anymore.&lt;/p&gt;

&lt;p&gt;I was building again.&lt;/p&gt;




&lt;h2&gt;
  
  
  That became Avery Code
&lt;/h2&gt;

&lt;p&gt;I kept going.&lt;/p&gt;

&lt;p&gt;More rules.&lt;br&gt;&lt;br&gt;
More structure.&lt;br&gt;&lt;br&gt;
More control.&lt;/p&gt;

&lt;p&gt;What started as three rules turned into a full system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Want the exact prompt blocks?
&lt;/h2&gt;

&lt;p&gt;The three rules above are the concept.&lt;/p&gt;

&lt;p&gt;If you want the exact text ready to paste into GitHub Copilot or Cursor before your next React session, I packaged them as a free PDF.&lt;/p&gt;

&lt;p&gt;👉&lt;a href="//averylabs.gumroad.com/l/avery-code-my-first-3-react-ai-rules"&gt;👉 Avery Code My first 3 React AI Rules&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  And if you want the full system
&lt;/h2&gt;

&lt;p&gt;Rules across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture
&lt;/li&gt;
&lt;li&gt;Typing
&lt;/li&gt;
&lt;li&gt;State
&lt;/li&gt;
&lt;li&gt;Accessibility
&lt;/li&gt;
&lt;li&gt;And more
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://averylabs.gumroad.com/l/avery-code-react-ai-coding-system-pro" rel="noopener noreferrer"&gt;👉 Avery Code React AI Coding System&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>ai</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
