<?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: Einorde</title>
    <description>The latest articles on DEV Community by Einorde (@einorde).</description>
    <link>https://dev.to/einorde</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3468736%2Fe96eda32-33f5-4355-b375-461eb6f7eaa1.jpg</url>
      <title>DEV Community: Einorde</title>
      <link>https://dev.to/einorde</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/einorde"/>
    <language>en</language>
    <item>
      <title>"Be Anything You Want" — OK, Here's How (Technically)</title>
      <dc:creator>Einorde</dc:creator>
      <pubDate>Sun, 05 Apr 2026 12:11:02 +0000</pubDate>
      <link>https://dev.to/einorde/be-anything-you-want-ok-heres-how-technically-4i1d</link>
      <guid>https://dev.to/einorde/be-anything-you-want-ok-heres-how-technically-4i1d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fgtgpraqnhrwxpz929rig.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%2Fgtgpraqnhrwxpz929rig.png" alt="I want to be..." width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;"I Want To Be..."&lt;/strong&gt; is a life advice generator that takes your dreams and fulfills them — literally.&lt;/p&gt;

&lt;p&gt;Want to be rich? Change your name to Richard.&lt;br&gt;
Want to be a ninja? Wear all black and move slightly too quietly. People will get the idea.&lt;br&gt;
Want to be a cat? Knock something off a table and maintain eye contact. Cat energy.&lt;/p&gt;

&lt;p&gt;It's a genie who passed the bar exam for loopholes. You asked, we delivered. Technically.&lt;/p&gt;

&lt;p&gt;44 categories of deadpan, literally-correct life hacks — from "astronaut" to "wizard" to "left alone" — plus 24 universal fallback answers for the truly original dreamers. Every answer is technically true. None of them are helpful. All of them are stamped &lt;strong&gt;100% LEGIT ADVICE&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://einorde.github.io/i-want-to-be/" rel="noopener noreferrer"&gt;Try it live on GitHub Pages&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Type in your dream (or click a suggestion chip), hit &lt;strong&gt;GO&lt;/strong&gt;, and receive your personalized life hack — complete with confetti, because every piece of advice deserves a celebration.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instant, client-side advice — no API calls, no loading spinners (well, a fake one for dramatic effect)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Another One"&lt;/strong&gt; button when one piece of wisdom isn't enough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy &amp;amp; Share&lt;/strong&gt; to spread the enlightenment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Previous Wisdom&lt;/strong&gt; history so you can review your journey of personal growth&lt;/li&gt;
&lt;li&gt;Fully responsive — receive life-changing advice on any device&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&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/Einorde" rel="noopener noreferrer"&gt;
        Einorde
      &lt;/a&gt; / &lt;a href="https://github.com/Einorde/i-want-to-be" rel="noopener noreferrer"&gt;
        i-want-to-be
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;I Want To Be...&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Technically correct advice. Guaranteed results.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://einorde.github.io/i-want-to-be/" rel="nofollow noopener noreferrer"&gt;Try it live&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Einorde/i-want-to-be/i-want-to-be.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%2FEinorde%2Fi-want-to-be%2FHEAD%2Fi-want-to-be.png" alt="I Want To Be... preview"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tell us your dream. We'll find the shortcut.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"I want to be rich" → "Change your name to Richard."&lt;/p&gt;
&lt;p&gt;"I want to be a ninja" → "Wear all black and move slightly too quietly. People will get the idea."&lt;/p&gt;
&lt;p&gt;"I want to be a cat" → "Knock something off a table and maintain eye contact. Cat energy."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is this?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A life advice generator that takes your dreams and fulfills them in the most literally correct way possible. Think of it as a genie who passed the bar exam for loopholes.&lt;/p&gt;
&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/aprilfools-2026" rel="nofollow"&gt;Dev.to April Fools Challenge&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;ul&gt;
&lt;li&gt;44 categories of literal life hacks covering everything from "rich" to "a wizard" to "left alone"&lt;/li&gt;
&lt;li&gt;24 universal fallback answers for when your dream is too unique even for us&lt;/li&gt;
&lt;li&gt;Zero API calls — all advice is locally…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Einorde/i-want-to-be" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The entire engine lives in a single &lt;code&gt;answers.js&lt;/code&gt; file — a keyword-matching system with 44 category pools and a fallback pool. No AI, no APIs, no machine learning. Just a large &lt;code&gt;switch&lt;/code&gt; statement's spiritual successor and a lot of deadpan energy.&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="c1"&gt;// The core loop: match keywords → pick random answer&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getAnswer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wish&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;wish&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;wish&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;pick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FALLBACKS&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;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wish&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;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;findCategory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;cat&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;pick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;pick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FALLBACKS&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;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tech stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML + CSS + vanilla JavaScript&lt;/li&gt;
&lt;li&gt;Zero dependencies, zero build steps&lt;/li&gt;
&lt;li&gt;Google Fonts (Bebas Neue + DM Mono) for that editorial/brutalist aesthetic&lt;/li&gt;
&lt;li&gt;Deployed on GitHub Pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Design approach:&lt;/strong&gt; The UI is intentionally designed to look like a legitimate, well-crafted advice tool — editorial typography, a newspaper-inspired layout, sharp borders, noise texture overlay, and a "THE SOLUTION" label with a red "100% LEGIT ADVICE" certification stamp. The earnest presentation makes the deadpan answers land harder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The humor engine:&lt;/strong&gt; Each category has a list of keywords and a pool of 4-6 answers. Input is normalized (lowercased, punctuation stripped), then matched against keywords using word-boundary regex. First category match wins. If nothing matches, you get a universal fallback like &lt;em&gt;"Google it. Click the first result. You now know as much as most experts."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The whole thing started from a meme about literal problem-solving — want to live in a mansion? Apply to be the housekeeper. Want to be Elon Musk? Just change your name. We turned that energy into 200+ answers across 44 categories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Community Favorite&lt;/strong&gt; — because everyone has something they want to be, and everyone deserves technically correct but spiritually empty advice about how to get there.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>This Rubber Duck Doesn't Debug — It Roasts</title>
      <dc:creator>Einorde</dc:creator>
      <pubDate>Sun, 05 Apr 2026 10:05:17 +0000</pubDate>
      <link>https://dev.to/einorde/this-rubber-duck-doesnt-debug-it-roasts-1g44</link>
      <guid>https://dev.to/einorde/this-rubber-duck-doesnt-debug-it-roasts-1g44</guid>
      <description>&lt;h1&gt;
  
  
  This Rubber Duck Doesn't Debug — It Roasts
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F3kzeiccn5le9skopfye6.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%2F3kzeiccn5le9skopfye6.PNG" alt="Rubber Roast Logo" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Rubber Roast&lt;/strong&gt; — a VS Code extension that turns your rubber duck into a judgmental code critic.&lt;/p&gt;

&lt;p&gt;We're all vibe coding now. You prompt, the AI writes, you hit accept, and ship. But AI-generated code still leaves behind &lt;code&gt;catch(e) {}&lt;/code&gt;, hardcoded secrets, 80-line functions, and enough &lt;code&gt;console.log&lt;/code&gt; statements to fill a novel. And when you're vibing, you're not reading every line.&lt;/p&gt;

&lt;p&gt;So I built a duck that does.&lt;/p&gt;

&lt;p&gt;Inspired by &lt;a href="https://cs50.harvard.edu/x/2024/" rel="noopener noreferrer"&gt;CS50's rubber duck debugging&lt;/a&gt; — except this duck doesn't just listen. It reads your code, finds the smells, and &lt;em&gt;roasts you for them&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Every time you save a file, Rubber Roast scans for code smells and drops sarcastic inline annotations right next to the offending lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardcoded an API key? &lt;em&gt;"This credential has the security of a screen door on a submarine."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Left a &lt;code&gt;catch(e) {}&lt;/code&gt;? &lt;em&gt;"Pokemon exception handling: gotta catch 'em all... and ignore 'em all."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;47 &lt;code&gt;console.log&lt;/code&gt; statements? &lt;em&gt;"This is not a program, it's a console.log delivery system."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;TODO comment from 3 years ago? &lt;em&gt;"This TODO has been through 47 sprints and 3 project managers."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each roast is color-coded by severity — green for mild, yellow for medium, pink for spicy — with a duck emoji so you know exactly who's judging you.&lt;/p&gt;

&lt;p&gt;Two roast engines included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Template mode&lt;/strong&gt; (free) — hundreds of savage one-liners, zero API calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LM mode&lt;/strong&gt; — uses VS Code's Language Model API so your AI copilot can roast you too&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It catches 7 types of code smells via built-in regex (TODO/HACK, empty catch, commented-out code, console.log spam, hardcoded secrets, long functions, repeated magic strings) — plus everything your linters and language servers already flag (type errors, unused variables, deprecated APIs, lint violations, and more).&lt;/p&gt;

&lt;p&gt;Behind the jokes, it's a real code smell detector. You just happen to learn about your mistakes while laughing at them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&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%2F6wrrxljfz6sfzjddwiaz.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%2F6wrrxljfz6sfzjddwiaz.png" alt="Rubber Roast in action" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it yourself: &lt;a href="https://marketplace.visualstudio.com/items?itemName=Einorde.rubber-roast" rel="noopener noreferrer"&gt;Rubber Roast on VS Code Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/Einorde" rel="noopener noreferrer"&gt;
        Einorde
      &lt;/a&gt; / &lt;a href="https://github.com/Einorde/rubber-roast" rel="noopener noreferrer"&gt;
        rubber-roast
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;Rubber Roast&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Your rubber duck finally has opinions — detect code smells, get roasted with sarcastic inline annotations.&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a href="https://cs50.harvard.edu/x/2024/" rel="nofollow noopener noreferrer"&gt;CS50's rubber duck debugging&lt;/a&gt;, but this duck fights back.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Einorde/rubber-roast/images/screenshot.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%2FEinorde%2Frubber-roast%2FHEAD%2Fimages%2Fscreenshot.png" alt="Rubber Roast in action"&gt;&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inline roast comments&lt;/strong&gt; — sarcastic one-liners appear as italic annotations next to problematic lines, color-coded by severity (mild/medium/spicy)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two roast engines&lt;/strong&gt; — free template-based roasts or AI-generated roasts via the VS Code Language Model API (requires Copilot or similar)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-roast&lt;/strong&gt; — triggers on file save, file switch, and diagnostic updates&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;What Gets Roasted&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Rubber Roast detects code smells from two sources:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built-in regex rules&lt;/strong&gt; — these work out of the box, no linter required:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Smell&lt;/th&gt;
&lt;th&gt;What it catches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TODO/HACK comments&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;// TODO&lt;/code&gt;, &lt;code&gt;// FIXME&lt;/code&gt;, &lt;code&gt;// HACK&lt;/code&gt;, &lt;code&gt;// WORKAROUND&lt;/code&gt;, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty catch blocks&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;catch(e) {}&lt;/code&gt; — swallowing errors silently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commented-out code&lt;/td&gt;
&lt;td&gt;3+ consecutive lines of commented code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardcoded secrets&lt;/td&gt;
&lt;td&gt;API keys, tokens, and high-entropy strings in&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/Einorde/rubber-roast" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; — the entire extension, zero runtime dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code Extension API&lt;/strong&gt; — inline text decorations, diagnostic listeners, commands, status bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex-based scanner&lt;/strong&gt; — custom pattern matching with line classification (code vs comment vs string) to avoid false positives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostic scanner&lt;/strong&gt; — hooks into existing language servers (ESLint, TypeScript, Pyright, Ruff, rust-analyzer, etc.) and classifies their output into roastable categories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code Language Model API&lt;/strong&gt; — optional AI-powered roasts via Copilot with template fallback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shannon entropy detection&lt;/strong&gt; — for catching hardcoded secrets that don't match known prefixes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;esbuild&lt;/strong&gt; — bundling everything into a single file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No external APIs. No telemetry. Just pure, locally-executed judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;Open to any category the judges see fit — this duck doesn't pick favorites, it just roasts everyone equally.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
