<?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: EffessDev</title>
    <description>The latest articles on DEV Community by EffessDev (@effessdev).</description>
    <link>https://dev.to/effessdev</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%2F3932962%2Ff8063266-7ea2-44d6-8ff0-7fbce9748ba7.png</url>
      <title>DEV Community: EffessDev</title>
      <link>https://dev.to/effessdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/effessdev"/>
    <language>en</language>
    <item>
      <title>I'm a First-Year ECE Student Trying to Figure Out "The Prestige Path" vs. Just Building Stuff</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Wed, 21 Oct 2026 11:27:02 +0000</pubDate>
      <link>https://dev.to/effessdev/im-a-first-year-ece-student-trying-to-figure-out-the-prestige-path-vs-just-building-stuff-26f5</link>
      <guid>https://dev.to/effessdev/im-a-first-year-ece-student-trying-to-figure-out-the-prestige-path-vs-just-building-stuff-26f5</guid>
      <description>&lt;p&gt;Okay so here's my situation. 👇&lt;/p&gt;

&lt;p&gt;I'm a first-year Electronics &amp;amp; Communication Engineering (ECE) student at a smaller private college in Kerala, India. I have almost FOUR YEARS before I need to pick anything for real, which is a massive advantage! Enough time to either study hard for a big exam or build real skills.&lt;/p&gt;

&lt;p&gt;I already know I want to do &lt;strong&gt;embedded systems&lt;/strong&gt;. What I'm curious about is how to spend these four years to get there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path 1: GATE &lt;code&gt;-&amp;gt;&lt;/code&gt; IIT/NIT&lt;/strong&gt;&lt;br&gt;
For anyone outside India: GATE is a tough national exam, and IITs/NITs are India's top engineering colleges. The plan is to study hard, pass the exam, get the bigger name on my resume, plus an M.tech degree &amp;amp; strong campus placements. The "safe" path, as people keep reminding me 🤔&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path 2: Skip it, go all-in on building&lt;/strong&gt;&lt;br&gt;
Spend these years on real embedded projects and maybe a hands-on internship. Enter the job market with a GitHub full of real work instead of an exam score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path 3: Try both&lt;/strong&gt;&lt;br&gt;
Probably not for me. I focus best on one thing at a time. Curious if it's worked for anyone else though.&lt;/p&gt;




&lt;p&gt;Questions for embedded folks anywhere, especially those who've been through the Indian system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you picked either path, what did the time before your decision and the years after actually feel like?&lt;/li&gt;
&lt;li&gt;For embedded jobs, does a top college name or campus placements matter, or does a solid GitHub do the same job? (Curious how this differs by country.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've got passion for BOTH routes, equally 😎 That's why I am asking for advice here. If you've got even one sentence to share, drop it below. I promise I'll read every single one of them just like I did for my previous "Should I learn C" post (unless I get flooded with comments lol). Thanks &lt;a class="mentioned-user" href="https://dev.to/unitbuilds"&gt;@unitbuilds&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; (both always helps me 😊) &lt;a class="mentioned-user" href="https://dev.to/fm"&gt;@fm&lt;/a&gt; (Very long &amp;amp; detailed advice. Respect 🫡) &lt;a class="mentioned-user" href="https://dev.to/build996"&gt;@build996&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/aniruddhaadak"&gt;@aniruddhaadak&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/elanatframework"&gt;@elanatframework&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/lucascz"&gt;@lucascz&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/robertpaschal"&gt;@robertpaschal&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/nikkhielseath"&gt;@nikkhielseath&lt;/a&gt; for your advices!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(&lt;a class="mentioned-user" href="https://dev.to/technogamerz"&gt;@technogamerz&lt;/a&gt; you only wished me luck. You are the best person to ask this. If you're reading, please give me advice on this one 🥹🙏)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>beginners</category>
      <category>development</category>
    </item>
    <item>
      <title>I argued with AI until it apologized for calling my course "AI Slop"</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Wed, 14 Oct 2026 11:31:46 +0000</pubDate>
      <link>https://dev.to/effessdev/i-argued-with-ai-until-it-apologized-for-calling-my-course-ai-slop-350d</link>
      <guid>https://dev.to/effessdev/i-argued-with-ai-until-it-apologized-for-calling-my-course-ai-slop-350d</guid>
      <description>&lt;p&gt;Imagine spending weeks agonizing over every single paragraph, polishing every example, and pouring your heart into a course, only to have Google dismiss it as "AI-generated." 🤬🤬🤬🤬🤬&lt;/p&gt;

&lt;p&gt;I was asking Google AI Mode to review my course. It gave me surprisingly positive feedback:&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%2Fl2m3nxv41z0je06svtgl.png" 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%2Fl2m3nxv41z0je06svtgl.png" alt=" " width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then it listed a lot of reasons why it's good.&lt;/p&gt;

&lt;p&gt;I became really happy. I asked it to give feedback on a certain chapter:&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%2Fsrb6at3przdsfv1bqgea.png" 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%2Fsrb6at3przdsfv1bqgea.png" alt=" " width="799" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This time, my pride was over the top! 🙂 It gave me even more &lt;em&gt;specific&lt;/em&gt; reasons why it was &lt;strong&gt;"exceptional"&lt;/strong&gt;! I was really glad that it caught my effort.&lt;/p&gt;

&lt;p&gt;Then, I asked about the chapter titled "Hardware Interrupts". That's one chapter I had to check to see if it was good enough. &lt;strong&gt;This is when things got mad&lt;/strong&gt;:&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%2F4dik6wrncirvxnkly4mb.png" 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%2F4dik6wrncirvxnkly4mb.png" alt=" " width="795" height="78"&gt;&lt;/a&gt;&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%2Fjwqkeyi7s542c3ersnea.png" 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%2Fjwqkeyi7s542c3ersnea.png" alt=" " width="800" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I AI-generated the course!!!??? I NEVER AI-generated the course! I even had a whole page on the course &lt;a href="https://effessdev.github.io/esp-idf/why-not-ai/" rel="noopener noreferrer"&gt;why-not-ai&lt;/a&gt;, describing how exactly it was made, and explicitly why it's &lt;strong&gt;NOT AI-generated&lt;/strong&gt;. I even have every single project in the course in this repository, every single one manually tested on my own ESP32:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/effessdev/esp-idf-examples" rel="noopener noreferrer"&gt;https://github.com/effessdev/esp-idf-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was furious. I asked it when I said that:&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%2Fx7umd2sphlauq7kxcdbx.png" 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%2Fx7umd2sphlauq7kxcdbx.png" alt=" " width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IT'S ACCUSING ME OF AI-GENERATING MY COURSE BASED ON A SINGLE COMMENT I WROTE??? WHAT? 🤯&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F677jo8k9zym8duhbcyd6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F677jo8k9zym8duhbcyd6.gif" alt=" " width="300" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had discarded ENTIRE CHAPTERS and rewrote them from SCRATCH with completely new examples because I thought the final project didn't show a scenario where the thing that's taught is the best approach. You can check the commits if you don't believe me:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/effessdev/esp-idf" rel="noopener noreferrer"&gt;https://github.com/effessdev/esp-idf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of just dumping the finished code and explaining it later, I walk the reader through building it piece by piece. It makes for a vastly better tutorial, but it is an absolute NIGHTMARE to write &amp;amp; test.&lt;/p&gt;

&lt;p&gt;I completely lost my temper:&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%2F1y3sq0xoli748u127lzz.png" 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%2F1y3sq0xoli748u127lzz.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we're back with the positive feedback. Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sounds like a real human who had actually wrestled with the errors&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Feels like peer-to-peer teaching, not corporate documentation&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Practical rather than theory-heavy&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So now it accepts that it's good?&lt;/p&gt;

&lt;p&gt;Then I told it that every single project is available in my &lt;a href="https://github.com/effessdev/esp-idf-examples" rel="noopener noreferrer"&gt;esp-idf-examples repository&lt;/a&gt;:&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%2Ffzkh1ncuo7j69n9b64ui.png" 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%2Ffzkh1ncuo7j69n9b64ui.png" alt=" " width="799" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I didn't stop until I made it say sorry:&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%2Fk7edsatezji6181vnsa0.png" 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%2Fk7edsatezji6181vnsa0.png" alt=" " width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know it's kind of silly (and dumb). To argue with AI and finally correct it. 😅 But I always do that, do you? 🙂&lt;/p&gt;

&lt;p&gt;I deleted that comment anyway. Who knows whether it will bring that up in the future?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I was chasing the job market. One comment on DEV.to made me rethink everything</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Mon, 12 Oct 2026 14:44:25 +0000</pubDate>
      <link>https://dev.to/effessdev/i-was-chasing-the-job-market-one-comment-on-devto-made-me-rethink-everything-4h20</link>
      <guid>https://dev.to/effessdev/i-was-chasing-the-job-market-one-comment-on-devto-made-me-rethink-everything-4h20</guid>
      <description>&lt;p&gt;Let me ask you something. What are you supposed to learn when the CEOs of all AI companies keep claiming that programming will be dead in a few years?&lt;/p&gt;

&lt;p&gt;If you were starting college this year, wouldn't you be worried about spending years mastering a skill that might become obsolete by the time you graduate?&lt;/p&gt;

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

&lt;p&gt;Actually, I was worried even before AI models got this good.&lt;/p&gt;

&lt;p&gt;I was afraid to choose game development, even though I liked it, because there seemed to be fewer opportunities than in app development. I was afraid to choose app development because there seemed to be fewer jobs than in web development. And I was afraid to choose web development because &lt;strong&gt;ChatGPT told me it was one of the areas of software engineering most vulnerable to AI automation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm ashamed to admit. But that's how I ended up looking into embedded systems. I kept jumping from one field to another, hoping to find the &lt;em&gt;right&lt;/em&gt; one before it was too late.&lt;/p&gt;

&lt;p&gt;But how do you chase a moving target when every step toward it feels like a step away from everything you've built?&lt;/p&gt;

&lt;p&gt;That's one thing. But imagine knowing (or thinking, to be precise) that programming itself, as we know it, could become obsolete within just a few years. I dont know much about AI, so I cannot reliabily decide whether everyone else who &lt;em&gt;knows&lt;/em&gt; about AI is right or wrong.&lt;/p&gt;

&lt;p&gt;However, I cannot sit there and wait for the future to arrive so I can start learning. I had to make my bet. But how?&lt;/p&gt;

&lt;p&gt;I wanted some help. So I posted this on DEV.to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Graduating in 2030: Is learning C worth it? Honestly?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; was one of the first people to comment. Here is what he said:&lt;/p&gt;


&lt;div class="ltag__comment crayons-card my-2 p-0 overflow-hidden"&gt;
    &lt;a href="https://dev.to/effessdev/graduating-in-2030-is-learning-c-worth-it-honestly-1o16" class="flex items-center gap-2 p-3 fs-s color-base-60 hover:color-base-90"&gt;
      

      &lt;span&gt;Comment on &lt;strong class="fw-medium color-base-90"&gt;Graduating in 2030: Is learning C worth it? Honestly?&lt;/strong&gt;&lt;/span&gt;
    &lt;/a&gt;
  &lt;div class="p-4"&gt;
    &lt;div class="flex items-center gap-2 mb-3"&gt;
      &lt;a href="/francistrdev" class="crayons-avatar crayons-avatar--l"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3711376%2Fe88f6fdf-33af-4dde-bb60-fbe662e87d02.gif" alt="francistrdev" class="crayons-avatar__image" width="320" height="320"&gt;
      &lt;/a&gt;
      &lt;div&gt;
        &lt;a href="/francistrdev" class="crayons-link fw-medium"&gt;FrancisTRᴅᴇᴠ&lt;/a&gt;
        &lt;span class="fs-xs color-base-60 ml-1"&gt;Oct 2&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="text-styles"&gt;
      &lt;p&gt;Here is what I learn overtime. Start building.&lt;/p&gt;

&lt;p&gt;You can learn any language you want, but at the end of the day, you are learning the structure of the hammer, not how to use it.&lt;/p&gt;

&lt;p&gt;Build projects in various language and choose the ones you like and stick to it. If my ideal language for full stack development is Next.js, learn next.js.&lt;/p&gt;

&lt;p&gt;Ignore the market for now since it's VERY volatile and things can change. Maybe one day Python is the most in demand then it's JavaScript the next.&lt;/p&gt;

&lt;p&gt;Overall, specialize specialize specialize. Regardless of demand, the market always look for a person who specialize in something over the person that uses the language since it's "demanding".&lt;/p&gt;


    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;So I did.&lt;/p&gt;

&lt;p&gt;I stopped &lt;strong&gt;right where I was standing&lt;/strong&gt; - embedded systems development using ESP32 microcontrollers and the native ESP-IDF framework. I was right on the verge of leaving ESP32 and going for STM32 because I thought it was more industry-relevant in my area. But that plan was temporarily cancelled (though I might revisit STM32 in the future as a side skill) because he asked me to specialize rather than be the person who uses what's "demanding".&lt;/p&gt;

&lt;p&gt;But about the "start building projects" part, that was something I had trouble with. I had several project ideas related to general software engineering (and I still have so many just sitting around), but never embedded systems engineering. So what did I build?&lt;/p&gt;

&lt;p&gt;I built a fully free embedded systems course focusing on the ESP-IDF framework, teaching the basics of embedded systems development. The course has a very specific goal: to learn to work with AI.&lt;/p&gt;

&lt;p&gt;Even though &lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; was the first to comment, several other people, like &lt;a class="mentioned-user" href="https://dev.to/fm"&gt;@fm&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/unitbuilds"&gt;@unitbuilds&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/build996"&gt;@build996&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/aniruddhaadak"&gt;@aniruddhaadak&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/elanatframework"&gt;@elanatframework&lt;/a&gt; and a few others gave me extremely valuable advices. My course is based on the &lt;em&gt;average&lt;/em&gt; opinion of all the comments. I saw 2 opposite viewpoints and everything in between, so I couldn't do anything but go with a middle ground.&lt;/p&gt;

&lt;p&gt;And remember that I had trouble coming up with projects related to embedded systems? But that's no longer the case! I don't know if it's because I built that course, but I started getting ideas once I finished the "Basics" section! 🎉 I will be posting here once I complete it. I am waiting for the hardware delivery! I am sure others will like it 🙂&lt;/p&gt;

&lt;p&gt;So, here is the link to the course if you want to take a look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://effessdev.github.io/esp-idf" rel="noopener noreferrer"&gt;https://effessdev.github.io/esp-idf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ll be posting more about the course here soon! In the meantime, please read the chapters and share your thoughts and suggestions. Let me know if you spot any mistakes or think something could be improved. Your feedback and suggestions are what inspired me to create this course in the first place!&lt;/p&gt;

&lt;p&gt;Hope you enjoyed the story! Thanks for reading! 😊&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>My $0 Coding Workflow: Free Tools That Replaced Paid Subscriptions</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Sat, 10 Oct 2026 06:26:04 +0000</pubDate>
      <link>https://dev.to/effessdev/my-0-coding-workflow-free-tools-that-replaced-paid-subscriptions-3pfc</link>
      <guid>https://dev.to/effessdev/my-0-coding-workflow-free-tools-that-replaced-paid-subscriptions-3pfc</guid>
      <description>&lt;p&gt;If you didn't know, the average monthly income in the US can be many times higher than in India. That means a $20/month Claude Code subscription can &lt;em&gt;feel like paying $200/month&lt;/em&gt;. A $100/month subscription? That's like paying $1,000/month!&lt;/p&gt;

&lt;p&gt;And it's not just India. People in many other countries face the same challenge, some even worse. If you live somewhere where AI subscriptions are relatively expensive compared to local incomes, paying for one can be a big decision, especially if you're a student.&lt;/p&gt;

&lt;p&gt;The good news? You don't need to spend a single dollar to build a useful AI-powered coding workflow. Here's mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Agent #1: GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;VS Code comes with GitHub Copilot integration, and its generous free tier refreshes monthly. It's a great starting point if you want an AI coding assistant without a paid subscription. I mainly use it to work on existing projects rather than build entirely new ones from scratch.&lt;/p&gt;

&lt;p&gt;So, what do I use for new projects? Keep reading!&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Agent #2: Qoder
&lt;/h2&gt;

&lt;p&gt;Haven't heard of Qoder? It's an editor built on top of VS Code, with its own AI coding features.&lt;/p&gt;

&lt;p&gt;Currently, Qoder is offering free access to Qwen 3.8 Flash for a limited time (thanks, &lt;a class="mentioned-user" href="https://dev.to/unitbuilds"&gt;@unitbuilds&lt;/a&gt;!). I've given it a try, and it's pretty good.&lt;/p&gt;

&lt;p&gt;Another useful tool to add to the free coding toolkit!&lt;/p&gt;

&lt;h2&gt;
  
  
  For Initial Prototypes
&lt;/h2&gt;

&lt;p&gt;For this, I turn to Claude.ai.&lt;/p&gt;

&lt;p&gt;Its free tier is quite generous, and one of its biggest advantages is that it can build projects directly on the website and package the resulting files into a ZIP archive.&lt;/p&gt;

&lt;p&gt;I use Claude.ai to create the initial version of a new project. From there, I gradually add features, fix bugs, and improve the code using the other tools in my workflow, such as GitHub Copilot.&lt;/p&gt;

&lt;p&gt;This gives me a starting point without having to spend money on an AI coding subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  ReptClip
&lt;/h2&gt;

&lt;p&gt;This one's a little different: &lt;strong&gt;ReptClip is a VS Code extension I built myself!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I copy the relevant project context to my clipboard (ReptClip makes this very easy).&lt;/li&gt;
&lt;li&gt;I paste it into a free chatbot, such as ChatGPT or Gemini, along with my prompt.&lt;/li&gt;
&lt;li&gt;The chatbot generates the requested changes as diffs in a single code block.&lt;/li&gt;
&lt;li&gt;I copy the generated diffs and click &lt;strong&gt;"Apply Diffs"&lt;/strong&gt; in the extension to apply the changes to my project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;Instead of manually copying and pasting changes across individual files, ReptClip lets me apply changes across multiple files in one go. It can edit existing files, create new ones, and delete files when needed. You can put each window side by side like this for maximum speed:&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%2F2x78thdbtods7wga8ucv.png" 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%2F2x78thdbtods7wga8ucv.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://dev.to/effessdev/i-built-a-vs-code-extension-to-paste-your-project-into-free-chatbots-and-apply-the-diffs-in-one-5enn"&gt;read this post&lt;/a&gt; or &lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;check out the GitHub repository&lt;/a&gt; to learn more about ReptClip.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works together
&lt;/h2&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;spread the workload across multiple free tools instead of relying on a single one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's how I use them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude.ai:&lt;/strong&gt; Create initial versions of new projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot:&lt;/strong&gt; Work on existing projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qoder:&lt;/strong&gt; Another option for working on existing projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ReptClip + any free chatbot:&lt;/strong&gt; Generate and apply changes across multiple files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I'm using several tools with separate free tiers, I'm less likely to hit usage caps on every single one. Also, ReptClip + any free chatbot method is essentially unlimited, since there are countless number of free web-based chatbots online.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools I skipped
&lt;/h2&gt;

&lt;p&gt;I also tried connecting an OpenRouter API key to GitHub Copilot in VS Code to use its free models, but the experience wasn't great. Many models struggled with tool calling, some got stuck in thinking loops, and others wouldn't even start working. Google AI Studio API keys also have certain issues, like very strict API rate limits.&lt;/p&gt;

&lt;p&gt;I also experimented with running local models for coding. However, unless you have a fairly powerful PC, this may not be a practical option. My device can only run very small models, which often struggle to generate valid tool calls, hallucinate a lot, or take an &lt;strong&gt;extremely long time&lt;/strong&gt; to respond.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;What do you think of this setup? Have I missed any useful free tools or workflows? Was this useful to you? Also, what tools do you use in your $0 coding setup?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>GiffyPy: A Fast, Lightweight Video Editor for Your Project README</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Tue, 06 Oct 2026 12:21:30 +0000</pubDate>
      <link>https://dev.to/effessdev/showdev-giffypy-a-fast-lightweight-video-editor-to-crop-and-trim-screen-recordings-for-your-2k2f</link>
      <guid>https://dev.to/effessdev/showdev-giffypy-a-fast-lightweight-video-editor-to-crop-and-trim-screen-recordings-for-your-2k2f</guid>
      <description>&lt;p&gt;If you've ever tried adding a GIF or animated WebP of a screen recording to your project's README, you know how annoying it can be. You just want to show people how your product works without spending 20 minutes editing a video, but a few friction points always pop up.&lt;/p&gt;

&lt;p&gt;A good README is important. Seeing an app in action builds way more trust than a wall of text. So I built &lt;strong&gt;GiffyPy&lt;/strong&gt;, a lightweight video editor specifically designed to make editing screen recordings for project READMEs fast and effortless.&lt;/p&gt;

&lt;p&gt;Here are the main problems it solves (or &lt;a href="https://github.com/effessdev/GiffyPy" rel="noopener noreferrer"&gt;click here&lt;/a&gt; to skip directly to the GitHub repository).&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing the taskbar and black borders
&lt;/h2&gt;

&lt;p&gt;When recording your screen with OBS Studio, even if you use Window Capture, you can end up with black bars or the taskbar stuck in the recording.&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%2Fy3raiwpu1d7eqkkctnws.png" 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%2Fy3raiwpu1d7eqkkctnws.png" alt="obs-recording" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cropping it cleanly in a regular video editor can involve trial and error with resolutions. GiffyPy lets you drag and resize a crop rectangle directly over the video preview, just like cropping an image.&lt;/p&gt;

&lt;p&gt;It also includes rule-of-thirds guides to help position the crop.&lt;/p&gt;

&lt;h2&gt;
  
  
  A proper multi-clip timeline
&lt;/h2&gt;

&lt;p&gt;Previously, I mainly needed to trim the beginning and end of a recording. But sometimes you want to remove a few sections in the middle or rearrange parts of a demo.&lt;/p&gt;

&lt;p&gt;GiffyPy now has a &lt;strong&gt;non-destructive, multi-clip timeline&lt;/strong&gt; that lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Split clips at the current playhead position using &lt;code&gt;S&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Trim the start and end of clips by dragging their edges.&lt;/li&gt;
&lt;li&gt;Reorder segments using drag and drop.&lt;/li&gt;
&lt;li&gt;Delete unwanted segments.&lt;/li&gt;
&lt;li&gt;Undo the last edit using &lt;code&gt;Ctrl + Z&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The original video stays untouched, so you can experiment with the edit without permanently modifying the source file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instant scrubbing without loading screens
&lt;/h2&gt;

&lt;p&gt;I usually only need to make a few quick edits, so waiting for a heavy editor to load or dealing with sluggish timeline scrubbing feels unnecessary.&lt;/p&gt;

&lt;p&gt;GiffyPy opens in under a second. During import, it generates a low-resolution image sequence so the preview can update quickly while you scrub.&lt;/p&gt;

&lt;p&gt;While dragging the playhead, it displays these lightweight images. Once you release the mouse, it switches back to the full-resolution frame.&lt;/p&gt;

&lt;p&gt;It can also generate background proxy files for video codecs that Qt cannot play natively, helping expand the range of videos you can edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimizing GIFs and videos
&lt;/h2&gt;

&lt;p&gt;A screen recording doesn't need to be huge just to demonstrate a feature in a README.&lt;/p&gt;

&lt;p&gt;GiffyPy lets you customize the export using three main settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framerate:&lt;/strong&gt; Adjust the output from 0.5 to 60 FPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution:&lt;/strong&gt; Scale the output dimensions as a percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality:&lt;/strong&gt; Adjust the output quality to balance file size and visual clarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For GIF exports, it also supports automatic palette generation and dithering controls, giving you more control over the final result.&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%2Fkmr047sjcdkxphfhz1lx.png" 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%2Fkmr047sjcdkxphfhz1lx.png" alt="GiffyPy export settings" width="308" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is to keep demos lightweight while making sure they still look good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster exports and four ways to save
&lt;/h2&gt;

&lt;p&gt;Exporting shouldn't interrupt your workflow with a file dialog every time.&lt;/p&gt;

&lt;p&gt;GiffyPy now provides four separate save options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overwrite Existing File:&lt;/strong&gt; Replace the source file's existing output, with a confirmation prompt first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save a Numbered Copy:&lt;/strong&gt; Save a new version next to the source, using a name like &lt;code&gt;name (edited 1)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save To…:&lt;/strong&gt; Choose the output location and filename yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy to Clipboard:&lt;/strong&gt; Export and copy the result directly to your clipboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last option is particularly useful for README demos. You can copy an animated GIF or WebP and paste it directly into places that support image pasting, such as GitHub or DEV.to's editors.&lt;/p&gt;

&lt;p&gt;No need to export to a folder, find the file, and manually attach it afterward.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Clipboard export is currently available for GIF and WebP only.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple export formats
&lt;/h2&gt;

&lt;p&gt;Although the main goal is creating lightweight animations for project READMEs, GiffyPy isn't limited to GIFs.&lt;/p&gt;

&lt;p&gt;It currently supports exporting to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animated WebP&lt;/li&gt;
&lt;li&gt;GIF&lt;/li&gt;
&lt;li&gt;MP4&lt;/li&gt;
&lt;li&gt;WebM&lt;/li&gt;
&lt;li&gt;MOV&lt;/li&gt;
&lt;li&gt;MKV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you can use it for ordinary video exports too, not just README demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline navigation and keyboard shortcuts
&lt;/h2&gt;

&lt;p&gt;The timeline also has a few navigation controls to make editing more comfortable, especially for longer recordings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scroll&lt;/strong&gt; to move through the timeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zoom&lt;/strong&gt; using &lt;code&gt;Ctrl + Scroll&lt;/code&gt; or a two-finger trackpad gesture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pan&lt;/strong&gt; using middle-click and drag or a two-finger trackpad gesture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move frame by frame&lt;/strong&gt; using the left and right arrow keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also shortcuts for common actions, including splitting clips, deleting segments, undoing edits, and fitting the timeline to the view.&lt;/p&gt;

&lt;p&gt;The idea is to keep the workflow fast without forcing you to reach for the mouse for every operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A custom app icon
&lt;/h2&gt;

&lt;p&gt;Not a big feature, but a custom icon in the taskbar matters to me!&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%2Fnndc83ahqr6ihhvi2vep.png" 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%2Fnndc83ahqr6ihhvi2vep.png" alt="GiffyPy custom icon" width="676" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a small detail, but it makes the app feel more complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it was made
&lt;/h2&gt;

&lt;p&gt;GiffyPy is built with &lt;strong&gt;Python and PySide6&lt;/strong&gt;, with FFmpeg handling video processing and export.&lt;/p&gt;

&lt;p&gt;The source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/effessdev/GiffyPy" rel="noopener noreferrer"&gt;effessdev/GiffyPy&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;p&gt;FFmpeg needs to be installed and available in your system's &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;On Windows, you can install it from the command prompt using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;winget &lt;span class="nb"&gt;install &lt;/span&gt;Gyan.FFmpeg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Building a standalone Windows executable
&lt;/h3&gt;

&lt;p&gt;GiffyPy also includes a packaging script for building a standalone Windows executable using PyInstaller.&lt;/p&gt;

&lt;p&gt;From the project directory, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package.bat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script packages the app using &lt;code&gt;main.py&lt;/code&gt; and includes the custom &lt;code&gt;icon.ico&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;GiffyPy already covers most of my personal needs for creating screen recordings for READMEs, but there's always room for improvement.&lt;/p&gt;

&lt;p&gt;I'd love to hear what you think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What features would make this kind of editor more useful to you?&lt;/li&gt;
&lt;li&gt;Are there any annoying steps in your current screen-recording workflow that could be automated?&lt;/li&gt;
&lt;li&gt;Would you use a lightweight editor specifically designed for creating README demos?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work on open-source projects, I'd especially love to hear how you currently create and optimize your demo GIFs.&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/ssapable"&gt;@ssapable&lt;/a&gt; created a cartoon for GiffyPy using a tool he built called &lt;a href="https://payhip.com/b/A2wa8" rel="noopener noreferrer"&gt;ScriptToon&lt;/a&gt;. &lt;a href="https://ssap-pa.github.io/scripttoon-samples/giffypy-3d.mp4" rel="noopener noreferrer"&gt;Click here&lt;/a&gt; to view it; it's really good!&lt;/p&gt;

&lt;p&gt;Give GiffyPy a try, check out the &lt;a href="https://github.com/effessdev/GiffyPy" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;, and let me know what you think!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>python</category>
      <category>productivity</category>
    </item>
    <item>
      <title>ESP32 Embedded Systems Course Chapter 2: Your First Project</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Sun, 04 Oct 2026 15:14:40 +0000</pubDate>
      <link>https://dev.to/effessdev/esp32-embedded-systems-course-chapter-2-your-first-project-21ce</link>
      <guid>https://dev.to/effessdev/esp32-embedded-systems-course-chapter-2-your-first-project-21ce</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sidenote:&lt;/strong&gt; &lt;em&gt;Hi! I've been working on a free, ad-free course on ESP32 and the native ESP-IDF framework for a while now. It skips the stuff AI already does well and focuses strictly on what AI still struggles with. Here is the new chapter! I'd love to get your feedback and suggestions. You can also &lt;a href="https://effessdev.github.io/esp-idf/getting-started/first-project/" rel="noopener noreferrer"&gt;read the latest version of this chapter on the course website&lt;/a&gt; if you want to refer to earlier chapters for full context.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Enjoy reading! ☺️&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Your first project
&lt;/h1&gt;

&lt;p&gt;Hardware required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An ESP32 microcontroller.&lt;/li&gt;
&lt;li&gt;A suitable cable to connect it to your PC.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create a new empty project
&lt;/h2&gt;

&lt;p&gt;We are going to use the &lt;code&gt;ESP-IDF: New Project&lt;/code&gt; command from the command palette to create the project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the command palette (I hope you remember the shortcut)&lt;/li&gt;
&lt;li&gt;Search for and click on &lt;code&gt;ESP-IDF: New Project&lt;/code&gt;, and wait.&lt;/li&gt;
&lt;li&gt;Select your ESP-IDF version (you might see only one version since we only installed one), and wait.&lt;/li&gt;
&lt;li&gt;A new tab will pop up. Inside that tab, under &lt;code&gt;ESP-IDF Templates&lt;/code&gt;, select the &lt;code&gt;sample_project&lt;/code&gt; template and click the "Create Project" button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tab will refresh, and you will see a form to fill in your project details. Fill in the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project name:&lt;/strong&gt; Your project name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project directory:&lt;/strong&gt; Your project directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESP-IDF target:&lt;/strong&gt; esp32.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESP-IDF board:&lt;/strong&gt; Custom board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serial port:&lt;/strong&gt; Detect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenOCD configuration files:&lt;/strong&gt; Keep the default value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESP-IDF component directory:&lt;/strong&gt; Keep the input empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click "Create Project" and wait again. After creation, in the new tab that pops up, click "Open Project". This will open your brand new ESP-IDF project in a fresh VS Code window.&lt;/p&gt;

&lt;p&gt;!!! note "If you are using Clangd"&lt;br&gt;
    If you are using Clangd instead of the Microsoft C/C++ extension, run &lt;code&gt;ESP-IDF: Configure project for ESP-Clang&lt;/code&gt; from the VS Code command palette to make sure Clangd IntelliSense works correctly. Also, make sure both of them aren't activated at the same time, as they can interfere with each other.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configure your project
&lt;/h2&gt;

&lt;p&gt;You need to configure your project whenever you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start a new project (like we did now)&lt;/li&gt;
&lt;li&gt;Add, remove, or rename source code files&lt;/li&gt;
&lt;li&gt;And so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it's safe to do again and again. Since we just created a new project, let's run it by clicking the &lt;code&gt;ESP-IDF: Run idf.py reconfigure Task&lt;/code&gt; command from the command palette.&lt;/p&gt;

&lt;p&gt;This will take some time. While it's working, let's learn what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generates (or regenerates) the build files in the &lt;code&gt;build&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Generates &lt;code&gt;compile_commands.json&lt;/code&gt;, which is essential for Microsoft C/C++ Extension or Clangd to provide IntelliSense&lt;/li&gt;
&lt;li&gt;And a lot more (just know these two for now)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Let's write some code
&lt;/h2&gt;

&lt;p&gt;If you look at &lt;code&gt;main.c&lt;/code&gt; right now, you will see an empty main function (&lt;code&gt;app_main&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;app_main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's log "Hello world!" inside it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hello, world!
&lt;/h3&gt;

&lt;p&gt;We use a function called &lt;code&gt;ESP_LOGI()&lt;/code&gt; to log "Hello world!" (&lt;code&gt;I&lt;/code&gt; stands for "info"). Include the &lt;code&gt;esp_log.h&lt;/code&gt; header to use that function. The function takes two arguments: a &lt;code&gt;TAG&lt;/code&gt;, and the actual string to log.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"esp_log.h"&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;app_main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;ESP_LOGI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"MAIN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello world!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code will log something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I (312) MAIN: Hello world!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;I&lt;/code&gt;: Log level indicator (Info).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;(312)&lt;/code&gt;: Timestamp in milliseconds since boot (this exact number will vary).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAIN&lt;/code&gt;: Tag name (useful to determine the source of the LOG message when we have a lot of them).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Hello world!&lt;/code&gt;: The actual content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building (compiling) the project
&lt;/h2&gt;

&lt;p&gt;Open the command palette (&lt;code&gt;Ctrl + Shift + P&lt;/code&gt;) and run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESP-IDF: Build Your Project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will also take some time. Be patient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flashing your project {#flashing}
&lt;/h2&gt;

&lt;p&gt;Flashing is like uploading the compiled code to your ESP32. You need to physically connect the ESP32 to your computer. After doing that, run the following command from the command palette:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESP-IDF: Flash (UART) Your Project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It probably won't work out of the box. The fix differs depending on your platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you are using Windows
&lt;/h3&gt;

&lt;p&gt;If you are on Windows, flashing might show this error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A fatal error occurred: Could not connect to an Espressif device on any of the 1 available serial ports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that happens, the next time you try, press and hold the BOOT button on your board as soon as you see &lt;code&gt;Connecting...&lt;/code&gt;. After some time, the &lt;code&gt;Connecting...&lt;/code&gt; will stop and you will see several different outputs. Stop holding the BOOT button when you see these somewhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uploading stub flasher...
Running stub flasher...
Stub flasher running.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It might require some trial and error to find out how long you will have to hold the BOOT button.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you are using Linux (e.g., Ubuntu)
&lt;/h3&gt;

&lt;p&gt;You might get this error while flashing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A fatal error occurred: Could not open /dev/ttyUSB0, the port is busy or doesn't exist.
([Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0')

Hint: Try to add the user to the dialout or uucp group.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that happens, run this command, log out, log back in (or reboot), and try flashing again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; dialout &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have to do it only once per system. Subsequent flashing will work without running this command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring the device
&lt;/h2&gt;

&lt;p&gt;You should keep your ESP32 connected to your computer so that it receives power and is running. Let's check whether the "Hello world!" got logged.&lt;/p&gt;

&lt;p&gt;At the bottom of VS Code, you will see several icons. Find the icon that looks like a monitor and hover over it. If you see "Monitor Device" when you hover, you found the correct icon.&lt;/p&gt;

&lt;p&gt;Click on that icon. You will see several logs popping up. These are sent internally. But among those log messages, you will find our Hello world:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I (258) main_task: Started on CPU0
I (258) main_task: Calling app_main()
I (258) MAIN: Hello world!   &amp;lt;--------------- this
I (258) main_task: Returned from app_main()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might see different numbers than 258. That's not a problem.&lt;/p&gt;

&lt;p&gt;So, congratulations! You just set up your computer for ESP-IDF, created a new project, wrote some code, compiled, flashed, and monitored the output!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Adding the VS Code Configuration Folder
&lt;/h3&gt;

&lt;p&gt;If you accidentally deleted/edited the &lt;code&gt;.vscode&lt;/code&gt; folder, you can regenerate it using the &lt;code&gt;ESP-IDF: Add VS Code Configuration Folder&lt;/code&gt; command from the command palette.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Your Knowledge
&lt;/h2&gt;

&lt;p&gt;Test your knowledge by answering the following questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do we create a new ESP-IDF project? Which template should we use for an empty project?&lt;/li&gt;
&lt;li&gt;When do we need to configure our project? How can we do it? Is it safe to do it repeatedly?&lt;/li&gt;
&lt;li&gt;What does the "I" in &lt;code&gt;ESP_LOGI&lt;/code&gt; stand for?&lt;/li&gt;
&lt;li&gt;How do we build an ESP-IDF project?&lt;/li&gt;
&lt;li&gt;How do we flash an ESP-IDF project to the ESP32?&lt;/li&gt;
&lt;li&gt;What is monitoring? How can we do it?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks so much for reading it till the end. If you are an embedded systems developer yourself, I'd love to hear your feedback. Feel free to point out my mistakes and give suggestions. I am all ears.&lt;/p&gt;

&lt;p&gt;If you appreciate what I am doing, &lt;a href="https://github.com/effessdev/esp-idf" rel="noopener noreferrer"&gt;dropping a ⭐ on GitHub&lt;/a&gt;, reacting to this post, or writing a comment will genuinely help a lot with the visibility of the course.&lt;/p&gt;

&lt;p&gt;You can find the full course here: &lt;a href="https://effessdev.github.io/esp-idf" rel="noopener noreferrer"&gt;https://effessdev.github.io/esp-idf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for your support ☺️&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>beginners</category>
      <category>iot</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Graduating in 2030: Is learning C worth it? Honestly?</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Fri, 02 Oct 2026 12:03:47 +0000</pubDate>
      <link>https://dev.to/effessdev/graduating-in-2030-is-learning-c-worth-it-honestly-1o16</link>
      <guid>https://dev.to/effessdev/graduating-in-2030-is-learning-c-worth-it-honestly-1o16</guid>
      <description>&lt;p&gt;I started my degree just 1-2 months ago, which means I will be graduating in 2030. Given how rapidly things are moving, will manual coding (or even manual code review) still be a required skill by then?&lt;/p&gt;

&lt;p&gt;I’ve been reading several articles discussing how AI is already outperforming devs at writing code, such as this one by &lt;a href="https://dev.to/sylwia-lask"&gt;Sylwia Laskowska&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://dev.to/sylwia-lask/ai-is-already-better-at-coding-than-most-software-developers-4hno"&gt;AI Is Already Better at Coding Than Most Software Developers&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I largely agree. AI is already extremely capable, and it will only become far more advanced over the next four years.&lt;/p&gt;

&lt;p&gt;Lately, I’ve been trying to learn ESP-IDF to program microcontrollers, but C has a brutal learning curve. I spend a significant amount of time just trying to understand the documentation and the official examples, both of which feel drastically more complicated than the documentation I was used to in web development (like Next.js and React).&lt;/p&gt;

&lt;p&gt;While I can use AI to generate code and finish projects much faster, my limited C knowledge makes it very difficult for me to properly review or verify the generated output. I am actively trying to fill this knowledge gap, but the process is extremely time-consuming. This leaves me worried that I am spending massive effort mastering a skill that will be useless by the time I enter the workforce.&lt;/p&gt;

&lt;p&gt;Why spend years struggling through syntax if AI will always write code better and faster than any human can?&lt;/p&gt;

&lt;p&gt;Some people say that it's us who should step in when AI makes a mistake. But what if &lt;em&gt;we&lt;/em&gt; make more mistakes than AI?&lt;/p&gt;

&lt;p&gt;Looking around developer discussions, the sentiment seems consistent: devs are increasingly shifting away from manual coding toward higher-level tasks. I’ve even seen developers claim they don't even look at AI-generated code anymore, making it feel like &lt;strong&gt;even code review itself&lt;/strong&gt; is ceasing to exist.&lt;/p&gt;

&lt;p&gt;I need an updated, realistic perspective on this problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should I stop spending my time deeply learning C programming and syntax?&lt;/li&gt;
&lt;li&gt;If I should stop, what should I prioritize instead?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>c</category>
      <category>iot</category>
    </item>
    <item>
      <title>I Stripped Shadcn and Tweakcn. Now My Website Finally Feels Right.</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Fri, 02 Oct 2026 05:52:11 +0000</pubDate>
      <link>https://dev.to/effessdev/i-stripped-shadcn-and-tweakcn-now-my-website-finally-feels-right-4537</link>
      <guid>https://dev.to/effessdev/i-stripped-shadcn-and-tweakcn-now-my-website-finally-feels-right-4537</guid>
      <description>&lt;p&gt;I always use Next.js to build my website.&lt;/p&gt;

&lt;p&gt;People say that using Shadcn really speeds up the process. So, I have been using it for almost all the websites I create.&lt;/p&gt;

&lt;p&gt;But I think I was overcomplicating my websites for no reason.&lt;/p&gt;

&lt;p&gt;To be straight, &lt;strong&gt;I am not a web developer&lt;/strong&gt;. What I consider to be &lt;em&gt;complicated&lt;/em&gt; might not be complicated for others. Anyway, this time, what I wanted was a website where I could publish my tutorials, with better syntax highlighting, LaTeX, use whatever Markdown editor I prefer, and have version control for my tutorials (some things are not available here).&lt;/p&gt;

&lt;p&gt;The problem with shadcn that I encountered was that it felt too generic.&lt;/p&gt;

&lt;p&gt;The easiest way to make it unique is to update the color palette.&lt;/p&gt;

&lt;p&gt;But this is the color palette Shadcn uses:&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%2Fki483tqivxpepzhnmm54.png" 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%2Fki483tqivxpepzhnmm54.png" alt=" " width="462" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plus their dark mode versions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is no way to update this color palette to match my icon myself without spending a significant amount of time on this. I don't even know what where each one of them are used. While it's not required to edit every single one of these colors, I didn't feel comfortable leaving unused colors with default values.&lt;/p&gt;

&lt;p&gt;So, I went to tweakcn.com and grabbed the theme that looked the most like my icon (Polaris).&lt;/p&gt;

&lt;p&gt;But honestly, it didn't quite match what I wanted. Whenever I try to change a single color somewhere, it breaks something else.&lt;/p&gt;

&lt;p&gt;So, I decided to step back and strip Shadcn entirely.&lt;/p&gt;

&lt;p&gt;The new color palette only contains 12 colors (24 if you include dark mode), and they are directly based on my icon. None of those colors are unused.&lt;/p&gt;

&lt;p&gt;Another problem I encountered is that the radius of the cards and other things didn't change when I updated the &lt;code&gt;--radius&lt;/code&gt; in &lt;code&gt;globals.css&lt;/code&gt;, which was really frustrating. Things that happen because of my limited expertise.&lt;/p&gt;

&lt;p&gt;Anyway, all things are sorted out right now. The site is much simpler and smaller than before, and I am really satisfied with the look (especially the dark mode). Finally, I can now focus on the actual content.&lt;/p&gt;

&lt;p&gt;If there are any frontend developers here, I'd love to hear your feedback. Here is the link to the website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://effessdev.github.io" rel="noopener noreferrer"&gt;https://effessdev.github.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This redesign taught me why sometimes, less is more. What do you think about this one? Have you had any similar experiences where you had to strip down features to make your code less overwhelming?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>ReptClip: A VS Code Extension to Paste Your Project into Free Chatbots and Apply the Diffs in One Click</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:01:15 +0000</pubDate>
      <link>https://dev.to/effessdev/i-built-a-vs-code-extension-to-paste-your-project-into-free-chatbots-and-apply-the-diffs-in-one-5enn</link>
      <guid>https://dev.to/effessdev/i-built-a-vs-code-extension-to-paste-your-project-into-free-chatbots-and-apply-the-diffs-in-one-5enn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You are reading a post about an older version of ReptClip. Please &lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;check out the repository&lt;/a&gt; for the latest information.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let me show exactly how it works with an example 🛻&lt;/p&gt;

&lt;p&gt;The extension adds a new "ReptClip" tab in the VS Code bottom panel:&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%2Fhtjmle5gawjndem0lqao.png" 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%2Fhtjmle5gawjndem0lqao.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am going to use this extension to redesign my website's landing page. First, we need to prepare the context.&lt;/p&gt;

&lt;p&gt;Specify which files to add to the context in the "Files to include" input. You can use glob patterns like &lt;code&gt;**/*.ts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since I want to update the landing page, let's add &lt;code&gt;page.tsx&lt;/code&gt;. You will get suggestions as you type:&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%2Fo0ww3k385y5gea5xv58i.png" 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%2Fo0ww3k385y5gea5xv58i.png" alt=" " width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "Enter" or "Tab" to accept the suggestion:&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%2Fj4vtc0utxw35oogm2rvp.png" 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%2Fj4vtc0utxw35oogm2rvp.png" alt=" " width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it matches any files, it will turn green. Otherwise, it will turn yellow.&lt;/p&gt;

&lt;p&gt;Let's add &lt;code&gt;AGENTS.md&lt;/code&gt; too:&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%2Fc4mwxy1rr6maodra209i.png" 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%2Fc4mwxy1rr6maodra209i.png" alt=" " width="799" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This order is preserved in the context output. &lt;code&gt;page.tsx&lt;/code&gt; will appear after &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, click "Enter" again. The context will be copied &lt;strong&gt;directly to your clipboard&lt;/strong&gt;. It  looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project structure&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;.gitattributes
.gitignore
AGENTS.md
CONTRIBUTING.md
LICENSE
README.md
pipxclip-config.toml
pyproject.toml
src/pipxclip/__init__.py
src/pipxclip/cli.py
src/pipxclip/config.py
tests/test_cli.py
tests/test_config.py
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# Output format&lt;/span&gt;

Provide all file modifications as Search/Replace blocks inside a single 4-backtick code block.

&lt;span class="gu"&gt;## Formatting Rules&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**File Headers:**&lt;/span&gt; Every set of edits must begin with the exact relative file path on its own line (e.g., &lt;span class="sb"&gt;`path/to/file.ext`&lt;/span&gt;), even if there is only a single file in the project.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Exact Matching:**&lt;/span&gt; The &lt;span class="sb"&gt;`SEARCH`&lt;/span&gt; block must contain an &lt;span class="ge"&gt;*exact, verbatim*&lt;/span&gt; copy of existing code, including identical whitespace, indentation, and surrounding context lines to uniquely identify the match.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Uniqueness:**&lt;/span&gt; Provide sufficient surrounding unchanged lines in the &lt;span class="sb"&gt;`SEARCH`&lt;/span&gt; block to ensure it matches exactly &lt;span class="gs"&gt;**one**&lt;/span&gt; location in the target file.
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**New Files &amp;amp; Deletions:**&lt;/span&gt;
&lt;span class="p"&gt;   -&lt;/span&gt; To create a new file, use an empty &lt;span class="sb"&gt;`SEARCH`&lt;/span&gt; block.
&lt;span class="p"&gt;   -&lt;/span&gt; To delete a file or a code block, use an empty &lt;span class="sb"&gt;`REPLACE`&lt;/span&gt; block.
&lt;span class="p"&gt;5.&lt;/span&gt; &lt;span class="gs"&gt;**No Placeholders:**&lt;/span&gt; Do not use ellipses (&lt;span class="sb"&gt;`...`&lt;/span&gt;), comments like &lt;span class="sb"&gt;`# rest of code unchanged`&lt;/span&gt;, or omitted lines inside &lt;span class="sb"&gt;`SEARCH`&lt;/span&gt; or &lt;span class="sb"&gt;`REPLACE`&lt;/span&gt; blocks.
&lt;span class="p"&gt;6.&lt;/span&gt; &lt;span class="gs"&gt;**Sequential Edits:**&lt;/span&gt; If editing multiple parts of the same file, list the &lt;span class="sb"&gt;`SEARCH/REPLACE`&lt;/span&gt; blocks in top-to-bottom order as they appear in the file.

&lt;span class="gu"&gt;## Example&lt;/span&gt;

&lt;span class="p"&gt;````&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;src/models/user.py
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; SEARCH
class User:
    def __init__(self, name):
        self.name = name

    def to_dict(self):
        return {"name": self.name}
=======
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def to_dict(self):
        return {
            "name": self.name,
            "email": self.email,
        }
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; REPLACE

src/controllers/user_controller.py
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; SEARCH
from src.models.user import User
=======
from src.models.user import User
from src.utils.validator import validate_email
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; REPLACE
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; SEARCH
def create_user(name):
    return User(name)
=======
def create_user(name, email):
    validate_email(email)
    return User(name, email)
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; REPLACE

src/utils/validator.py
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; SEARCH
=======
def validate_email(email):
    if "@" not in email:
        raise ValueError("Invalid email address")
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; REPLACE
&lt;span class="p"&gt;````&lt;/span&gt;

&lt;span class="gh"&gt;# AGENTS.md&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;Do not make mistakes.
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# Prompt&lt;/span&gt;

&amp;lt;- Cursor lands here. You can quickly start typing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, go to any free chatbot and paste the context using &lt;code&gt;Ctrl + V&lt;/code&gt;:&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%2Ff5jxb8w7ehggk3yr6rud.png" 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%2Ff5jxb8w7ehggk3yr6rud.png" alt=" " width="799" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Type your prompt, and send:&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%2Ftgrcjg5vs45qaqjx499x.png" 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%2Ftgrcjg5vs45qaqjx499x.png" alt=" " width="799" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The chatbot will generate the diffs inside a code block:&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%2Fzlnp5io9qxom4slta3o0.png" 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%2Fzlnp5io9qxom4slta3o0.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy it to your clipboard, and go back to VS Code.&lt;/p&gt;

&lt;p&gt;Click "Apply Diffs" in the ReptClip tab. The extension &lt;strong&gt;reads the diffs from the clipboard and applies them to the files&lt;/strong&gt;:&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%2Fem5eml6a20gn7xeooorr.png" 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%2Fem5eml6a20gn7xeooorr.png" alt=" " width="798" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start the development server and check out the new landing page:&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%2F1m22hg2bxii6w4bgvovc.png" 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%2F1m22hg2bxii6w4bgvovc.png" alt=" " width="799" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The landing page has been redesigned.&lt;/p&gt;

&lt;p&gt;If at least one SEARCH block in the diff is faulty (no match, not unique, edits a deleted file, etc.), you'll get this:&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%2Flx6xdv2btf4fo9sloz8x.png" 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%2Flx6xdv2btf4fo9sloz8x.png" alt=" " width="800" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also lets you customize the context:&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%2Fiwb89u8qect9oqqsdjtr.png" 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%2Fiwb89u8qect9oqqsdjtr.png" alt=" " width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State is stored on a per-project basis.&lt;/strong&gt; So, when you come back, your configuration will not be gone or mixed up with other projects.&lt;/p&gt;

&lt;p&gt;You can customise the context using the checkboxes. &lt;strong&gt;Each section can be toggled ON or OFF&lt;/strong&gt;. You can also write output to a file (relative and absolute path supported). You can uncheck "Copy to Clipboard" too.&lt;/p&gt;

&lt;p&gt;Here are a few edge cases explained:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files to include &lt;code&gt;**/*.py main.py&lt;/code&gt;: All Python files are included, but &lt;code&gt;main.py&lt;/code&gt; comes last.&lt;/li&gt;
&lt;li&gt;Files to include &lt;code&gt;**/*.py src/**/*.py&lt;/code&gt;: All Python files are included, but the Python files in &lt;code&gt;src&lt;/code&gt; come last.&lt;/li&gt;
&lt;li&gt;Files to include &lt;code&gt;**/*.py&lt;/code&gt;, files to exclude &lt;code&gt;secret.py&lt;/code&gt;: All Python files are included, except &lt;code&gt;secret.py&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;So, that's basically what the extension does. If you liked it, a ⭐ on GitHub would really help &lt;strong&gt;A LOT!&lt;/strong&gt; Please feel free to share it with friends or teammates who are looking for a $0 AI coding setup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=effessdev.reptclip-for-vscode" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://open-vsx.org/extension/effessdev/reptclip-for-vscode" rel="noopener noreferrer"&gt;Open VSX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's inspired by my CLI app &lt;a href="https://github.com/effessdev/pipxclip" rel="noopener noreferrer"&gt;PipxClip&lt;/a&gt;, which was formerly ReptClip, so I named it &lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;ReptClip for VS Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also, please tell me what you think in the comments. It really helps me improve the extension further. Big thanks to &lt;a class="mentioned-user" href="https://dev.to/piekwerk"&gt;@piekwerk&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/mansio"&gt;@mansio&lt;/a&gt; for their suggestions during development!&lt;/p&gt;

&lt;p&gt;Also, thanks to &lt;a class="mentioned-user" href="https://dev.to/unitbuilds"&gt;@unitbuilds&lt;/a&gt; for informing me about the limited-time free access to Qwen 3.8 Flash in Qoder. It wouldn't have been possible without it.&lt;/p&gt;

&lt;p&gt;I purposefully kept the source code minimal and lightweight. Feel free to submit &lt;a href="https://github.com/effessdev/reptclip-vscode/pulls" rel="noopener noreferrer"&gt;pull requests&lt;/a&gt;. I review them every day!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Total cost to build this: $0.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created this extension specifically to help developers who can't afford paid coding agents, giving everyone access to a smooth AI workflow for free.&lt;/p&gt;

&lt;p&gt;Thanks for reading 🙂🎉🎉&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>ai</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Is DEV.to Analytics broken? 🤔</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Thu, 24 Sep 2026 12:47:37 +0000</pubDate>
      <link>https://dev.to/effessdev/is-devto-analytics-broken-3i7i</link>
      <guid>https://dev.to/effessdev/is-devto-analytics-broken-3i7i</guid>
      <description>&lt;p&gt;This is the traffic sources graph for a post I created a few hours ago:&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%2Fhz6yhzkn8ilpgd0oxbdl.png" 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%2Fhz6yhzkn8ilpgd0oxbdl.png" alt=" " width="557" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not just this post. Every single one of my posts is dominated by direct/unknown sources. Is it like that for everyone else in here? Or is it just me? It doesn't make any sense at all.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>I Made a VS Code Extension to Copy Your Repo to Your Clipboard as Clean Markdown Context for Your Chatbot</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Thu, 24 Sep 2026 10:11:21 +0000</pubDate>
      <link>https://dev.to/effessdev/i-made-a-vs-code-extension-to-copy-your-repo-to-your-clipboard-as-clean-markdown-context-for-your-4j6l</link>
      <guid>https://dev.to/effessdev/i-made-a-vs-code-extension-to-copy-your-repo-to-your-clipboard-as-clean-markdown-context-for-your-4j6l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You are reading a post about an older version of ReptClip. Newer versions automatically apply the generated diffs from your clipboard and add many more features. Check out the &lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt; for the latest information.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;The UI:&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%2Fpov2cp13fihkv4osx643.png" 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%2Fpov2cp13fihkv4osx643.png" alt=" " width="799" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project structure&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;.gitattributes
.gitignore
AGENTS.md
CONTRIBUTING.md
LICENSE
README.md
assets/preview.webp
docs/me/prompt.md
docs/me/publishing.md
pyproject.toml
reptclip-config.toml
src/reptclip/__init__.py
src/reptclip/cli.py
src/reptclip/cli_parser.py
src/reptclip/clipboard.py
src/reptclip/config.py
src/reptclip/file_reader.py
src/reptclip/filters.py
src/reptclip/git_files.py
src/reptclip/markdown_builder.py
tests/test_cli.py
tests/test_config.py
tests/test_file_reader.py
tests/test_filters.py
tests/test_git_files.py
tests/test_markdown_builder.py
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# AGENTS.md&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;Do not make mistakes.
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# Prompt&lt;/span&gt;

&amp;lt;- Cursor lands here; you can quickly start typing!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basically, type whatever you want to copy, then press Enter. Context will be copied &lt;strong&gt;straight to your clipboard!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also, you'll get suggestions as you type:&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%2F68ykkb513gigkc11bqnl.png" 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%2F68ykkb513gigkc11bqnl.png" alt=" " width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;State is stored on a per-project basis. When you come back, your configuration will too!&lt;/p&gt;

&lt;p&gt;It's inspired by my CLI app &lt;a href="https://github.com/effessdev/pipxclip" rel="noopener noreferrer"&gt;PipxClip&lt;/a&gt;, which was formerly ReptClip. So I named it &lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;ReptClip for VS Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are the key improvements from the CLI version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to provide quotes for glob patterns: This is impossible in the CLI&lt;/li&gt;
&lt;li&gt;Get suggestions as you type&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Intuitive UI (README not required!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's really useful for me because this is my workflow when I finish my GitHub Copilot free credits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy files&lt;/li&gt;
&lt;li&gt;Paste them into gemini.google.com&lt;/li&gt;
&lt;li&gt;Paste them back&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And repeat:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y7emcvn7cpj7kuunfsq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y7emcvn7cpj7kuunfsq.gif" alt=" " width="500" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you also found this helpful, please consider giving a ⭐ on GitHub! It really helps &lt;strong&gt;A LOT!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/effessdev/reptclip-vscode" rel="noopener noreferrer"&gt;ReptClip GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=effessdev.reptclip-for-vscode" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://open-vsx.org/extension/effessdev/reptclip-for-vscode" rel="noopener noreferrer"&gt;Open VSX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading till the end! Please let me know what you think. I am really curious!&lt;/p&gt;

&lt;p&gt;Issues and PRs are welcome too!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>vscode</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I just did something my AI agents couldn't</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Sat, 12 Sep 2026 04:30:19 +0000</pubDate>
      <link>https://dev.to/effessdev/i-just-did-something-my-ai-agents-couldnt-pmi</link>
      <guid>https://dev.to/effessdev/i-just-did-something-my-ai-agents-couldnt-pmi</guid>
      <description>&lt;p&gt;It is funny how things work out. You can let AI tools try to fix a code problem for days, but nothing works until you finally step in and do it yourself. &lt;/p&gt;

&lt;p&gt;I was working on my ESP-IDF project and wanted to organize it better. My goal was to use the standard practice of keeping different pieces of code in a folder named &lt;code&gt;components&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try #1: Gemini 3.6 Flash
&lt;/h2&gt;

&lt;p&gt;I don't pay for AI, so I use the free web versions. I used a tool I built called &lt;a href="https://github.com/effessdev/reptclip" rel="noopener noreferrer"&gt;ReptClip&lt;/a&gt; to copy my project structure and files. Then, I asked the AI which files to move and what new code to put inside them. &lt;/p&gt;

&lt;p&gt;I did exactly what the AI said without questioning it. Suddenly, red error lines popped up in my code editor. Soon, the whole file was covered in errors. I told the AI about it. &lt;/p&gt;

&lt;p&gt;It gave me new steps, and I just followed them again. It still didn't work. &lt;/p&gt;

&lt;p&gt;I did this over and over for hours. I got very mad, called the AI stupid, and reset my working directory to start all over from scratch. I do not know why it failed at such an easy job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try #2: Gemini 3.1 Pro
&lt;/h2&gt;

&lt;p&gt;I thought the Pro version of the AI would do a better job. I tried the exact same steps and trusted it completely again. But I ended up with the exact same errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tries #3, #4, #5, ... #n
&lt;/h2&gt;

&lt;p&gt;I lost count of how many times I tried this. I tested Gemini Flash Extended, Gemini Pro Extended, DeepSeek v4 Flash, and DeepSeek v4 Pro. For some reason, absolutely &lt;strong&gt;nothing&lt;/strong&gt; worked. I wasted two whole days doing this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try #n + 1
&lt;/h2&gt;

&lt;p&gt;Next, I decided to try GitHub Copilot. I gave it instructions, and it spent about 30 minutes on the task. It finally gave me a nice ✅ emoji and said it was done. I thought my problems were over. &lt;/p&gt;

&lt;p&gt;I tried to build my project, but it failed. I looked at my code files, and there were &lt;strong&gt;error squiggles everywhere&lt;/strong&gt;, just like before. &lt;/p&gt;

&lt;p&gt;I gave up and left the project alone for a few days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try #n + 2
&lt;/h2&gt;

&lt;p&gt;After a break, I came back with a new plan. &lt;/p&gt;

&lt;p&gt;I went to gemini.google.com and chose the Pro model. I asked the same question. But this time, I stopped blindly pasting the whole file the AI gave me. Instead, I decided to &lt;strong&gt;edit the &lt;code&gt;#include&lt;/code&gt; directives and type the &lt;code&gt;CMakeLists.txt&lt;/code&gt; files by myself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I moved my code into the &lt;code&gt;components&lt;/code&gt; folder, I noticed errors on the &lt;code&gt;#include&lt;/code&gt; lines. I realized right away that the &lt;code&gt;#include&lt;/code&gt; paths were the real issue. I told the AI that I could not add those specific headers. The AI said I needed to add the dependency components in &lt;code&gt;REQUIRES&lt;/code&gt; or &lt;code&gt;PRIV_REQUIRES&lt;/code&gt; in &lt;code&gt;CMakeLists.txt&lt;/code&gt;. Adding those fixed a few headers, but some specific headers still failed. &lt;/p&gt;

&lt;p&gt;Finally, I searched on Google to find out exactly which components have the definitions for those specific headers that were causing the issue. The answer was slightly different there.&lt;/p&gt;

&lt;p&gt;I changed that one single line of code, &lt;strong&gt;and it finally worked!&lt;/strong&gt; The ONLY problem was that all the AIs put the wrong component name in &lt;code&gt;REQUIRES&lt;/code&gt;, and none of them could figure out that was the issue. It is hard to believe I wasted weeks on such a tiny problem.&lt;/p&gt;

&lt;p&gt;I skipped over a fair bit of the debugging rabbit hole in this post because I honestly couldn't remember every single twist and turn 😅&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devjournal</category>
      <category>programming</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
