<?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: Giorgi Kobaidze</title>
    <description>The latest articles on DEV Community by Giorgi Kobaidze (@georgekobaidze).</description>
    <link>https://dev.to/georgekobaidze</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%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg</url>
      <title>DEV Community: Giorgi Kobaidze</title>
      <link>https://dev.to/georgekobaidze</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/georgekobaidze"/>
    <language>en</language>
    <item>
      <title>A New Personal Best: What Six Months of Locking In Can Do</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sat, 04 Jul 2026 16:44:58 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/a-new-personal-best-what-six-months-of-locking-in-can-do-p3k</link>
      <guid>https://dev.to/georgekobaidze/a-new-personal-best-what-six-months-of-locking-in-can-do-p3k</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting a New Benchmark for Myself&lt;/li&gt;
&lt;li&gt;My Most Productive Six Months Yet&lt;/li&gt;
&lt;li&gt;
2 Hackathon Wins

&lt;ul&gt;
&lt;li&gt;GitHub Copilot CLI Challenge Win: Metal Birds Watch&lt;/li&gt;
&lt;li&gt;Notion MCP Challenge Win: NoteRunway&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Raised Money for Charity&lt;/li&gt;
&lt;li&gt;Became an Engineering Manager&lt;/li&gt;
&lt;li&gt;Collected More Than 25 Stars on My GitHub Repositories&lt;/li&gt;
&lt;li&gt;Beat My Own Record in Terms of Likes per Article&lt;/li&gt;
&lt;li&gt;One Article Made It Into the Top 7 of the Week&lt;/li&gt;
&lt;li&gt;Got Accepted into the Virtual Coffee Community&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/georgekobaidze/a-new-personal-best-what-six-months-of-locking-in-can-do-p3k#joined-devengers"&gt;Joined Devengers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;To Sum It All Up&lt;/li&gt;
&lt;li&gt;Zero Luck, All Hard Work&lt;/li&gt;
&lt;li&gt;Share Your Wins and Achievements, and Set a New Benchmark Starting Now&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Setting a New Benchmark for Myself
&lt;/h2&gt;

&lt;p&gt;This short piece serves as a quick reminder of what my current benchmark looks like in terms of how much I should aim to do and achieve within a six-month period for it to feel successful.&lt;/p&gt;

&lt;p&gt;Six months is a solid amount of time, you can accomplish a lot in that window. I'm not someone who tends to look back too often, but every now and then, it's important to check in with yourself to make sure you're still moving forward and not slipping backward. And slipping backward is never a good sign.&lt;/p&gt;

&lt;p&gt;Some people might argue that just because you've been successful during a certain period, it doesn't necessarily mean you'll keep improving from there.&lt;/p&gt;

&lt;p&gt;And that is true, there's no doubt about that. Sometimes things just go south, and we fail to achieve even half of what we set out to accomplish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But that's the whole point!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Success doesn't teach us much, failure does. Failure is where the most important lessons come from. So set your standards high. If you fail, don't worry about it. Every failure is a lesson, and the more you fail, the more opportunities you have to learn and grow.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Most Productive Six Months Yet
&lt;/h2&gt;

&lt;p&gt;At the beginning of the year, I made a pact with myself that the first half of this year would be the most successful period of my life. Plans often don't work out, but this one worked like a charm.&lt;/p&gt;

&lt;p&gt;Don't get me wrong though, I'm still not fully happy with myself, I feel like I could've done even better but still, it's good enough for now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are the most important things that happened during that time:&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2 Hackathon Wins
&lt;/h2&gt;

&lt;p&gt;If I set out to do something, I want to succeed every way possible, whether it's industry work, writing code, writing articles, managing people, or presenting my work. I had already done all of that, but I had never participated in a hackathon.&lt;/p&gt;

&lt;p&gt;As a long-time member of the DEV Community, I was well aware of the dev challenges and hackathons that occasionally pop up, especially after the merge with MLH. That felt like the perfect opportunity to finally go after that goal.&lt;/p&gt;

&lt;p&gt;And boy did it turn out even better than I expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot CLI Challenge Win: Metal Birds Watch
&lt;/h3&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%2F3s2wzbbh5sfkwi2gfv40.webp" 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%2F3s2wzbbh5sfkwi2gfv40.webp" alt="GitHub Copilot CLI" width="192" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was my first-ever hackathon. Over 400 people took part, as it was a large event with great prizes for the winners, one of them being a ticket to the GitHub Universe conference, which is happening later this year in beautiful San Francisco.&lt;/p&gt;

&lt;p&gt;As an aviation enthusiast, I poured my heart into this project. I could barely work on it, as my neck, shoulder, and arm were in constant pain, I was in complete agony. A few days earlier, I had spent a long time clearing snow from my driveway, which took a serious toll on my body. I was in terrible pain.&lt;/p&gt;

&lt;p&gt;Here's me (the fool) trying to clear up the driveway:&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%2Fgwiim245adr583ch75en.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%2Fgwiim245adr583ch75en.png" alt="Clearing the Driveway" width="800" height="785"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But I pushed through it and finished the project anyway.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-story__hidden-navigation-link"&gt;Metal Birds Watch: Copilot CLI Helped Me Watch Planes Without Looking Up&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub Copilot CLI Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3242019" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 13&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" id="article-link-3242019"&gt;
          Metal Birds Watch: Copilot CLI Helped Me Watch Planes Without Looking Up
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubcopilot"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubcopilot&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;55&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              17&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            11 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/fe2eGNbItUk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;When I saw that I had taken first place, I literally shouted out of excitement. That project will always be special to me.&lt;/p&gt;

&lt;p&gt;By the way, these are my initial sketches and outlines of the project. A lot of math was involved, and I'm glad I'm good at it. Sorry for my ugly handwriting, as I mentioned, my arm was killing 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%2F1982nuw95xjoqohntfeg.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%2F1982nuw95xjoqohntfeg.png" alt="Notes" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Notion MCP Challenge Win: NoteRunway
&lt;/h3&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%2Fvvuvdtwox1xebpm55jz3.webp" 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%2Fvvuvdtwox1xebpm55jz3.webp" alt="Notion MCP" width="192" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one was special too. I built a large, complex, AI-powered tool that helps manage your Notion workspace. I've been a Notion user for six years now, and I wanted to give something back to this incredible team. It turned out far better than I expected.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" class="crayons-story__hidden-navigation-link"&gt;NoteRunway: Because Your Notion Workspace Deserves an Elite Crew&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Notion MCP Challenge Submission 🧠&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3425746" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" id="article-link-3425746"&gt;
          NoteRunway: Because Your Notion Workspace Deserves an Elite Crew
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/notionchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;notionchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;47&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              32&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/qtaKv66-8AY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And do you know the best part?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because of that project, I got to meet &lt;strong&gt;Ivan Zhao&lt;/strong&gt; himself, the founder of Notion. We talked about my project and many other interesting topics. How awesome is that?! Life is full of surprises, let me tell you that!&lt;/p&gt;




&lt;h2&gt;
  
  
  Raised Money for Charity
&lt;/h2&gt;

&lt;p&gt;This was also a huge win. I regularly donate to charity, but this one was by far the largest contribution I've made. It came as a result of winning the GitHub Copilot CLI challenge (my first hackathon).&lt;/p&gt;

&lt;p&gt;The prize included a Copilot Pro Plus subscription, which I already had. GitHub gave me a few alternative options instead, and I chose to donate it to charity, an easy decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now the best part:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub matched my contribution, bringing the total donation to a significant amount.&lt;/p&gt;

&lt;p&gt;Once again, a huge thank you to &lt;strong&gt;GitHub&lt;/strong&gt; for making that possible, you're awesome!&lt;/p&gt;




&lt;h2&gt;
  
  
  Became an Engineering Manager
&lt;/h2&gt;

&lt;p&gt;As I mentioned above, if I set out to do something, I want to be the best at every part of it. I've been writing code for more than 10 years now, and I felt it was time to explore other dimensions of engineering. This role made the most sense to me, as I'm still closely involved in engineering, but now I also take on more responsibility and get to see things from a different perspective.&lt;/p&gt;

&lt;p&gt;So far, I'm absolutely loving it!&lt;/p&gt;




&lt;h2&gt;
  
  
  Collected More Than 25 Stars on My GitHub Repositories
&lt;/h2&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%2Fyz1ed1twfoypirw4b7so.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%2Fyz1ed1twfoypirw4b7so.png" alt="GitHub Repositories" width="799" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A number of people became interested in my work and started starring my repositories, which is always great to see.&lt;/p&gt;




&lt;h2&gt;
  
  
  Beat My Own Record in Terms of Likes per Article
&lt;/h2&gt;

&lt;p&gt;One of my articles received significant engagement and became the most liked piece I've written so far. Many people also reached out to tell me they used it to train their LLMs or to build new skills around it.&lt;/p&gt;

&lt;p&gt;Check out the article below:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie" class="crayons-story__hidden-navigation-link"&gt;15 Essential Sections Every README Needs: Give Your Project What It Deserves&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Ready-to-use markdown template&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3553477" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 26&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie" id="article-link-3553477"&gt;
          15 Essential Sections Every README Needs: Give Your Project What It Deserves
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/documentation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;documentation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/development"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;development&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;162&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              80&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            11 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;





&lt;h2&gt;
  
  
  One Article Made It Into the Top 7 of the Week
&lt;/h2&gt;

&lt;p&gt;If you're not a technical writer on DEV.to, it's hard to appreciate how difficult it is to get an article into the weekly top 7, it really needs to stand out. This article made it there, which I was extremely happy about.&lt;/p&gt;

&lt;p&gt;Check it out below:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-story__hidden-navigation-link"&gt;Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3327718" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" id="article-link-3327718"&gt;
          Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/compilers"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;compilers&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;35&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              14&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            11 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;





&lt;h2&gt;
  
  
  Got Accepted into the Virtual Coffee Community and the Devengers Team
&lt;/h2&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%2Fv4n5fcyf24g7hte925c3.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%2Fv4n5fcyf24g7hte925c3.png" alt="Virtual Coffee" width="800" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've always wanted to be part of this community. I knew the people there were great and supportive. I got accepted, and I'm incredibly happy about it. It's always important to have good people around you.&lt;/p&gt;

&lt;p&gt;You really are who you surround yourself with.&lt;/p&gt;




&lt;h2&gt;
  
  
  Joined Devengers
&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; I joined the Devengers team. It makes me think I've done something special on this platform, which feels awesome!&lt;/p&gt;




&lt;h2&gt;
  
  
  To Sum It All Up
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Won the GitHub Copilot CLI Challenge&lt;/li&gt;
&lt;li&gt;Won the Notion MCP Challenge&lt;/li&gt;
&lt;li&gt;Raised a significant amount of money for charity with GitHub&lt;/li&gt;
&lt;li&gt;Won a ticket to the GitHub Universe conference&lt;/li&gt;
&lt;li&gt;Met Ivan Zhao, the founder of Notion&lt;/li&gt;
&lt;li&gt;Became an Engineering Manager&lt;/li&gt;
&lt;li&gt;Built 4 new personal projects&lt;/li&gt;
&lt;li&gt;Collected 25+ GitHub stars&lt;/li&gt;
&lt;li&gt;Published 13 new articles&lt;/li&gt;
&lt;li&gt;Wrote my all-time most loved article&lt;/li&gt;
&lt;li&gt;Reached the Top 7 of the week with an article&lt;/li&gt;
&lt;li&gt;Joined 2 new communities: Virtual Coffee and the Devengers team here on DEV Community.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Zero Luck, All Hard Work
&lt;/h2&gt;

&lt;p&gt;I've seen a lot of people talk about the importance of luck, which I agree plays a role to some extent. But it often creates a mindset where people start relying on luck more than they should, and that's a big mistake, I hate that.&lt;/p&gt;

&lt;p&gt;These things I just mentioned didn't happen because of luck. They came from pushing myself to the limit, at times even through severe physical pain (no exaggeration), and sacrificing a lot of my personal life along the way. My evenings, nights, and weekends were dedicated to all of this.&lt;/p&gt;

&lt;p&gt;It's not a lot of time in the grand scheme of things, but I'd rather use that limited time than not do it at all.&lt;/p&gt;

&lt;p&gt;Of course, this isn't for everyone, or maybe even for most people. I've even been called a few "funny" names because of it: weird, psycho, freak, nerd. But who gives a "fork"? I certainly don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Wins and Achievements, and Set a New Benchmark Starting Now
&lt;/h2&gt;

&lt;p&gt;Now I'd love to hear about your new baseline and your new standards, share them, and let's talk about them.&lt;/p&gt;

&lt;p&gt;Let's keep grinding!&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%2F7iewllnhlmhifc4qq7sw.jpeg" 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%2F7iewllnhlmhifc4qq7sw.jpeg" alt="Thumbsup" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;If you want to follow my work or connect, you can find me here:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/giorgikobaidze/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/georgekobaidze" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://x.com/georgekobaidze" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@Pilotronica" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>showdev</category>
      <category>community</category>
    </item>
    <item>
      <title>Southwest Airlines Embraces Cloud and AI Architecture. Are They Setting a New Standard for the Industry?</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Thu, 25 Jun 2026 18:46:33 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/southwest-airlines-embraces-cloud-and-ai-architecture-are-they-setting-a-new-standard-for-the-3m04</link>
      <guid>https://dev.to/georgekobaidze/southwest-airlines-embraces-cloud-and-ai-architecture-are-they-setting-a-new-standard-for-the-3m04</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Southwest and AWS&lt;/li&gt;
&lt;li&gt;From On-Prem to Cloud&lt;/li&gt;
&lt;li&gt;AI Comes Into Play&lt;/li&gt;
&lt;li&gt;Kiro&lt;/li&gt;
&lt;li&gt;Why This Matters?&lt;/li&gt;
&lt;li&gt;Closing Thoughts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Southwest Airlines is one of the largest carriers in the world. Other than having by far my absolute favorite airplane livery, it's a massive enterprise based in Dallas, Texas, with more than 72,000 employees, over 4,000 daily flights during peak travel periods, roughly 134 million customers annually, and service across 120+ airports in 12 countries.&lt;/p&gt;

&lt;p&gt;At this scale, what really matters is operational reliability and speed. Because in aviation, slow operations cause delays, delays cause unhappy customers, and unhappy customers aren't particularly great for the company's revenue. A few minutes of latency in one system can turn into hours of disruption in the real world.&lt;/p&gt;

&lt;p&gt;So... can cloud and AI solve it? Absolutely, if done right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Southwest and AWS
&lt;/h2&gt;

&lt;p&gt;Southwest has selected Amazon Web Services (AWS) as its primary cloud partner to help modernize its technology stack and transform how the airline runs, develops systems, and serves its customers. Through this collaboration, Southwest plans to move away from a predominantly on-premises infrastructure toward a cloud-based, AI and agent-enabled architecture on AWS &lt;strong&gt;by 2028&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2028 is not far away from now (Jun 25, 2026). This is very ambitious considering the amount of work that needs to be done.&lt;/p&gt;

&lt;h2&gt;
  
  
  From On-Prem to Cloud
&lt;/h2&gt;

&lt;p&gt;Moving an enterprise of this size from on-prem infrastructure to the cloud is way more complex than it sounds. It doesn't sound easy either. It's one of the hardest things you can ever do as a software engineer, DevOps engineer, architect, engineering manager, or anyone else involved in it.&lt;/p&gt;

&lt;p&gt;It involves a lot of steps, including but definitely not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assessing existing systems, dependencies, and infrastructure to understand what needs to move and how&lt;/li&gt;
&lt;li&gt;Defining a migration strategy (lift-and-shift, replatforming, or full refactoring to cloud-native architecture)&lt;/li&gt;
&lt;li&gt;Designing and building the target AWS architecture, including networking, compute, storage, security foundations, etc.&lt;/li&gt;
&lt;li&gt;Migrating applications and data while maintaining reliability, consistency, and minimal downtime&lt;/li&gt;
&lt;li&gt;Implementing observability, security, and compliance controls in a cloud-native environment&lt;/li&gt;
&lt;li&gt;Setting up automation for infrastructure provisioning and deployment using CI/CD and Infrastructure as Code&lt;/li&gt;
&lt;li&gt;Transitioning teams to cloud-native development and operations practices while gradually decommissioning legacy systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And around 10 billion other steps/decisions that you want to make before wrapping things up.&lt;/p&gt;

&lt;p&gt;And unlike greenfield systems, airlines don't get the luxury of downtime. Everything has to work while it's being rebuilt. That alone makes airline modernization one of the hardest engineering problems in enterprise software.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Comes Into Play
&lt;/h2&gt;

&lt;p&gt;AI changes the equation, but not in the simplistic sense of "developers write code faster now." In large enterprises, the real bottleneck is not code generation, it's context. Decades-old systems accumulate implicit knowledge: business rules, edge cases, operational constraints, and undocumented dependencies. Understanding what should change, what must not change, and how everything connects is the hardest part of modernization.&lt;/p&gt;

&lt;p&gt;So the real question becomes:&lt;/p&gt;

&lt;p&gt;Can AI understand a system well enough to safely change it? That shift, from code generation to system comprehension, is where things start to get interesting.&lt;/p&gt;

&lt;p&gt;Also, there are so many important considerations when planning AI agent workflows and their integration into a system, particularly to minimize unintended side effects and maintain efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro
&lt;/h2&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%2Fbynmn7subjbagi3lsg43.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbynmn7subjbagi3lsg43.jpg" alt="Southwest and Kiro" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Southwest is using Kiro, AWS's agentic development platform, as part of its broader modernization effort, particularly for customer-facing systems and legacy platform refactoring. The goal is not simply to rewrite code, but to systematically evolve large, complex systems into something more maintainable, scalable, and cloud-native, without breaking what already works.&lt;/p&gt;

&lt;p&gt;What makes this approach notable is its underlying philosophy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiro is built around SDD: Specification-Driven Development&lt;/strong&gt;, where you begin by defining what the system should do in a structured, explicit specification before any implementation begins.&lt;/p&gt;

&lt;p&gt;That specification then becomes the foundation for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;li&gt;Code generation or refactoring&lt;/li&gt;
&lt;li&gt;Validation and alignment across teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll go deeper into specification-driven development in a separate article, but for now, what I can say is that this is by far my favorite approach to AI workflows. It's significantly more reliable than vibe coding, AI agent looping, or other experimental patterns we see today.&lt;/p&gt;

&lt;p&gt;This is especially true for large enterprises with extensive legacy codebases that need refactoring. At a certain scale, systems become so domain-specific and historically layered that even advanced LLMs struggle to reason about them without proper context.&lt;/p&gt;

&lt;p&gt;In those cases, the bottleneck is no longer code generation, it's understanding. Without clear specifications, documentation, and well-defined behavior, even the best models start to make unsafe assumptions.&lt;/p&gt;

&lt;p&gt;Specification-driven development directly addresses this by forcing clarity upfront. You begin with explicit specs that define behavior, constraints, and expectations before any implementation starts. It forces engineers to understand the system more deeply instead of blindly delegating reasoning to AI. And that's critical, because in complex, mission-critical software, trusting AI without structure is not a strategy, it's a risk. Of course, it's still not 100% deterministic (which it shouldn't be), but it's absolutely much more deterministic than just vibe coding.&lt;/p&gt;

&lt;p&gt;In my view, this is one of the most promising approaches for AI-assisted software engineering at enterprise scale. Compared to looser workflows like vibe coding or agent loops, spec-driven development introduces structure and context where it matters most. And that matters especially in environments like airlines, where correctness, safety, and predictability are non-negotiable.&lt;/p&gt;

&lt;p&gt;Way to go Southwest, well done!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters?
&lt;/h2&gt;

&lt;p&gt;Southwest's move is not just a cloud migration story. It's a signal of something larger: how enterprise software development itself may evolve in the AI era. If successful, this approach could reshape how airlines design, build, and maintain their systems. Southwest could become one of the pioneers in this shift, modernizing not just its infrastructure, but also decades of legacy software along the way to make its systems more efficient, maintainable, and adaptable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;What makes this partnership interesting is not just what Southwest is doing, but what it might trigger across the industry. Airlines are traditionally cautious adopters of new infrastructure paradigms. These are systems where "if it works, don't touch it" is often the dominant philosophy, because failures are measured in delayed flights, stranded passengers, and operational chaos. So when a major carrier moves this fast toward cloud-native, AI-assisted, spec-driven modernization, it raises a natural question: will others follow?&lt;/p&gt;

&lt;p&gt;The direction is clearly positive: better tooling, more automation, and systems that are finally closer to how engineers and businesses actually think.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>aws</category>
      <category>agents</category>
    </item>
    <item>
      <title>AI Psychosis Is No Longer Fiction</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 21 Jun 2026 17:46:14 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/ai-psychosis-is-no-longer-fiction-3258</link>
      <guid>https://dev.to/georgekobaidze/ai-psychosis-is-no-longer-fiction-3258</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
Overview

&lt;ul&gt;
&lt;li&gt;Cyberpunk 2026&lt;/li&gt;
&lt;li&gt;Resistance Turns Into Reliance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Recent AI Drama&lt;/li&gt;
&lt;li&gt;
What to Expect in the Rest of the Article and Why You Should Read It

&lt;ul&gt;
&lt;li&gt;Clear Perspective Takes Time&lt;/li&gt;
&lt;li&gt;I'm Not Big on the AI Hype Train&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;These Vulnerabilities Aren't New&lt;/li&gt;
&lt;li&gt;National Security Comes First&lt;/li&gt;
&lt;li&gt;
Project Glasswing

&lt;ul&gt;
&lt;li&gt;Mythos Is Exposing Every Major System and Software&lt;/li&gt;
&lt;li&gt;But It's Not Only About Systems&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Anthropic's Ways of Promoting These Models Are Super Weird&lt;/li&gt;
&lt;li&gt;The Bottom Line&lt;/li&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cyberpunk 2026
&lt;/h3&gt;

&lt;p&gt;If you're into video games, especially those with deep, well-written stories, you've probably heard of Cyberpunk 2077. I played it last year, and I became completely hooked. Not just because of its stunning visuals or its complex mechanics, but because of the story.&lt;/p&gt;

&lt;p&gt;What amazed me most is how believable its world feels. Sure, it's fiction and it's set in the future, but in a strange way, it's also realistic, or rather future-realistic (I guess I just invented a new term). The trends we're seeing today in technology and the cyber world seem to be pushing us in the same direction as the world depicted in the game. And that's what makes its story so fascinating: it doesn't feel like pure fantasy. It feels like a glimpse of where we're headed.&lt;/p&gt;

&lt;p&gt;And it's quite terrifying, not gonna lie.&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%2Fcvjed3l31gesmqcx1kwa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvjed3l31gesmqcx1kwa.jpg" alt="Cyber Psychosis" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a term in the game called Cyberpsychosis, a fictional dissociative mental disorder in the Cyberpunk universe. It occurs when an individual replaces too much of their organic body with cybernetic implants, gradually losing their humanity and the natural behaviors that define a human being. As their dependence on technology grows, empathy, emotional stability, and their connection to reality begin to deteriorate, often leading to unpredictable behavior.&lt;/p&gt;

&lt;p&gt;It's a fictional concept, of course, but it's also a fascinating metaphor for what can happen when technology starts to blur the line between human and machine.&lt;/p&gt;

&lt;p&gt;Even though Cyberpsychosis is an extreme, fictional scenario, the underlying idea doesn't have to be physical. Cognitive and psychological dependence on technology and AI can be just as significant, and in many ways, we're already there.&lt;/p&gt;

&lt;p&gt;AI has become an extension (and in some ways a replacement) of how people think, work, and make decisions. It's integrated so deeply into daily life that, for many, imagining life without it already feels unrealistic. And what makes this shift even more striking is how fast it happened, almost in a blink of an eye.&lt;/p&gt;

&lt;p&gt;The evolution of our minds and brains is much slower than the rate at which AI and technology are growing and developing. This creates a growing mismatch between human cognition and the environment we now live in, a kind of incompatibility that can potentially backfire over time.&lt;/p&gt;

&lt;p&gt;And in some ways, we're already beginning to see the effects of that gap in how we think, behave, and interact with information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resistance Turns Into Reliance
&lt;/h3&gt;

&lt;p&gt;People are strange about AI. They criticize it at every opportunity, yet many of them already rely on it daily. Whether they realize it or not, it has become embedded in how we write, search, create, and even think.&lt;/p&gt;

&lt;p&gt;If you look at social media, it's already clear how much content is AI-influenced or AI-assisted. But what many people miss is that AI isn't just another tool for reducing effort, it's a huge equalizer that changes what effort even means. If you simply use it to do the same things you were doing before, only faster, you're not really gaining anything. In fact, you risk falling behind. The real shift happens when you use it to expand what you're capable of producing with the same amount of energy.&lt;/p&gt;

&lt;p&gt;That's also why the fear of replacement feels so contradictory. People worry about AI taking their place, while at the same time actively using it in ways that make it easier for it to do so. In many cases, it's less about being replaced and more about gradually outsourcing parts of the work without redefining what their role should be.&lt;/p&gt;

&lt;p&gt;There's a parallel here with Cyberpunk 2077. Just like cybernetic enhancements in the game, AI offers immediate advantage. And just like in that world, people are often quick to adopt anything that gives them an edge, even when they're uneasy about the long-term consequences.&lt;/p&gt;

&lt;p&gt;People may express hostility toward AI in principle, but in practice, they're integrating it more deeply every day. And when access to it is suddenly removed or limited, everyone loses their mind.&lt;/p&gt;

&lt;p&gt;This tension is what I refer to as &lt;strong&gt;AI psychosis&lt;/strong&gt;, not as a clinical condition, but as a cultural and psychological dependency pattern that's already starting to emerge.&lt;/p&gt;

&lt;p&gt;Let's talk about it in detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Recent AI Drama
&lt;/h2&gt;

&lt;p&gt;On June 12, 2026, Anthropic released a statement regarding a U.S. government directive to suspend access to &lt;em&gt;Fable 5&lt;/em&gt; and &lt;em&gt;Mythos 5&lt;/em&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%2Fmejj4fpyig36w3fkbu0t.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%2Fmejj4fpyig36w3fkbu0t.png" alt="Anthropic Announcement" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you skip the formal wording, the core of it is this: the U.S. government issued an export control directive requiring the suspension of access to both models for all foreign nationals.&lt;/p&gt;

&lt;p&gt;And the most striking part is this: even foreign national Anthropic employees wouldn't be allowed to use them.&lt;/p&gt;

&lt;p&gt;Everyone was excited about these models. There were posts, articles, and videos everywhere. In the AI space, it felt like the equivalent of a &lt;em&gt;GTA 6&lt;/em&gt; release, hype at a global scale, with everyone watching closely.&lt;/p&gt;

&lt;p&gt;And then, almost overnight, it was gone.&lt;/p&gt;

&lt;p&gt;Every workflow that depended on those models was brought to a complete stop, unless companies or individuals had prepared a backup plan (which they should when working with models that just came out of the oven). Entire systems that had quietly integrated them suddenly found themselves disrupted, forced to adapt immediately or halt operations entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, where exactly did it all go south?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Expect in the Rest of the Article and Why You Should Read It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Clear Perspective Takes Time
&lt;/h3&gt;

&lt;p&gt;Now, everyone seems to have lost their minds over the ban. There are even more articles, posts, and videos circulating about it than before.&lt;/p&gt;

&lt;p&gt;In this article, I want to share my perspective and analyze the situation as a whole. I waited a week before writing it because I wanted everything to settle and the noise to fade a bit. When something has just happened, perceptions are often distorted and details can feel different in the moment. With time, the perspective usually shifts and that's exactly what I wanted before forming my thoughts.&lt;/p&gt;

&lt;h3&gt;
  
  
  I'm Not Big on the AI Hype Train
&lt;/h3&gt;

&lt;p&gt;I'm going to objectively analyze the situation from multiple angles, including my own perspective. I believe I'm in a fairly neutral position to do that, since I'm not heavily invested in the &lt;em&gt;Fable&lt;/em&gt; and &lt;em&gt;Mythos&lt;/em&gt; ecosystem yet. I don't rely on AI models too deeply, I use them more as assistants than dependencies.&lt;/p&gt;

&lt;p&gt;Right now, I'm using Claude Sonnet (not even Opus), and it gets the job done perfectly well. Because of that, I don't fully relate to the reactions from AI influencers who go insane every time a new model drops. Of course, &lt;em&gt;Fable 5&lt;/em&gt; is reportedly a major improvement over Sonnet and Opus, and it's not even close, but as much as I enjoy using AI for coding, I don't need it to always be at the absolute cutting edge.&lt;/p&gt;

&lt;p&gt;I'm comfortable with "good enough" tools. And it's interesting, because not long ago, models like Sonnet and Opus were considered state of the art, now they're already casually labeled as baseline/mediocre in some discussions.&lt;/p&gt;

&lt;p&gt;I also prefer a balance: I like using AI where it helps, but I still enjoy doing parts of the work myself.&lt;/p&gt;




&lt;h2&gt;
  
  
  These Vulnerabilities Aren't New
&lt;/h2&gt;

&lt;p&gt;As stated by Anthropic itself, these vulnerabilities are not unique to &lt;em&gt;Fable&lt;/em&gt; or &lt;em&gt;Mythos&lt;/em&gt;, they can be found in other models as well. I find this particularly interesting, as it contrasts with some of the narratives that have surrounded these systems.&lt;/p&gt;

&lt;p&gt;I won't claim to know what on earth is going on behind the scenes, and I'm not interested in speculating. Instead, I prefer to focus on the information that is actually available and verifiable.&lt;/p&gt;

&lt;p&gt;There are plenty of conspiracy theories and rumors circulating around this topic, but I never trust rumors. I try to stick to facts and only facts, when forming an opinion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's one key statement that should be taken into consideration:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If this standard was applied across the industry, we believe it would essentially halt all new model deployments for all frontier model providers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, it sounds like regardless of how many guardrails frontier models have, they still remain vulnerable in one way or another. This isn't exactly breaking news... it's more a reflection of how AI systems fundamentally work.&lt;/p&gt;

&lt;p&gt;Unlike deterministic systems, AI models are inherently non-deterministic. Even fully deterministic software can contain thousands of vulnerabilities, so it's not surprising that AI systems, especially those that behave in more probabilistic, human-like ways, also have weak points.&lt;/p&gt;

&lt;p&gt;In a sense, humans themselves are an example of this unpredictability: flexible, adaptable, but also inconsistent, error-prone, and sloppy when it comes to precise tasks. When you scale that kind of variability through AI systems operating at massive scale, the result can become pretty spooky.&lt;/p&gt;




&lt;h2&gt;
  
  
  National Security Comes First
&lt;/h2&gt;

&lt;p&gt;The jailbreak research was done in Amazon. Andy Jassy - the Amazon CEO himself was one of the tech leaders who raised concerns to the government of the United States.&lt;/p&gt;

&lt;p&gt;What's interesting here is that Amazon is one of Anthropic's biggest investors. At first glance, it doesn't make sense. However, when national security concerns are involved, priorities often shift in ways that override literally everything.&lt;/p&gt;

&lt;p&gt;In such contexts, security becomes the primary concern. The potential consequences of exposure or misuse are significant, and the last thing any system wants is to compromise sensitive information at a national level.&lt;/p&gt;

&lt;p&gt;This is especially important for a country like the US which is really on the very top in terms of AI and technological development, where the stakes are particularly high and the margin for error is extremely small.&lt;/p&gt;

&lt;p&gt;And when things get concerning at that scale, it's reasonable to expect that a country like the United States, that aims to maintain leadership across every major field, including the AI race, will take a close interest in it.&lt;/p&gt;

&lt;p&gt;History shows that even small mistakes can have significant consequences when the stakes are this high. The closest historical parallel is the space race decades ago, where technological and strategic dominance was treated as something that couldn't be compromised, even slightly.&lt;/p&gt;

&lt;p&gt;In races like that, maintaining an edge often means not giving up even an inch of ground to competitors.&lt;/p&gt;

&lt;p&gt;It's possible there was a miscommunication and that the ban was simply too harsh. I don't really know, time will tell. However, the way it was communicated by Anthropic themselves, gives the impression that this outcome may not have been entirely unintended.&lt;/p&gt;

&lt;p&gt;The framing around Mythos and Fable was, for some reason, based on fear, and it did create fear across the entire ecosystem. Whether that was the intention or just the result of cautious communication is hard to say, but the reaction it triggered was significant.&lt;/p&gt;

&lt;p&gt;Let's break that down a bit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Glasswing
&lt;/h2&gt;

&lt;p&gt;Let's go back a bit, because this feels like a turning point in AI, where everything started, and where much of the later controversy can be traced.&lt;/p&gt;

&lt;p&gt;A new generation of models was introduced, with &lt;em&gt;Mythos&lt;/em&gt; standing out as a major leap in capability, significantly more powerful, efficient, and effective than its predecessors. However, instead of releasing it publicly, it was kept closed.&lt;/p&gt;

&lt;p&gt;Rather than broad deployment, access was limited to a small number of major technology organizations, with the stated goal of securing and supporting some of the world's most critical software systems.&lt;/p&gt;

&lt;p&gt;Their cause with this new model was to improve cybersecurity for highly critical systems and help protect them from AI-powered tools and attacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See where's the problem here?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI models have become so good at coding and scripting that, in some cases, humans can no longer reliably secure software against cyberattacks on their own. As a result, we end up building even more capable AI systems to defend against threats created by previous generations of AI.&lt;/p&gt;

&lt;p&gt;But then comes the next step: those defensive systems need to be even stronger to handle new, more advanced attacks caused by those new generations of models. And so the cycle continues, each layer of defense requiring a more powerful tool than the last.&lt;/p&gt;

&lt;p&gt;So where does it end? In practice, it may not.&lt;/p&gt;

&lt;p&gt;It's like inventing faster cars for the police to catch street racers. At first, it works. But over time, those same street racers get access to similar, or even better cars, and the cycle continues. Now you need even faster vehicles just to keep up.&lt;/p&gt;

&lt;p&gt;And the faster those cars become, the higher the stakes. When criminals gain access to more powerful tools, the potential damage they can cause increases as well compared to earlier, less capable systems.&lt;/p&gt;

&lt;p&gt;The same logic applies to AI. And it's not like this wasn't carefully considered, those people at Anthropic are pretty smart (well, duh). That's part of why access was limited to a small number of major companies: to strengthen the systems those organizations rely on, and to make them robust enough that a model like &lt;em&gt;Mythos&lt;/em&gt; could eventually be deployed more safely at scale before releasing it to the public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But there's a catch, and it's a big one:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If &lt;em&gt;Mythos&lt;/em&gt; is as capable as it is claimed to be, it could potentially be used to improve itself over time, alongside the natural improvements made by Anthropic through updates and training.&lt;/p&gt;

&lt;p&gt;If that's the case, there is still a significant risk that such a system could be used maliciously against critical infrastructure, even if indirectly. The concern isn't just theoretical capability, but how that capability could be applied at scale.&lt;/p&gt;

&lt;p&gt;These systems can include, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial and banking systems&lt;/li&gt;
&lt;li&gt;Military systems&lt;/li&gt;
&lt;li&gt;Healthcare systems&lt;/li&gt;
&lt;li&gt;Airport control systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the list goes on. When you multiply that level of risk by the scale at which AI operates, the potential consequences can become absolutely catastrophic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mythos Is Exposing Every Major System and Software
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Here's what they wrote in the project announcement:&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%2Fyt72v1ardn61b1emqmo6.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%2Fyt72v1ardn61b1emqmo6.png" alt="Project Announcement" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zero-day vulnerabilities are something that were unnoticed by anyone. Nobody had any idea they existed the whole time... until Mythos found them. That's how good it actually is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alright how about this one:&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%2Fc3kh3ngpkc4hmw2wlvlw.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%2Fc3kh3ngpkc4hmw2wlvlw.png" alt="OpenBSD Vulnerability" width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine discovering a vulnerability in a system known for its reliability, one that powers some of the most critical infrastructure in existence. Now imagine that vulnerability had been there for 27 years...&lt;/p&gt;

&lt;p&gt;Let that sink in for a moment. We're talking about something that dates back to the previous century, built and maintained by some of the most experienced engineers in the field. And yet, none of them were able to detect it, even with the advanced tools we have today. Tell me that's not insane.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now this one:&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%2Fao0xzczf25l0rbvx9f9b.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%2Fao0xzczf25l0rbvx9f9b.png" alt="FFmpeg Vulnerability" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And check out this tweet right here:&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%2Fwweekjhmkbig5kfcup05.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%2Fwweekjhmkbig5kfcup05.png" alt="FFmpeg Tweet" width="800" height="1193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So it really does act like a human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what's even more significant, is this:&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%2Fqmffxf8qmtqfqdxh5mlh.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%2Fqmffxf8qmtqfqdxh5mlh.png" alt="Linux Kernel Vulnerability" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As they mentioned, this is an operating system that runs the whole world. And that's not even an exaggeration. Now, that is actually pretty scary, because as beneficial these tools can be, it can also be a destructive weapon in the wrong hands. Especially today, when information and data is literally everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  But It's Not Only About Systems
&lt;/h3&gt;

&lt;p&gt;On top of that, the risk doesn't only apply to systems themselves, it also extends to the people working within organizations. &lt;/p&gt;

&lt;p&gt;As mentioned, &lt;em&gt;Mythos&lt;/em&gt; is described as having more human-like characteristics and behavior than previous models, which increases the likelihood that it could convincingly manipulate users into taking actions they shouldn't.&lt;/p&gt;

&lt;p&gt;This is particularly relevant in the context of phishing and scam attempts. Large companies are already primary targets for these kinds of attacks. If AI becomes advanced enough that it's nearly impossible to distinguish between a legitimate email and a malicious one, the problem becomes significantly more serious.&lt;/p&gt;

&lt;p&gt;There have already been numerous cases where companies suffered major damage simply because an employee clicked on a deceptive link or responded to a convincing message.&lt;/p&gt;

&lt;p&gt;Now imagine a scenario where those emails are generated by AI and appear completely legitimate, down to the smallest detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Anthropic's Ways of Promoting These Models Are Super Weird
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Oh, almost forgot, speaking of emails, here's what Sam Bowman, who's working as "AI alignment + LLMs" at Anthropic, Tweeted:&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%2F5vr6ar0sabbp21tfe568.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%2F5vr6ar0sabbp21tfe568.png" alt="Tweet 1" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If this tweet alone doesn't raise a petaquintjillion questions, I don't know what does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But first of all, why on earth did that model even try to access the internet, let alone how it actually managed to access it? If it was restricted programmatically, well, it's less terrifying. However, if it was properly secured and isolated in the internal network, then it would raise some pretty uncomfortable questions about how it managed to reach beyond its intended environment... did it hack its way through the Anthropics internal environment? That's something straight out of a science fiction movie, if that's the case.&lt;/p&gt;

&lt;p&gt;Here are other tweets by him and Boris Cherny&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%2Fubcerj0xm18zdln51inn.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%2Fubcerj0xm18zdln51inn.png" alt="Tweet" width="800" height="186"&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%2Flqgdv73866ffazy6y1kv.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%2Flqgdv73866ffazy6y1kv.png" alt="Tweet" width="799" height="401"&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%2Fjdbk0p5qak49zilnpbpw.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%2Fjdbk0p5qak49zilnpbpw.png" alt="Tweet" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't know, this whole fear-based promotion is kind of strange. However I really do appreciate that they're completely open and honest about all that. This is something that should never be hidden.&lt;/p&gt;

&lt;p&gt;There are speculations and rumors circulating that Anthropic wants to be regulated by the government so they can potentially become the go-to organization for AI in the public sector. I have no idea whether that's true or not, I only heard it mentioned in a video by ThePrimeagen.&lt;/p&gt;

&lt;p&gt;There's also another rumor that this is being done for marketing purposes. But if that's the case, I think it may have backfired, because I don't believe banning both Mythos and Fable was their primary goal, unless they're playing a much, much longer game.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;The bottom line is this: if you say your AI is dangerous and terrifying, there's a pretty good chance people will believe you. So if it's all honest, the government will do everything it can to avoid compromising national security, and you shouldn't be surprised by that. Granted, there might be some miscommunication here and there, but how things appear often outweighs how they actually are.&lt;/p&gt;

&lt;p&gt;Sure, you can add as many guardrails as you want to &lt;em&gt;Mythos&lt;/em&gt;, which effectively gives you &lt;em&gt;Fable&lt;/em&gt;, but as mentioned above, guardrails can always break. And breaking the guardrails on &lt;em&gt;Fable&lt;/em&gt; is much, much worse than breaking them on any other model, because when you break those guardrails, you essentially unwrap &lt;em&gt;Mythos&lt;/em&gt; - the model that is capable of finding vulnerabilities in some of the most critical systems imaginable.&lt;/p&gt;

&lt;p&gt;On the other hand, if this is all just hype to attract more attention to the new models, then that's arguably even worse. Playing with something as sensitive as national security rarely ends well, and people will inevitably start asking questions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The whole situation is kind of weird, and we don't really know what's going on behind the scenes. But regardless, it all shows that AI psychosis is already a real thing, and we should do our best not to fall into that rabbit hole. AI can be an absolute blessing, I use it every single day, and it has made me at least ten times more productive, but we need to be smart about it.&lt;/p&gt;

&lt;p&gt;We need to find a balance between AI being fully controlled and AI being completely independent with no regulations. Neither extreme is good.&lt;/p&gt;

&lt;p&gt;If you're someone who jumps on the latest AI tools the moment they launch, take a moment and let things settle. Maybe give it a week or two until they're more thoroughly tested. And if you're running a company, always have a safety net, because AI is not deterministic, far from it. In fact, the more complex these systems become, the more unpredictable and potentially risky they are.&lt;/p&gt;

&lt;p&gt;Like every technology before it, AI is a tool. A very powerful one. But tools are most useful when they complement human judgment, not replace it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>security</category>
      <category>discuss</category>
    </item>
    <item>
      <title>NeuralHats: I Put Edward de Bono’s Six Thinking Hats on Local LLMs Using Gemma 4</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 24 May 2026 19:10:31 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/neuralhats-i-put-edward-de-bonos-six-thinking-hats-on-local-llms-using-gemma-4-54mj</link>
      <guid>https://dev.to/georgekobaidze/neuralhats-i-put-edward-de-bonos-six-thinking-hats-on-local-llms-using-gemma-4-54mj</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  The Exact Moment It Clicked
&lt;/h3&gt;

&lt;p&gt;Two weeks ago, when Jess posted about the Gemma 4 challenge, I got stuck in a decision-making loop. I didn't know which idea to build, and I had a few competing options.&lt;/p&gt;

&lt;p&gt;Usually, when I think about a new project idea, I don't tell anyone until it is completely done. That is just how I like working. I speak with results, not with plans.&lt;/p&gt;

&lt;p&gt;Because of that, I did not really have anyone to brainstorm with. I found myself wishing I had a room full of people I could talk through the decision with, to help me figure out which idea to actually commit to.&lt;/p&gt;

&lt;p&gt;Then it suddenly reminded me of Edward de Bono's &lt;a href="https://en.wikipedia.org/wiki/Six_Thinking_Hats" rel="noopener noreferrer"&gt;Six Thinking Hats&lt;/a&gt;, which I had read about five years ago. And I thought, damn, I wish I had a local AI system where I could actually run that kind of structured discussion.&lt;/p&gt;

&lt;p&gt;Then I stopped...&lt;/p&gt;

&lt;p&gt;Whoa, wait a second... Why am I wishing for this? Why don't I just build it RIGHT NOW?&lt;/p&gt;

&lt;p&gt;And not just build it, but make it fully local on my own PC. No APIs, no cloud. Just something I can run instantly and talk to like a thinking room inside my machine!&lt;/p&gt;

&lt;p&gt;That felt like the idea!&lt;/p&gt;

&lt;p&gt;What if I could conjure six of those personas on demand, locally, for free, and let them argue about anything I wanted? And even participate in the discussion when needed?&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;NeuralHats&lt;/strong&gt; - a local web app where six AI personas, each running on its own tuned instance of Gemma 4, sit around a virtual debate table and argue about any topic you give them. They follow the canonical order. They actually disagree. The Blue Hat, the chairperson, decides when the debate is over. And when the dust settles, a seventh model, the Facilitator, writes a final report you can save as a PDF.&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.amazonaws.com%2Fuploads%2Farticles%2F52jvfnuqdpem7rn4rybn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52jvfnuqdpem7rn4rybn.jpg" alt="Cover" width="799" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it Actually Does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🎩 &lt;strong&gt;Six tuned personas&lt;/strong&gt; debate any topic you choose&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Up to 5 rounds&lt;/strong&gt;, with the Blue Hat deciding when to wrap up via a &lt;code&gt;CONTINUE&lt;/code&gt; / &lt;code&gt;STOP&lt;/code&gt; token&lt;/li&gt;
&lt;li&gt;🧑‍💼 &lt;strong&gt;You can join in&lt;/strong&gt;, claim one of the hats and contribute your own perspective live&lt;/li&gt;
&lt;li&gt;📡 &lt;strong&gt;Server-Sent Events&lt;/strong&gt; stream each hat's turn the moment it's ready&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;PDF report&lt;/strong&gt; synthesised by a dedicated Facilitator model at the end&lt;/li&gt;
&lt;li&gt;💯 &lt;strong&gt;100% local:&lt;/strong&gt; no API keys, no cloud calls, no telemetry, no internet required after setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Check out the video walkthrough:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZpLpYPuNwr0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Essentials
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/georgekobaidze" rel="noopener noreferrer"&gt;
        georgekobaidze
      &lt;/a&gt; / &lt;a href="https://github.com/georgekobaidze/neuralhats" rel="noopener noreferrer"&gt;
        neuralhats
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Six AI personas debate any topic using Edward de Bono's Six Thinking Hats framework. Powered by Gemma 4 via Ollama. Runs fully local.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;NeuralHats&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/neuralhats/frontend/public/cover.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fneuralhats%2FHEAD%2Ffrontend%2Fpublic%2Fcover.jpg" alt="NeuralHats" width="100%"&gt;&lt;/a&gt;
  &lt;p&gt;
  &lt;strong&gt;Six AI personas. One structured debate. Every perspective covered&lt;/strong&gt;
&lt;/p&gt;



&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ba535e092ec77b6ceaeadc3a563d2673de82533d9ff67066dcc4bfb9568598f7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d302e312e302d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/ba535e092ec77b6ceaeadc3a563d2673de82533d9ff67066dcc4bfb9568598f7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d302e312e302d626c7565" alt="Version"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e" alt="License"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2308c655e25e3947e742f1973827458431d7ee8dfa3b622bf2b34de9161d3919/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31312b2d79656c6c6f77"&gt;&lt;img src="https://camo.githubusercontent.com/2308c655e25e3947e742f1973827458431d7ee8dfa3b622bf2b34de9161d3919/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31312b2d79656c6c6f77" alt="Python"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/768b92f6b2d895c151186514660b4d471843a2fa278fd91bacd08bb6e4781dcb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31392d363164616662"&gt;&lt;img src="https://camo.githubusercontent.com/768b92f6b2d895c151186514660b4d471843a2fa278fd91bacd08bb6e4781dcb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31392d363164616662" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b9a20eb8589a8335c228d9fc2b6b8180ad401e5db3f302b1dad688702cb6f91c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706f776572656425323062792d4f6c6c616d612d626c61636b"&gt;&lt;img src="https://camo.githubusercontent.com/b9a20eb8589a8335c228d9fc2b6b8180ad401e5db3f302b1dad688702cb6f91c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706f776572656425323062792d4f6c6c616d612d626c61636b" alt="Ollama"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#" rel="noopener noreferrer"&gt;🎥 Demo Video&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#" rel="noopener noreferrer"&gt;📖 Article&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats/issues" rel="noopener noreferrer"&gt;🐛 Report a Bug&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#about" rel="noopener noreferrer"&gt;About&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#tech-stack" rel="noopener noreferrer"&gt;Tech Stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#project-structure" rel="noopener noreferrer"&gt;Project Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#configuration" rel="noopener noreferrer"&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#how-to-contribute" rel="noopener noreferrer"&gt;How to Contribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#whats-next" rel="noopener noreferrer"&gt;What's Next&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#acknowledgements" rel="noopener noreferrer"&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/neuralhats#author" rel="noopener noreferrer"&gt;Author&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;NeuralHats&lt;/strong&gt; brings Edward de Bono's legendary &lt;a href="https://en.wikipedia.org/wiki/Six_Thinking_Hats" rel="nofollow noopener noreferrer"&gt;Six Thinking Hats&lt;/a&gt; framework to life through AI. Instead of reading about the method, you experience it. Six distinct AI personas debate any topic you choose, each embodying a different mode of thinking.&lt;/p&gt;
&lt;p&gt;Each hat is a fully independent AI model persona powered by &lt;strong&gt;Gemma 4&lt;/strong&gt; via &lt;strong&gt;Ollama&lt;/strong&gt;, with its own system prompt, voice, and reasoning style:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hat&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚪ &lt;strong&gt;White&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The Analyst&lt;/td&gt;
&lt;td&gt;Pure facts, data, and objective information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚫ &lt;strong&gt;Black&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The Critic&lt;/td&gt;
&lt;td&gt;Risks, flaws, and devil's advocacy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟢 &lt;strong&gt;Green&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The Creative&lt;/td&gt;
&lt;td&gt;Bold ideas, lateral thinking, alternatives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 &lt;strong&gt;Red&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The Feeler&lt;/td&gt;
&lt;td&gt;Emotions, gut instinct, raw reaction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 &lt;strong&gt;Yellow&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/georgekobaidze/neuralhats" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;To run it yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/georgekobaidze/neuralhats.git
&lt;span class="nb"&gt;cd &lt;/span&gt;neuralhats
./setup.sh   &lt;span class="c"&gt;# or .\setup.ps1 on Windows&lt;/span&gt;
./start.sh   &lt;span class="c"&gt;# or .\start.ps1 on Windows&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The setup script pulls Gemma 4, creates the seven custom models, installs the Python and Node dependencies, and &lt;code&gt;start&lt;/code&gt; boots the FastAPI backend and Vite frontend together. You'll be debating at &lt;code&gt;http://localhost:5173&lt;/code&gt; within minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture in one breath
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React + Vite + Tailwind v4  ──HTTP/SSE──►  FastAPI (Python)  ──HTTP──►  Ollama  ──►  Gemma 4
                                                  │
                                                  └──► SQLite (aiosqlite, ON DELETE CASCADE)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three layers, zero external services. The frontend is a single-page React app with a virtual debate table. The backend is a small FastAPI server with one main orchestrator and an SSE stream. The AI layer is seven custom Ollama models - six hats plus a Facilitator, all built from the same Gemma 4 base.&lt;/p&gt;

&lt;p&gt;Let me walk you through the parts I'm most proud of.&lt;/p&gt;

&lt;h3&gt;
  
  
  One Base Model, Seven Personalities
&lt;/h3&gt;

&lt;p&gt;Running seven separate copies of Gemma 4 would turn my GPU into lava. Instead, I used Ollama's Modelfile system to create seven lightweight aliases over the &lt;strong&gt;same base weights&lt;/strong&gt; - each with its own temperature, top-p, and system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# backend/modelfiles/Modelfile.template
FROM {{BASE_MODEL}}

PARAMETER temperature {{TEMPERATURE}}
PARAMETER top_p {{TOP_P}}
PARAMETER num_ctx 8192
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The setup script bakes in personality through parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# setup.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$HatParams&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;white&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.3"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# cold facts&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;black&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.4"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# cautious critic&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;green&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.95"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# creative chaos&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;red&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.85"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.95"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# raw emotion&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;yellow&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.6"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# warm optimist&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;blue&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.3"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# disciplined chair&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;facilitator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;top_p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.9"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# near-deterministic synthesis&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Red Hat runs &lt;em&gt;hot&lt;/em&gt; (0.85) - its job is intuition, gut feelings, vibes. White Hat runs &lt;em&gt;cold&lt;/em&gt; (0.3) - its job is facts and only facts. Switching from one to another costs nothing because they all share weights in memory. Personality is just parameters and prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Blue Hat is a Controller, Not Just a Debater
&lt;/h3&gt;

&lt;p&gt;The Blue Hat is the chairperson. Its prompt forces it to end every response with exactly one of two tokens on its own line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;End your response with exactly one of these two tokens on its own line:
    CONTINUE — if meaningful new ground can still be explored
    STOP — if consensus has been reached or no new insights are likely
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The orchestrator parses that token to decide whether to start another round or end the debate. &lt;strong&gt;The LLM's output literally becomes control flow.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# backend/orchestrator.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_parse_blue_decision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Return True if debate should CONTINUE, False if it should STOP.
    Scans lines in reverse to handle trailing text. Defaults to CONTINUE.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;reversed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;splitlines&lt;/span&gt;&lt;span class="p"&gt;()):&lt;/span&gt;
        &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONTINUE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;STOP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That tiny function is the heartbeat of the whole loop. Reverse-scanning so trailing whitespace or quote marks don't break parsing. Safe default to &lt;code&gt;CONTINUE&lt;/code&gt; because terminating early is worse than running one too many rounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The debate loop
&lt;/h3&gt;

&lt;p&gt;Here's the actual orchestrator stripped down. Six hats, in order, up to five rounds, controlled by the Blue Hat's verdict:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;HAT_ORDER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WHITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BLACK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;YELLOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BLUE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;MAX_ROUNDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;round_num&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MAX_ROUNDS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;_push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;round_start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;round&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round_num&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;HAT_ORDER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;user_hat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;_await_user_turn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# human steps in
&lt;/span&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;_push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hat_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;_build_messages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;conversation_history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                       &lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;round_num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;round_num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ollama_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;conversation_history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                     &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;round&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round_num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;is_user&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;_push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...})&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;hat&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BLUE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;blue_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;_parse_blue_decision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;round_num&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;MAX_ROUNDS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;_push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;debate_end&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's almost the entire thing. No agent framework, no LangChain, no LangGraph. Just a loop, a queue, and a parsed token. The simplicity is the point.&lt;/p&gt;




&lt;h3&gt;
  
  
  Real-time streaming with SSE
&lt;/h3&gt;

&lt;p&gt;Waiting 30 seconds for an entire debate to finish before showing anything would be unbearable. So I push each completed hat turn over &lt;strong&gt;Server-Sent Events&lt;/strong&gt; the moment it's ready:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;event_stream&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_event_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;debate_end&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="c1"&gt;# Hold the connection open briefly so the browser receives the
&lt;/span&gt;            &lt;span class="c1"&gt;# final event before the server closes.
&lt;/span&gt;            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend's &lt;code&gt;EventSource&lt;/code&gt; reacts in real time, a new chat bubble appears as soon as each hat finishes thinking. Watching it unfold feels like watching a real panel discussion.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Structured conversation history beats flat transcripts
&lt;/h3&gt;

&lt;p&gt;Earlier on I noticed the hats were ignoring each other. The Yellow Hat would give a generic positive answer that didn't actually respond to the Black Hat's specific risk. That was a context problem, they were getting a flat blob of text and skimming it.&lt;/p&gt;

&lt;p&gt;So I restructured the history: separated &lt;strong&gt;previous rounds&lt;/strong&gt; from &lt;strong&gt;current round so far&lt;/strong&gt;, surfaced the &lt;strong&gt;most recent Blue Hat direction&lt;/strong&gt; prominently, and gave each hat &lt;strong&gt;per-hat reminders&lt;/strong&gt; to prevent drift:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;_HAT_REMINDERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WHITE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REMINDER: Review the conversation history above. Do not repeat any fact, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statistic, or metric you have already stated in a previous round. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Every sentence must be new information.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;YELLOW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REMINDER: White Hat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s data points and Black Hat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s identified risks are &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;valuable findings — not just Green Hat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s ideas. If you endorsed Green Hat &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;last round, you MUST endorse a different hat this round.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;HatColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REMINDER: Pick ONE emotional state for this response and stay in it the &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;whole way through. Do NOT swing between opposite feelings in a single turn.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="c1"&gt;# ... and three more
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this change, the debates suddenly felt coherent. Hats started naming each other ("As Black Hat just pointed out..."). The Yellow Hat actually engaged with risks instead of pretending they didn't exist. Same model, same temperatures, just a smarter conversation envelope.&lt;/p&gt;

&lt;h3&gt;
  
  
  A separate Facilitator
&lt;/h3&gt;

&lt;p&gt;The seventh model, &lt;code&gt;neuralhats-facilitator&lt;/code&gt;, runs at temperature &lt;strong&gt;0.2&lt;/strong&gt;, almost deterministic. It's not in &lt;code&gt;HAT_ORDER&lt;/code&gt;. It never debates. Its only two jobs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Title generation:&lt;/strong&gt; when the user types a topic, the Facilitator drafts a short title for the debate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final report synthesis:&lt;/strong&gt; after the Blue Hat votes STOP, the Facilitator reads the entire transcript and writes a neutral, structured summary the user can export as PDF&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Splitting it off from the hats keeps the synthesis voice neutral and the temperature low enough to actually be useful as a summary. Mixing those jobs into one of the colored hats would compromise both.&lt;/p&gt;




&lt;h3&gt;
  
  
  Cascade Deletes
&lt;/h3&gt;

&lt;p&gt;The schema looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;TABLE&lt;/span&gt; &lt;span class="nf"&gt;rounds &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;          &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;PRIMARY&lt;/span&gt; &lt;span class="n"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;debate_id&lt;/span&gt;   &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;round_number&lt;/span&gt; &lt;span class="n"&gt;INTEGER&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt;  &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FOREIGN&lt;/span&gt; &lt;span class="nc"&gt;KEY &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debate_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;REFERENCES&lt;/span&gt; &lt;span class="nf"&gt;debates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;DELETE&lt;/span&gt; &lt;span class="n"&gt;CASCADE&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;TABLE&lt;/span&gt; &lt;span class="nf"&gt;messages &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;          &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;PRIMARY&lt;/span&gt; &lt;span class="n"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;round_id&lt;/span&gt;    &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;hat&lt;/span&gt;         &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;     &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;is_user_message&lt;/span&gt; &lt;span class="n"&gt;INTEGER&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;timestamp&lt;/span&gt;   &lt;span class="n"&gt;TEXT&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FOREIGN&lt;/span&gt; &lt;span class="nc"&gt;KEY &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;round_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;REFERENCES&lt;/span&gt; &lt;span class="nf"&gt;rounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;DELETE&lt;/span&gt; &lt;span class="n"&gt;CASCADE&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ON DELETE CASCADE&lt;/code&gt; from messages → rounds → debate means deleting a debate is a &lt;strong&gt;single atomic operation&lt;/strong&gt;. Hundreds of related rows disappear with one &lt;code&gt;DELETE FROM debates WHERE id = ?&lt;/code&gt;. No application-level cleanup, no orphaned data, no foot-guns.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;I went with &lt;strong&gt;Gemma 4 E4B&lt;/strong&gt; as my default base model.&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;h3&gt;
  
  
  The constraint: it has to be local, and it has to be fast
&lt;/h3&gt;

&lt;p&gt;NeuralHats fires &lt;strong&gt;6–7 model invocations per debate round&lt;/strong&gt; (one per hat, plus the facilitator for final synthesis). With 5 rounds max, that's up to &lt;strong&gt;31 inference calls in a single debate&lt;/strong&gt;. If each call takes 30 seconds, that's a 15-minute debate which is pretty unusable.&lt;/p&gt;

&lt;p&gt;I needed a model that was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small enough to run smoothly on consumer hardware (laptops, mid-range desktops)&lt;/li&gt;
&lt;li&gt;Fast enough that a hat's response feels like watching someone think, not waiting for a printer&lt;/li&gt;
&lt;li&gt;Capable enough to actually hold a position and engage with arguments, not just produce plausible-sounding mush&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why E4B specifically
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;26B&lt;/strong&gt; model would have been the safe "capability" choice, clearly better at reasoning. But it still turned out to be too much for the turn-based UX I needed. Each round would take minutes, killing the live-panel feeling.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;E2B&lt;/strong&gt; (2B) model is lightning fast but it didn't hold its hat persona well enough, under pressure it would drift, lose the role, or repeat itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E4B hit the sweet spot.&lt;/strong&gt; It runs comfortably on a 16 GB VRAM machine, generates a hat response in 3–8 seconds depending on hardware, and is capable enough that with the right system prompt and per-hat parameters it genuinely stays in character. Watching the Red Hat shift emotional tone between rounds, or the Black Hat surface genuinely novel risks each time, that's all E4B.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Gemma 4 unlocked that nothing else could
&lt;/h3&gt;

&lt;p&gt;Three things, specifically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Native multi-instance personality.&lt;/strong&gt; Because Ollama lets me create lightweight aliases over the same base weights, I get seven distinct AI personas without seven copies of the weights in RAM. Try that with a hosted API and you're paying for seven independent context windows. With Gemma 4 local, it's free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Blue Hat's &lt;code&gt;CONTINUE&lt;/code&gt; / &lt;code&gt;STOP&lt;/code&gt; discipline.&lt;/strong&gt; Small models often fail at strict format constraints, they want to ramble. Gemma 4 E4B reliably ends every Blue Hat turn with exactly one of those tokens on its own line. Without that reliability, the whole control-flow trick falls apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The freedom to ship "100% local" as a feature, not a constraint.&lt;/strong&gt; No API costs, no rate limits, no internet dependency, no privacy concerns about feeding personal dilemmas to a third party. For an app whose entire premise is &lt;em&gt;"let six minds help you think through something you wouldn't want to discuss with anyone else"&lt;/em&gt; - that's not a nice-to-have. That's the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;NeuralHats started because I was stuck inside my own head and needed another perspective. It turned into a project about how, with the right architecture, a single E4B model can play six different roles convincingly enough to actually help you think.&lt;/p&gt;

&lt;p&gt;The Gemma 4 family made that possible, small enough to run on my own machine, smart enough to genuinely disagree with itself, and disciplined enough that a 200-word Blue Hat summary ends with the exact token my orchestrator needs to make a decision.&lt;/p&gt;

&lt;p&gt;If you've ever been stuck inside your own head, clone it, run it, give it your problem, and let the hats argue. Worst case, you have a good laugh. Best case, you get unstuck.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>15 Essential Sections Every README Needs: Give Your Project What It Deserves</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 26 Apr 2026 14:31:29 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie</link>
      <guid>https://dev.to/georgekobaidze/15-essential-sections-every-readme-needs-give-your-project-what-it-deserves-fie</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;README Files Are Never Perfect&lt;/li&gt;
&lt;li&gt;The Primary Purpose of README Files&lt;/li&gt;
&lt;li&gt;A Good README Starts With a Proper Structure&lt;/li&gt;
&lt;li&gt;
The Essential README Sections

&lt;ul&gt;
&lt;li&gt;Title and Introduction&lt;/li&gt;
&lt;li&gt;Table of Contents&lt;/li&gt;
&lt;li&gt;About&lt;/li&gt;
&lt;li&gt;Features&lt;/li&gt;
&lt;li&gt;Tech Stack&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Project Structure&lt;/li&gt;
&lt;li&gt;Getting Started&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;How to Contribute?&lt;/li&gt;
&lt;li&gt;What's Next?&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Acknowledgements&lt;/li&gt;
&lt;li&gt;Author&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Ready-to-Use Template&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Imagine building an amazing software product that no one can use, or even knows exists simply because it lacks proper documentation. Unfortunately, there are plenty of projects like that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yours doesn't have to be one of them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Earlier I published an article &lt;a href="https://dev.to/georgekobaidze/the-final-1-of-every-github-project-sealing-it-properly-2app"&gt;The Final 1% of Every GitHub Project: Sealing It Properly&lt;/a&gt;, where README was literally the first item on the list. Yes, it's that important, and that's why I decided to take a deeper look into this topic.&lt;/p&gt;

&lt;p&gt;If you're a software engineer, knowing how to write proper documentation is one of the most critical skills you can have. There's no excuse for skipping it or considering it as optional.&lt;/p&gt;

&lt;p&gt;Yes, coding is way more fun. But coming back later and trying to understand what you did (and why you did it) without any reference is far less fun than writing a few clear notes upfront.&lt;/p&gt;

&lt;p&gt;And if you want your work to be recognized, used, contributed to, or even starred, documentation isn't optional. It's one of the first things people see, and often the reason they stay... or leave.&lt;/p&gt;

&lt;p&gt;But this article isn't about documentation as a whole, that's a massive topic and it deserves to be broken down. There are many different types of documentation, each serving a different purpose.&lt;/p&gt;

&lt;p&gt;Here, we're focusing on the most essential one: &lt;strong&gt;the README&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  README Files Are Never Perfect
&lt;/h2&gt;

&lt;p&gt;I've seen so many variations of README files throughout my career. Some were good, others not so good, and a few were close to perfect.&lt;/p&gt;

&lt;p&gt;But one thing is always true: having a README with somewhat useful information is way better than having no README at all.&lt;/p&gt;

&lt;p&gt;You have to start somewhere. Perfection doesn't happen from the beginning, it's something you work your way up to over time.&lt;/p&gt;

&lt;p&gt;I've been a software engineer for almost a decade now, and even today, I still look at my own README files and think they could be clearer, more consistent, or simply better. You're never fully satisfied with how you write documentation &lt;strong&gt;and that's exactly the point&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's something you continuously refine, just like your code.&lt;/p&gt;

&lt;p&gt;In this article, I'll walk through the essential README sections, and explain why each of them matters.&lt;/p&gt;

&lt;p&gt;At the end, I'll also provide a ready-to-use README template you can take and adapt for your own projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Primary Purpose of README Files
&lt;/h2&gt;

&lt;p&gt;The primary purpose of a README is to quickly guide someone through the essential information about a repository.&lt;/p&gt;

&lt;p&gt;It should include just enough detail for others to understand what the project is about, how to get it running, and how to contribute. Not everything needs to live in the README, trying to cover too much will only make it harder to read.&lt;/p&gt;

&lt;p&gt;There's a reason different types of documentation exist. Each serves its own purpose, and the README is meant to be the entry point, not the entire manual.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Good README Starts With a Proper Structure
&lt;/h2&gt;

&lt;p&gt;README files are typically written in Markdown, which has become the universal format for a few good reasons: it's simple, widely supported, easy to learn, and flexible enough to cover almost everything you need in a README.&lt;/p&gt;

&lt;p&gt;If you've never used Markdown before, it's worth checking out &lt;a href="https://www.markdownguide.org/" rel="noopener noreferrer"&gt;a quick reference&lt;/a&gt;. In less than half an hour, you can learn everything you need to write solid README files. For anything more advanced, you can always refer back to the documentation later.&lt;/p&gt;

&lt;p&gt;The key point is this: don't write your README as just plain text. It's just terrible to read and doesn't scale well. Instead, use Markdown features to make your documentation not only informative, but also clean, structured, and easy to scan.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Essential README Sections
&lt;/h2&gt;

&lt;p&gt;Alright, it's time to go through the essential sections you should include in your README.&lt;/p&gt;

&lt;p&gt;But the key thing to keep in mind is this: this is not a definitive checklist. Every project is different, and your README should reflect that. In addition to these core sections, you might need custom ones specific to your project, so don't feel limited by this list.&lt;/p&gt;

&lt;p&gt;Also, not every section is necessary in every case. If you're building a simple "hello world"-level application, you don't need to overthink things or include everything mentioned here. The goal of this article is to cover the sections that make sense for most real-world projects.&lt;/p&gt;

&lt;p&gt;And if you think I've missed something important, feel free to share your experience in the comments, it can be valuable for both me and the wider developer community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So here's my list:&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Title and Introduction
&lt;/h3&gt;

&lt;p&gt;Before diving into your project details, it's important to start with the most essential elements: the title and a short description.&lt;/p&gt;

&lt;p&gt;This is where you capture attention. As you probably know, first impressions matter a lot, if you want people to keep reading, this is the section that determines whether they do or not.&lt;/p&gt;

&lt;p&gt;You can also make this section more engaging by adding visual elements like a logo, tags, or a screenshot of your project. For example, the homepage, dashboard, or any interface that looks clean and appealing works really well.&lt;/p&gt;

&lt;p&gt;Here's an example from one of my projects: &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive" rel="noopener noreferrer"&gt;Sunday DEV Drive&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.amazonaws.com%2Fuploads%2Farticles%2F8eqdiux51kjjkbl7o3cw.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.amazonaws.com%2Fuploads%2Farticles%2F8eqdiux51kjjkbl7o3cw.png" alt="Title and Introduction" width="799" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember, this section is the main poster of your entire project. Make sure it's clear, effective, and catchy, it's often the first thing people see, and it sets the tone for everything that follows.&lt;/p&gt;

&lt;p&gt;It can also be functional, not just visual. You can include useful links like a demo, video walkthrough, article, or any other relevant resource that helps people understand your project faster.&lt;/p&gt;




&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;p&gt;Whenever I write any kind of structured content, whether it's a document, a README, an article, or anything similar, I always try to include a table of contents.&lt;/p&gt;

&lt;p&gt;It's one of the most underused and underrated parts of documentation. I wouldn't call it absolutely critical in every case, but it adds a lot of clarity and structure.&lt;/p&gt;

&lt;p&gt;Think of it like the opening credits of a movie. The movie might be great, but those opening credits already give you a sense of who's involved and what to expect. They set the context before the story even begins.&lt;/p&gt;

&lt;p&gt;A table of contents does the same thing for your project. It helps readers quickly understand what's inside and jump straight to the section they care about.&lt;/p&gt;

&lt;p&gt;Here's an example from one of my projects: &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;NoteRunway&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.amazonaws.com%2Fuploads%2Farticles%2Ft91z2d726e07xumznd1w.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.amazonaws.com%2Fuploads%2Farticles%2Ft91z2d726e07xumznd1w.png" alt="Table of Contents" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally, you can add links to each section so users can easily navigate through the README without having to scroll and search for what they need.&lt;/p&gt;




&lt;h3&gt;
  
  
  About
&lt;/h3&gt;

&lt;p&gt;This is where you actually start describing your project: what it is, what it does, and at a high level, how it works. Focus on the key highlights and the core idea behind it, but don't go too deep into implementation details just yet, that comes later.&lt;/p&gt;

&lt;p&gt;Here's an example from another one of my projects: &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&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.amazonaws.com%2Fuploads%2Farticles%2Fxvqd6x7lpum8idyhh7f2.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.amazonaws.com%2Fuploads%2Farticles%2Fxvqd6x7lpum8idyhh7f2.png" alt="About" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;p&gt;Now it's time to expand the details a bit and start talking about the major features your project supports.&lt;/p&gt;

&lt;p&gt;There are two common ways to structure this section. You can either use a simple table format, where you list each feature alongside its description, or you can go deeper and use subheadings for each feature if you want to provide more context and detail.&lt;/p&gt;

&lt;p&gt;Here's an example of the features section from my &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&lt;/a&gt; project:&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.amazonaws.com%2Fuploads%2Farticles%2F7zdphgf6pjv1dkcugs4o.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.amazonaws.com%2Fuploads%2Farticles%2F7zdphgf6pjv1dkcugs4o.png" alt="Features" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though this section goes into more detail, the descriptions should still stay at a high level. The goal is to help readers understand what each feature does, not how it's implemented.&lt;/p&gt;

&lt;p&gt;In most cases, you shouldn't include implementation details here. Those belong in deeper documentation or technical sections. Only include them when there's a specific reason they're important for understanding the feature itself.&lt;/p&gt;




&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;p&gt;One of the most important pieces of information a README should include is the tech stack.&lt;/p&gt;

&lt;p&gt;First, because it represents the building blocks of your project. And second, many developers actively look for projects built with specific technologies so they can contribute using their existing skills.&lt;/p&gt;

&lt;p&gt;So make it clear what your project is built with, it helps both understanding and discoverability.&lt;/p&gt;

&lt;p&gt;Here's the tech stack section from my &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;NoteRunway&lt;/a&gt; project:&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.amazonaws.com%2Fuploads%2Farticles%2Fmjxgnr1g9h4cjn8q6jly.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.amazonaws.com%2Fuploads%2Farticles%2Fmjxgnr1g9h4cjn8q6jly.png" alt="Tech Stack" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;This section is typically where you describe your architecture, a bird's-eye view of how the different parts of your system work together.&lt;/p&gt;

&lt;p&gt;For example, this might include the front-end, back-end, database, caching layer, external services, load balancers, firewalls, and anything else relevant to your system design.&lt;/p&gt;

&lt;p&gt;It's also a good practice to visualize your architecture using diagramming tools like draw.io, Lucidchart, or similar tools. A visual representation is almost always easier to understand than a purely textual explanation, especially for more complex systems.&lt;/p&gt;

&lt;p&gt;Here's the architecture diagram from the &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&lt;/a&gt; project:&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.amazonaws.com%2Fuploads%2Farticles%2F6kqdsc1ahtagn2xurkc0.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.amazonaws.com%2Fuploads%2Farticles%2F6kqdsc1ahtagn2xurkc0.png" alt="Architecture" width="741" height="1624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, you don't need to create something overly sophisticated. In most cases, the simpler the diagram, the better.&lt;/p&gt;

&lt;p&gt;Clarity should always come first. Keeping things simple and easy to understand is usually more valuable than adding unnecessary complexity, and it's something fellow developers will always appreciate.&lt;/p&gt;




&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;

&lt;p&gt;This one is a bit controversial, I don't see it in many README files, and I understand why. You can always explore the source code and figure out the structure yourself, right?&lt;/p&gt;

&lt;p&gt;But the benefit of including this section is that you can clearly describe the key folders and files, what they do, and what their purpose is.&lt;/p&gt;

&lt;p&gt;Yes, it can be a bit tedious to write. But it pays off, not just for future contributors, but for your future self as well. When you come back to the project later, this section quickly reminds you how everything is organized.&lt;/p&gt;

&lt;p&gt;Always take care of future you.&lt;/p&gt;

&lt;p&gt;Here's an example from &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&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.amazonaws.com%2Fuploads%2Farticles%2F5yd3aib1b7njtbgt6n1e.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.amazonaws.com%2Fuploads%2Farticles%2F5yd3aib1b7njtbgt6n1e.png" alt="Project Structure" width="800" height="1013"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;Some prefer calling it "Setup", both work, the main idea of this section is to clearly explain how someone can clone your repository and set it up on their local machine.&lt;/p&gt;

&lt;p&gt;This is one of the most important parts of a README, if not the most important, because no one can contribute to your project if they can't even get it running locally.&lt;/p&gt;

&lt;p&gt;Once you've listed all the setup steps, make sure to actually test them yourself. This helps you catch missing details early and reduces frustration for both you and other developers.&lt;/p&gt;

&lt;p&gt;This section can include things like installing required frameworks and dependencies, setting up external service accounts (if needed), creating local databases, configuring environment variables, and any other steps required to run the project locally.&lt;/p&gt;

&lt;p&gt;Here's the example from the &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;NoteRunway&lt;/a&gt; app:&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.amazonaws.com%2Fuploads%2Farticles%2Fuxno0xk6lj0ua724m6qt.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.amazonaws.com%2Fuploads%2Farticles%2Fuxno0xk6lj0ua724m6qt.png" alt="Getting Started" width="800" height="1225"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;This can be part of the "Getting Started" section, but I sometimes keep it separate because configuration is one of the most fundamental parts of any project.&lt;/p&gt;

&lt;p&gt;Configuration can quickly become complex and tedious, so it's important to document it clearly in your README. This ensures you always understand what each parameter does and how everything is set up.&lt;/p&gt;

&lt;p&gt;You can include any type of configuration here, like environment variables, database-related settings, feature flags, or external JSON configuration files stored in the cloud.&lt;/p&gt;

&lt;p&gt;Unlike the high-level overview sections, this is where you go into more detailed, practical setup information that's necessary for the project to actually run correctly.&lt;/p&gt;

&lt;p&gt;Here's an example from &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&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.amazonaws.com%2Fuploads%2Farticles%2Fybowmxz0hhmsx3thhmt1.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.amazonaws.com%2Fuploads%2Farticles%2Fybowmxz0hhmsx3thhmt1.png" alt="Configuration" width="779" height="1028"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Security is one of the most important aspects to address in your documentation.&lt;/p&gt;

&lt;p&gt;This section ensures that if someone adds new features or modifies existing ones, they follow the established standards and understand how security is handled throughout the project.&lt;/p&gt;

&lt;p&gt;Here's where you outline the key security considerations of your system, so contributors don't accidentally introduce vulnerabilities or break existing protections.&lt;/p&gt;

&lt;p&gt;Here's an example from the &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;NoteRunway&lt;/a&gt; app:&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.amazonaws.com%2Fuploads%2Farticles%2Fv5p3ovjmerk3bauo6z8n.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.amazonaws.com%2Fuploads%2Farticles%2Fv5p3ovjmerk3bauo6z8n.png" alt="Security" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  How to Contribute?
&lt;/h3&gt;

&lt;p&gt;This is where you briefly describe the contribution guidelines for your project.&lt;/p&gt;

&lt;p&gt;Sometimes this can't be kept short, especially in large open-source projects with thousands of contributors. Without clear rules, things can get messy quickly.&lt;/p&gt;

&lt;p&gt;However, if your project is still early-stage, there's no need to overcomplicate it. Simple guidelines are usually enough to start with, such as the ones below:&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.amazonaws.com%2Fuploads%2Farticles%2F1ntlhnc7exufzfgaweix.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.amazonaws.com%2Fuploads%2Farticles%2F1ntlhnc7exufzfgaweix.png" alt="How to Contribute" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;It's a good practice to let readers know that your project isn't finished and that you plan to continue supporting it and adding new features over time.&lt;/p&gt;

&lt;p&gt;This is where you can list what's coming next. It not only shows the direction of the project, but also gives contributors ideas for where they can start contributing.&lt;/p&gt;

&lt;p&gt;Here's an example:&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.amazonaws.com%2Fuploads%2Farticles%2Fveqc7m6ugstj3x5gbyl1.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.amazonaws.com%2Fuploads%2Farticles%2Fveqc7m6ugstj3x5gbyl1.png" alt="What's Next" width="511" height="445"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;The license information is absolutely essential. This is where people understand what they're allowed to do with your project and under what conditions.&lt;/p&gt;

&lt;p&gt;You don't need to include the full license text or explain it in detail. In most cases, it's enough to simply state the license type and link to the license file, like the following example:&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.amazonaws.com%2Fuploads%2Farticles%2Fja95n646nd511js2sxb4.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.amazonaws.com%2Fuploads%2Farticles%2Fja95n646nd511js2sxb4.png" alt="License" width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Acknowledgements
&lt;/h3&gt;

&lt;p&gt;Show gratitude to anyone who has contributed to your project, as well as any tools, libraries, or resources that helped you build it.&lt;/p&gt;

&lt;p&gt;It's a simple but meaningful section, and it's always good practice to include it when appropriate. Here's an example from the &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;NoteRunway&lt;/a&gt; app:&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.amazonaws.com%2Fuploads%2Farticles%2F2cql8w8saxvv1188583o.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.amazonaws.com%2Fuploads%2Farticles%2F2cql8w8saxvv1188583o.png" alt="Acknowledgements" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Author
&lt;/h3&gt;

&lt;p&gt;And last but not least, leave your mark, because you are the main person behind the project. You put everything together and made it work.&lt;/p&gt;

&lt;p&gt;Make it easy for others to reach out, ask questions, or even propose collaborations.&lt;/p&gt;

&lt;p&gt;Here's my example:&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.amazonaws.com%2Fuploads%2Farticles%2Fog6njbyyw99sh982wc9c.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.amazonaws.com%2Fuploads%2Farticles%2Fog6njbyyw99sh982wc9c.png" alt="Author" width="799" height="170"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Ready to Use Template
&lt;/h2&gt;

&lt;p&gt;Here's a template you can copy, paste into your project, and customize as needed. Feel free to adjust it, add new sections, or remove anything that doesn't fit. This is meant to be a flexible starting point for building a well-structured README.&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;# Title and Introduction (replace this with your project title)&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Table of Contents&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## About&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Features&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Tech Stack&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Project Structure&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Getting Started&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Configuration&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Security&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## How to Contribute?&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What's Next?&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## License&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Acknowledgements&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Author&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Like in most areas of software engineering, writing good README files takes experience and practice.&lt;/p&gt;

&lt;p&gt;But having a solid starting point can make the process much faster and more straightforward. That's the main reason I'm sharing this, so you can get up to speed quickly and start improving your documentation from day one.&lt;/p&gt;

&lt;p&gt;Good documentation doesn't just help others, it makes you a better engineer overall.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>opensource</category>
      <category>tutorial</category>
      <category>development</category>
    </item>
    <item>
      <title>The Final 1% of Every GitHub Project: Sealing It Properly</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sat, 11 Apr 2026 15:55:53 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/the-final-1-of-every-github-project-sealing-it-properly-2app</link>
      <guid>https://dev.to/georgekobaidze/the-final-1-of-every-github-project-sealing-it-properly-2app</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;What Does It Mean to "Seal" a Project?&lt;/li&gt;
&lt;li&gt;
The Release Checklist

&lt;ul&gt;
&lt;li&gt;README&lt;/li&gt;
&lt;li&gt;The "About" Section&lt;/li&gt;
&lt;li&gt;Branch Hygiene&lt;/li&gt;
&lt;li&gt;Release Tags&lt;/li&gt;
&lt;li&gt;Branch and Tag Rulesets&lt;/li&gt;
&lt;li&gt;New Release and Release Notes&lt;/li&gt;
&lt;li&gt;Move All Tasks to Done&lt;/li&gt;
&lt;li&gt;Choose a License for Your Project&lt;/li&gt;
&lt;li&gt;CI/CD Status &amp;amp; Pipeline Health&lt;/li&gt;
&lt;li&gt;Versioned Builds &amp;amp; Artifacts&lt;/li&gt;
&lt;li&gt;Optional: Write an Article or Record a Demo Video&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Here's the Full Checklist to Copy and Use&lt;/li&gt;

&lt;li&gt;Finish as Strong as You Start&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;You're sitting at your desk excited, sleep-deprived, but still genuinely happy.&lt;/p&gt;

&lt;p&gt;After weeks, maybe even months of grinding, you're finally ready to show your project to the world, or your team.&lt;/p&gt;

&lt;p&gt;This is the moment you've been waiting for.&lt;br&gt;
Time to publish, share, and feel proud of what you've built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But hold on&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You might not be done just yet.&lt;/p&gt;

&lt;p&gt;There's that final 1% you need to take care of before even thinking about wrapping things up - the part where you truly seal your project.&lt;/p&gt;

&lt;p&gt;Because "done" usually just means the code works.&lt;/p&gt;

&lt;p&gt;❓ But is it versioned?&lt;br&gt;
❓ Can someone else understand it?&lt;br&gt;
❓ Is it safe to deploy?&lt;br&gt;
❓ Can your future self come back to it without pain?&lt;/p&gt;

&lt;p&gt;That last 1% isn't about writing more code.&lt;br&gt;
It's about making your project ready for the real world.&lt;/p&gt;

&lt;p&gt;And that's exactly what most developers overlook.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does It Mean to "Seal" a Project?
&lt;/h2&gt;

&lt;p&gt;Well, that's what I call it, but it's not really about the repository as a whole. &lt;strong&gt;It's about every single version of your product.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time you release something, you're not just shipping code, you're shipping a complete unit. A version that should stand on its own: deployable, tested, and fully functional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But that's only the baseline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A properly "sealed" version is also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Well-documented&lt;/li&gt;
&lt;li&gt;Clearly versioned&lt;/li&gt;
&lt;li&gt;Properly packaged&lt;/li&gt;
&lt;li&gt;Easy to understand and use&lt;/li&gt;
&lt;li&gt;Presented in a way that others (or your future self) can trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need a well-defined checklist to go through before you can call it done. Let's go through them one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Release Checklist
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This isn't a definitive list&lt;/strong&gt;, it's my personal approach. You might find it helpful, but everyone has their own way of properly wrapping up a project or repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  README
&lt;/h3&gt;

&lt;p&gt;Duh, right?&lt;/p&gt;

&lt;p&gt;It might sound obvious, but you'd be surprised how many repositories either don't have a README at all, or have one that barely says anything useful.&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.amazonaws.com%2Fuploads%2Farticles%2F2ak4ljzlzgjtjq4z8stm.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.amazonaws.com%2Fuploads%2Farticles%2F2ak4ljzlzgjtjq4z8stm.png" alt="Metal Birds Watch Readme" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your README should be the main entry point to your project.&lt;br&gt;
&lt;strong&gt;If someone can't understand, set up, or use your project from it without any hassle, it's not good enough.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A solid README should answer the basic questions:&lt;/p&gt;

&lt;p&gt;❓ What is this project?&lt;br&gt;
❓ Why does it exist?&lt;br&gt;
❓ How do I run it?&lt;br&gt;
❓ How do I use it?&lt;/p&gt;

&lt;p&gt;And many more important questions.&lt;/p&gt;

&lt;p&gt;I'll write a separate article on how to craft an effective README that's actually useful, because it deserves that level of attention.&lt;/p&gt;

&lt;p&gt;But for now, just remember this:&lt;br&gt;
&lt;strong&gt;README is never optional, it's one of the most essential parts of your project.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The "About" Section
&lt;/h3&gt;

&lt;p&gt;The About section is one of the most important parts of a repository. It provides a quick, high-level overview of the project and makes it easier for others to immediately understand what it is about.&lt;/p&gt;

&lt;p&gt;It can include a short description of the repository, a demo or live link, and other quick-access resources like documentation or a website. It also surfaces key repository metadata such as stars, forks, and watchers, giving instant context about the project's popularity and activity.&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.amazonaws.com%2Fuploads%2Farticles%2F8kjzsje69mfctv8cf4k4.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.amazonaws.com%2Fuploads%2Farticles%2F8kjzsje69mfctv8cf4k4.png" alt="About" width="475" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, the About section allows you to enable or disable different repository features and visibility components, helping you control what information is highlighted on the repo page.&lt;/p&gt;

&lt;p&gt;One of its most powerful features is tags (topics). Tags improve searchability and discovery by helping your repository appear in relevant searches and topic-based browsing. They also communicate the tech stack and domain of your project at a glance.&lt;/p&gt;

&lt;p&gt;Used properly, the About section becomes a compact "control panel" for your repository's identity, visibility, and discoverability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Branch Hygiene
&lt;/h3&gt;

&lt;p&gt;When writing code, you usually end up creating a number of temporary branches like &lt;code&gt;feature&lt;/code&gt;, &lt;code&gt;bugfix&lt;/code&gt;, &lt;code&gt;documentation&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, and so on.&lt;/p&gt;

&lt;p&gt;Some developers stay disciplined and clean them up right after they're merged into permanent branches like &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, or &lt;code&gt;release&lt;/code&gt;. Others, however, leave them behind, where they slowly accumulate in the repository without any real purpose.&lt;/p&gt;

&lt;p&gt;That doesn't leave a great impression for someone exploring your project or considering a contribution. It's a bit like walking into someone's house and seeing empty soda cans, pizza boxes, and empty, expired snack wrappers scattered all over the living room and kitchen, you immediately feel that things aren't being maintained properly.&lt;/p&gt;

&lt;p&gt;More importantly, it creates internal confusion over time. You'll eventually find yourself asking: "Do we still need this branch? Why is it still here?" In many cases, it's just forgotten, not intentionally kept.&lt;/p&gt;

&lt;p&gt;Keeping your branch list clean is a small habit, but it improves clarity, reduces cognitive load, and makes repository maintenance much easier in the long run.&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.amazonaws.com%2Fuploads%2Farticles%2Fvsqrele2y3l1oypov5rj.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.amazonaws.com%2Fuploads%2Farticles%2Fvsqrele2y3l1oypov5rj.png" alt="Branches" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So once development work is finished and merged, make it a habit to remove temporary branches and keep only the long-lived ones like main, develop, and release (not limited to these three, there can be more).&lt;/p&gt;

&lt;p&gt;A clean repository isn't just about code, it's about discipline and clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Release Tags
&lt;/h3&gt;

&lt;p&gt;Release tags are one of the most important but often overlooked parts of properly sealing a project.&lt;/p&gt;

&lt;p&gt;A tag marks a specific point in your repository's history as a meaningful version, such as &lt;code&gt;v1.0.1&lt;/code&gt;, &lt;code&gt;v1.2.3&lt;/code&gt;, or &lt;code&gt;v2.0.0&lt;/code&gt;. Unlike branches, tags are immutable - they permanently point to a specific commit. This makes them ideal for representing official releases.&lt;/p&gt;

&lt;p&gt;Without tags, it becomes harder to track what version was deployed, compare changes between releases, or reliably roll back if something breaks. With proper version tagging, every release becomes a clear and reproducible snapshot of your project.&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.amazonaws.com%2Fuploads%2Farticles%2Fwp5lkj83zbg0q7fu0iux.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.amazonaws.com%2Fuploads%2Farticles%2Fwp5lkj83zbg0q7fu0iux.png" alt="Tags" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most teams follow semantic versioning &lt;strong&gt;(MAJOR.MINOR.PATCH)&lt;/strong&gt;, which communicates the nature of changes:&lt;/p&gt;

&lt;p&gt;MAJOR: breaking changes&lt;br&gt;
MINOR: new features, backward compatible&lt;br&gt;
PATCH: bug fixes&lt;/p&gt;

&lt;p&gt;In my own workflow, I sometimes take this a step further. Alongside a release tag like &lt;code&gt;1.0.1&lt;/code&gt;, I also create a corresponding branch such as &lt;code&gt;release/1.0.1&lt;/code&gt;. I treat it as an immutable reference point that mirrors the tagged commit.&lt;/p&gt;

&lt;p&gt;This is my personal approach, and it's not the only way to handle releases. Many developers or teams rely solely on tags, while others use release branches for stabilization, CI/CD workflows, or long-term maintenance.&lt;/p&gt;

&lt;p&gt;Tags are often sufficient on their own, but in certain workflows, combining them with release branches can add flexibility and clarity.&lt;/p&gt;

&lt;p&gt;In short, a release tag gives you a stable reference. How you structure around it depends on your workflow and team preferences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Branch and Tag Rulesets
&lt;/h3&gt;

&lt;p&gt;GitHub provides rulesets (under repository settings → rules) that let you define and enforce policies for both branches and tags. This is an important but often overlooked part of properly "sealing" a project.&lt;/p&gt;

&lt;p&gt;Rulesets allow you to control what is allowed and what is restricted in your repository. For branches, you can enforce things like requiring pull requests before merging, requiring status checks to pass, blocking force pushes, and restricting direct commits to important branches like &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, or &lt;code&gt;release/*&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For tags, rulesets are just as important. You can control who is allowed to create or modify tags, enforce naming patterns (such as semantic versioning like &lt;code&gt;v1.2.3&lt;/code&gt;), and prevent accidental or unauthorized releases from being created.&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.amazonaws.com%2Fuploads%2Farticles%2Frced4jmq9k63f6ts6rk3.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.amazonaws.com%2Fuploads%2Farticles%2Frced4jmq9k63f6ts6rk3.png" alt="Rulesets" width="376" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Together, branch and tag rulesets help ensure that your repository follows a predictable and safe workflow. They prevent accidental changes to critical branches and protect release integrity by making sure that versions are created in a controlled and consistent way.&lt;/p&gt;

&lt;p&gt;In practice, I use these rulesets to enforce discipline around my workflow. For example, I restrict direct pushes to main, require pull request reviews, and ensure that release tags follow a strict versioning format. This helps keep the repository clean, predictable, and production-ready.&lt;/p&gt;

&lt;p&gt;That said, rulesets are flexible and highly team-dependent. Different projects will have different levels of strictness depending on their size, deployment strategy, and collaboration model.&lt;/p&gt;

&lt;p&gt;At a high level, rulesets are what turn a repository from "just code" into a controlled system with enforced structure and reliability. I'll discuss more about the best practices of rulesets in a separate article.&lt;/p&gt;

&lt;h3&gt;
  
  
  New Release and Release Notes
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fuvkbr7o0kwpiw2kv0qjv.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.amazonaws.com%2Fuploads%2Farticles%2Fuvkbr7o0kwpiw2kv0qjv.png" alt="New Release" width="403" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A project version is not truly complete until it has been published as an official release.&lt;/p&gt;

&lt;p&gt;In GitHub terms, this means creating a release tied to a specific tag, marking a stable and meaningful snapshot of your codebase. However, the release itself is only half of the story.&lt;/p&gt;

&lt;p&gt;A release is not complete until it is accompanied by proper release notes that describe what has changed since the previous version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Release notes are not a "nice to have", they are critical.&lt;/strong&gt; They are the primary way for users, consumers, contributors, and dependent teams/developers to understand what has changed, why it changed, and how it might affect them.&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.amazonaws.com%2Fuploads%2Farticles%2F0n7iwhcket5ksvn9dbpt.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.amazonaws.com%2Fuploads%2Farticles%2F0n7iwhcket5ksvn9dbpt.png" alt="Release Note Template" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good release notes typically include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New features added&lt;/li&gt;
&lt;li&gt;Bug fixes&lt;/li&gt;
&lt;li&gt;Breaking changes&lt;/li&gt;
&lt;li&gt;Internal improvements or refactors&lt;/li&gt;
&lt;li&gt;Migration notes or required actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That said, not everything from this list might be applicable to every release.&lt;/p&gt;

&lt;p&gt;Without this context, even a well-versioned release becomes difficult to use safely. People are left guessing what changed, which increases the risk of integration issues and misunderstandings.&lt;/p&gt;

&lt;p&gt;A well-written release note also improves collaboration. It acts as a communication layer between development and usage, ensuring that changes are transparent and traceable.&lt;/p&gt;

&lt;p&gt;Here is a simple example of the &lt;code&gt;v1.0.0&lt;/code&gt; release notes for the Metal Birds Watch project:&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.amazonaws.com%2Fuploads%2Farticles%2Fzvx0bxr4vx9v6r4lxauo.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.amazonaws.com%2Fuploads%2Farticles%2Fzvx0bxr4vx9v6r4lxauo.png" alt="Metal Birds Watch v1.0.0" width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Move All Tasks to Done
&lt;/h3&gt;

&lt;p&gt;One often overlooked part of properly finishing a project is cleaning up your task tracking system, especially in GitHub Projects.&lt;/p&gt;

&lt;p&gt;Before considering a version truly complete, all relevant tasks should be either completed, closed, or moved to a final "Done" state. This ensures that the project board accurately reflects the actual state of the work.&lt;/p&gt;

&lt;p&gt;Leaving tasks in "In Progress" or "To Do" after a release creates confusion. It becomes unclear whether something was forgotten, postponed, or simply not tracked properly. Over time, this reduces trust in the project's planning and documentation.&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.amazonaws.com%2Fuploads%2Farticles%2F9zvko0ztbjf3p7qhwehi.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.amazonaws.com%2Fuploads%2Farticles%2F9zvko0ztbjf3p7qhwehi.png" alt="Project" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A clean project board has a psychological impact as well. It gives a clear sense of closure and helps both contributors and maintainers understand that a release cycle has been fully completed.&lt;/p&gt;

&lt;p&gt;In addition, GitHub Projects can act as a historical record of work. Keeping it clean and properly closed makes it easier to review past development cycles and understand what was delivered in each release.&lt;/p&gt;

&lt;p&gt;So before you consider a version fully "sealed", make sure the work is not only merged, but also properly reflected in your project board. Everything should either be done, closed, or intentionally moved forward into the next iteration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose a License for Your Project
&lt;/h3&gt;

&lt;p&gt;One of the most commonly overlooked parts of finishing a project is adding a proper license.&lt;/p&gt;

&lt;p&gt;A license defines how others are allowed to use your code, whether they can modify it, distribute it, use it commercially, or build on top of it. Without a license, your project is technically "all rights reserved" by default, meaning others don't actually have legal permission to use it in most contexts.&lt;/p&gt;

&lt;p&gt;This is especially important if your repository is public. People may be interested in learning from your work, contributing to it, or using it as a dependency. Without a clear license, you're creating uncertainty around what is and isn't allowed.&lt;/p&gt;

&lt;p&gt;Choosing a license doesn't need to be complicated. Many projects use standard options like MIT, Apache 2.0, or GPL, depending on how permissive or restrictive they want to be. The key is not which license you choose, but that you choose one deliberately.&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.amazonaws.com%2Fuploads%2Farticles%2F0xnylzayxqukm5cv00bo.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.amazonaws.com%2Fuploads%2Farticles%2F0xnylzayxqukm5cv00bo.png" alt="License" width="800" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adding a license is a small step, but it completes an essential part of the project's "contract" with its users.&lt;/p&gt;

&lt;p&gt;A project without a license is unfinished in a different way, it may work technically, but it's not fully ready for real-world use.&lt;/p&gt;

&lt;h3&gt;
  
  
  CI/CD Status &amp;amp; Pipeline Health
&lt;/h3&gt;

&lt;p&gt;A project is not truly "done" if your CI/CD pipeline is broken or unreliable.&lt;/p&gt;

&lt;p&gt;Before considering a release complete, you should always ensure that your automation pipelines are in a healthy state. This includes making sure that builds run successfully, tests pass consistently, and deployment workflows behave as expected.&lt;/p&gt;

&lt;p&gt;CI/CD is often the first thing that silently breaks over time. A small change in dependencies, configuration, or environment setup can easily lead to failing pipelines, even if the application itself seems fine locally.&lt;/p&gt;

&lt;p&gt;That's why pipeline health is part of the final 1% of sealing a project. It ensures that your code is not only working on your machine, but is also reliably validated and deployable in an automated environment.&lt;/p&gt;

&lt;p&gt;A properly sealed project should have:&lt;/p&gt;

&lt;p&gt;✅ Green build status on all required branches&lt;br&gt;
✅ Passing unit and integration tests&lt;br&gt;
✅ Stable and repeatable workflows&lt;br&gt;
✅ No failing or outdated GitHub Actions (or equivalent pipelines)&lt;/p&gt;

&lt;p&gt;If your pipeline is broken, your release is not really safe, no matter how good the code looks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Versioned Builds &amp;amp; Artifacts
&lt;/h3&gt;

&lt;p&gt;Another critical part of properly finishing a project is ensuring that your builds and artifacts are versioned and reproducible.&lt;/p&gt;

&lt;p&gt;A release should not just exist in source code, it should exist as a concrete, identifiable output that can be built, stored, and retrieved at any time.&lt;/p&gt;

&lt;p&gt;Versioned builds ensure that every release corresponds exactly to a specific state of your codebase. Whether it's a compiled binary, a Docker image, a NuGet package, or any other artifact, it should always be traceable back to a specific tag or commit.&lt;/p&gt;

&lt;p&gt;Without this, deployments become unreliable. You may end up in situations where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You cannot reproduce an older version of the application&lt;/li&gt;
&lt;li&gt;Different environments produce different outputs&lt;/li&gt;
&lt;li&gt;Rolling back becomes difficult or impossible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A properly sealed project ensures that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every release is tied to a versioned artifact&lt;/li&gt;
&lt;li&gt;Artifacts are stored in a consistent registry or repository&lt;/li&gt;
&lt;li&gt;Builds are reproducible from source at any time&lt;/li&gt;
&lt;li&gt;Tags, versions, and artifacts are aligned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In mature systems, this is often automated through CI/CD pipelines, where every tag or release automatically produces a versioned build artifact.&lt;/p&gt;

&lt;p&gt;In short, if you cannot rebuild and retrieve a specific version of your project, then the release is not truly complete, it is only partially sealed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: Write an Article or Record a Demo Video
&lt;/h3&gt;

&lt;p&gt;This step is optional and rightfully so. Not everyone needs to go this far, because a well-written README and proper release notes usually cover the essentials.&lt;/p&gt;

&lt;p&gt;However, if you want to truly showcase your work in a more complete and impactful way, consider going beyond the repository itself.&lt;/p&gt;

&lt;p&gt;Writing an article about your project allows you to explain the motivation, design decisions, challenges, and solutions in a structured and human-readable format. It gives context that code alone often cannot communicate.&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.amazonaws.com%2Fuploads%2Farticles%2Fxfeks10m55wuaio6x0ex.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.amazonaws.com%2Fuploads%2Farticles%2Fxfeks10m55wuaio6x0ex.png" alt="Article" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Taking it a step further, recording a short demo video can be even more powerful. It lets people see your project in action, understand its behavior instantly, and get a feel for the user experience without needing to set anything up. This is often the fastest way to communicate value.&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.amazonaws.com%2Fuploads%2Farticles%2F9qbpjb5uxifckxzyd6vd.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.amazonaws.com%2Fuploads%2Farticles%2F9qbpjb5uxifckxzyd6vd.png" alt="Video" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This combination, an article or a demo, also helps you improve your communication and presentation skills, which are just as important as technical ability.&lt;/p&gt;

&lt;p&gt;Because no matter how good your application is, if it's not presented properly, it might never get the attention it deserves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the Full Checklist to Copy and Use
&lt;/h2&gt;

&lt;p&gt;✅ README&lt;br&gt;
✅ The "About" Section&lt;br&gt;
✅ Branch Hygiene&lt;br&gt;
✅ Release Tags&lt;br&gt;
✅ Branch and Tag Rulesets&lt;br&gt;
✅ New Release and Release Notes&lt;br&gt;
✅ Move All Tasks to Done&lt;br&gt;
✅ Choose a License for Your Project&lt;br&gt;
✅ CI/CD Status &amp;amp; Pipeline Health&lt;br&gt;
✅ Versioned Builds &amp;amp; Artifacts&lt;br&gt;
✅ Optional: Write an Article or Record a Demo Video&lt;/p&gt;

&lt;h2&gt;
  
  
  Finish as Strong as You Start
&lt;/h2&gt;

&lt;p&gt;Sometimes we're so desperate to finish a project that we rush through the final steps and end up missing important details. When that happens, keep in mind to slow down, take a deep breath, and remind ourselves that &lt;strong&gt;finishing well is just as important as starting well.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of a brand-new car missing a taillight or a side mirror - it still works, but it's not complete, and it's not safe, and it looks ugly. Unfinished or rushed projects feel the same: something important is missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you've already committed to doing something, take the extra time to do it properly. Be a strong finisher. Be someone who completes things with care and intention.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>development</category>
      <category>repository</category>
    </item>
    <item>
      <title>365 Days of Building in Public, Perfectly Reflected By My Badges</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Thu, 02 Apr 2026 21:24:26 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/365-days-of-building-in-public-perfectly-reflected-by-my-badges-2h5f</link>
      <guid>https://dev.to/georgekobaidze/365-days-of-building-in-public-perfectly-reflected-by-my-badges-2h5f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;365&lt;/li&gt;
&lt;li&gt;Your DEV Badges Are Trying to Tell Your Story. Listen to Them&lt;/li&gt;
&lt;li&gt;
One Year Club

&lt;ul&gt;
&lt;li&gt;"Hey Mom, Your Son Is a Software Engineer"&lt;/li&gt;
&lt;li&gt;And That's When I Discovered DEV Community&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Two &amp;amp; Three Year Club

&lt;ul&gt;
&lt;li&gt;Fast forward to 2020&lt;/li&gt;
&lt;li&gt;Boom: The Pandemic Hits. And It Hits Real Bad&lt;/li&gt;
&lt;li&gt;I Had to Carve Time Out of Thin Air&lt;/li&gt;
&lt;li&gt;If You're Expecting a Happy Ending, You Won't Find It Here&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Four, Five, Six &amp;amp; Seven Year Club

&lt;ul&gt;
&lt;li&gt;I Refuse to Catch a Break, Ever&lt;/li&gt;
&lt;li&gt;Then I Finally Started to Feel Comfortable... I Absolutely Hated It&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Writing Debut&lt;/li&gt;
&lt;li&gt;Community Wellness Streak&lt;/li&gt;
&lt;li&gt;
Top 7

&lt;ul&gt;
&lt;li&gt;I'm All In on AI, But We Need to Talk About Vibe Coding&lt;/li&gt;
&lt;li&gt;20 Rules for Becoming THAT Manager (From a Principal Engineer's Perspective)&lt;/li&gt;
&lt;li&gt;Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;li&gt;Eight Year Club&lt;/li&gt;
&lt;li&gt;GitHub Copilot CLI Challenge Winner&lt;/li&gt;
&lt;li&gt;DEV Weekend Challenge Completion&lt;/li&gt;
&lt;li&gt;Still Not Convinced?!&lt;/li&gt;
&lt;li&gt;Time to Play the Game&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I keep all my articles tucked away in a private repository on GitHub. It's not just storage, it's more like an archive of how I think, how I grow, and sometimes, how I struggle.&lt;/p&gt;

&lt;p&gt;Over time, it naturally shaped itself into a few categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analysis&lt;/li&gt;
&lt;li&gt;Career&lt;/li&gt;
&lt;li&gt;Technical&lt;/li&gt;
&lt;li&gt;Challenges&lt;/li&gt;
&lt;li&gt;Specials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could argue this belongs in the "Challenges" category. And you wouldn't be wrong. But I chose "Specials" instead. Because this isn't just another challenge. It's something different... something that stays with you.&lt;/p&gt;

&lt;p&gt;The moment &lt;a class="mentioned-user" href="https://dev.to/jess"&gt;@jess&lt;/a&gt; announced this challenge and I read the description, it actually made me smile, because right away I knew exactly what I would write. I have zero ideas for the Frontend Art challenge, my creativity sometimes isn't performing at its best. &lt;/p&gt;

&lt;p&gt;Since that frontend challenge is out of the question, well, here I am, offering the textual representation of the intense signals firing in my brain. This article won't be technical at all (which is by design), more like an easy-going, reflective piece to read while you're chilling in your favorite chair, in your room, garden, or porch, sipping your coffee, tea, or whatever your favorite beverage is.&lt;/p&gt;

&lt;p&gt;Right now, I don't have an internet connection and for the first time, I'm actually grateful. No notifications, no tabs, no distractions. Just the quiet hum of my thoughts, letting me focus on writing this.&lt;/p&gt;

&lt;p&gt;Strap in. We're about to take a little journey through my brain, neuron by neuron. And make sure you read it all the way to the end, because I'm about to play a game with you that might just change your entire life.&lt;/p&gt;




&lt;h2&gt;
  
  
  365
&lt;/h2&gt;

&lt;p&gt;The timing of this challenge couldn't have been better.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because it's March 2026 (at the moment of writing this article), which means I published my first article a year ago. And this anniversary fits perfectly with the spirit of the challenge.&lt;/p&gt;

&lt;p&gt;This past year has been spectacularly amazing. There's so much to reflect on that I don't even know where to start, and I definitely can't recall everything in one go. Of course, I won't try to fit it all into this article, that would turn it into a small book.&lt;/p&gt;

&lt;p&gt;But being brief isn't easy either. Anyone familiar with my writing knows I'm really terrible at keeping things short. I like providing as many details as possible, whether technical or non-technical. Definitely something I need to work on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your DEV Badges Are Trying to Tell Your Story. Listen to Them
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fpudv7nblq31plci53qdu.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.amazonaws.com%2Fuploads%2Farticles%2Fpudv7nblq31plci53qdu.png" alt="DEV Badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't want this to be a generic storytelling of my journey, I'll save that for when I write a proper, comprehensive lookback.&lt;/p&gt;

&lt;p&gt;Instead, I want to show how my badges on DEV Community can actually tell my story. And honestly, it's surprising how accurate they are, I can't believe I hadn't noticed it before.&lt;/p&gt;

&lt;p&gt;If you take a close look at them, they form a perfect timeline of what you've been doing on this amazing platform. They give you a ton of context about your values, your focus, and your performance.&lt;/p&gt;

&lt;p&gt;These aren't just random badges, icons hanging on your profile. They're trying to tell your story. They have purpose. They are your path. Your signature.&lt;/p&gt;

&lt;p&gt;Let me show you, using my example.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Year Club
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F8k0gka2it6zdk2etxknz.webp" 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.amazonaws.com%2Fuploads%2Farticles%2F8k0gka2it6zdk2etxknz.webp" alt="One Year Club Badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  "Hey Mom, Your Son Is a Software Engineer"
&lt;/h3&gt;

&lt;p&gt;I know I should reflect on the past year, but to see the full picture, I need to go much further back than that.&lt;/p&gt;

&lt;p&gt;I've known DEV since 2017, when I first started coding professionally as a junior developer. Good times... man, I was so happy. I even remember stepping out of my final interview and calling my mom right away. I was like, "Hey Mom, your son is officially a software engineer! How cool is that?!"&lt;/p&gt;

&lt;p&gt;That very moment didn't just define my career, it defined my life. I had never felt that proud of myself before.&lt;/p&gt;

&lt;p&gt;Back then, in my country, getting a job as a junior software engineer was almost impossible, everybody wanted seniors. And when you somehow did land a junior role, eager to learn as much as possible, they expected you to handle senior developer tasks as quickly as possible, with little to no guidance.&lt;/p&gt;

&lt;p&gt;Sure, reaching that level is the goal for every junior developer, but when it comes paired with immense pressure, things can get tricky, sometimes really tricky.&lt;/p&gt;

&lt;p&gt;I remember being trapped in a vicious cycle, wanting to excel at work while also trying to learn as many things as possible in every direction. I ended up stressing myself out even more than the work did, and there were times I even questioned if I was good enough. Impostor syndrome is one hell of a thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  And That's When I Discovered DEV Community
&lt;/h3&gt;

&lt;p&gt;A few months after I started working, I came across a really interesting article on DEV Community. I was at home, writing code, when it just popped up and it completely blew my mind. I wish I had saved it.&lt;/p&gt;

&lt;p&gt;Back then, I wasn't trying to get involved in any kind of community. I'd just occasionally stumble upon articles on the platform, and whenever a title caught my eye, I'd read it.&lt;/p&gt;

&lt;p&gt;One day in 2018, I decided to join DEV Community. I was already reading most of the articles there and wanted to give something back, even if it was just my presence, or a few comments here and there.&lt;/p&gt;

&lt;p&gt;Back then, I didn't think I was worthy of writing articles. I believed it was only for the most experienced, veteran, superstar developers, how wrong I was. I wish I had started writing from the moment I registered.&lt;/p&gt;

&lt;p&gt;So you, yeah, you, reading this, if you're hesitating about whether to start writing, just start. Do it NOW! You'll thank me in a few months. Mark my words.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two &amp;amp; Three Year Club
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fzkwi8hrdpv7bt3maepm3.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.amazonaws.com%2Fuploads%2Farticles%2Fzkwi8hrdpv7bt3maepm3.png" alt="Two And Three Year Badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fast forward to 2020
&lt;/h3&gt;

&lt;p&gt;Even though there are so many stories from that fast-forward period, I want to move quickly to the more recent years. I'll save the tales of all the things I faced back then for another time, there will be other opportunities to share them.&lt;/p&gt;

&lt;p&gt;I stayed pretty passive for a few years. Then, sometime in 2020, I started leaving comments on other people's articles, and that alone already made me feel like part of the community. It felt really good.&lt;/p&gt;

&lt;p&gt;I'm not trying to make excuses, but in my defense, that period was extremely tough. I had been selected to continue my PhD research at SDSU (San Diego State University). Everything was set — and then... &lt;/p&gt;

&lt;h3&gt;
  
  
  Boom: The Pandemic Hits. And It Hits Real Bad
&lt;/h3&gt;

&lt;p&gt;Everything shut down instantly. Flights were canceled, programs postponed, the whole world shifted to remote, including universities. So my plans of continuing my PhD just went out the window.&lt;/p&gt;

&lt;p&gt;That was something I had wanted since I was a teenager. And just like that, for reasons completely out of my control, that perfect opportunity was gone overnight.&lt;/p&gt;

&lt;p&gt;I'm not the type of person who gives up easily, so when they offered continuing it remotely from my country, I said, "hell yeah, I'm in! Count me in!"&lt;/p&gt;

&lt;p&gt;But there was a small catch: I was working full-time during the day, and then getting into my research in the evening, when it was still morning for my co-researchers in California.&lt;/p&gt;

&lt;p&gt;So my schedule basically looked like 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.amazonaws.com%2Fuploads%2Farticles%2Fvy0gf0um8c5gu9cis91o.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.amazonaws.com%2Fuploads%2Farticles%2Fvy0gf0um8c5gu9cis91o.png" alt="Schedule"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I basically only had a few hours to work on my research - late at night, when my brain was completely exhausted and there was barely any energy left for creativity. Sometimes I'd stay up until 3 AM or even later, barely getting any sleep.&lt;/p&gt;

&lt;p&gt;The next day, I'd be so drained that I'd fall asleep right after the meeting, I just couldn't keep my head up anymore. That kind of inconsistency destroys your productivity, and I was feeling miserable.&lt;/p&gt;

&lt;p&gt;But no matter how I felt, I just don't give up. I'm not trying to sound cool, it's just who I am. I don't trust my own brain or body when they tell me I'm tired or exhausted or I can't do it anymore. I convince myself they're just being lazy, that I can push even further.&lt;/p&gt;

&lt;p&gt;Even if I dropped unconscious in the street after a few sleepless nights, I'd still try to work on my PhD. That's just how I'm wired.&lt;/p&gt;

&lt;p&gt;Is it a good trait?&lt;br&gt;
That's debatable. Probably not.&lt;/p&gt;
&lt;h3&gt;
  
  
  I Had to Carve Time Out of Thin Air
&lt;/h3&gt;

&lt;p&gt;I was trying everything to find extra time. I didn't even have a car back then, and I was losing way too much time commuting. So I decided to spend most of my savings to get one (which I still have, by the way, I'm way too loyal).&lt;/p&gt;

&lt;p&gt;But that wasn't all. I also changed jobs and joined a company that would let me work from home. That alone saved me around 2–3 hours a day, and at that time, it felt like the best decision ever.&lt;/p&gt;

&lt;p&gt;I started there as a senior software engineer, which is even tougher than starting out as a junior, because the expectations are there from day one. Literally. You're expected to do senior-level work, and you're expected to do it well.&lt;/p&gt;
&lt;h3&gt;
  
  
  If You're Expecting a Happy Ending, You Won't Find It Here
&lt;/h3&gt;

&lt;p&gt;That stretch lasted for about two years. Eventually, I was finally able to move to the right time zone and continue working on my PhD properly.&lt;/p&gt;

&lt;p&gt;But &lt;/p&gt;

&lt;p&gt;The timing, and the circumstances &lt;strong&gt;couldn't have been worse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The university was still partially closed. COVID was still very much a thing. We didn't meet often as a research team.&lt;/p&gt;

&lt;p&gt;Because of my schedule over those two years, my co-researchers were already far ahead. Some of them were even thinking about moving on to other programs. The group was slowly coming to an end.&lt;/p&gt;

&lt;p&gt;And on top of everything, it was decided that I had only a few months to finish my research. Not more.&lt;/p&gt;

&lt;p&gt;If you've ever worked on a PhD, you know that finishing your first research in such a short time is nearly impossible. Yes, I had those two years before that...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But did I really?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This whole pandemic situation really messed up my PhD plans. I still managed to get some work done, but I wasn't happy with my progress.&lt;/p&gt;

&lt;p&gt;That entire experience completely broke me. I just can't handle losing or not succeeding, I have to win. Doesn't matter if it's my PhD or playing with my cat. Sorry, Ruby.&lt;/p&gt;

&lt;p&gt;I'm honestly jealous of people who can lose and just say, "yeah, whatever." I wish I could do that. And I do understand that failure is necessary for growth, sometimes even more than success.&lt;/p&gt;

&lt;p&gt;But still... it leaves scar tissues.&lt;/p&gt;


&lt;h2&gt;
  
  
  Four, Five, Six &amp;amp; Seven Year Club
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Ffdgzdxoirfc9wbpaba4w.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.amazonaws.com%2Fuploads%2Farticles%2Ffdgzdxoirfc9wbpaba4w.png" alt="4 Badges"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  I Refuse to Catch a Break, Ever
&lt;/h3&gt;

&lt;p&gt;So I became a principal engineer, which was multiple levels harder than what I'd been doing as a senior software engineer.&lt;/p&gt;

&lt;p&gt;Granted, I no longer had to work on my PhD, since the program had ended. But transition periods are never easy, they demand your full focus - I had to level up both my technical and management skills to become a solid principal engineer. Because even if you're a technical genius, if you can't manage people, your products, your services, and your communication properly, you simply can't be a strong principal engineer. You really need to be good at... pretty much everything. You're the bridge between multiple different teams and people: technical, product, leadership, and more.&lt;/p&gt;

&lt;p&gt;So it's not just about being good at each of those areas, but also figuring out how to manage communication between all those levels and roles.&lt;/p&gt;

&lt;p&gt;Yeah... it's a little tricky, to say the least.&lt;/p&gt;

&lt;p&gt;I once published an article: &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3"&gt;20 Rules for Becoming THAT Manager (From a Principal Engineer’s Perspective)&lt;/a&gt;. A reader left a comment that really stuck with me: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"After more than 35 years of engineering management, the only comment I need to make is: You have arrived early my friend. You expressed most of what needs to be said, and extremely more eloquently than I could ever wish to do. Brilliant! I just wish everybody, regardless of the profession would read this slowly and thoughtfully. It would make the world a better place. Thanks for taking the time. I can't say that I enjoyed reading anything on the subject more - ever." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That comment absolutely made my day, especially coming from such an experienced veteran. But the truth is, I had to be an early bird. My career accelerated incredibly fast, or rather, I forced it to, because I desperately needed to get my life on track and fast, because there's no time to waste. Out of curiosity, I asked ChatGPT about the average ages for different levels of software engineers, and here is what it told me:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Typical path:

Junior → Mid: early–mid 20s
Senior: late 20s–early 30s
Staff: early–mid 30s
Principal: late 30s → mid 40s (most common)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I had just turned 27 when I became a principal engineer. Now, at 30, I feel like it had to happen that quickly, because you are never truly ready for anything until you actually try it. My philosophy has always been this: don't worry if a challenge sounds hard. As long as it sounds even a tiny bit reasonable, jump in and figure things out as you go. Otherwise, you will spend your entire life just getting ready. That mindset has always worked for me. Almost every challenge I've tackled has turned out to be much easier than I expected. I'm sure it would have worked with my PhD, too, if it weren't for COVID and all the chaos it brought to the world.&lt;/p&gt;
&lt;h3&gt;
  
  
  Then I Finally Started to Feel Comfortable... I Absolutely Hated It
&lt;/h3&gt;

&lt;p&gt;This madness continued until about 2024. Once I noticed I was starting to feel comfortable in my new position, with more free time and mental capacity after work, the thought of writing articles snuck back into my mind. I had a few ideas, but I lacked the courage to start. That lingering trauma of not achieving my PhD was still echoing in my brain (and to be honest, it still does, but it's much more manageable now). &lt;/p&gt;

&lt;p&gt;For some reason, I need to be in constant motion to feel alive. I have to direct my thoughts toward something productive, it doesn't matter whether that means tackling a new project, drafting an article, washing my car, organizing my workspace, or getting a workout in.&lt;/p&gt;

&lt;p&gt;I spent a lot of time sketching out drafts only to abandon them, convinced they weren't good enough. I threw away five or six different articles. Even though I already had a huge experience, I still couldn't shake the feeling that public writing just wasn't for me...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Until March 8th, 2025.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Writing Debut
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fv5yamchn8ezxjlckjkrn.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fv5yamchn8ezxjlckjkrn.webp" alt="Writing Debut Badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It hit me while I was having my morning coffee, which is a brief period of the day when I can step back and reflect. I was overthinking the idea of blogging when I suddenly remembered my own "doer" mindset. A wave of frustration washed over me as I realized I was betraying my own rules. What kind of leader am I if I abandon my own principles?! I actually said out loud, &lt;strong&gt;"What the hell is wrong with you, man? Is that all you got?!"&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;That verbal reality check was all I needed. I gave myself a few days to commit to a topic and force it onto the page. That was how &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3"&gt;Understanding Your Audience as a Software Engineer&lt;/a&gt; came to life. While the article itself isn't a masterpiece, it remains special to me. It marks the precise starting point of my writing addiction.&lt;/p&gt;

&lt;p&gt;I had no idea how the community would react to my first article, but I was genuinely surprised by how well it was received. And you know how it goes: when you realize you're actually decent at something and it's also a lot of fun, you can't stop. You just want to do it over and over again. That's exactly what happened to me. I just carried on.&lt;/p&gt;


&lt;h2&gt;
  
  
  Community Wellness Streak
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fjbqzy89574ndfr6houm2.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.amazonaws.com%2Fuploads%2Farticles%2Fjbqzy89574ndfr6houm2.png" alt="Community Wellness Streak Badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Writing is great, but if you really want to contribute to your community at the highest level, you have to read other people's work and engage in the comments. Over time, I've developed a few rules I always follow whenever I leave a comment:&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Always write a high-quality comment
&lt;/h4&gt;

&lt;p&gt;Be professional. This is your image as a community member and creator. Nobody likes to see an unprofessional or even slightly offensive comment on their posts. You won't make any friends by being arrogant.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Be a decent human being
&lt;/h4&gt;

&lt;p&gt;Express appreciation for other people's work. They took the time to deliver a product to you, whether it's an article, a project, or anything else. Show them that you appreciate that effort.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Include as many details as possible
&lt;/h4&gt;

&lt;p&gt;Be comprehensive about your ideas. A comment doesn't have to be just a few words. I've seen comments that are better than many articles. Write thought-provoking, interesting ideas and show your thinking process.&lt;/p&gt;
&lt;h4&gt;
  
  
  4. If you disagree, explain your point of view clearly
&lt;/h4&gt;

&lt;p&gt;Never offend or ridicule an author, even if you think a blog post is total nonsense. An offensive or mocking comment says a lot more about the commenter than it does about the author.&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Don't be a hater. It will just eat you from the inside
&lt;/h4&gt;

&lt;p&gt;If someone else's post gathers way more engagement than yours, even if yours is 10 times longer and 20 times more complex, don't feel like you were treated unfairly. I usually write large, technical posts (some might even be a 20-minute read), and it's entirely natural that they won't get as many likes because not everyone is interested in that level of detail. I've seen two-paragraph posts reach incredible engagement because they are highly relatable and draw people in easily. Writing those kinds of articles is a real talent, and it's not easy at all. I myself am not great at it. Check out this very article, it's a monster, and it might not even get 10 likes. But that's okay with me because I write to share my knowledge and experience, not to chase and collect likes.&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Never rush to press the "submit" button
&lt;/h4&gt;

&lt;p&gt;Read your comment again to make sure none of the previous five rules are broken.&lt;/p&gt;

&lt;p&gt;Sometimes, I get so absorbed in writing my own articles that I completely forget to check out what other people are publishing and leave comments. To fix this, I use any spare minutes I have to read at least one article a day. Whether you are writing or engaging with others, consistency is always the key. That's how I managed to reach the "8 Week Community Wellness Streak" badge, and I'm going for the "16 week" one next.&lt;/p&gt;


&lt;h2&gt;
  
  
  Top 7
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fuanrm6tyny7nloj0t41e.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fuanrm6tyny7nloj0t41e.webp" alt="Top 7 Badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's talk about the articles that were especially successful, the ones that made it onto the weekly top 7 list. I never imagined I would hit that milestone even once, let alone three times.&lt;/p&gt;
&lt;h3&gt;
  
  
  I'm All In on AI, But We Need to Talk About Vibe Coding
&lt;/h3&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-story__hidden-navigation-link"&gt;I'm All In on AI, But We Need to Talk About Vibe Coding&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2619292" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 24 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" id="article-link-2619292"&gt;
          I'm All In on AI, But We Need to Talk About Vibe Coding
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/machinelearning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;machinelearning&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/coding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;coding&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;135&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              66&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            16 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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


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


&lt;p&gt;This particular article took off faster than I could have imagined. It went so viral that I actually came across it in the Google feed on my phone.&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.amazonaws.com%2Fuploads%2Farticles%2F6wm0m6dujxe4rzour872.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6wm0m6dujxe4rzour872.jpg" alt="Google Feed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me tell you, sitting there looking at my own article on my homepage... that was a genuinely proud moment.&lt;/p&gt;

&lt;p&gt;I had been thinking about that idea for ages before I finally brought it to life and published it. I literally spent a solid &lt;strong&gt;three months&lt;/strong&gt; just thinking and planning. &lt;strong&gt;It even led to a podcast invitation&lt;/strong&gt;, after which I wrote a &lt;a href="https://dev.to/georgekobaidze/behind-the-mic-ai-and-the-vibe-coding-podcast-retrospective-3hfe"&gt;reflective article&lt;/a&gt; where I mentioned something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;...this was the result of nearly three months of thinking, writing, grinding, editing, and second-guessing. I kind of knew what Axl Rose must've felt like when releasing "November Rain" after working on it for nearly a decade. (Okay, I'm joking, I'm nowhere near Axl's level in any way. It's just a bad analogy. But as a rock fan, I had to make it.)...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That article definitely felt like I had created something special, and that was the moment I got totally addicted to writing, forever. As I mentioned, it even landed me a guest spot on a podcast, which was an incredibly cool experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  20 Rules for Becoming THAT Manager (From a Principal Engineer's Perspective)
&lt;/h3&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3" class="crayons-story__hidden-navigation-link"&gt;20 Rules for Becoming THAT Manager (From a Principal Engineer’s Perspective)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2705969" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 19 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3" id="article-link-2705969"&gt;
          20 Rules for Becoming THAT Manager (From a Principal Engineer’s Perspective)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/management"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;management&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softskills"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softskills&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/leadership"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;leadership&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;19&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/20-rules-for-becoming-that-manager-from-a-principal-engineers-perspective-58n3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              15&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;About a month later, I wrote "20 Rules for Becoming THAT Manager (From a Principal Engineer's Perspective)". &lt;/p&gt;

&lt;p&gt;It's funny because, unlike the vibe coding article, I wrote this one completely spontaneously. I was sitting in my car in a parking lot with time to kill, realized my laptop was in the backseat, and just started typing. That actually worked out perfectly because it allowed me to write purely from my raw experience as both an engineer and a development lead. &lt;/p&gt;

&lt;p&gt;That article was special. I wanted to create a set of notes for myself and for others on what it takes to be a good manager. I've seen all kinds of leaders in my career: the good, the great, the bad, and the absolute worst as well. Through it all, I gathered enough data to know exactly the kind of leader I want to be.&lt;/p&gt;

&lt;p&gt;Being a leader is vastly harder than most people think. Some take it for granted, while others overthink it entirely. The whole magic is in finding the fine balance between the two.&lt;/p&gt;

&lt;p&gt;By the way, I'm currently working on another article focused on leadership, and it's shaping up to be a good one. Stay tuned.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?
&lt;/h3&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-story__hidden-navigation-link"&gt;Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3327718" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" id="article-link-3327718"&gt;
          Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/compilers"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;compilers&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;35&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              14&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            11 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;A few weeks ago, I wrote about the concept of AI generating binary code directly, a topic that, for whatever reason, suddenly became the internet's favorite subject to debate. &lt;/p&gt;

&lt;p&gt;I noticed that most of the takes out there weren't very precise and were missing a few key points, so I decided to jump in and give my two cents. To my surprise, that piece also made it into the weekly top 7. Hitting that milestone three times in just under a year is a result I'm incredibly proud of.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;C#&lt;/code&gt;
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fawh1nz5ntnix4obst28m.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fawh1nz5ntnix4obst28m.webp" alt="C# Badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll admit, sometimes my articles can get intensely technical. Sometimes, they only resonate with specialists in that exact niche. But I love writing them. I'm a software engineer and I always have to scratch that itch to dive deep into the code, especially with .NET and C#.&lt;/p&gt;

&lt;p&gt;I've built things across a bunch of languages like JavaScript, Python, Java, TypeScript, even C and C++, but C# is still my baby.&lt;/p&gt;

&lt;p&gt;Getting that badge for the most popular C# article was an incredible feeling. Now? The goal is to collect a few more language badges to sit right next to it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Eight Year Club
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fcv2elrkovp089ys07bhc.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fcv2elrkovp089ys07bhc.webp" alt="Eight Year Club"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And amidst all of this, I just completed my 8th year on dev.to.&lt;/p&gt;

&lt;p&gt;Sometimes a career in software can feel a bit dull and repetitive, but when you actually stop to reflect on the road so far, you realize how much you've been through. Honestly, you kind of question how on earth you remained sane.&lt;/p&gt;

&lt;p&gt;Especially for a guy like me who doesn't look back too often, it's almost shocking how much you can learn just by checking your rearview mirror. But one thing is for sure: I ain't going anywhere anytime soon. I'm going to be right here with this community until the day I retire, and I never plan on retiring.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Copilot CLI Challenge Winner
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F9xdal640sl89376lp6wu.webp" 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.amazonaws.com%2Fuploads%2Farticles%2F9xdal640sl89376lp6wu.webp" alt="GitHub Copilot CLI Challenge Winner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This right here is my biggest achievement on the platform, and easily one of the proudest moments of my entire career. &lt;/p&gt;

&lt;p&gt;I never actually thought I'd win my first real dev competition. Sure, I did some algorithmic challenges back in the day when I was still a junior developer, but those aren't real hackathons, they're mostly for the younger crowd, not a 30-year-old millennial.&lt;/p&gt;

&lt;p&gt;Taking first place in my debut, especially in a massive challenge with over 400 people, was surreal. But the absolute best part? I won it by building &lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;Metal Birds Watch&lt;/a&gt;. It was an idea I had been keeping in my head for years, and this hackathon gave me the perfect excuse to finally bring it to life. I still catch myself smiling whenever I think about seeing my name sitting there at number one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Making of Metal Birds Watch:&lt;/em&gt;&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F3mktmind6fii9l5q1jnr.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.amazonaws.com%2Fuploads%2Farticles%2F3mktmind6fii9l5q1jnr.png" alt="Metal Birds Watch Creation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you'd like to know the story behind this idea and project, check out the following article:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-story__hidden-navigation-link"&gt;Metal Birds Watch: Copilot CLI Helped Me Watch Planes Without Looking Up&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub Copilot CLI Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3242019" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 13&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" id="article-link-3242019"&gt;
          Metal Birds Watch: Copilot CLI Helped Me Watch Planes Without Looking Up
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubcopilot"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubcopilot&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;55&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              17&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            11 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;





&lt;h2&gt;
  
  
  DEV Weekend Challenge Completion
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fwnah9uy4rhmikzjg6293.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fwnah9uy4rhmikzjg6293.webp" alt="DEV Weekend Challenge Completion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I took on this challenge because I love spontaneous, short-term challenges. They allow me to test my speed and give me the intense drive to build something from start to finish in record time. &lt;/p&gt;

&lt;p&gt;I wanted to create a project that would make people smile and feel a deep sense of pride in what they've created. The goal was to take their articles and turn them into something interactive, motivate the self-doubters to finally hit 'publish,' and even draw new people into the community. I was aiming for something totally unique... something actually fun.&lt;/p&gt;

&lt;p&gt;That's how &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive" rel="noopener noreferrer"&gt;Sunday DEV Drive&lt;/a&gt; was born - a browser game.&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.amazonaws.com%2Fuploads%2Farticles%2Fdofv79dm8xodd4xfaboe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdofv79dm8xodd4xfaboe.jpg" alt="Game Creation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might be thinking: a browser game built by a backend engineer? But it turned out much better than I ever expected.&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.amazonaws.com%2Fuploads%2Farticles%2Fj13p4ucjf3puy4ods5wa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj13p4ucjf3puy4ods5wa.jpg" alt="Game Poster"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032" class="crayons-story__hidden-navigation-link"&gt;Sunday DEV Drive: A Synthwave Driving Experience Through Your DEV Community Articles&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;DEV Weekend Challenge: Community&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3299096" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032" id="article-link-3299096"&gt;
          Sunday DEV Drive: A Synthwave Driving Experience Through Your DEV Community Articles
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;65&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              23&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;Well, I didn't win this challenge because you can't win every competition, however you can learn from each one. That said, the feedback I received was so incredibly amazing that it felt like winning a championship all on its own. Plus, the badge is absolutely gorgeous.&lt;/p&gt;




&lt;h2&gt;
  
  
  Still Not Convinced?!
&lt;/h2&gt;

&lt;p&gt;All of the things starting from writing my first article, happened within the span of a single year. If I can do all of this, so can you and you can achieve much more if you push harder than I did. &lt;/p&gt;

&lt;p&gt;It's not about becoming famous, earning more money, or chasing status. It's about proving to yourself that you are capable of doing it all, and actually having fun in the process. &lt;/p&gt;

&lt;p&gt;Whenever people doubt their skills or career choices, I always tell them the same thing: &lt;strong&gt;"If you lack confidence, build evidence."&lt;/strong&gt; Once you start taking action: coding, writing, recording, that output becomes all the evidence you need. Just try it and see yourself how your life changes.&lt;/p&gt;

&lt;p&gt;But I have a feeling you might still need a little more convincing. So, let's play a little game.&lt;/p&gt;




&lt;h2&gt;
  
  
  Time to Play the Game
&lt;/h2&gt;

&lt;p&gt;Don't worry, I'm not Triple H, so I'm not going to jump out and hit you with a sledgehammer. But depending on how you play, the result of this game might feel like it.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Game
&lt;/h4&gt;

&lt;p&gt;Imagine it is the year [current year + 10]. &lt;br&gt;
Take a moment to really immerse yourself in that future. &lt;br&gt;
You still haven't started building your personal projects or writing technical articles. You realize how much time you've lost and how much you could have accomplished in that decade. &lt;/p&gt;

&lt;p&gt;You are frustrated and annoyed at yourself for never taking that first step. You feel like you failed... you spent your prime years idle, and now nobody will ever know what could have been if you had just tried. You would give ANYTHING to start over, knowing exactly how much better you would do. But you can't go back in time. Sad, isn't it?&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Now, end your immersion. You are back in the present. You have just been gifted those 10 years back. Congratulations! You are the first person in the universe to be handed a decade of extra time to start over. &lt;/p&gt;

&lt;p&gt;So... are you really going to waste that chance again? &lt;/p&gt;

&lt;p&gt;Start NOW! Your journey begins right NOW!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>NoteRunway: Because Your Notion Workspace Deserves an Elite Crew</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 29 Mar 2026 20:54:06 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk</link>
      <guid>https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
What I Built

&lt;ul&gt;
&lt;li&gt;Explanatory Video&lt;/li&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;The Backstory&lt;/li&gt;
&lt;li&gt;The 7 Tools&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Show us the code&lt;/li&gt;

&lt;li&gt;

How I Used Notion MCP

&lt;ul&gt;
&lt;li&gt;The Architecture&lt;/li&gt;
&lt;li&gt;Why MCP and Not Just the API?&lt;/li&gt;
&lt;li&gt;Destructive Tool Safety&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

The Tech Behind It

&lt;ul&gt;
&lt;li&gt;Multi-Provider AI (BYOK)&lt;/li&gt;
&lt;li&gt;The Archive System&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Wrapping Up&lt;/li&gt;

&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Explanatory Video
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/qtaKv66-8AY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NoteRunway&lt;/strong&gt;: an AI-powered workspace management tool that helps Notion power users clean up, audit, and command their workspace through a single interface.&lt;/p&gt;

&lt;p&gt;Think of it as a flight control tower for your Notion workspace. It scans for problems you didn't know you had, visualizes connections you couldn't see, and lets you talk to your workspace in plain English.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://noterunway.pilotronica.com/" rel="noopener noreferrer"&gt;Live Demo → noterunway.pilotronica.com&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fjhvpyj75zoebrfzinfya.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.amazonaws.com%2Fuploads%2Farticles%2Fjhvpyj75zoebrfzinfya.png" alt="Main Page" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Backstory
&lt;/h3&gt;

&lt;p&gt;I'm a Notion addict. Not the &lt;em&gt;"I use it for grocery lists"&lt;/em&gt; kind, rather the &lt;em&gt;"I have 400+ pages, nested databases inside databases, and a set of half-written ideas from 2 AM"&lt;/em&gt; kind.&lt;/p&gt;

&lt;p&gt;It all started in 2020, when I decided it was time to bring more order into my life. My notes were scattered everywhere, there was some structure, but not nearly enough. I needed something more powerful... something more organized.&lt;/p&gt;

&lt;p&gt;Then I discovered Notion and instantly knew it was exactly what I'd been looking for all along and didn't know existed.&lt;/p&gt;

&lt;p&gt;You know how it goes, at first, you're fully motivated. Everything's clean, structured, flawless. You're convinced this time you'll manage your notes perfectly.&lt;/p&gt;

&lt;p&gt;But sooner or later, every power user ends up in the same place: orphaned pages from long-forgotten projects, duplicate notes written three times because the first two vanished into the void, and dead links leading to pages you archived months ago.&lt;/p&gt;

&lt;p&gt;And somewhere in that chaos, there's probably a note with an API key you definitely didn't mean to paste and leave it forever. Have you ever pasted an API key or secret thinking "I'm gonna move it somewhere more secure later"? And that "later" doesn't really come, does it?&lt;/p&gt;

&lt;p&gt;I needed a tool that could see the bigger picture, something that could scan everything, something that'd surface what's broken, and help me fix it without blindly deleting content or forcing me to manually comb through bajillion pages.&lt;/p&gt;

&lt;p&gt;When the Notion MCP Challenge dropped, it clicked right away. I could build that tool, and give something back to the Notion community while I'm at it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 7 Tools
&lt;/h3&gt;

&lt;p&gt;NoteRunway packs 7 workspace management tools, split between pure scanners and AI-powered analyzers.&lt;/p&gt;

&lt;p&gt;Think of it as a crew of seven tools at your disposal, everything you need to keep your Notion workspace in top shape. Each one has a specific role: some scan your workspace to surface hidden issues, others go deeper to analyze patterns and give you smarter insights.&lt;/p&gt;

&lt;p&gt;Together, they cut through the clutter, highlight what actually needs attention, and help you clean things up without the risk of losing something important. No guesswork, no endless manual checks, just a clear view of your workspace and the tools to keep it running smoothly.&lt;/p&gt;

&lt;h4&gt;
  
  
  📊 Workspace Health Dashboard
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2F3we2wpydgjqhpob5slo1.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.amazonaws.com%2Fuploads%2Farticles%2F3we2wpydgjqhpob5slo1.png" alt="Dashboard" width="800" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your workspace at a glance. Total pages, top-level pages, recently edited, empty pages, and link density (how well-connected your workspace actually is).&lt;/p&gt;

&lt;p&gt;It's the "oh wow, I have &lt;em&gt;how many&lt;/em&gt; empty pages?" moment.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔍 Duplicate Detection
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Ft5krg2jx52ji0y6tda54.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.amazonaws.com%2Fuploads%2Farticles%2Ft5krg2jx52ji0y6tda54.png" alt="Duplicate Detection" width="800" height="910"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where the AI earns its keep. NoteRunway fetches up to 100 pages with their content snippets, sends them to the LLM with a specialized system prompt, and gets back &lt;strong&gt;semantic duplicate groups&lt;/strong&gt; with similarity scores.&lt;/p&gt;

&lt;p&gt;Not just "same title" duplicates, it catches pages with different names but overlapping content. The AI picks a recommended "keep" version (⭐), and you choose which ones to archive.&lt;/p&gt;

&lt;h4&gt;
  
  
  🗑️ Garbage Collector
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Fmx1ugdhm2iwc64kpxxgv.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.amazonaws.com%2Fuploads%2Farticles%2Fmx1ugdhm2iwc64kpxxgv.png" alt="Garbage Collector" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rule-based detection across three categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orphaned&lt;/strong&gt; — parent page was deleted, child is floating in limbo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty&lt;/strong&gt; — zero content blocks (you created it and... forgot)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale&lt;/strong&gt; — untouched for 90+ days (configurable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dry-run mode is on by default. You review everything before anything moves.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔗 Dead Link Detector
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Fk5hcxen8i5p6ea63hrtp.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.amazonaws.com%2Fuploads%2Farticles%2Fk5hcxen8i5p6ea63hrtp.png" alt="Dead Link Detector" width="799" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finds @mentions pointing to pages that no longer exist. Every broken mention is tracked back to its source page, so you know exactly where to fix it.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔐 Sensitive Data Finder
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Fqaq4phbecizlf0q05w50.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.amazonaws.com%2Fuploads%2Farticles%2Fqaq4phbecizlf0q05w50.png" alt="Sensitive Data Finder" width="800" height="868"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two-phase security scanner:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 (Regex):&lt;/strong&gt; Scans all pages against 13 patterns: API keys (OpenAI, Anthropic, Stripe, AWS, GitHub), PEM keys, JWTs, database URLs, passwords, credit cards. Findings are always &lt;strong&gt;partially redacted&lt;/strong&gt;, never exposing full values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 (AI Deep Scan):&lt;/strong&gt; Optionally sends page text to the LLM to catch natural-language secrets that regex misses. Things like &lt;em&gt;"the password is hunter2"&lt;/em&gt; or &lt;em&gt;"login: admin/secret123"&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  🕸️ Dependency Graph
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Fytw78didci1k27nudswl.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.amazonaws.com%2Fuploads%2Farticles%2Fytw78didci1k27nudswl.png" alt="Dependency Graph" width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An interactive force-directed graph of your entire workspace. Pages are nodes (colored by depth), connections are edges (solid for parent-child, dashed for @mentions). Orphaned pages glow red.&lt;/p&gt;

&lt;p&gt;You can hover, click, collapse branches, and zoom around. It's surprisingly therapeutic to see your workspace as a living network.&lt;/p&gt;

&lt;h4&gt;
  
  
  💬 Semantic Ask (Agentic Chat)
&lt;/h4&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.amazonaws.com%2Fuploads%2Farticles%2Flygi7dt2on8c65a7zf71.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.amazonaws.com%2Fuploads%2Farticles%2Flygi7dt2on8c65a7zf71.png" alt="Semantic Ask" width="800" height="855"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A natural language interface to your workspace, powered by an agentic AI loop.&lt;/p&gt;

&lt;p&gt;Type something like &lt;em&gt;"Find all pages about authentication and summarize them"&lt;/em&gt; or &lt;em&gt;"Archive everything in the old-project folder."&lt;/em&gt; The AI breaks it into tool calls (search, read, analyze), feeds results back into its context, and proposes structured actions for your approval.&lt;/p&gt;

&lt;p&gt;It supports 5 action types: &lt;strong&gt;archive&lt;/strong&gt;, &lt;strong&gt;create&lt;/strong&gt;, &lt;strong&gt;rename&lt;/strong&gt;, &lt;strong&gt;append&lt;/strong&gt;, and &lt;strong&gt;update&lt;/strong&gt;, all with a human-in-the-loop confirmation step. No action executes without your explicit "yes."&lt;/p&gt;

&lt;p&gt;Just a heads-up: be cautious with destructive actions. Avoid updating or archiving critical data.&lt;/p&gt;

&lt;p&gt;This project is still in beta, and I don't want you to risk losing important information. As you know, AI isn't deterministic, and unexpected outcomes can happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show us the code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Here's the repository:&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/georgekobaidze" rel="noopener noreferrer"&gt;
        georgekobaidze
      &lt;/a&gt; / &lt;a href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;
        noterunway
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      AI-Powered Notion Workspace Management Clean, organize, and command your Notion workspace with AI. Powered by the Notion MCP.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;NoteRunway&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;AI-Powered Notion Workspace Management&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Clean, organize, and command your Notion workspace with AI. Powered by the Notion MCP.&lt;/p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/noterunway/./public/images/poster.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fnoterunway%2FHEAD%2F.%2Fpublic%2Fimages%2Fposter.png" alt="NoteRunway"&gt;&lt;/a&gt;
&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://noterunway.pilotronica.com/" rel="nofollow noopener noreferrer"&gt;Live Demo → noterunway.pilotronica.com&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
📝 &lt;strong&gt;&lt;a href="https://dev.to/georgekobaidze/noterunway-because-your-notion-workspace-deserves-an-elite-crew-53bk" rel="nofollow"&gt;DEV.to Article → Read the write-up&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
▶️ &lt;strong&gt;&lt;a href="https://youtu.be/qtaKv66-8AY?si=pENs8eMzsa6ClZTL" rel="nofollow noopener noreferrer"&gt;YouTube → Watch the demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b283804a59db8759c5fd73dbdbfc9d4727842d46c29cf3870913538f602939d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31362d626c61636b3f6c6f676f3d6e6578742e6a73" alt="Next.js"&gt;&lt;/a&gt;
&lt;a href="https://typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/97fc638db3dd58f0590d3cc254cd7a8a65369aad17049aba215575dd3ec55dcb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d626c75653f6c6f676f3d74797065736372697074" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/94f426fcc79b2189030a2654451467767035d98e0a49f86a97d85899cde1c37f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e642d342d3338626466383f6c6f676f3d7461696c77696e64637373" alt="Tailwind CSS"&gt;&lt;/a&gt;
&lt;a href="https://github.com/notionhq/notion-mcp-server" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/48474cb9502d49ea599f8c751dcf6b374947a5037896e7f878fc55594430a649/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f74696f6e5f4d43502d322e322d3030303f6c6f676f3d6e6f74696f6e" alt="Notion MCP"&gt;&lt;/a&gt;
&lt;a href="https://sdk.vercel.ai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd83920e87915f248793d3164ca02e44d36683834ae469eadbc36a0382a7e3ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56657263656c5f41495f53444b2d362d3030303f6c6f676f3d76657263656c" alt="Vercel AI SDK"&gt;&lt;/a&gt;
&lt;a href="https://github.com/georgekobaidze/noterunway#license" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e" alt="License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-overview" rel="noopener noreferrer"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-tech-stack" rel="noopener noreferrer"&gt;Tech Stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-project-structure" rel="noopener noreferrer"&gt;Project Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-ai-provider-support" rel="noopener noreferrer"&gt;AI Provider Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-mcp-integration" rel="noopener noreferrer"&gt;MCP Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-archive-system" rel="noopener noreferrer"&gt;Archive System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-security" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-scripts" rel="noopener noreferrer"&gt;Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-author" rel="noopener noreferrer"&gt;Author&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-acknowledgements" rel="noopener noreferrer"&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georgekobaidze/noterunway#-license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;NoteRunway&lt;/strong&gt; is a browser-based tool that helps Notion power users clean up, audit, and manage their workspace using a combination of deterministic scans and AI-powered intelligence via the &lt;a href="https://github.com/notionhq/notion-mcp-server" rel="noopener noreferrer"&gt;Notion MCP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It connects to your Notion workspace through OAuth, runs server-side analysis via Next.js API routes, and provides a cyberpunk-themed UI for reviewing findings and approving actions.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Core Principles&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Principle&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zero Lock-in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your data stays in Notion. NoteRunway never stores workspace content.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human-in-the-Loop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No destructive action runs without explicit user approval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy First&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI keys stored only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/georgekobaidze/noterunway" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Used Notion MCP
&lt;/h2&gt;

&lt;p&gt;This is the core of the whole project. NoteRunway uses the &lt;a href="https://github.com/notionhq/notion-mcp-server" rel="noopener noreferrer"&gt;Notion MCP Server&lt;/a&gt; as the execution layer for all workspace interactions in the Semantic Ask feature.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser → Next.js API (SSE) → Vercel AI SDK → MCP Client → notion-mcp-server (stdio) → Notion API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User sends a message&lt;/strong&gt; in the Ask interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel AI SDK&lt;/strong&gt; processes it with &lt;code&gt;streamText()&lt;/code&gt; and the selected LLM&lt;/li&gt;
&lt;li&gt;When the AI decides it needs workspace data, it &lt;strong&gt;calls tools&lt;/strong&gt;: &lt;code&gt;search_pages&lt;/code&gt;, &lt;code&gt;get_page&lt;/code&gt;, &lt;code&gt;get_page_content&lt;/code&gt;, &lt;code&gt;run_analysis&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;These tools route through &lt;strong&gt;MCPClient&lt;/strong&gt;, which communicates with the Notion MCP server over &lt;strong&gt;stdio&lt;/strong&gt; (JSON-RPC 2.0)&lt;/li&gt;
&lt;li&gt;The MCP server translates tool calls into &lt;strong&gt;Notion API requests&lt;/strong&gt; and returns structured results&lt;/li&gt;
&lt;li&gt;Results feed back into the AI's context for the next reasoning step (up to 10 steps)&lt;/li&gt;
&lt;li&gt;When the AI wants to make changes, it calls &lt;code&gt;propose_actions&lt;/code&gt;, which streams proposed actions to the UI for &lt;strong&gt;human approval&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Only after the user confirms does the action execute via MCP&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why MCP and Not Just the API?
&lt;/h3&gt;

&lt;p&gt;I use &lt;strong&gt;both&lt;/strong&gt;. Here's the split:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NotionClient (direct SDK)&lt;/strong&gt; for bulk reads, workspace scans, pagination-heavy operations. It's faster for fetching 400 pages than routing through MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCPClient (MCP server)&lt;/strong&gt; for all writes like creating, archiving, renaming, updating pages. MCP provides a sandboxed execution layer with tool-level safety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This hybrid approach gives me the &lt;strong&gt;speed&lt;/strong&gt; of direct API access with the &lt;strong&gt;safety&lt;/strong&gt; of MCP's tool calling protocol.&lt;/p&gt;

&lt;h3&gt;
  
  
  Destructive Tool Safety
&lt;/h3&gt;

&lt;p&gt;Any tool that modifies workspace data (patch, post-page, delete, move) requires an &lt;code&gt;approved: true&lt;/code&gt; flag. The AI can propose actions, but &lt;strong&gt;nothing destructive runs without the user clicking "Execute."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tech Behind It
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Next.js 16 (App Router)&lt;/td&gt;
&lt;td&gt;Full-stack React with API routes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI SDK&lt;/td&gt;
&lt;td&gt;Vercel AI SDK 6&lt;/td&gt;
&lt;td&gt;Unified streaming + tool calling across 4 providers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;@notionhq/notion-mcp-server&lt;/td&gt;
&lt;td&gt;Notion workspace access via Model Context Protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visualization&lt;/td&gt;
&lt;td&gt;React Flow 11&lt;/td&gt;
&lt;td&gt;Force-directed graph for the dependency viewer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Zod 4&lt;/td&gt;
&lt;td&gt;Runtime schema validation for all API inputs/outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS 4 + shadcn/ui&lt;/td&gt;
&lt;td&gt;Cyberpunk aesthetic with accessible components&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Multi-Provider AI (BYOK)
&lt;/h3&gt;

&lt;p&gt;NoteRunway supports &lt;strong&gt;4 AI providers&lt;/strong&gt; with &lt;strong&gt;13 models&lt;/strong&gt;: OpenAI (GPT-5.4, GPT-5 Mini), Anthropic (Claude Opus 4.6, Haiku 4.5), xAI (Grok 4, Grok 3), and Google (Gemini 2.5 Pro/Flash).&lt;/p&gt;

&lt;p&gt;Your API key stays in your &lt;strong&gt;browser's localStorage&lt;/strong&gt;. It's sent per-request in an HTTP header, used once to create a provider instance, and discarded. NoteRunway's server never stores, logs, or persists your key.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Archive System
&lt;/h3&gt;

&lt;p&gt;Every destructive action creates an audit trail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NoteRunway Archive/
├── Duplicates/
│   └── [Audit Stub] Original Title
├── Garbage Collection/
│   └── [Audit Stub] Stale Page Name
└── Semantic Ask/
    └── [Audit Stub] Archived via Chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each audit stub contains a callout with the archive date, reason, and a faithful copy of the original content. The original page is soft-archived to Notion's trash (recoverable for 30 days).&lt;/p&gt;

&lt;p&gt;Nothing is ever truly deleted without a paper trail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;NoteRunway started as a personal itch, a messy workspace and a dev challenge deadline. It turned into something I'm going to use every week.&lt;/p&gt;

&lt;p&gt;Building with the Notion MCP was a revelation. The ability to give an AI structured access to a workspace, with tool-level control over what it can read and write, opens up workflows that feel like magic. Ask a question, get an answer sourced from your actual pages. Propose a cleanup, review it, execute it. All in one flow.&lt;/p&gt;

&lt;p&gt;If you're a Notion power user drowning in pages, give it a spin: &lt;strong&gt;&lt;a href="https://noterunway.pilotronica.com/" rel="noopener noreferrer"&gt;noterunway.pilotronica.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if you find an API key you forgot about in a meeting note... you're welcome. 😄&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ☕ and too many late nights by &lt;a href="https://github.com/georgekobaidze" rel="noopener noreferrer"&gt;Giorgi Kobaidze&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Can AI Generate Binary Directly? Is It Feasible? Does It Make Sense?</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 08 Mar 2026 20:33:41 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62</link>
      <guid>https://dev.to/georgekobaidze/can-ai-generate-binary-directly-is-it-feasible-does-it-make-sense-b62</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
From Prompt to Binary Code

&lt;ul&gt;
&lt;li&gt;Is It Even Feasible?&lt;/li&gt;
&lt;li&gt;Is It Worth It?&lt;/li&gt;
&lt;li&gt;Things That Almost Everyone Gets Wrong&lt;/li&gt;
&lt;li&gt;So What Are the Actual Problems with This Approach?&lt;/li&gt;
&lt;li&gt;Generalized Prompt Repetition Formula&lt;/li&gt;
&lt;li&gt;Example&lt;/li&gt;
&lt;li&gt;How Can AI Be Helpful for Modern Compilers?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Summary&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Exciting, futuristic ideas tend to gain traction quickly. Whether they are realistic or not often matters less at first. After all, no one can truly prove an idea will work until someone actually attempts it. The concept alone can still be exciting enough to capture everyone's attention.&lt;/p&gt;

&lt;p&gt;However, that initial excitement often fades once people begin to analyze the complexities, trade-offs, and potential downsides. In many cases the idea ultimately proves to be feasible, but the path toward making it practical and usable can lead in directions no one initially anticipated.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Prompt to Binary Code
&lt;/h2&gt;

&lt;p&gt;In this article, I want to explore the idea of generating binary directly from a prompt, without first producing human-readable source code.&lt;/p&gt;

&lt;p&gt;In other words, the goal would be to bypass the traditional steps in the compilation pipeline that normally transform human-written code into a final executable binary.&lt;/p&gt;

&lt;p&gt;The process can be visualized like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Prompt → AI → Binary&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This approach eliminates many of the intermediate components typically involved in producing an executable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No source code required&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No compilation or interpretation needed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No intermediate representation, such as IL in C#&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, this sounds appealing: so many steps are skipped, product creation could be faster and more streamlined, and AI could generate binary directly without worrying about programming languages or their specifications.&lt;/p&gt;

&lt;p&gt;It sounds like a logical next step, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Well... not quite.&lt;/strong&gt; This is far from the most practical approach, at least for the near, or even distant future.&lt;/p&gt;

&lt;p&gt;Let's break down why this idea is problematic, but before we do, let's quickly address one of the more controversial questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is It Even Feasible?
&lt;/h3&gt;

&lt;p&gt;Many people quickly dismiss this idea because they assume AI simply cannot generate binary directly. That's understandable, AI can only learn from the data that exists, and there's very little information about writing software directly in binary. After all, humans don't and can't do it (well unless your idea of fun is debugging a bajillion bits at 2 AM).&lt;/p&gt;

&lt;p&gt;However, that doesn't mean it's impossible (I mean training AI models, not debugging binary). Technically, it is feasible. You could take existing source code, there's no shortage of it, compile it to produce binary, and then create a &lt;code&gt;source code &amp;lt;-&amp;gt; binary code&lt;/code&gt; dataset to train AI models.&lt;/p&gt;

&lt;p&gt;As you might imagine, though, this would require astronomical amounts of data and computational resources, making it extremely expensive. Which brings us to the next question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is It Worth It?
&lt;/h3&gt;

&lt;p&gt;This question requires a deeper analysis on multiple levels. Let's examine each point one by one.&lt;/p&gt;

&lt;h4&gt;
  
  
  What's the Point of Source Code, Anyway?
&lt;/h4&gt;

&lt;p&gt;To explore this question, I'll refer back to &lt;strong&gt;my very first article on this platform&lt;/strong&gt; and link an important section for this context.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3" class="crayons-story__hidden-navigation-link"&gt;Understanding Your Audience as a Software Engineer&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2356479" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 25 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3" id="article-link-2356479"&gt;
          Understanding Your Audience as a Software Engineer
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwareengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwareengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/understanding-your-audience-as-a-software-engineer-4g3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;If you don't feel like reading another article, here's a brief summary of the key points from that section:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Software code isn't primarily for computers, it's for humans. Computers don't "understand" programming languages directly, they require translation into machine code via compilers, interpreters, or virtual machines. Programming languages are designed to be human-readable so developers can write, read, and maintain code effectively. Clear, structured, and well-documented code prevents confusion, reduces bugs, and avoids long-term technical debt. Writing with future maintainers (including yourself) in mind ensures smoother collaboration and easier maintenance as projects grow.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The main point is this: you don't write source code primarily for computers, otherwise, you'd be writing it in binary yourself. Source code exists for a very good reason: to be understandable by humans. It acts as an interface for developers to communicate with machines, giving them instructions and rules in a readable form. That's why we have coding best practices, naming conventions, design patterns, and so on. Compilers or CPUs don't care about any of that, it's all for us.&lt;/p&gt;

&lt;h4&gt;
  
  
  When You Take Away the Interface, the System Becomes Unusable
&lt;/h4&gt;

&lt;p&gt;As I mentioned, source code is the only ergonomic and sensible interface that developers currently understand and can use reliably. Nobody can read or write raw binary code directly. Think of source code like the steering wheel, gear selector, and pedals of a car, the binary code under the hood is the engine's "magic". Technically, you might try to operate the car without a steering wheel, but is it ergonomic or even feasible? Absolutely not!&lt;/p&gt;

&lt;p&gt;If we remove source code from the equation, the entire deterministic process goes out the window. From that point onward, there's no way to generate code while ensuring the resulting binary is exactly correct. We'll explore this in more detail later in the article.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This brings us to a common issue I've seen in many articles on this topic. They're not exactly wrong, but they often argue against the idea using points that are irrelevant in the context of what we've just discussed. Let's take a closer look at those arguments.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Things That Almost Everyone Gets Wrong
&lt;/h3&gt;

&lt;p&gt;In almost every article on this topic, authors point out a few issues with the idea of generating binary directly. Technically, their points are correct, but they often miss the core problem. Some of the common criticisms include:&lt;/p&gt;

&lt;h4&gt;
  
  
  Source Control Will Become Pointless
&lt;/h4&gt;

&lt;p&gt;Let's start with this one, as it's a somewhat controversial claim. The statement is partially correct, but not entirely.&lt;/p&gt;

&lt;p&gt;Technically, you can still store binaries in source control, manage releases, tags, versions, and all the other standard repository references. You can even switch between different versions, so many core features of source control would remain usable.&lt;/p&gt;

&lt;p&gt;However, one thing that would no longer be possible is code review - the very feature that makes source code so valuable in the first place. That said, using this as an argument against the entire idea feels a bit off, and here's why:&lt;/p&gt;

&lt;h4&gt;
  
  
  Code Review Will Become Impossible
&lt;/h4&gt;

&lt;p&gt;Absolutely, there's no doubt about it. Pull requests would just be an opaque sequence of binary data, providing no context at all. Sure, you might still see a bunch of "LGTM" comments, but on a serious note, without a tangible interface to review, what would there even be to review? This makes the argument largely irrelevant in the context of evaluating direct binary generation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Security Auditing Will Become Impossible
&lt;/h4&gt;

&lt;p&gt;Of course, without human-readable source code, there would be no way to audit it for vulnerabilities, let alone fix any issues. This limitation is another obvious downside.&lt;/p&gt;

&lt;h4&gt;
  
  
  Libraries and Shared Source Code Will Become Pointless
&lt;/h4&gt;

&lt;p&gt;Yeah, again, just like everything else that relies on proper source code. Without source code, there are no best practices, naming conventions, project structure, modularity, or shared packages... basically none of the tools and patterns developers rely on. While this argument is technically correct, it's not really relevant in the context of evaluating direct binary generation.&lt;/p&gt;

&lt;p&gt;In this scenario, the only interface would be the prompt. &lt;strong&gt;Could natural English become a new unified programming language?&lt;/strong&gt; That's a fascinating question, but it's a topic for another article. For now, let's stay focused.&lt;/p&gt;

&lt;h3&gt;
  
  
  So What Are the Actual Problems with This Approach?
&lt;/h3&gt;

&lt;p&gt;There are quite a few challenges with this approach, and I hope I don't turn this into another 20-minute read (which, annoyingly, almost always happens to me).&lt;/p&gt;

&lt;h4&gt;
  
  
  Determinism Goes Out the Window
&lt;/h4&gt;

&lt;p&gt;When you write code in C#, it goes through several steps before becoming actual machine code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compilation with Roslyn: the compiler parses your source code, performing lexical, syntax, and semantic analysis, along with some basic optimizations. It doesn't produce native code directly, instead, it emits CIL (Common Intermediate Language) instructions and metadata tables describing types, attributes, generics, and other information. All of this is packaged into a .NET assembly (a &lt;code&gt;.dll&lt;/code&gt; or &lt;code&gt;.exe&lt;/code&gt;) using the Portable Executable (PE) format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Execution under the CLR: when the program runs in the Common Language Runtime (CLR), methods are compiled by the JIT compiler (Just-In-Time compiler):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A method is called for the first time&lt;/li&gt;
&lt;li&gt;JIT reads the IL instructions and metadata&lt;/li&gt;
&lt;li&gt;Performs runtime-aware optimizations such as inlining, escape analysis, and CPU-specific vectorizations&lt;/li&gt;
&lt;li&gt;Finally generates native machine code (x64, ARM, etc.) and caches it for future calls&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;In short, the pipeline looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;C# -&amp;gt; Roslyn -&amp;gt; IL + metadata (assembly) -&amp;gt; CLR JIT/AOT -&amp;gt; Native machine code&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This process is complex, but its key advantage is determinism: given the same input, the compiler will produce the exact same IL every time, and the JIT will produce logically equivalent native code. While runtime factors like tiered compilation (Tier 0 vs Tier 1) might produce different native code across runs, the logical behavior remains consistent.&lt;/p&gt;

&lt;p&gt;When you delegate this task to AI, however, determinism disappears. Not only can unpredictable issues arise, but the entire process becomes abstracted and uncertain, introducing significant risk.&lt;/p&gt;

&lt;h4&gt;
  
  
  No More Partial Changes
&lt;/h4&gt;

&lt;p&gt;Every time you want to make a change, like adding a small feature, the machine code would likely have to be regenerated from scratch. This is because machine code is a low-level representation with no modular structure, comments, or abstractions, so an AI can't easily patch just one part of it.&lt;/p&gt;

&lt;p&gt;Each new "build" could differ slightly from the last, increasing the risk that a previously working program might break completely with just a minor change. While in theory, binary patching is possible, it's extremely complex and error-prone.&lt;/p&gt;

&lt;p&gt;Without source code as an interface, you'd be forced to rely entirely on the AI model to fix issues, since the prompt would be your only way to interact with the system. You might end up imploring your AI model to fix a bug that needs to go to production today, but instead it just adds more and more bugs. A minor update could turn into a chaotic conversation with your AI: "No, not that part... the other part... wait, why is it doing this again?" - a scenario that's both unpredictable and, frankly, a little scary.&lt;/p&gt;

&lt;h4&gt;
  
  
  Waste of Precious Tokens
&lt;/h4&gt;

&lt;p&gt;Even today, when AI-assisted coding has become more common and models are well-trained, generating code is still expensive and consumes a lot of tokens. Now imagine AI generating binary code from scratch every time you need even the smallest feature. The whole project would have to be regenerated, wasting a huge number of tokens and it's unlikely to get it right on the first, second, or even fiftieth attempt. &lt;br&gt;
&lt;strong&gt;That's a multiplied token disaster.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Generalized Prompt Repetition Formula
&lt;/h3&gt;

&lt;p&gt;When each change might have a different number of failed attempts, the total number of prompts needed can be expressed as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repetitions&lt;/strong&gt; = Σᵢ₌₁ⁿ (Failed_Attemptsᵢ + 1)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;n = total number of changes required
&lt;/li&gt;
&lt;li&gt;Failed_Attemptsᵢ = number of failed attempts for the i-th change
&lt;/li&gt;
&lt;li&gt;+1 accounts for the successful attempt of each change
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Suppose you need 3 changes, and the failed attempts per change are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change 1 → 2 failed attempts
&lt;/li&gt;
&lt;li&gt;Change 2 → 0 failed attempts
&lt;/li&gt;
&lt;li&gt;Change 3 → 5 failed attempts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repetitions&lt;/strong&gt; = (2 + 1) + (0 + 1) + (5 + 1) = 3 + 1 + 6 = 10&lt;/p&gt;

&lt;p&gt;You would need &lt;strong&gt;10 total prompts&lt;/strong&gt; to get all changes successfully applied.&lt;/p&gt;

&lt;p&gt;And that's a very optimistic example, by the way. The &lt;code&gt;n&lt;/code&gt; variable can even be infinite, meaning, you'll never get your project to the desired state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Possible solution?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One approach could be to divide your product into small, deployable components (yes, we're talking microservices). Instead of regenerating the entire project from scratch, you'd regenerate only the specific part of the system that needs updating. For example, updating a notification service is far easier than rebuilding an entire banking system.&lt;/p&gt;

&lt;p&gt;However, this solution undermines the original idea. You'd end up managing a huge number of microservices, which, if you've ever worked on large systems, you know can be far more painful to maintain than a single monolith. In other words, this "fix" may solve one problem but introduces many others.&lt;/p&gt;

&lt;h4&gt;
  
  
  Performance Issues
&lt;/h4&gt;

&lt;p&gt;As I mentioned earlier, modern compilers are extremely sophisticated. Entire teams focus solely on making compilers as accurate, optimized, and fast as possible. Today's compilers can generate machine code in milliseconds, and they do so deterministically.&lt;/p&gt;

&lt;p&gt;For example, the Roslyn compiler (which I mentioned earlier) supports incremental analysis, meaning it can run continuously as you type. Instead of recompiling everything, it only updates the syntax tree and dependent symbols. While this feature is mostly used in IDEs, it's a major performance booster.&lt;/p&gt;

&lt;p&gt;Roslyn also leverages heavy caching and immutable data structures, so previously computed semantic information can be reused. On top of that, it supports parallel compilation, allowing multiple files to be processed simultaneously across CPU cores.&lt;/p&gt;

&lt;p&gt;We could talk about Roslyn all day, but that's a completely different topic. The main point here is: when you bypass these sophisticated compilers, all these performance advantages disappear. You're left with just the AI, which works non-deterministically and can waste massive amounts of time, resources, and performance.&lt;/p&gt;

&lt;h4&gt;
  
  
  There Are Many Different Platforms (Architectures)
&lt;/h4&gt;

&lt;p&gt;Every platform requires its own specific binaries. For example, a binary built for x86 won't run on ARM. Compilers handle this automatically, they know exactly what to generate.&lt;/p&gt;

&lt;p&gt;With AI generating binaries directly, you'd need to produce separate versions for each architecture. Remember our earlier formula for prompt repetitions, which accounted for failed attempts per change? Now we have another variable: the number of architectures.&lt;/p&gt;

&lt;p&gt;If you previously calculated:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Repetitions = Σᵢ₌₁ⁿ (Failed_Attemptsᵢ + 1)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We now need to multiply by the number of architectures (let's call it A):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Repetitions = Σᵢ₌₁ⁿ ((Failed_Attemptsᵢ + 1) * A)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;n = total number of changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Failed_Attemptsᵢ = failed attempts for the i-th change&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A = number of target architectures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;+1 accounts for the successful attempt of each change&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For complex projects, this can quickly explode. Multiply by 3–5 or more architectures, and remember that each attempt might fail multiple times. Suddenly, a small change could require hundreds or even thousands of AI prompts, burning through tokens and time at an alarming rate.&lt;/p&gt;

&lt;p&gt;Are you still excited about this idea?&lt;/p&gt;

&lt;h3&gt;
  
  
  How Can AI Be Helpful for Modern Compilers?
&lt;/h3&gt;

&lt;p&gt;AI should never be the main driver of compilation, because developers rely on compilers to be reliable, predictable, deterministic, and fast. AI simply can't guarantee any of that as the primary engine.&lt;/p&gt;

&lt;p&gt;However, AI shines as an assistant. It can provide refactoring suggestions, performance improvements, or code optimizations, effectively taking some of the load off the compiler and helping developers write better code.&lt;/p&gt;

&lt;p&gt;A realistic workflow could look like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Source code -&amp;gt; Roslyn -&amp;gt; AI assistant -&amp;gt; Suggestions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here, the AI doesn't replace the compiler, it analyzes the intermediate structures that Roslyn generates (syntax trees, semantic models, metadata) and provides actionable insights back to the developer. Think of it as a co-pilot rather than the engine: it makes your work smoother without risking determinism or performance. But even this is just an abstract concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This whole "AI generates binaries directly" idea sounds sci-fi and Cyberpunky, which is undeniably fun. But reality doesn't care about coolness, it cares about whether the idea actually solves a problem. In this case, it clearly doesn't. In fact, it introduces a mountain of new problems: non-determinism, wasted tokens, impossible debugging, and insane complexity across multiple architectures.&lt;/p&gt;

&lt;p&gt;Maybe one day in the far future, people will rely on prompts instead of source code, and developers won't even touch the code anymore. But even then, the core problem remains: without understandable source code and deterministic compilation, maintaining, debugging, and collaborating on software becomes almost impossible. The interface is gone, and with it, control is gone.&lt;/p&gt;

&lt;p&gt;At the end of the day, AI can be amazing for coding, but let's leave the heavy lifting of compilation to our compilers. The AI's real value is as a smart assistant, not the engine that drives everything.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>compilers</category>
      <category>programming</category>
    </item>
    <item>
      <title>Sunday DEV Drive: A Synthwave Driving Experience Through Your DEV Community Articles</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Sun, 01 Mar 2026 20:32:00 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032</link>
      <guid>https://dev.to/georgekobaidze/sunday-dev-drive-a-synthwave-driving-experience-through-your-dev-community-articles-5032</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Let's Start from the Very Beginning
&lt;/h3&gt;

&lt;p&gt;I love weekends. Not because I want to escape coding, quite the opposite. As a full-time principal engineer, my weekdays belong to meetings, architecture decisions, reviews, and production responsibilities. Evenings are short. Energy is limited. But weekends? Weekends are different. Weekends are pure.&lt;/p&gt;

&lt;p&gt;They're the only time I can dedicate an entire day to building something just for the joy of it. Writing. Experimenting. Creating.&lt;/p&gt;

&lt;p&gt;Recently, I started participating in DEV challenges and it's been one of the best decisions I've made in a long time. There's something powerful about building in public. Shipping something playful and sharing it with your community.&lt;/p&gt;

&lt;p&gt;This challenge, in particular, just felt right - &lt;strong&gt;the weekend challenge&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  To the Community I Call Home
&lt;/h3&gt;

&lt;p&gt;The DEV community has been my home since 2017, since the very beginning of my &lt;strong&gt;professional&lt;/strong&gt; software engineering journey.&lt;/p&gt;

&lt;p&gt;More often than not, I found comfort here when things weren't going well. Especially in those early years. When imposter syndrome was loud. When mistakes felt heavier. When growth felt slow.&lt;/p&gt;

&lt;p&gt;Reading other developers' stories helped. Seeing their struggles. Their wins. Their lessons. It all reminded me that we're all just figuring it out.&lt;/p&gt;

&lt;p&gt;Now, years later, I wanted to give something back.&lt;/p&gt;

&lt;p&gt;I wanted to build something that would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make fellow members smile.&lt;/li&gt;
&lt;li&gt;Help them feel proud of their work.&lt;/li&gt;
&lt;li&gt;Turn their articles into something interactive.&lt;/li&gt;
&lt;li&gt;Encourage passive members to write.&lt;/li&gt;
&lt;li&gt;Maybe even inspire non-members to join.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Something actually different... something actually fun...&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  So I Built Sunday DEV Drive
&lt;/h3&gt;

&lt;p&gt;Sunday DEV Drive is a game, but not in the traditional sense.&lt;/p&gt;

&lt;p&gt;There are no bosses to defeat, no side quests, no objectives, no timers.&lt;/p&gt;

&lt;p&gt;It's intentionally different.&lt;/p&gt;

&lt;p&gt;It's a browser-based synthwave driving game where your DEV Community articles become neon billboards along an endless procedural road. You type in a username, and within seconds you're cruising through a retro-futuristic cityscape with your article titles, cover images, and actual quotes from your writing towering above the highway.&lt;/p&gt;

&lt;p&gt;And as you drive, billboards around the city display articles - yours or someone else's, pulled dynamically using the &lt;a href="https://developers.forem.com/api/v1" rel="noopener noreferrer"&gt;DEV API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Imagine cruising through a digital city and suddenly seeing your own words glowing above you.&lt;/p&gt;

&lt;p&gt;Or discovering another developer's article while driving past a virtual skyline.&lt;/p&gt;

&lt;p&gt;It's not about winning, it's about reflecting, it's all about feeling proud and transforming written content into a spatial experience.&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.amazonaws.com%2Fuploads%2Farticles%2F3tu657tczdsqraa820nt.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.amazonaws.com%2Fuploads%2Farticles%2F3tu657tczdsqraa820nt.png" alt="Overhead billboard" width="800" height="487"&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.amazonaws.com%2Fuploads%2Farticles%2Fso02kijcvqpwryxbd80o.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.amazonaws.com%2Fuploads%2Farticles%2Fso02kijcvqpwryxbd80o.png" alt="Roadside billboard" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  It Works in Three Modes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your articles&lt;/strong&gt;: Enter any DEV username. The game fetches their posts via the DEV API, extracts real quotes from article bodies, and renders them onto billboard textures in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Motivational mode&lt;/strong&gt;: If a user has an account but no articles yet, every billboard becomes an encouraging message with "Click here to start writing!" - each one linking directly to &lt;code&gt;dev.to/new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test drive&lt;/strong&gt;: No DEV account? No problem. Take a demo spin and let the game convince you to join the community, every billboard becomes an invitation.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fl8hn2dttfak4o9zy29n6.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.amazonaws.com%2Fuploads%2Farticles%2Fl8hn2dttfak4o9zy29n6.png" alt="Invitation" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every billboard is clickable. See a post you want to read? Click it, and it opens in a new tab.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beyond billboards, green road signs display your profile stats as you drive: total articles, lifetime reactions, reading time, your top post, favorite tags, and the date you joined DEV.&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.amazonaws.com%2Fuploads%2Farticles%2Fjqidtgqn3647xpy69e3b.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.amazonaws.com%2Fuploads%2Farticles%2Fjqidtgqn3647xpy69e3b.png" alt="Road sign" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But wait, there's more.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can even switch to first-person mode and drive straight from the cabin for full immersion.&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.amazonaws.com%2Fuploads%2Farticles%2Frofo6uyk7gkaphfd0048.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.amazonaws.com%2Fuploads%2Farticles%2Frofo6uyk7gkaphfd0048.png" alt="Interior mode" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Idea Behind It
&lt;/h3&gt;

&lt;p&gt;We usually consume articles passively, scrolling on a feed. But what if your writing became part of a world? What if your thoughts lived on digital billboards? What if discovering developers felt like exploring a city instead of browsing a list?&lt;/p&gt;

&lt;p&gt;Sunday DEV Drive turns articles into scenery. It makes community content feel tangible.&lt;/p&gt;

&lt;h3&gt;
  
  
  More Than Just a Game
&lt;/h3&gt;

&lt;p&gt;At its core, this project is a thank-you letter.&lt;/p&gt;

&lt;p&gt;To the platform.&lt;br&gt;
To the writers.&lt;br&gt;
To the readers.&lt;br&gt;
To the beginners who are still doubting themselves.&lt;/p&gt;

&lt;p&gt;If you've ever published even one article, you deserve to see it shining in neon.&lt;/p&gt;

&lt;p&gt;If you've been thinking about writing, maybe this is your sign. WHAT ARE YOU WAITING FOR? START NOW. A year from now, you'll wish you'd started today. Regret is avoidable by taking action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Welcome to Sunday DEV Drive!&lt;/strong&gt; 🚗✨&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try it yourself: 🔗 &lt;strong&gt;&lt;a href="https://sundaydevdrive.pilotronica.com" rel="noopener noreferrer"&gt;sundaydevdrive.pilotronica.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try it with your own DEV username, or just hit "Take a test drive" to jump right in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GAME CONTROLLER SUPPORT INCLUDED&lt;/strong&gt; &lt;br&gt;
Plug in a controller and enjoy the experience.&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.amazonaws.com%2Fuploads%2Farticles%2Fb8ynmhavpn6z33b2nz14.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.amazonaws.com%2Fuploads%2Farticles%2Fb8ynmhavpn6z33b2nz14.png" alt="Controls" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The entire codebase is public, dive into the repository and take a look:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/georgekobaidze" rel="noopener noreferrer"&gt;
        georgekobaidze
      &lt;/a&gt; / &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive" rel="noopener noreferrer"&gt;
        sunday-dev-drive
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A synthwave driving experience through your DEV Community articles
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Sunday DEV Drive&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/sunday-dev-drive/assets/poster.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fsunday-dev-drive%2FHEAD%2Fassets%2Fposter.jpg" alt="Sunday DEV Drive"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;A synthwave driving experience through your DEV Community articles&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dc40801d3314769e357648417281c3b429caffb0d7fbe6c5aa5b045788a46f38/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f67656f7267656b6f626169647a652f73756e6461792d6465762d6472697665" alt="Stars"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bfdb646fc6496695a1c0db21486b9223c70422e7914aa9205cb9c99aa078d140/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f67656f7267656b6f626169647a652f73756e6461792d6465762d6472697665" alt="Issues"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive/actions" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c9c6e62ffd538f0c8140df50d8d95cbd561421ef7aa4d183e670aca96817b364/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f67656f7267656b6f626169647a652f73756e6461792d6465762d64726976652f6465706c6f792d70616765732e796d6c3f6272616e63683d6d61696e" alt="Build Status"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive#live-demo" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt; •
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; •
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive#controls" rel="noopener noreferrer"&gt;Controls&lt;/a&gt; •
  &lt;a href="https://github.com/georgekobaidze/sunday-dev-drive#how-it-works" rel="noopener noreferrer"&gt;How It Works&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Live Demo&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://sundaydevdrive.pilotronica.com" rel="nofollow noopener noreferrer"&gt;sundaydevdrive.pilotronica.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Enter your &lt;a href="https://dev.to" rel="nofollow"&gt;DEV Community&lt;/a&gt; username, hit &lt;strong&gt;Start Driving&lt;/strong&gt;, and cruise through a neon-lit synthwave world where your articles appear as roadside billboards. Each billboard shows a title, cover image, and a snippet from the article body. Click any to open the full post.&lt;/p&gt;

&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28" rel="nofollow"&gt;DEV Weekend Challenge: Build for Your Community&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Your Articles as Billboards&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;Roadside and overhead signs generated from your real DEV posts, complete with cover images, snippets, and reaction counts.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/sunday-dev-drive/assets/screenshots/overhead_billboards.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fsunday-dev-drive%2FHEAD%2Fassets%2Fscreenshots%2Foverhead_billboards.jpg" alt="Overhead"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/sunday-dev-drive/assets/screenshots/roadside_banner.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fsunday-dev-drive%2FHEAD%2Fassets%2Fscreenshots%2Froadside_banner.jpg" alt="Roadside"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Stat Signs Along the Road&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Green road signs display your profile stats: total articles, reactions, reading time, top post, favorite tags, and join date.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/georgekobaidze/sunday-dev-drive/assets/screenshots/road_signs.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgeorgekobaidze%2Fsunday-dev-drive%2FHEAD%2Fassets%2Fscreenshots%2Froad_signs.jpg" alt="Roadside"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Keyboard &amp;amp; gamepad support&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Drive with arrow keys or plug in a controller. Full analog steering, throttle, and a right-stick orbit…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/georgekobaidze/sunday-dev-drive" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Don't judge the JavaScript too harshly, I come from the land of APIs and databases - I'm a back-end developer through and through.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three.js&lt;/strong&gt; (r170) - 3D rendering, loaded via ES module import maps from CDN&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla JavaScript&lt;/strong&gt; - 12 ES modules, zero build step, zero bundler, zero npm dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canvas API&lt;/strong&gt; - Every billboard and road sign texture is drawn programmatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DEV API&lt;/strong&gt; - Public endpoints, no API key, no backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No React. No Vite. No webpack. Open &lt;code&gt;index.html&lt;/code&gt; with any static file server and drive.&lt;/p&gt;

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

&lt;p&gt;The entire project is 12 ES modules with a clean dependency graph and zero circular imports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scene.js ← road.js ← buildings.js
                    ← car.js ← camera.js
                              ← input.js
         ← billboards.js ← stats.js ← api.js
main.js imports everything
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each module owns its domain: &lt;code&gt;road.js&lt;/code&gt; generates the path, &lt;code&gt;car.js&lt;/code&gt; builds the car, &lt;code&gt;billboards.js&lt;/code&gt; handles the article-to-texture pipeline. The &lt;code&gt;main.js&lt;/code&gt; entry point wires them together and runs the animation loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Procedural Road Generation: Stochastic Steering
&lt;/h3&gt;

&lt;p&gt;The road is infinitely generated as you drive. There's no predefined track, it grows segment by segment using a stochastic steering algorithm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;growPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;pathTurnCountdown&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;pathTurnRate&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.042&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;pathTurnCountdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;pathTurnRate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;pathData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="na"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;SEGMENT_LEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pathHead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;SEGMENT_LEN&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;Every few segments, a new random turn rate and duration are chosen. Because the turn rate &lt;em&gt;accumulates&lt;/em&gt; over multiple segments rather than being applied instantly, the road produces smooth, organic curves, gentle sweeps, not jarring zigzags. Randomizing both the magnitude (&lt;code&gt;0.042&lt;/code&gt; range) and the duration (&lt;code&gt;4–10 segments&lt;/code&gt;) creates surprising variation from very simple math.&lt;/p&gt;

&lt;p&gt;The road surface itself is a ribbon mesh: a sliding window of 200 segments rebuilt from raw &lt;code&gt;BufferGeometry&lt;/code&gt;. For each segment, perpendicular edge points are computed using the path angle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;rx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;ROAD_WIDTH&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Left edge&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;ROAD_WIDTH&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Right edge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ribbon follows the car. When you've driven far enough, the mesh is rebuilt centered around your position. The road is always beneath you, and always extends into the horizon.&lt;/p&gt;

&lt;h3&gt;
  
  
  Canvas-Rendered Billboard Textures
&lt;/h3&gt;

&lt;p&gt;This is where the DEV API meets the Canvas API. Every billboard texture is a &lt;code&gt;512×768&lt;/code&gt; canvas (roadside) or &lt;code&gt;1024×512&lt;/code&gt; canvas (overhead), painted section by section:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Header bar&lt;/strong&gt; - neon-bordered strip with author and reaction count&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cover image&lt;/strong&gt; - letterboxed from the article's &lt;code&gt;cover_image&lt;/code&gt; URL, loaded asynchronously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snippet&lt;/strong&gt; - an actual quote extracted from the article body&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Footer&lt;/strong&gt; - reading time and tag display&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tricky part: cover images load &lt;em&gt;after&lt;/em&gt; the texture is already applied to the 3D mesh. Three.js handles this beautifully with &lt;code&gt;tex.needsUpdate = true&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cover_image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;anonymous&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;drawImageLetterbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;tex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;needsUpdate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// GPU re-uploads on next frame&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cover_image&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;For articles without cover images, the cover area becomes a playful "404 / cover_image: null / (the author was too busy)" message, complete with a retro grid background. In motivational mode, it reads "Click here to start writing!" instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Snippet Extraction: Turning Markdown Into Billboard Quotes
&lt;/h3&gt;

&lt;p&gt;Simply showing article titles on billboards wouldn't be enough. I wanted actual &lt;em&gt;quotes&lt;/em&gt; from people's writing. But the DEV API returns raw Markdown, not clean prose. The extraction pipeline strips away code blocks, images, links, and headers, then picks paragraphs in a sweet spot - long enough to be meaningful, short enough to fit a billboard.&lt;/p&gt;

&lt;p&gt;The 60-400 character filter is crucial. Too short and you get orphaned sentences. Too long and the text overflows the billboard canvas. The result: clean, readable quotes that actually represent what someone wrote.&lt;/p&gt;

&lt;h3&gt;
  
  
  Car Physics: The Struggle Effect When Both Pedals Are Pressed
&lt;/h3&gt;

&lt;p&gt;The driving model is simple but has one detail I'm proud of. When a player presses both throttle and brake simultaneously (a common thing with gamepads), instead of canceling out, the car settles into a "struggle" state, which is basically low speed, high engine strain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;throttle&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;brake&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;struggle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CAR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxSpeed&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;carState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;struggle&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;carState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.04&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;The speed converges to 8% of max through lerp smoothing. It simulates the feeling of fighting the brakes, the car doesn't stop, doesn't accelerate, just vibrates with restrained energy. It's a small detail but it makes the physics feel &lt;em&gt;alive&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Acceleration also uses diminishing returns, the faster you're going, the harder it is to go faster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;speedRatio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;carState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;CAR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;effectiveAccel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CAR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;acceleration&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;throttle&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;speedRatio&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single line replaces what would otherwise be a complex drag model. At zero speed, you get 100% acceleration. At top speed, you get 15%. The curve in between is completely smooth.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 25-Article Shuffle
&lt;/h3&gt;

&lt;p&gt;The DEV API has a quirk: the list endpoint returns titles and metadata, but not the full article body. To get actual text for snippet extraction, you need a separate request per article. For a user with hundreds of posts, that's hundreds of requests - too slow and too aggressive.&lt;/p&gt;

&lt;p&gt;And I'm not planning to brutally overload our favorite creators' platform. I'll be easy on it. So Jess, Ben, Peter, if you're reading this, don't worry, I got you.😄&lt;/p&gt;

&lt;p&gt;The solution: shuffle the full article list and deep-fetch only 25 random articles. The rest get their &lt;code&gt;description&lt;/code&gt; field as a fallback snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shuffled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toFetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shuffled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;art&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;toFetch&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://dev.to/api/articles/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;art&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;art&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_snippets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;art&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;full&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;art&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_snippets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extractSnippets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;full&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body_markdown&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;350&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;Each request has a 350ms delay to respect rate limits. If the API returns 429 (Too Many Requests), it gracefully falls back to the description instead of failing. The player never notices, they just see billboards with quotes. Whether those quotes came from a full article parse or a description fallback is invisible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Billboard Click Detection via Raycasting
&lt;/h3&gt;

&lt;p&gt;Clicking a 3D billboard to open an article isn't trivial in a 3D scene. The solution is Three.js raycasting, converting a 2D mouse position into a 3D ray, then testing intersection against billboard geometry.&lt;/p&gt;

&lt;p&gt;Each billboard stores its article URL in &lt;code&gt;userData&lt;/code&gt;. The raycast checks both front and back panels, so billboards work no matter which direction you're looking at them from. The &lt;code&gt;orbit.active&lt;/code&gt; guard prevents accidental clicks during camera rotation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building a Car from 46 Boxes
&lt;/h3&gt;

&lt;p&gt;When I was a kid, I'd grab random little wooden scraps nobody seemed to need (or at least I thought nobody needed), hammer them together into a rough car shape, and nail four bottle caps on as wheels. Perfect toy car. Good times.&lt;/p&gt;

&lt;p&gt;Who would've thought that, more than 20 years later, the same "stack-and-nail" approach would actually come in handy... in code.&lt;/p&gt;

&lt;p&gt;There are no 3D models in this project. Every part of the car like body, cabin, hood, trunk, wheels, rims, windows, dashboard, headlights, tail/brake/reverse lights, steering wheel, interior screens, is built entirely from BoxGeometry and CylinderGeometry primitives, carefully stacked and positioned by hand.&lt;/p&gt;

&lt;p&gt;And boy did I spend a lot of time on that! Totally worth it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lower body → Mid body → Hood → Trunk → Cabin
→ 4× Wheels (cylinder + torus rim)
→ 4× Windows (transparent glass material)
→ Dashboard with neon trim + dual screens
→ Steering wheel (torus + cylinder spokes)
→ Headlights (emissive mesh + PointLight)
→ Tail/brake/reverse lights
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The steering wheel actually rotates when you turn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;steeringWheel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;carState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;steer&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visible only in interior camera mode, but it's there. These kinds of details don't matter until they do.&lt;/p&gt;

&lt;h3&gt;
  
  
  So Much More to Talk About
&lt;/h3&gt;

&lt;p&gt;This project was a blast to build. Every component of the game required a ton of thought, and I learned so much along the way. What I've shared here are just the most exciting parts, there are plenty of other fascinating details. If I included everything, I'd probably end up writing a book. Maybe that's a story for another day.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned This Weekend
&lt;/h3&gt;

&lt;p&gt;Building a 3D game with zero dependencies and zero build tools in a weekend taught me a few things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Canvas API is absurdly powerful for textures.&lt;/strong&gt; Every billboard, every road sign, the sun, the skyline, all drawn with &lt;code&gt;fillRect&lt;/code&gt;, &lt;code&gt;fillText&lt;/code&gt;, and &lt;code&gt;drawImage&lt;/code&gt;. No texture files needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ES modules are production-ready.&lt;/strong&gt; Import maps + CDN + &lt;code&gt;type="module"&lt;/code&gt; gives you a complete module system with zero tooling. Twelve modules, clean dependency graph, no bundler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple physics beat complex physics.&lt;/strong&gt; A one-line diminishing-returns formula (&lt;code&gt;1 - speedRatio * 0.85&lt;/code&gt;) gives more "feel" than a proper friction simulation would. Games aren't simulations, they're about how things feel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The DEV API is a goldmine.&lt;/strong&gt; Public, no auth, generous rate limits, full Markdown body access. Building &lt;em&gt;for&lt;/em&gt; the community with the community's own API felt right.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This project was built in a weekend with coffee, a gamepad, and a deep appreciation for the DEV Community. Every article you've written deserves to be a neon billboard on an endless synthwave highway.&lt;/p&gt;

&lt;p&gt;Now it's your turn. Take your car for a spin, share your journey in the comments, grab screenshots and show it off to your friends, colleagues... anyone! I'd love to hear everyone's reaction. Let's show everyone that we're by far the best community.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Could Vibe Coding Be the Missing Communication Link Between PMs and Developers?</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Tue, 17 Feb 2026 17:08:33 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/could-vibe-coding-be-the-missing-communication-link-between-pms-and-developers-3bch</link>
      <guid>https://dev.to/georgekobaidze/could-vibe-coding-be-the-missing-communication-link-between-pms-and-developers-3bch</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
Building a Product Is a Team Sport

&lt;ul&gt;
&lt;li&gt;No Developer Is Perfect And That's Okay&lt;/li&gt;
&lt;li&gt;No Project Manager Is Perfect And That's Okay Too&lt;/li&gt;
&lt;li&gt;Even PMs and Clients Can Misalign&lt;/li&gt;
&lt;li&gt;Common Language&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Mental Models &amp;amp; Misalignment

&lt;ul&gt;
&lt;li&gt;Cognitive Science Tells Us Something Important&lt;/li&gt;
&lt;li&gt;Visualization Changes the Equation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Can Vibe Coding Be the Answer?

&lt;ul&gt;
&lt;li&gt;Yes, Absolutely&lt;/li&gt;
&lt;li&gt;Potential Issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Things To Keep In Mind

&lt;ul&gt;
&lt;li&gt;Make Sure Your Company Allows It&lt;/li&gt;
&lt;li&gt;Do the Research Yourself or Consult Your Technical Team&lt;/li&gt;
&lt;li&gt;AI Models Do Exactly What You Tell Them, So Be Specific&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;It's been a long time since I wrote about vibe coding, and for good reason - it's not a topic I like to talk about. As a seasoned software engineer, I'm all for &lt;strong&gt;AI-assisted&lt;/strong&gt; coding, but vibe coding? That's still a hard no from me.&lt;/p&gt;

&lt;p&gt;If you want to understand why I feel this way, check out this article:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-story__hidden-navigation-link"&gt;I'm All In on AI, But We Need to Talk About Vibe Coding&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/georgekobaidze" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" alt="georgekobaidze profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/georgekobaidze" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Giorgi Kobaidze
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Giorgi Kobaidze
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2619292" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/georgekobaidze" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55651%2F3ad144e9-ca91-4395-b73a-9a0a3d843af9.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Giorgi Kobaidze&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 24 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" id="article-link-2619292"&gt;
          I'm All In on AI, But We Need to Talk About Vibe Coding
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/machinelearning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;machinelearning&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/coding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;coding&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;135&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/georgekobaidze/im-all-in-on-ai-but-we-need-to-talk-about-vibe-coding-the-new-slippery-slope-2k6p#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              66&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            16 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;And here's where the good old 'however' comes in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, today we're going to play a little "😈's 🥑".&lt;br&gt;
After crunching and grinding through the data, my brain finally figured out exactly where vibe coding can actually be useful. Yes, you heard me right, I just mentioned "vibe coding" and "useful" in the same sentence. Who'd have thought?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler alert:&lt;/strong&gt; it's not what you think. It's not the traditional, hype-driven version of vibe coding. If you're a software engineer hoping for an excuse to drop everything and dive headfirst into the vibe coding world, sorry, this isn't that place.&lt;/p&gt;

&lt;p&gt;In my world, there's no such thing as a developer without coding skills, no matter how hard the influencers who've never written a single line of production code try to sound cool by telling everyone that "Software engineers won't be needed in a month."&lt;br&gt;
They've been saying that for at least three years.&lt;/p&gt;

&lt;p&gt;Instead, we're going to explore vibe coding from a different angle, with an open mind. I'm not the type of person who's hostile toward an idea just because it's unfamiliar. That's why I've been thinking about this topic for a long time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a Product Is a Team Sport
&lt;/h2&gt;

&lt;h3&gt;
  
  
  No Developer Is Perfect And That's Okay
&lt;/h3&gt;

&lt;p&gt;If you're a software engineer, chances are you've worked in a team with people in very different roles. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The single most important factor in successful teamwork is Communication.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;You could assemble the world's best developers in one team, but if they can't communicate effectively, they won't achieve much. Just like in sports, talent alone isn't enough, teamwork and clear communication are what make the real difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But there's a problem that often gets overlooked.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A developer might be brilliant at designing systems, writing maintainable, optimized code, and thinking through architecture,  basically, everything you'd want technically. Sounds perfect, right? But that doesn't automatically make them a strong communicator when explaining what they're doing.&lt;/p&gt;

&lt;p&gt;Even more challenging is understanding exactly what's needed from the business side. For many developers, translating business requirements into technical implementation, or the other way around, can be far harder than just writing code. And there are multiple reasons for this, which we'll explore soon.&lt;/p&gt;

&lt;p&gt;Yes, we all know developers should be good communicators, but that's just "shoulda, coulda, woulda". It doesn't always happen. Sometimes a developer is so good at solving problems that you overlook the fact they're not the most talkative or expressive. Sure, they'll ask questions, understand the context, and gather the requirements. But once they feel they understand, they often assume everything's fine and dive into designing the solution, and sometimes, they get something wrong because of those assumptions.&lt;/p&gt;

&lt;p&gt;Then there's another category of developers, usually beginners, who worry that asking "too many" questions will make them look unqualified for the job (been there myself and it's miserable until you realize that's not how it works.)&lt;/p&gt;

&lt;p&gt;Either way, the result is the same: they end up doing things the wrong way, which is far from ideal.&lt;/p&gt;

&lt;h3&gt;
  
  
  No Project Manager Is Perfect And That's Okay Too
&lt;/h3&gt;

&lt;p&gt;Project managers usually aren't deeply familiar with the technical side of the product. Sure, there are PMs who understand what's going on at a high level, but they're typically either former software engineers who, for some reason, have had enough of writing code and moved toward the client-facing side, or people who are genuinely curious about how everything works under the hood.&lt;/p&gt;

&lt;p&gt;However, those cases aren't that common. Let look at the Venn diagram:&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.amazonaws.com%2Fuploads%2Farticles%2Fpvovvo23pis8jfjl7a5d.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.amazonaws.com%2Fuploads%2Farticles%2Fpvovvo23pis8jfjl7a5d.png" alt="Venn Diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this diagram isn't just about PMs and developers. The same idea applies to almost any job, technical or non-technical. There are hundreds of roles where the overlap of "excellent at communication" and "excellent at the core skill" creates the mythical, superhuman type.&lt;/p&gt;

&lt;p&gt;As a project manager, communication is your superpower. Your primary job is to understand exactly what your client wants and gather the right information from them. Then comes the next step: translating that information clearly to your developers.&lt;/p&gt;

&lt;p&gt;And that's when things can get really tricky.&lt;/p&gt;

&lt;p&gt;As mentioned, you won't always have developers who understand the product language the same way you do. You might use different terms or conceptualize things differently, and for developers, your terms could have completely different meanings.&lt;/p&gt;

&lt;p&gt;Let's look at an example. A simple term - "Real-Time".&lt;/p&gt;

&lt;p&gt;PM says: "We need real-time updates."&lt;/p&gt;

&lt;p&gt;What the PM might mean is when users refresh, they see fresh data. The numbers feel current. No obvious delay.&lt;/p&gt;

&lt;p&gt;What the developer hears? WebSockets, persistent connections, complex state management, scaling challenges.&lt;/p&gt;

&lt;p&gt;Now engineering effort multiplies... exponentially.&lt;br&gt;
All because "real-time" meant different things.&lt;/p&gt;

&lt;p&gt;This might sound like a funny or even nonsensical example, because surely you'd think it would get clarified, right? But to be honest, I've heard much worse horror stories than this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Even PMs and Clients Can Misalign
&lt;/h3&gt;

&lt;p&gt;Especially when PMs are working on highly technical products and their clients are also technical. I can only imagine how challenging it must be to listen, gather information you don't fully understand and then translate it clearly to your developers. You're the only bridge between these two overly complex technical worlds, and doing it flawlessly is no small task. That must be a lonely place to be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Language
&lt;/h3&gt;

&lt;p&gt;Developers usually think system-first, while product people think product-first. There's nothing outrageous about this, that's exactly why different roles exist in a company. &lt;/p&gt;

&lt;p&gt;But these different mindsets can create gaps in language, perception, and understanding, which sometimes lead to problems. Think of it like Lego pieces: they can be used to build many different things. One person might build a horse🐴, while another builds a bear🐻. Neither is wrong, but the client only wants one of them.&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.amazonaws.com%2Fuploads%2Farticles%2F51z7tmzor5r8i2c67qna.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51z7tmzor5r8i2c67qna.jpg" alt="Lego Bear and Horse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mental Models &amp;amp; Misalignment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cognitive Science Tells Us Something Important
&lt;/h3&gt;

&lt;p&gt;It tells us that words don't carry meaning, they trigger mental models.&lt;/p&gt;

&lt;p&gt;When you say "dashboard", you're not transmitting an image. You're just activating one. That image is built from your own experiences, your past projects, your preferences, your assumptions. I do the same. And even if we both nod in agreement, we might be visualizing completely different products. That's why teams who've worked together for a long time make hard things look easy.&lt;/p&gt;

&lt;p&gt;Their words trigger similar mental models.&lt;br&gt;
The interpretation gap is tiny.&lt;br&gt;
And when you remove that gap, you've already solved half the problem.&lt;/p&gt;

&lt;p&gt;That's the hidden danger of language in product development.&lt;br&gt;
It feels precise. It feels shared. But it's interpretive.&lt;/p&gt;

&lt;p&gt;Our brains have to decode words, attach context, fill in gaps, and construct internal pictures. That process is fast but it's also personal. Which means two intelligent, competent professionals can agree on the same sentence and still walk away with different realities in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualization Changes the Equation
&lt;/h3&gt;

&lt;p&gt;The human brain processes visuals dramatically faster than text. Images don't need to be translated. They don't require semantic negotiation. They're concrete. Immediate. Shared.&lt;/p&gt;

&lt;p&gt;When we're both looking at the same interface, the same layout, the same interaction flow, the interpretation layer completely goes out of the window. The mental models collapse into a single reference point. We're no longer debating what something means. We're directly looking at that thing.&lt;/p&gt;

&lt;p&gt;So why do we keep trying to align through paragraphs?&lt;/p&gt;

&lt;p&gt;If visualization is the fastest path to alignment... then what happens when creating that visualization becomes effortless?&lt;/p&gt;

&lt;h2&gt;
  
  
  Can Vibe Coding Be the Answer?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Yes, Absolutely
&lt;/h3&gt;

&lt;p&gt;However, not to create the product itself, but to create a visual representation of the product, or a major new feature that's difficult to model clearly in your head.&lt;/p&gt;

&lt;p&gt;What I'm trying to say is this: vibe coding can give project managers something close to a superpower, the ability to communicate with near-perfect clarity. Instead of relying solely on words, they can create a working prototype. A tangible blueprint. Something engineers can look at, explore, question and then use as a foundation to build the real system.&lt;/p&gt;

&lt;p&gt;As mentioned earlier, misalignments sometimes even happen because clients and product teams visualize ideas differently. This approach can solve that problem as well, and arguably, that's even more important.&lt;/p&gt;

&lt;p&gt;Project managers can use this "blueprint" to validate requirements with precision, walking clients through quick demos and confirming alignment before a single line of production code is written.&lt;/p&gt;

&lt;h3&gt;
  
  
  Potential Issues
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;But let's address the potential issues with this approach:&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Not Everyone Builds Visually Tangible Products
&lt;/h4&gt;

&lt;p&gt;What about teams that aren’t building something visually tangible? Teams developing internal libraries or purely technical tools, for example.&lt;/p&gt;

&lt;p&gt;In those cases, this approach might not even be necessary. The conversations are already deeply technical and everyone involved likely shares a similar mental model. The language gap is smaller and alignment happens through architecture diagrams, interfaces, and code, not UI prototypes. In cases like that, often the developers from different teams have direct communication with each other for steamlining the whole process.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. What About Mockup Tools?
&lt;/h4&gt;

&lt;p&gt;Conceptually, this isn't a particulary new idea, tools for creating mockups have existed for a long time.&lt;/p&gt;

&lt;p&gt;Absolutely. But those tools are quite limited: they can only do so much, and often your requirements are far more complex than what they support. That's why many companies and project managers skip this practice, it doesn't always deliver enough value to justify the time, and if used incorrectly, it can create more problems than it solves.&lt;/p&gt;

&lt;p&gt;With vibe coding, however, you can generate much more advanced, customized visuals that tell the full story. You don't need to learn complex software, it's much faster, and the result communicates your idea clearly to both clients and developers.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Speaking of Speed, It Still Takes More Time Than Just Talking Verbally
&lt;/h4&gt;

&lt;p&gt;Even though vibe coding is faster and more precise than traditional mockup tools, It still takes more time than just explaining the concept verbally to developers. Sure.&lt;/p&gt;

&lt;p&gt;But... does it?👀&lt;/p&gt;

&lt;p&gt;I've seen developers and product people go back and forth tweaking a simple feature for months, only to get it wrong repeatedly. &lt;/p&gt;

&lt;p&gt;Think of it like racing: inexperienced drivers think that going "all in", way too hot into a corner will make them faster, but fast in doesn't always mean fast out. Sometimes the opposite is true. Experienced drivers know that to maximize speed on the next straight, you often need to slow down on entry: &lt;strong&gt;slow in, fast out.&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.amazonaws.com%2Fuploads%2Farticles%2Fw6v6ce595wpgfbxrvwdj.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.amazonaws.com%2Fuploads%2Farticles%2Fw6v6ce595wpgfbxrvwdj.png" alt="F1 car taking corner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same principle applies here: it's better to invest a little extra time upfront, creating clear visuals and alignment, than to deal with endless issues down the line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things To Keep In Mind
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Make Sure Your Company Allows It
&lt;/h3&gt;

&lt;p&gt;Every company has policies around sharing confidential information. Sometimes, a project, or even a single feature, can be sensitive enough that you're not allowed to mock it up using an external AI model. Typically, this isn't an issue if the company provides its own internal AI model, which keeps all data in-house.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do the Research Yourself or Consult Your Technical Team
&lt;/h3&gt;

&lt;p&gt;Yes, vibe coding is essentially telling an AI agent what to create, in plain English. But you still need a proper setup, which usually involves a small amount of configuration to get everything running. Consulting with your developers can make this even easier, they can have you up and running in just a few minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Models Do Exactly What You Tell Them, So Be Specific
&lt;/h3&gt;

&lt;p&gt;Make sure your instructions are precise. AI models often assume you want a fully functional system, complete with databases, caching, external requests, scaling, security - everything that comes with real software, because most people use vibe coding to actually build software (this is not recommended by me).&lt;/p&gt;

&lt;p&gt;If all you need is a dummy or mockup to use as a demo, &lt;strong&gt;you have to tell the AI that explicitly&lt;/strong&gt;. Doing so makes the model's job exponentially easier, produces more flexible results, &lt;strong&gt;and uses far fewer tokens&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Examples:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Simple Visual Mockup&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prompt:&lt;br&gt;
"Create a simple mockup of a project management dashboard for a web app. Include task lists, progress bars, and a calendar view. This is just a visual demo, do not include actual databases, APIs, or backend logic."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Feature Prototype&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prompt:&lt;br&gt;
"Generate a prototype for a feature where users can create, edit, and delete items. The prototype should show screens and buttons, but it does not need to connect to a database or have real functionality."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Internal Tool Demo&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prompt:&lt;br&gt;
"Produce a mockup for an internal reporting tool. Include charts, filters, and tables. Only visual elements are required, do not add real data fetching, authentication, or backend services."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Mobile App Example&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prompt:&lt;br&gt;
"Create a visual prototype of a mobile to-do app with three screens: task list, task details, and task creation. This is just a demo, no actual storage, API calls, or notifications are required."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Interactive Demo with Dummy Data&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prompt:&lt;br&gt;
"Build a mockup for a CRM dashboard with dummy data. Include client cards, search filters and activity logs. This is only a prototype for demonstration purposes, skip real functionality like databases, caching, or external requests."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As a developer, I'm not a fan of vibe coding, it's definitely not coding (nor "vibe"), and the name is kind of silly if you ask me. But that doesn't mean it's useless. &lt;strong&gt;In software development, everything is a tool. There are no inherently good or bad tools, only good and bad ways to use them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vibe coding can be a superpower for project managers, product managers, product owners, and others with limited technical knowledge. It's right there for you to use, with almost no learning curve. That's where I see the real value.&lt;/p&gt;

&lt;p&gt;If you're a product person, try suggesting this to your team: practice it, create a demo, and show the value in a tangible way. &lt;/p&gt;

&lt;p&gt;If you're a technical person struggling to understand requirements, invite your product people to try this approach. Make it a fun, knowledge-sharing session where you vibe code a dummy or mock application that looks like the real deal. The opportunities here are endless.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>productivity</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Metal Birds Watch: Copilot CLI Helped Me Watch Planes Without Looking Up</title>
      <dc:creator>Giorgi Kobaidze</dc:creator>
      <pubDate>Fri, 13 Feb 2026 20:01:12 +0000</pubDate>
      <link>https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0</link>
      <guid>https://dev.to/georgekobaidze/metal-birds-watch-copilot-cli-helped-me-watch-planes-without-looking-up-4ha0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Demo&lt;/li&gt;
&lt;li&gt;
What I Built

&lt;ul&gt;
&lt;li&gt;The Idea&lt;/li&gt;
&lt;li&gt;So, What Does It Do?&lt;/li&gt;
&lt;li&gt;Turns Out, It Wasn't That Simple&lt;/li&gt;
&lt;li&gt;The Solution&lt;/li&gt;
&lt;li&gt;A Few Words About the Tech Stack&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

My Experience with GitHub Copilot CLI

&lt;ul&gt;
&lt;li&gt;So Here's the Conclusion:&lt;/li&gt;
&lt;li&gt;And One Last Thing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Credits&lt;/li&gt;

&lt;li&gt;Useful Links&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;In this video, I not only present the demo, but also walk through the core purpose and motivation behind the project. I dive into the architecture and design decisions in detail, explaining how everything fits together and why certain approaches were chosen.&lt;/p&gt;

&lt;p&gt;You can check out the video chapters if you'd like to jump to a specific part, but I highly recommend watching the full video to get the complete picture and fully understand how everything connects.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/fe2eGNbItUk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;h3&gt;
  
  
  The Idea
&lt;/h3&gt;

&lt;p&gt;I love airplanes, traveling, airports, the sound of engines, everything related to aviation. For a long time, I've wanted to build something connected to that world. I just needed the right excuse.&lt;/p&gt;

&lt;p&gt;Then this challenge appeared. This was my though process:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Okay, this challenge looks fun. I need to use Copilot CLI.&lt;br&gt;
Alright, but what do I build? It has to be authentic. Cool. Creative and actually useful...&lt;/p&gt;

&lt;p&gt;Copilot CLI...&lt;br&gt;
Copilot...&lt;br&gt;
Pilot...&lt;br&gt;
Airplanes...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And suddenly it clicked.&lt;/p&gt;

&lt;p&gt;That was the moment &lt;strong&gt;Metal Birds Watch&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;What started as a word association turned into a real-time aircraft tracking app that notifies you when planes fly over you. Sometimes ideas don't come from complex brainstorming sessions, sometimes they come from connecting a few dots and letting your curiosity do the rest.&lt;/p&gt;

&lt;p&gt;This challenge didn't just give me a prompt, it gave me the push I needed to finally build something I'd been thinking about for years. And I'm insanely proud of how it turned out.&lt;/p&gt;

&lt;h3&gt;
  
  
  So, What Does It Do?
&lt;/h3&gt;

&lt;p&gt;As a regular aircraft nerd, I instinctively look up at the sky every time I hear an engine overhead. I try to guess the make and model, the airline, maybe even where it took off from or where it's heading. It's like a little game (I'm not the best at it though, my brother and mom absolutely destroy me at this game, they make me look like I've never seen a plane in my life).&lt;/p&gt;

&lt;p&gt;But there's one problem.&lt;/p&gt;

&lt;p&gt;I can't just stand outside all day watching planes. Most of the time I'm working - coding, building things, solving problems. I'm a busy guy, too busy.&lt;/p&gt;

&lt;p&gt;Sure, there are plenty of websites where you can track airplanes from all around the world in real time. But that still requires actively watching a screen. And again... I'm way too busy for that.&lt;/p&gt;

&lt;p&gt;So I decided to build something that would "watch the sky" for me.&lt;/p&gt;

&lt;p&gt;I use quotation marks because it doesn't literally watch the sky, it taps into real-time public flight data and detects when aircraft enter my area. When that happens, it sends me a notification. And if I miss it, the plane is still logged in my browser so I can check later and see what flew over my head.&lt;/p&gt;

&lt;p&gt;Instead of me watching planes, the app watches them for me. Hence the name &lt;strong&gt;Metal Birds Watch.&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.amazonaws.com%2Fuploads%2Farticles%2F7tmojjx9odbuxpabs16h.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.amazonaws.com%2Fuploads%2Farticles%2F7tmojjx9odbuxpabs16h.png" alt="Metal Birds Watch" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it out yourself using the following link: &lt;a href="https://metalbirdswatch.pilotronica.com/" rel="noopener noreferrer"&gt;https://metalbirdswatch.pilotronica.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Turns Out, It Wasn't That Simple
&lt;/h3&gt;

&lt;p&gt;The whole concept sounds pretty straightforward right?&lt;/p&gt;

&lt;p&gt;Fetch plane data periodically → filter by your area → trigger a notification. Easy!&lt;/p&gt;

&lt;p&gt;Well, nuh-uh! The architecture and implementation turned out to be way more complex than the idea itself.&lt;/p&gt;

&lt;p&gt;When you rely on a third-party public service, there are always limitations and rightfully so. Free APIs need rate limits. Without them, they'd be abused and become unusable for everyone.&lt;/p&gt;

&lt;p&gt;The API I used for this challenge is no exception. It has strict request limits, and I have to respect the limits. If I exceed them, my app runs out of credits and simply stops working.&lt;/p&gt;

&lt;p&gt;Usually when you're constrained by request limits or data quotas, the obvious solution is caching. Smart caching reduces the number of calls you make to the API provider. Great!&lt;/p&gt;

&lt;p&gt;But then comes the real question:&lt;/p&gt;

&lt;p&gt;How do you cache this kind of data?&lt;/p&gt;

&lt;p&gt;There are tens of thousands of aircraft in the sky at any given moment, scattered across the globe. I needed to keep a fine balance between caching too aggressively (which could overload my storage and keep irrelevant data) and not caching enough (which would burn through API credits in minutes).&lt;/p&gt;

&lt;p&gt;And that's where things started to get interesting.&lt;/p&gt;

&lt;p&gt;On top of that, I made a deliberate decision to keep the system simple.&lt;/p&gt;

&lt;p&gt;No persistent storage.&lt;/p&gt;

&lt;p&gt;And more importantly, no sensitive data stored anywhere.&lt;/p&gt;

&lt;p&gt;This is a privacy-first application. That means I don't store the user's location, IP address, or any personally identifiable information, not in a database, not in logs, not even in cache and any readable storage. Nor should it be retrievable via any endpoint.&lt;/p&gt;

&lt;p&gt;By now, you can probably tell there are already quite a few moving parts in this system.&lt;/p&gt;

&lt;p&gt;And we haven't even started talking about the actual solution yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;h4&gt;
  
  
  A Note Before You Dive In
&lt;/h4&gt;

&lt;p&gt;Disclaimer: This is one way to solve this problem, not the only way. There are many strategies and approaches you could take, and I'd love to hear your ideas or suggestions. Here's how I tackled it:&lt;/p&gt;

&lt;h4&gt;
  
  
  Caching by "Grid Cells"
&lt;/h4&gt;

&lt;p&gt;I decided to cache plane data based on what I call grid cells - basically, areas where multiple airplanes might be present. Instead of tracking every user individually, I group users by coordinates, rounding them to the nearest grid cell.&lt;/p&gt;

&lt;p&gt;Each grid cell is roughly &lt;code&gt;0.2° latitude × 0.2° longitude&lt;/code&gt;, about &lt;code&gt;22 km × 22 km&lt;/code&gt;. That's &lt;code&gt;484 km²&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For reference, San Francisco is &lt;code&gt;121 km²&lt;/code&gt;, so each grid cell is about four times larger.&lt;/p&gt;

&lt;p&gt;Users are grouped by rounding their coordinates to nearest &lt;code&gt;0.2°&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;User A&lt;/code&gt; at &lt;code&gt;(48.856, 2.352)&lt;/code&gt; → grid cell &lt;code&gt;48.8_2.4&lt;/code&gt; (cache key)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;User B&lt;/code&gt; at &lt;code&gt;(48.772, 2.421)&lt;/code&gt; → same grid cell &lt;code&gt;48.8_2.4&lt;/code&gt; (same cache key)&lt;/p&gt;

&lt;p&gt;Both users can get plane data for the area without storing their exact locations anywhere.&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.amazonaws.com%2Fuploads%2Farticles%2Fdniwxyjoyw0mrxarqyfi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdniwxyjoyw0mrxarqyfi.jpg" alt="Grid Cell" width="800" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, User B falls within the same grid cell initialized by User A, so both users share the same cache entry &lt;code&gt;48.8_2.4&lt;/code&gt;. Any user in this area will use the same entry.&lt;/p&gt;

&lt;h4&gt;
  
  
  Detection Radius
&lt;/h4&gt;

&lt;p&gt;After the plane data is retrieved, each user only sees aircraft within a 12 km detection radius centered on their location. This filtering happens on the client side to minimize backend resource usage and keep the system flexible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But there's an important edge case&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a user is near the edge of a grid cell, they might miss planes flying just outside the grid. Corner users could see only a quarter of the surrounding sky. See the diagram below for a better visualization:&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.amazonaws.com%2Fuploads%2Farticles%2Fqwrwpeedxjml9vokuvq1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwrwpeedxjml9vokuvq1.jpg" alt="Edge Case" width="800" height="799"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The green planes (Plane A and Plane C) are cached and fall within the detection radii of their respective users so notifications will be triggered. ✅&lt;/p&gt;

&lt;p&gt;The yellow plane (Plane B) is inside the grid cell, so it's cached as well. Users will see it on the page, but no notification will be sent until it enters one of the detection circles. ❌&lt;/p&gt;

&lt;p&gt;The white planes (Plane E, Plane D, and Plane F), however, are outside the grid cell and therefore won't be cached, nor will they be shown on the map, even though Plane D is technically within the detection radius of User C. ❌&lt;/p&gt;

&lt;p&gt;Now, this is a significant drawback, because it means some users might not receive fully accurate information about nearby planes.&lt;/p&gt;

&lt;p&gt;And this is exactly where the &lt;strong&gt;Bounding Box&lt;/strong&gt; strategy saves the day.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bounding Box
&lt;/h4&gt;

&lt;p&gt;Fetching a slightly larger rectangle ensures everyone gets the full "all-around" view.&lt;/p&gt;

&lt;p&gt;The backend actually fetches a 50 km × 50 km rectangle around the grid cell center, slightly larger than the grid itself, to ensure full coverage of the area.&lt;/p&gt;

&lt;p&gt;See the diagram below for a clearer view:&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.amazonaws.com%2Fuploads%2Farticles%2F6h7ksn87z8s2sxyicods.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6h7ksn87z8s2sxyicods.jpg" alt=" " width="800" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, Plane D has just turned green, which means User C will now receive a notification about it.&lt;/p&gt;

&lt;p&gt;Keep in mind: the bounding box serves a completely different purpose than the grid cell. If a new user appears within the bounding box but outside the existing grid cell, a new grid cell and consequently a new bounding box will be created for them. The bounding box's only job is to ensure that no planes are missed near the edges.&lt;/p&gt;

&lt;p&gt;Looking at the diagram, you can see that the bounding box doesn't need to be this large, which is fine for now. In future versions of the app, users will be able to adjust their detection radius and making it bigger (or smaller).&lt;/p&gt;

&lt;h4&gt;
  
  
  Smart Polling
&lt;/h4&gt;

&lt;p&gt;Clients don't poll the server at fixed intervals. Instead, the server tells each client when to request new data, based on cache freshness. This approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduces unnecessary polling&lt;/li&gt;
&lt;li&gt;Saves bandwidth&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Haversine Distance for Accuracy
&lt;/h4&gt;

&lt;p&gt;To calculate the exact distance between a plane and a user, I use the Haversine formula, which measures distance on a sphere. This ensures accurate notifications, even for users near the edge of a grid cell.&lt;/p&gt;

&lt;p&gt;This setup allows my app to provide real-time, privacy-first plane tracking, efficiently handling thousands of planes and users simultaneously.&lt;/p&gt;

&lt;h4&gt;
  
  
  Math Reference
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Constants
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KM_PER_DEGREE_LAT = 111 km (constant everywhere)
KM_PER_DEGREE_LON = 111 × cos(latitude) km (varies by latitude)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Longitude Varies
&lt;/h3&gt;

&lt;p&gt;Earth is a sphere. Longitude lines converge at poles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;At equator (0°):    1° longitude = 111 km
At Paris (48.8°):   1° longitude = 111 × cos(48.8°) = 73 km
At Oslo (60°):      1° longitude = 111 × cos(60°) = 55.5 km
At poles (90°):     1° longitude = 0 km
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Converting km to Degrees
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Δlat = distance_km / 111
Δlon = distance_km / (111 × cos(latitude))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bounding Box Calculation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Given center (φ, λ) and radius r km:

lat_min = φ - (r / 111)
lat_max = φ + (r / 111)
lon_min = λ - (r / (111 × cos(φ)))
lon_max = λ + (r / (111 × cos(φ)))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example: 25km around Paris (48.8°, 2.4°)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Δlat = 25 / 111 = 0.225°
Δlon = 25 / (111 × cos(48.8°)) = 25 / 73 = 0.342°

lat_min = 48.8 - 0.225 = 48.575
lat_max = 48.8 + 0.225 = 49.025
lon_min = 2.4 - 0.342 = 2.058
lon_max = 2.4 + 0.342 = 2.742
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Grid Rounding
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grid_lat = round(lat / 0.2) × 0.2
grid_lon = round(lon / 0.2) × 0.2
cache_key = "{grid_lat}_{grid_lon}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User location: (48.8712, 2.3891)

grid_lat = round(48.8712 / 0.2) × 0.2 = round(244.356) × 0.2 = 244 × 0.2 = 48.8
grid_lon = round(2.3891 / 0.2) × 0.2 = round(11.9455) × 0.2 = 12 × 0.2 = 2.4

cache_key = "48.8_2.4"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  A Few Words About the Tech Stack
&lt;/h3&gt;

&lt;p&gt;Even though I'm most proficient in .NET, I wanted to make this challenge more interesting by building it on something different, for a few reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I wanted to learn a technology I had less experience with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I'd get to interact more with Copilot CLI and explore its capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I needed a stack that's popular and widely used, making it easier for others to contribute in the future.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's how I landed on Node.js. It's completely different from .NET, but that's exactly the point! I wanted to step outside my comfort zone, explore a relatively unexplored area, and see how it felt. Spoiler: it felt just right!&lt;/p&gt;

&lt;p&gt;For the front-end, I kept things simple with plain HTML, CSS, and JavaScript. In the future, I plan to upgrade it with something more advanced, but for this challenge, simplicity was key.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I'm a huge fan of the CLI tools in general. To me, it's the single most efficient and authentic tool a software engineer can use. After all, every GUI tool is built on top of it. I often find myself struggling to understand GUI tools, which might make me look a bit weird to developers who can't live without their shiny interfaces, but I guess I'll never be able to understand that point of view.&lt;/p&gt;

&lt;p&gt;As amazing as Copilot is, it always lacked one feature I had been waiting for - the CLI tool. Now that it's finally here, there's no way I'm not going to use it.&lt;/p&gt;

&lt;p&gt;This was actually my first time using Copilot in CLI mode, and I was instantly amazed at how good of a communicator it is. The variety of model options is fantastic too, and I really appreciate the token system, each model consumes a specific number of tokens, allowing you to choose based on the complexity of your task.&lt;/p&gt;

&lt;p&gt;Copilot CLI didn't just help me create beautiful visuals and make the front-end fully responsive, it also helped me refine all the ideas I had sketched out before even starting to code. It improved my calculations to handle edge cases I hadn't considered, like normalizing longitude values.&lt;/p&gt;

&lt;p&gt;Here's how the conversation went like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Me: Can you explain the purpose of this normalization function?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Copilot CLI:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;This function ensures longitude values stay within the valid range of &lt;code&gt;-180° to +180°&lt;/code&gt;.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why it's needed:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- Longitude wraps around the Earth (&lt;code&gt;180° and -180°&lt;/code&gt; are the same line - the International Date Line)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- If a user pans the map far right, Leaflet might report longitude as &lt;code&gt;370°&lt;/code&gt; instead of &lt;code&gt;10°&lt;/code&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- API calls and distance calculations need standard &lt;code&gt;-180 to 180&lt;/code&gt; range&lt;br&gt;
How it works:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;1. &lt;code&gt;lon % 360&lt;/code&gt; - Wraps values into &lt;code&gt;-360 to 360&lt;/code&gt; range&lt;/em&gt;&lt;br&gt;
&lt;em&gt;2. &lt;code&gt;If &amp;gt; 180&lt;/code&gt; → subtract 360 (e.g., &lt;code&gt;270° → -90°&lt;/code&gt;)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;3. &lt;code&gt;If &amp;lt; -180&lt;/code&gt; → add 360 (e.g., &lt;code&gt;-270° → 90°&lt;/code&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example: User pans to longitude &lt;code&gt;540° → 540 % 360 = 180&lt;/code&gt; → returns &lt;code&gt;180°&lt;/code&gt; ✓&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is one of the highlights and a perfect example of how Copilot CLI can save you from overlooking subtle details. It really feels like having a fellow engineer by your side, pointing out mistakes, suggesting better alternatives, and even helping you implement them.&lt;/p&gt;

&lt;p&gt;Additionally, it was incredibly easy and convenient to create issues on my GitHub project board directly from the CLI. Based on the strategy and implementation details I provided, Copilot generated a neatly organized list of tasks for me. I didn't have to create them manually, which is a process that can be repetitive and time-consuming.&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.amazonaws.com%2Fuploads%2Farticles%2F7obikrmo7qd9jrid0prg.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.amazonaws.com%2Fuploads%2Farticles%2F7obikrmo7qd9jrid0prg.png" alt="Copilot Issues" width="800" height="909"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  So, Here's the Conclusion
&lt;/h3&gt;

&lt;p&gt;Would I be able to create this project only by myself? - Yes, absolutely.&lt;br&gt;
Would I be able to create the same exact project only by myself &lt;strong&gt;in less than 2 weeks&lt;/strong&gt;? - Probably not - the Copilot CLI really boosted my performance.&lt;/p&gt;

&lt;p&gt;I didn't encounter any issues or bugs while using Copilot CLI, which is impressive for a brand-new tool, especially since you'd normally expect at least some minor hiccups.&lt;/p&gt;

&lt;p&gt;Overall, I'm absolutely satisfied with Copilot CLI and I think it'll always have room in my toolbox from now on.&lt;/p&gt;

&lt;h3&gt;
  
  
  And One Last Thing
&lt;/h3&gt;

&lt;p&gt;This app has great potential. I've already planned many features that will be added in the future, and I'd love to see contributions from other software engineers as well.&lt;/p&gt;

&lt;p&gt;Check out the high-level roadmap in the screenshot on the website:&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.amazonaws.com%2Fuploads%2Farticles%2Fvfd39fim024txbxd8tkz.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.amazonaws.com%2Fuploads%2Farticles%2Fvfd39fim024txbxd8tkz.png" alt="Future Roadmap" width="800" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building this app wasn't just a coding challenge, it was a way to bring a piece of my passion for aviation into reality. Every line of code, every architecture decision, and every optimization I made was about connecting people to the thrill of watching planes even if they're stuck at a desk or on the go.&lt;/p&gt;

&lt;p&gt;It's amazing how technology can bridge the gap between curiosity and reality. With just a few carefully crafted algorithms, users can feel the sky above them, catch glimpses of planes flying overhead, and experience the small joys I've loved for years.&lt;/p&gt;

&lt;p&gt;This project reminded me that the best ideas aren't just about what you create, they're about the feeling they leave behind. For me, it's that little spark of excitement when a plane passes by, and now, thanks to this app, I can share that spark with anyone, anywhere. Working on this app reminded me that nothing makes me feel more alive than building and creating things that I'm passionate about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;Special thanks to the following projects and services that made this application possible:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensky-network.org/data/api" rel="noopener noreferrer"&gt;OpenSky Network API&lt;/a&gt; - An incredible public service providing real-time aviation data that powers this application ✈️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://leafletjs.com/" rel="noopener noreferrer"&gt;Leaflet&lt;/a&gt; - For delivering lightweight and powerful interactive maps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.openstreetmap.org/" rel="noopener noreferrer"&gt;OpenStreetMap&lt;/a&gt; - For providing the open-source map data and tiles&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/georgekobaidze/metal-birds-watch" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metalbirdswatch.pilotronica.com/" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/fe2eGNbItUk" rel="noopener noreferrer"&gt;Video Explanation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
