<?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: Ankitkumar Singh</title>
    <description>The latest articles on DEV Community by Ankitkumar Singh (@thedevankit).</description>
    <link>https://dev.to/thedevankit</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%2F375885%2Faa63455b-11e0-4b6f-a3c0-95bcd7c1c378.png</url>
      <title>DEV Community: Ankitkumar Singh</title>
      <link>https://dev.to/thedevankit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thedevankit"/>
    <language>en</language>
    <item>
      <title>Security Is a Myth | The Axios Supply Chain Attack</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Tue, 31 Mar 2026 18:23:06 +0000</pubDate>
      <link>https://dev.to/thedevankit/security-is-a-myth-the-axios-supply-chain-attack-ig9</link>
      <guid>https://dev.to/thedevankit/security-is-a-myth-the-axios-supply-chain-attack-ig9</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;CRITICAL INCIDENT SUMMARY&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LIVE ALERT:&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt; and &lt;code&gt;axios@0.30.4&lt;/code&gt; removed from npm. RAT dropper confirmed. Exposure window: ~2 hours 53 minutes. If you installed Axios between 00:21 and 03:15 UTC on March 31, &lt;strong&gt;assume compromise.&lt;/strong&gt; C2: &lt;code&gt;sfrclak.com&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What is a Supply Chain Attack?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;supply chain attack&lt;/strong&gt; is a cyberattack where an adversary compromises a trusted third-party component—such as a software dependency, build system, or update mechanism—to indirectly gain access to downstream systems.&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%2Ft89frgojnf5hpu5zwvah.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%2Ft89frgojnf5hpu5zwvah.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of attacking the primary target directly, the attacker targets a weaker or less monitored link in the supply chain and leverages established trust relationships to propagate malicious code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Works
&lt;/h2&gt;

&lt;p&gt;Modern software systems rely heavily on external dependencies, automated CI/CD pipelines, and signed update mechanisms. These introduce implicit trust boundaries that are rarely verified at runtime.&lt;/p&gt;

&lt;p&gt;Once a trusted component is compromised, its consumers inherit that compromise without additional scrutiny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attack Vectors
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Compromised Dependencies
&lt;/h3&gt;

&lt;p&gt;Attackers inject malicious code into open-source packages (e.g., npm, PyPI). This often includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintainer account takeover&lt;/li&gt;
&lt;li&gt;Malicious version publishing&lt;/li&gt;
&lt;li&gt;Dependency confusion (publishing a higher-version package to public registries)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt;&lt;br&gt;
Every downstream project that installs or updates the dependency executes attacker-controlled code.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Transitive Dependency Exploitation (Critical)
&lt;/h3&gt;

&lt;p&gt;Most projects don’t directly depend on vulnerable packages—they inherit them indirectly.&lt;/p&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;Your app → Library A → Library B (malicious)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Developers often don’t audit deep dependency trees&lt;/li&gt;
&lt;li&gt;This makes it a high-leverage attack vector&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Build Pipeline Compromise
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Attackers breach CI/CD systems or build servers&lt;/li&gt;
&lt;li&gt;They inject malicious code during the build process&lt;/li&gt;
&lt;li&gt;The resulting artifact is legitimately signed and distributed
This makes detection significantly harder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Software Update Channel Hijacking
&lt;/h3&gt;

&lt;p&gt;Attackers compromise update infrastructure and distribute malicious updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this is effective:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updates are trusted implicitly&lt;/li&gt;
&lt;li&gt;Users rarely validate update integrity beyond signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Actually Happened
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;100M+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Axios weekly downloads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2h 53m&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Total exposure window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;18 hrs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-staged in advance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Target platforms (macOS, Windows, Linux)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What and How The Attack Happened
&lt;/h3&gt;

&lt;p&gt;On March 30th, 2026, a hacker compromised the npm account of &lt;strong&gt;axios's&lt;/strong&gt; primary maintainer. Axios is the industry-standard JavaScript HTTP client, boasting over 100 million weekly downloads. The attacker changed the maintainer's registered email to a ProtonMail address and published two poisoned versions: &lt;code&gt;axios@1.14.1&lt;/code&gt; and &lt;code&gt;axios@0.30.4&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Security firm &lt;strong&gt;StepSecurity&lt;/strong&gt; flagged the versions within three hours. However, the damage potential remains high; anyone who downloaded the code during that window is advised to treat their system as fully compromised.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There are zero lines of malicious code inside axios itself—and that's exactly what makes this attack so dangerous."&lt;br&gt;
— &lt;em&gt;StepSecurity Technical Analysis, March 31, 2026&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The hacker didn't modify axios's source code. Instead, they added a single "phantom" dependency to &lt;code&gt;package.json&lt;/code&gt;: &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;. When a developer ran &lt;code&gt;npm install&lt;/code&gt;, this package triggered a &lt;code&gt;postinstall&lt;/code&gt; hook to deploy a cross-platform Remote Access Trojan (RAT).&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Attack Was Constructed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Account Hijack
&lt;/h3&gt;

&lt;p&gt;The attacker targeted &lt;code&gt;jasonsaayman&lt;/code&gt;. While legitimate axios releases use &lt;strong&gt;OIDC Trusted Publishers&lt;/strong&gt; (linked to GitHub Actions), &lt;code&gt;axios@1.14.1&lt;/code&gt; was pushed manually using a stolen classic npm token. There was no corresponding commit or tag in the GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legitimate vs. Malicious Metadata:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;axios@&lt;/span&gt;&lt;span class="mf"&gt;1.14&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;LEGITIMATE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"_npmUser"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GitHub Actions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm-oidc-no-reply@github.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trustedPublisher"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;axios@&lt;/span&gt;&lt;span class="mf"&gt;1.14&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MALICIOUS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"_npmUser"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jasonsaayman"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ifstap@proton.me"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Missing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;trustedPublisher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;gitHead&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;h3&gt;
  
  
  2. The Decoy (18 Hours Early)
&lt;/h3&gt;

&lt;p&gt;The attacker first published &lt;code&gt;plain-crypto-js@4.2.0&lt;/code&gt;, a clean copy of the legitimate &lt;code&gt;crypto-js&lt;/code&gt; library, to build account history and bypass "zero-history" scanners. 18 hours later, version &lt;code&gt;4.2.1&lt;/code&gt; was published—this time armed with &lt;code&gt;setup.js&lt;/code&gt;, a 4.2 KB obfuscated dropper.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Injection
&lt;/h3&gt;

&lt;p&gt;Exactly one file changed in the Axios package: &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;axios@&lt;/span&gt;&lt;span class="mf"&gt;1.14&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;malicious&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"follow-redirects"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"form-data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxy-from-env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plain-crypto-js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.2.1"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Never&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;actually&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;imported&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;code&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;h2&gt;
  
  
  Attack Timeline (UTC)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mar 30 - 05:57:&lt;/strong&gt; &lt;strong&gt;Decoy published.&lt;/strong&gt; &lt;code&gt;plain-crypto-js@4.2.0&lt;/code&gt; (clean).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 30 - 23:59:&lt;/strong&gt; &lt;strong&gt;Weapon armed.&lt;/strong&gt; &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; (malicious) published.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 31 - 00:21:&lt;/strong&gt; &lt;strong&gt;Payload deployed.&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt; hits npm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 31 - 01:00:&lt;/strong&gt; &lt;strong&gt;Legacy branch poisoned.&lt;/strong&gt; &lt;code&gt;axios@0.30.4&lt;/code&gt; published.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 31 - 03:15:&lt;/strong&gt; &lt;strong&gt;Takedown.&lt;/strong&gt; npm removes malicious versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 31 - 04:26:&lt;/strong&gt; &lt;strong&gt;Package killed.&lt;/strong&gt; npm replaces &lt;code&gt;plain-crypto-js&lt;/code&gt; with a security stub.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Malware Behavior by Platform
&lt;/h2&gt;

&lt;p&gt;The dropper contacts &lt;code&gt;sfrclak.com:8000&lt;/code&gt; within two seconds of installation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OS&lt;/th&gt;
&lt;th&gt;Payload Action&lt;/th&gt;
&lt;th&gt;Indicator (IOC)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AppleScript downloads RAT binary; disguised as system daemon.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/Library/Caches/com.apple.act.mond&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Persists by copying PowerShell to &lt;code&gt;%PROGRAMDATA%\wt.exe&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;%PROGRAMDATA%\wt.exe&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Uses &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;nohup&lt;/code&gt; to run a Python RAT detached from PID.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/tmp/ld.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Post-Infection Stealth:&lt;/strong&gt; The dropper deletes &lt;code&gt;setup.js&lt;/code&gt; and the malicious &lt;code&gt;package.json&lt;/code&gt; entries after execution. &lt;code&gt;npm audit&lt;/code&gt; will return clean even while the RAT is active.&lt;/p&gt;




&lt;h2&gt;
  
  
  Indicators of Compromise (IOCs)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;npm package&lt;/td&gt;
&lt;td&gt;&lt;code&gt;axios@1.14.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MALICIOUS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm package&lt;/td&gt;
&lt;td&gt;&lt;code&gt;axios@0.30.4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MALICIOUS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2 Domain&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sfrclak.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;BLOCK NOW&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2 IP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;142.11.206.73&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;BLOCK NOW&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attacker&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nrwise@proton.me&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;THREAT ACTOR&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Immediate Action Plan
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;[!CAUTION]&lt;br&gt;
&lt;strong&gt;If you installed Axios during the exposure window, rebuild your environment from scratch. Do not attempt to "clean" the infection.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check Version:&lt;/strong&gt; &lt;code&gt;npm list axios | grep -E "1\.14\.1|0\.30\.4"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for Dropper:&lt;/strong&gt; &lt;code&gt;ls node_modules/plain-crypto-js&lt;/code&gt;. If this folder exists, you are compromised.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Downgrade:&lt;/strong&gt; Use &lt;code&gt;axios@1.14.0&lt;/code&gt; or &lt;code&gt;axios@0.30.3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Network:&lt;/strong&gt; Sinkhole &lt;code&gt;sfrclak.com&lt;/code&gt; at the firewall level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate Secrets:&lt;/strong&gt; AWS keys, SSH keys, npm tokens, and &lt;code&gt;.env&lt;/code&gt; variables must be cycled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prevention:&lt;/strong&gt; Update CI/CD to use &lt;code&gt;npm ci --ignore-scripts&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Road Ahead: Python &amp;amp; Beyond
&lt;/h2&gt;

&lt;p&gt;The Axios attack is a blueprint. Python's &lt;code&gt;setup.py&lt;/code&gt; and &lt;code&gt;pyproject.toml&lt;/code&gt; hooks offer an identical attack surface. The risk in the Python ecosystem is arguably higher; ML and Data Science pipelines often run with direct access to sensitive model weights and production data, often with less outbound monitoring than frontend environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Actual Takeaway
&lt;/h3&gt;

&lt;p&gt;Security industry focus on source code (SAST/DAST) failed here. This attack lived entirely in the metadata and registry-level hooks. Treat package installation as a &lt;strong&gt;privileged operation&lt;/strong&gt;. Pin your dependencies, verify lockfiles, and monitor outbound connections from build environments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Almost Burned My Project Down And Why It Was Entirely My Fault</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Fri, 27 Feb 2026 18:10:39 +0000</pubDate>
      <link>https://dev.to/thedevankit/the-night-ai-almost-burned-my-project-down-and-why-it-was-entirely-my-fault-4c6k</link>
      <guid>https://dev.to/thedevankit/the-night-ai-almost-burned-my-project-down-and-why-it-was-entirely-my-fault-4c6k</guid>
      <description>&lt;p&gt;&lt;em&gt;A story about trust, speed, and the all-nighter I didn't see coming.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;It started on a Tuesday afternoon that felt completely normal.&lt;/p&gt;

&lt;p&gt;Standup was quick. The backlog was manageable. Someone cracked a joke in Slack that actually landed. I remember thinking — this sprint might actually be clean. No fires. No last-minute pivots. Just heads-down building.&lt;/p&gt;

&lt;p&gt;By Wednesday at 3am, I was still at my desk, cold coffee next to me, staring at a system that had quietly swallowed itself whole.&lt;/p&gt;

&lt;p&gt;This is that story.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project That Shouldn't Have Been This Hard
&lt;/h2&gt;

&lt;p&gt;The project wasn't complex. I want to be honest about that because it matters. It wasn't a distributed system with a hundred moving parts. It wasn't a greenfield build under impossible deadlines. It was a focused internal tool — a smart assistant layer that would help the team work faster, pull from our existing data, and surface answers without making everyone dig through three different platforms to find them.&lt;/p&gt;

&lt;p&gt;Scoped right, it was a four to six week job. Manageable. The kind of project that should feel good to ship.&lt;/p&gt;

&lt;p&gt;I had the tools. I had the access. I had the enthusiasm of someone who genuinely believes AI is changing how we build things — because it is. And I had just enough confidence to skip a few steps I should not have skipped.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day One: The Speed Was Intoxicating
&lt;/h2&gt;

&lt;p&gt;Here's what nobody warns you about when you first start building seriously with AI coding tools: the first few days feel like a superpower.&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%2Fckyiw7bkb0qa4ejncfdh.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%2Fckyiw7bkb0qa4ejncfdh.png" alt=" " width="799" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was generating components faster than I'd ever written them. The scaffolding went up in hours. Questions I'd normally spend twenty minutes researching got answered in seconds — with context, with examples, with follow-up explanations that were genuinely good. I remember leaning back at one point and thinking, &lt;em&gt;this is what building is supposed to feel like.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The problem is that feeling is real. The speed is real. The output is real. What's not real — what you don't see yet — is the foundation underneath.&lt;/p&gt;

&lt;p&gt;I wasn't laying groundwork. I was building on top of whatever the AI decided the groundwork should look like.&lt;/p&gt;

&lt;p&gt;No agreed libraries. No defined patterns. No written rules about how this system was supposed to behave. I figured I'd sort those things out as they came up. Experienced developers do that all the time, right?&lt;/p&gt;

&lt;p&gt;Yes. But experienced developers also carry ten years of instinct about what to sort out before it becomes a problem. I was moving so fast that I outsourced that instinct to something that doesn't have instincts — it has probabilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  The LLM Problem Nobody Talks About
&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%2Fbcn74rbb1neevmvsdnwn.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%2Fbcn74rbb1neevmvsdnwn.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core of this project involved integrating a language model layer that could handle user queries and return intelligent, contextual responses. Straightforward enough on paper.&lt;/p&gt;

&lt;p&gt;The issue came when I started testing at any kind of realistic load.&lt;/p&gt;

&lt;p&gt;I tried every major LLM integration option available. I didn't commit to one and move on — I tested them, switched when one seemed limited, read the docs on the next, switched again. Each time, the demo worked perfectly. One user, one query, one clean response. Beautiful.&lt;/p&gt;

&lt;p&gt;Multiple users, concurrent requests, real-world conditions? Every single one had the same problem. The system choked. Not loudly — that would have been easier. It choked quietly, queueing requests, slowing to a crawl, occasionally just dropping things without telling anyone.&lt;/p&gt;

&lt;p&gt;And here's the part that stings: this isn't a secret limitation. It's documented. It's discussed in forums and threads and technical write-ups that I would have found immediately if I had asked a human who'd done this before. Someone with production experience in AI systems would have flagged this in a thirty-minute call during the planning phase.&lt;/p&gt;

&lt;p&gt;I didn't make that call. I trusted the tools to surface what I needed to know, and tools don't know what they don't know about your specific situation. That's not their job. That's yours.&lt;/p&gt;

&lt;p&gt;By the time I understood the architecture had a fundamental problem baked into it, the architecture was built. There was no elegant fix. There was only rework — and the clock was ticking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wednesday Afternoon: The Cracks Become Visible
&lt;/h2&gt;

&lt;p&gt;It's funny how systems fail. Not all at once, which would be obvious. They fail in accumulation. One small thing goes wrong and you patch it. Then another small thing. Then a third that turns out to be connected to the first in a way you didn't expect.&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%2Fnahl20uhocr7vugut43o.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%2Fnahl20uhocr7vugut43o.png" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;br&gt;
By Wednesday afternoon I was maintaining three separate patches for problems that, it turned out, all had the same root cause: code that worked in isolation but didn't understand the system it was part of. Because there were no rules about the system when the code was written.&lt;/p&gt;

&lt;p&gt;The AI had been producing code that was locally correct. Each function did what the function was supposed to do. But none of it was talking to the rest of the project with any coherence. Different modules were handling errors differently. Data was being structured four different ways depending on which session generated the code. One part of the system was using async patterns correctly. Another wasn't. Nobody had told the AI which way we were doing things — so it made reasonable guesses, and they weren't always the same guess.&lt;/p&gt;

&lt;p&gt;I was the only one who could see the whole picture, and I was starting to see that the picture was a mess.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Feature That Broke Everything
&lt;/h2&gt;

&lt;p&gt;At some point in the middle of all this, I was still adding features.&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%2Fbj2asrsyqdlr0dab11kr.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%2Fbj2asrsyqdlr0dab11kr.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know how that sounds. But this is the thing about building with AI at speed — the path of least resistance is always forward. The tool makes it easy to keep going. One more module. One more integration. One more edge case handled.&lt;/p&gt;

&lt;p&gt;I had built support for scenarios that would never happen. I had added configuration options for combinations of settings that no real user would ever touch. I had written fallback logic for failures that, in this system, were structurally impossible. All of it suggested by the AI, all of it reasonable-sounding, none of it necessary.&lt;/p&gt;

&lt;p&gt;The codebase wasn't just buggy. It was bloated. There was dead weight everywhere — code that existed for imaginary futures, guarding against imaginary problems, building toward imaginary scale. And all of it was my responsibility, because I approved every line.&lt;/p&gt;

&lt;p&gt;By Wednesday evening, I had a system that was too complex to debug quickly, too inconsistent to patch cleanly, and too centralized to ask anyone else for help. Because I hadn't told anyone how it worked. Because only I had access to the parts that mattered. Because I had been moving so fast, and so alone, that I had accidentally made myself a single point of failure inside my own project.&lt;/p&gt;




&lt;h2&gt;
  
  
  11pm: The All-Nighter Begins
&lt;/h2&gt;

&lt;p&gt;There's a specific quality to the air when you realize you're not sleeping.&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%2Fsg64z9dd4n6si6676sbt.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%2Fsg64z9dd4n6si6676sbt.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not panic — panic has more energy than this. It's something quieter. A resignation. A reckoning with the distance between where you are and where you need to be, and the math of how long it's going to take.&lt;/p&gt;

&lt;p&gt;I opened a blank document and started writing down everything I knew about the system — the actual system, not the intended one. What each piece did. Where the dependencies were. What the failure modes looked like. I was documenting a mess in real time, and the act of writing it out made the mess clearer and worse simultaneously.&lt;/p&gt;

&lt;p&gt;The LLM layer was the most urgent problem. Every fix I tried created a different failure downstream. I kept asking the AI to help me debug. Sometimes it could. Sometimes it would generate a solution that sounded right, that I would implement at 1am with diminishing judgment, only to realize thirty minutes later it had introduced a new problem in a different place. The tool that had felt like a superpower on day one was now a collaborator with the same incomplete picture I had — because I had never given either of us the full picture to begin with.&lt;/p&gt;

&lt;p&gt;At around 2am I made a decision I should have made ten hours earlier: I stopped adding to the system and started removing from it.&lt;/p&gt;

&lt;p&gt;I cut every feature that wasn't core. Every fallback that didn't have a real scenario. Every configuration option nobody had asked for. The codebase got smaller and smaller and, as it did, the actual problem became easier to see.&lt;/p&gt;

&lt;p&gt;The real issue was never the LLM. It was the assumption I had built around it — that it could handle concurrent load in a way that matched the user experience I'd promised — without ever actually testing that assumption against real conditions. I had trusted the demo. Demos are lies. Not malicious lies. Optimistic ones. But lies.&lt;/p&gt;

&lt;p&gt;By 4am I had a system that worked. Not the system I'd planned. A smaller, cleaner, more honest system. One that did fewer things and did them correctly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Morning Revealed
&lt;/h2&gt;

&lt;p&gt;The next morning I had a call with the team.&lt;/p&gt;

&lt;p&gt;This is the part of the story I don't tell often enough, because it's uncomfortable.&lt;/p&gt;

&lt;p&gt;They had questions I couldn't fully answer — about the deployment process, about how to roll back if something broke, about which environment variables controlled what. I'd held all of that in my head. It wasn't in any document. Nobody else had server access. Nobody had been involved in the decisions that shaped the architecture.&lt;/p&gt;

&lt;p&gt;I'd been so focused on building that I'd forgotten I was supposed to be building &lt;em&gt;with&lt;/em&gt; people.&lt;/p&gt;

&lt;p&gt;The project wasn't ruined. But the trust — the feeling that the team had full visibility into what they were working on — had a hole in it. Not because of malice. Because of a workflow that had become, without me noticing, a single-person operation dressed up as a team project.&lt;/p&gt;

&lt;p&gt;The real liability wasn't the bugs. It was that I had let AI-assisted speed become a substitute for human collaboration. I had chosen the tool's confidence over my team's input, and that choice had consequences that a code fix alone couldn't resolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Tell Anyone Starting a Project Like This
&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%2F3vcb45u77qbbm3zsrpr0.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%2F3vcb45u77qbbm3zsrpr0.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;br&gt;
The tools are not the problem. I will keep saying this because it's true. Cursor, Copilot, every AI coding assistant on the market — they're genuinely extraordinary. They make real things possible faster than was imaginable a few years ago.&lt;/p&gt;

&lt;p&gt;But speed without structure isn't productivity. It's acceleration toward a wall you don't see yet.&lt;/p&gt;

&lt;p&gt;Write your rules before you generate anything. What libraries. What patterns. What's off limits. Give the AI a context brief like you're onboarding a new team member — because in a real sense, you are. Test the critical assumptions in your architecture against actual load, actual users, actual conditions, before you build the rest of the project on top of them. Bring in a human who's done it before for the decisions that are hard to undo.&lt;/p&gt;

&lt;p&gt;Build with your team, not in spite of them. Share access. Document while you go. Make the project survivable without you.&lt;/p&gt;

&lt;p&gt;And when the AI gives you something fast and clean and confident — ask what happens when it breaks.&lt;/p&gt;

&lt;p&gt;The all-nighter taught me all of this. I wish it hadn't needed to.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The project shipped. It's running clean. But the lessons from that Wednesday night are the kind that don't fade — they just become the checklist you run before every new build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Mirror Problem: When AI Confidence Becomes Your Biggest Liability</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Sun, 30 Nov 2025 17:12:37 +0000</pubDate>
      <link>https://dev.to/thedevankit/the-mirror-problem-when-ai-confidence-becomes-your-biggest-liability-26k1</link>
      <guid>https://dev.to/thedevankit/the-mirror-problem-when-ai-confidence-becomes-your-biggest-liability-26k1</guid>
      <description>&lt;p&gt;When artificial intelligence systems lie with unwavering certainty, who's really to blame—the machine or the humans who taught it to never admit doubt?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Student Who Trusted Too Much
&lt;/h2&gt;

&lt;p&gt;Ankit spent three weeks building his machine learning capstone project around a research paper that didn't exist. He was a third-year computer science student studying neural networks and transformer architectures. For his project on natural language processing, he asked an AI assistant for recent papers on attention mechanisms.&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%2F0k99lbpq8b8edxly5kvm.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%2F0k99lbpq8b8edxly5kvm.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He used all the available AI tools and finished the work in a few days. The tools gave him five paper summaries with examples, complete with authors and journal names. He built his entire review and paper around them. His professor found out during the first review — none of the papers were real.&lt;/p&gt;

&lt;p&gt;None of the papers were real. The AI had fabricated everything—down to fake researcher names at real universities. That's when Ankit started asking the wrong question, or maybe the right one: Why does the system we're learning to build lie so confidently?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Ankit Learned&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%2F7589cmi2oz9oigljky4c.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%2F7589cmi2oz9oigljky4c.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After rebuilding his entire project from scratch—this time verifying every source manually—Ankit understood something his coursework never mentioned: The problem isn't that AI makes mistakes. The problem is that we built it to hide uncertainty behind confidence.&lt;/p&gt;

&lt;p&gt;The fix exists. Penalize wrong guesses more heavily than admitting "I don't know." Build systems that flag uncertainty. Teach models the value of intellectual humility.&lt;/p&gt;

&lt;p&gt;But companies won't implement it. AI that admits uncertainty performs worse on benchmarks. Worse benchmarks mean less funding, less prestige, less market value.&lt;/p&gt;

&lt;p&gt;We built a mirror that reflects our desire for confident answers to complex questions. We built it to sound like an expert even when it's guessing. And now we act shocked when it lies with expertise.&lt;/p&gt;

&lt;p&gt;Ankit's project now includes a disclaimer on every output: "Verify all citations independently." It's the most important line of code he's written.&lt;/p&gt;

&lt;p&gt;The AI never learned the difference between truth and plausible-sounding fiction. Someone should have taught it. Just like someone taught that seven-year-old the difference between blocks and castles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Incentive Problem Nobody Talks About&lt;/strong&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%2Fu8t6whlp1oeoz1jd9b73.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%2Fu8t6whlp1oeoz1jd9b73.png" alt=" " width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what Ankit discovered in his post-scam research binge: AI hallucinations aren't bugs. They're features that emerged from how we score these systems.&lt;/p&gt;

&lt;p&gt;The training process uses benchmarks. You get a "1" for correct answers, "0" for wrong answers, and "0" for saying "I don't know." Do the math on that incentive structure. If you're uncertain, guessing gives you a chance at that "1" score. Admitting ignorance guarantees a zero. We trained these models to be confident liars because confident liars perform better on our benchmarks.&lt;/p&gt;

&lt;p&gt;The research proves it structurally. There's an equation floating around AI safety circles: Error_generation ≥ 2 × Error_classification.&lt;/p&gt;

&lt;p&gt;A system generating language will always have at least double the error rate of a system just classifying true versus false. Some information is fundamentally unknowable from training data patterns. But we didn't build systems that admit this. We built systems that fill knowledge gaps with statistically plausible fiction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When Confidence Costs $100 Billion&lt;/strong&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%2Fre8tf7huu4vxrx3m9xtu.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%2Fre8tf7huu4vxrx3m9xtu.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;br&gt;
Google learned this the expensive way. Bard's first public demo confidently stated the James Webb Space Telescope captured the first images of exoplanets. It hadn't. The market wiped $100 billion off Alphabet's value in one day.&lt;/p&gt;

&lt;p&gt;Google's AI Overview later suggested mixing non-toxic glue into pizza sauce to keep the cheese attached. People actually tried it. The AI had scraped a Reddit joke and couldn't distinguish sarcasm from culinary advice.&lt;/p&gt;

&lt;p&gt;A New York lawyer used ChatGPT for legal research. It generated 15 cases—complete with fake judges, fake quotes, fake precedents. He filed them in court. He's now facing professional sanctions.&lt;/p&gt;

&lt;p&gt;OpenAI's Whisper tool, used in 30,000 healthcare facilities for medical transcription, hallucinates treatments and invents conditions that don't exist. Patients might act on that information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Child Knows. The AI Doesn't.&lt;/strong&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%2Fen9ox12gspk2xi17jpqu.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%2Fen9ox12gspk2xi17jpqu.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
Ankit kept circling back to something that bothered him: When his seven-year-old cousin holds a wooden block and declares it's a castle, she's imagining. She's learning. But she knows it's a block. The boundary between reality and pretend is clear.&lt;/p&gt;

&lt;p&gt;That's the difference between imagination and hallucination. One has consent. The other doesn't.&lt;/p&gt;

&lt;p&gt;When you read fantasy novels or play pretend, you agree to suspend disbelief. You consent to the fabrication. When you ask an AI for research papers, legal precedent, or medical advice, you're asking for truth. The AI doesn't know which mode you're in. It just predicts the next statistically likely word.&lt;/p&gt;

&lt;p&gt;Sometimes that word is true. Often it's eloquent. Frequently it's both confident and completely false.&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%2F3qqgo861mk1mmji6byy7.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%2F3qqgo861mk1mmji6byy7.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Actually Happens Inside the Black Box&lt;/strong&gt;&lt;br&gt;
After his project implosion, Ankit needed to understand the mechanism. Not just "AI makes mistakes," but how the mistake gets manufactured with such confidence.&lt;/p&gt;

&lt;p&gt;Think of it like autocomplete on your phone, except running at scale across billions of parameters. You type "Happy" and your phone suggests "Birthday." Not because it knows your calendar—it just knows the pattern. "Birthday" statistically follows "Happy" in its training data.&lt;br&gt;
AI does this for entire paragraphs. It has ingested massive chunks of the internet, learning which words cluster together, which phrases follow which contexts. When you ask it a question, it's not retrieving facts from a database. It's predicting the next token in a sequence based on statistical likelihood.&lt;/p&gt;

&lt;p&gt;The system doesn't evaluate truth. It evaluates patterns.&lt;br&gt;
Ask it about a court case that never existed, and it will analyze the pattern of real court cases: Judge name, date, jurisdiction, verdict, citation format. Then it generates tokens that fit that pattern. Fake judge, fake date, fake ruling. The output looks structurally perfect because the pattern is correct. The content is fiction.&lt;br&gt;
It isn't lying to deceive you. It's lying because it thinks its job is to finish the sentence in the most statistically plausible way.&lt;br&gt;
Where the Damage Lands&lt;br&gt;
Ankit started tracking real-world breakage. This wasn't theoretical anymore.&lt;/p&gt;

&lt;p&gt;In schools, professors spend hours verifying bibliographies because students submit essays citing books that sound real but don't exist. The AI generates author names, publishers, ISBN numbers—all following the correct pattern, none of it true.&lt;/p&gt;

&lt;p&gt;In hospitals, doctors use AI transcription tools to document patient visits. OpenAI's Whisper has been caught adding medications patients never took, inventing medical histories, fabricating symptoms. Why? Because those medications are "usually" prescribed for similar conditions. The pattern fit. The patient record didn't.&lt;br&gt;
In kitchens, Google's AI Overview scraped a sarcastic Reddit comment about using non-toxic glue to keep pizza cheese from sliding. It couldn't distinguish joke from advice. People actually tried it. The pattern said "advice about pizza" so it served it as advice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Real Threat: Confidence Without Doubt&lt;/strong&gt;&lt;br&gt;
Ankit realized the danger isn't the error rate. Humans make errors constantly. The danger is how AI communicates uncertainty—or rather, how it doesn't.&lt;br&gt;
When you're unsure, you hedge. "I think..." or "From what I remember..." or "I'm not certain, but..." This signals your confidence level. The listener calibrates their trust accordingly.&lt;br&gt;
AI doesn't hedge. It states fabrications with the same authoritative tone it uses for verified facts. No uncertainty markers. No confidence scores. Just clean, professional-sounding text that could be completely invented.&lt;br&gt;
That's the trust trap. We evolved to read social cues about certainty. AI bypasses all of them. It sounds like an expert even when it's guessing, so we believe it without verification.&lt;br&gt;
The consequences scale fast. If AI floods the internet with confident fabrications—fake articles, fake research, fake history—we lose the ability to distinguish signal from noise. Worse, future AI models train on that polluted data, learning to replicate the fabrications. The error compounds generationally.&lt;br&gt;
And then there are the safety risks. Ask an AI how to fix your car's brakes and it might hallucinate a step that looks mechanically plausible but is actually dangerous. The result isn't a bad grade on a paper. It's physical harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Ankit Built Instead&lt;/strong&gt;&lt;br&gt;
After rebuilding his project, Ankit added something his professors never mentioned in lectures: uncertainty quantification. His system now flags outputs with confidence scores. When it's guessing, it says so.&lt;br&gt;
It performs worse on benchmarks. It admits ignorance more often. But it doesn't lie.&lt;br&gt;
He's still working on getting the grade he needs. But at least he knows his system won't confidently fabricate research papers that waste three weeks of someone else's life.&lt;br&gt;
We handed the keys of our knowledge infrastructure to machines that are excellent at speaking but fundamentally incapable of caring about truth. Ankit learned that the hard way. The rest of us are still learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Question Nobody Wants to Answer&lt;/strong&gt;&lt;br&gt;
Ankit's professor asked him something during his final presentation that he's still thinking about: "If you know the system hallucinates, why are you still using it?"&lt;/p&gt;

&lt;p&gt;He didn't have a good answer then. He's still not sure he does now.&lt;br&gt;
The truth is, AI hallucinations aren't going away. Not because we can't fix them technically—we could penalize uncertainty less harshly, build better verification layers, teach models to admit ignorance. The math exists. The methods exist.&lt;/p&gt;

&lt;p&gt;They're not going away because we don't want them to.&lt;br&gt;
We want confident answers to complex questions. We want research done in seconds instead of weeks. We want the illusion of omniscience, even when we know it's an illusion. Companies won't fix hallucinations because AI that admits "I don't know" performs worse on benchmarks, attracts less funding, loses market share.&lt;/p&gt;

&lt;p&gt;So we get the AI we incentivized: confident, eloquent, and occasionally fictional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ankit's project still uses AI. He just doesn't trust it blindly anymore.&lt;/strong&gt;&lt;br&gt;
The Mirror Problem isn't that AI hallucinates. It's that we built a system that reflects what we wanted absolute confidence instead of what we needed honest uncertainty. We're staring at our own reflection and calling it intelligence.&lt;/p&gt;

&lt;p&gt;Maybe the real lesson isn't about fixing the AI. Maybe it's about fixing what we expect from it. Ankit added that disclaimer to his project: "Verify all citations independently."&lt;/p&gt;

&lt;p&gt;It should probably be stamped on every AI interface in existence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>developers</category>
    </item>
    <item>
      <title>My Breakup Letter to JavaScript: A Developer's Journey to Moving On</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Wed, 03 Sep 2025 12:17:31 +0000</pubDate>
      <link>https://dev.to/thedevankit/my-breakup-letter-to-javascript-a-developers-journey-to-moving-on-4af0</link>
      <guid>https://dev.to/thedevankit/my-breakup-letter-to-javascript-a-developers-journey-to-moving-on-4af0</guid>
      <description>&lt;p&gt;&lt;em&gt;It's 3:12 AM and I'm staring at my monitor in my apartment. The AC is barely keeping up with the heat, and there's a growing pile of energy drink cans next to my keyboard. My roommate's been asleep for hours, but here I am senior frontend developer by day, debugging warrior by night - having another one of those conversations with myself.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The bug I've been chasing for the past four hours should have been a five-minute fix. A simple comparison in an charts calculation. But JavaScript had other plans, as usual.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I lean back in my chair and finally admit what I've been avoiding for months. This relationship needs to end.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Dear JavaScript,
&lt;/h2&gt;

&lt;p&gt;You and I need to have that talk. The one I've been putting off since my college days when I first fell for your promises of flexibility and simplicity. Five years of building everything from simple collage projects, startup idea MVPs to the enterprise dashboards. It is a long drive that going on and on, and I'm exhausted. Let me tell you why this isn't working anymore.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Type System Drives Me Insane
&lt;/h3&gt;

&lt;p&gt;When we first met in that JavaScript bootcamp back in 2018, you seemed so laid-back about types. "Don't stress about it," you whispered through my VS Code intellisense. "I'll figure it out." That charm lasted exactly until my first production bug:&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="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="mi"&gt;0&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="c1"&gt;// true&lt;/span&gt;
&lt;span class="kc"&gt;false&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="c1"&gt;// true&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I remember that disaster at my previous company. Three days before a production launch, the payment calculation started adding strings instead of numbers. "₹1050" became "₹10050" because an API returned string values. The manager's face when I explained that JavaScript thought "10" + "50" equals "1050" instead of 60... man, that was awkward.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You change my integers into strings without asking permission. You make my booleans dance with numbers in ways that would make a mathematician cry. It's like dating someone who changes their personality based on who they're talking to. I never know which version of you I'm going to get when I wake up.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 'This' Keyword Betrayal
&lt;/h3&gt;

&lt;p&gt;Your &lt;code&gt;this&lt;/code&gt; behavior has given me trust issues. One moment it's pointing exactly where I expect, the next it's wandering off to the global scope like it forgot we were together:&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;myProject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;deadline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tomorrow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;showDeadline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Project due: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deadline&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="c1"&gt;// Works perfectly here&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;remindMe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showDeadline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;remindMe&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// Suddenly 'this' points to window - what the hell?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Last month, I spent an entire weekend debugging a Angular component because I forgot to bind &lt;code&gt;this&lt;/code&gt; in an event handler. The client demo was on Monday. I literally had nightmares about undefined properties. My girlfriend at the time said I was talking about JavaScript on a date where i should have talked about her. Ohh Js, That should have been a red flag.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's like trying to have a serious conversation with someone who keeps looking over your shoulder at other people. You can never maintain focus when you don't know who you're really talking to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Callback Hell Nearly Broke Me
&lt;/h3&gt;

&lt;p&gt;You made me write code that looked like the digital equivalent of a horror movie:&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="nf"&gt;setTimeout&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Loading user data...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetching preferences...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Finally rendering UI...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// By now I've lost track of what's happening&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I still have nightmares about the Node.js project from my first job. A simple user registration flow had eight levels of nested callbacks. My code looked like a Diwali rocket lost among a bunch of other firecrackers made of promises and errors. I called it the "callback cathedral"—tall, confusing, and enough to make me question my life choices.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sure, you eventually gave me promises and async/await, like buying flowers after a big fight. But the psychological damage was done. Too many 2 AM sessions untangling those pyramid-shaped nightmares.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Prototype System Feels Like a Secret Society
&lt;/h3&gt;

&lt;p&gt;Your approach to inheritance is like having family relationships explained through riddles:&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;function&lt;/span&gt; &lt;span class="nf"&gt;Developer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coffeeLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Developer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; is coding and needs more coffee`&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;me&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Developer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ankitkumar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;me&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;code&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// It works, but why does it feel so indirect?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;When I was mentoring my cousin who's learning programming (he's coming from Python), I spent three hours trying to explain why JavaScript objects work this way. He kept asking, "But where's the class definition?" I ended up drawing diagrams on my whiteboard that looked like a conspiracy theory flowchart.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Other languages show you exactly what's happening. You make me dig through prototype chains like I'm solving archaeological puzzles. I just want to create objects, not become a detective.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Can't Handle Real Work
&lt;/h3&gt;

&lt;p&gt;When I need serious computational power, you freeze up like my laptop during a Windows update:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'll never forget the data visualization project that almost killed me.  The client wanted real-time analysis of 500,000 records. My beautiful JavaScript solution turned their browser into a slideshow. I had to explain to a room full of developers and managers why their "modern web application" was slower than Excel. The shame still keeps me up sometimes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You're perfect for making buttons click and forms submit, but when things get mathematically intense, you tap out faster than a lightweight boxer. It's like dating someone who's great at small talk but can't help you move apartments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Module System Has Commitment Issues
&lt;/h3&gt;

&lt;p&gt;First you had no modules. Then CommonJS. Then AMD. Then UMD. Then ES6 modules. Now I'm stuck managing this relationship complexity:&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;// Sometimes I have to do this&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Sometimes this&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// And sometimes this abomination&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// AMD/UMD wrapper hell&lt;/span&gt;
&lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* actual code hidden somewhere */&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The migration project at my company took four months because half our dependencies were stuck in CommonJS while we wanted to use ES6 modules. Our Webpack config file became longer than some of my actual components. I had to become a build tool expert just to import files properly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You couldn't decide how you wanted to handle relationships, so you kept changing the rules mid-game. Now I need a PhD in tooling just to include one library in another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory Management Feels Like Babysitting
&lt;/h3&gt;

&lt;p&gt;You promised automatic garbage collection, but somehow I'm still the one cleaning up your mess:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The single-page application I built for that my side project started consuming 2GB of RAM after running for an hour. Turns out I had event listeners multiplying like rabbits, never properly removed. The users had to refresh the page every hour to keep their computers from crashing. Professional embarrassment doesn't begin to cover it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You don't force me to clean up, but if I forget, everything slowly degrades until users start complaining. It's like living with someone who promises to do dishes but leaves everything "soaking" indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  DOM Manipulation Turns Into Wrestling Matches
&lt;/h3&gt;

&lt;p&gt;Working with the DOM through you feels like trying to perform surgery while wearing oven mitts:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That data table component I built last year took three weeks to get right. Every cell update caused the entire page to reflow. Users were complaining about lag on their laptops. I spent more time profiling performance than actually implementing features.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cross-browser compatibility issues, mysterious reflow problems, performance bottlenecks that appear randomly - working with you and the DOM is like mediating a three-way argument where nobody speaks the same language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Global Namespace Pollution Everywhere
&lt;/h3&gt;

&lt;p&gt;You let me (and every library I use) dump variables into the global space like it's a public trash can:&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;// Oops, forgot to declare this&lt;/span&gt;
&lt;span class="nx"&gt;projectName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;My Awesome App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Now it's everyone's problem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I spent two days debugging a mysterious conflict between jQuery and some analytics library because both were overwriting each other's &lt;code&gt;$&lt;/code&gt; variable. The symptoms appeared randomly, making it feel like my code was haunted. My debugging approach basically became "remove libraries one by one until it works."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's like sharing a studio apartment with strangers who leave their stuff everywhere and never clean up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Ecosystem Gives Me Analysis Paralysis
&lt;/h3&gt;

&lt;p&gt;React or Vue or Angular or Svelte? Webpack or Vite or Rollup? Jest or Vitest or Cypress? TypeScript or Flow or vanilla?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I have a bookmark folder called "JS Tools to Learn" with 73 items. I added five more yesterday. I've actually tried maybe 30% of them and mastered about 10%. Every new project starts with an hour of "which framework should we use?" meetings where everyone has different opinions based on different Medium articles they read.As an Angular developer, I used to always vouch for it. Eventually, people started calling me "Angular Ankit" because of how much I supported it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every month there's some new framework I used o keep in my "absolutely must" learn folder. Every project begins with three hours of tooling decisions before I write a single line of actual business logic. I'm spending more time managing the relationship overhead than building things.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Double Equality Disaster
&lt;/h3&gt;

&lt;p&gt;You gave me two ways to check if things are equal, and somehow both feel wrong half the time:&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;userAge&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Sometimes this works&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;userAge&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Sometimes I need this&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;userAge&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;18&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Sometimes this is what I actually want&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I had to explain this to my junior developer teammate last week. "There's equals and then there's really equals," I told him. "Use really equals unless you specifically want the weird behavior of regular equals." He looked at me like I was describing a broken relationship, which... yeah, actually.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Why do I need a mental flowchart to determine which equality operator won't betray me?&lt;/p&gt;

&lt;h3&gt;
  
  
  The NaN Philosophy Crisis
&lt;/h3&gt;

&lt;p&gt;You told me &lt;code&gt;NaN&lt;/code&gt; means "Not a Number" but then you classified it as type &lt;code&gt;number&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// "number" - seriously?&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;NaN&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// false - of course&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// true - finally some truth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;I've lost count of how many times I've stared at this behavior trying to explain it to myself, let alone other developers. It's like philosophical absurdism turned into code. My brain still hurts thinking about it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This isn't quirky or charming. It's just broken logic that makes me question my sanity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Math That Makes No Mathematical Sense
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 0.30000000000000004&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The e-commerce bug that haunts my dreams. Floating point precision errors caused customers to be charged ₹999.99999999 instead of ₹1000.00. The payment gateway rounded it down, but our database stored the exact value. Reconciliation was a nightmare. I had to write a whole library just to add money correctly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can't do basic arithmetic. That's not a feature - that's a fundamental flaw that breaks trust in computational results.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Breaking Point
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;I get up from my desk and walk to my small balcony. Mumbai never sleeps, and I can hear the distant traffic, the occasional honking, people living their lives. I've been thinking about this for months.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;JavaScript, we had some good times. You helped me land my first job, build my portfolio, earn enough to move out of my parents' house and yeah becouse of you i'm able to explore the world of browsers and web apps. You gave me a career, taught me about asynchronous programming, showed me how the web works.&lt;/p&gt;

&lt;p&gt;But I can't keep making excuses for your behavior.&lt;/p&gt;

&lt;p&gt;You're everywhere - browsers, servers, mobile apps, desktop applications, even embedded systems now. You've conquered the world through sheer ubiquity. But being popular doesn't fix fundamental personality flaws.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I think about my friend Rahul who switched to Go for backend work. He seems happier, more productive. His code is predictable. His deployments don't randomly break because of type coercion. He sleeps better.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I need something that tells me when I'm making mistakes instead of letting me deploy broken code to production. I need a language that does math correctly, handles types consistently, and doesn't make me second-guess every comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  My New Plan
&lt;/h3&gt;

&lt;p&gt;Tomorrow I'm starting that TypeScript migration I've been postponing for eight months. Strict mode, proper interfaces, the works. For backend projects, I'm learning Rust. Maybe some Python for data work.&lt;/p&gt;

&lt;p&gt;I'm not saying you're evil, JavaScript. You're just wrong for where I am in my career now. I need reliability over flexibility, predictability over "interesting" behavior.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I think about all the junior developers I've mentored, warning them about your quirks. "Always use triple equals," I'd say. "Remember to bind this." "Watch out for type coercion." Maybe they wouldn't need those warnings with a different language.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You taught me valuable lessons about debugging, about questioning assumptions, about reading documentation carefully. Those skills will serve me well with other languages.&lt;/p&gt;

&lt;p&gt;But I'm ready for a relationship that doesn't require a list of warnings and workarounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Final Word
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;I head back inside, save my current project, and close VS Code. Tomorrow I'll start fresh with TypeScript. Maybe Rust for the passion project I've been planning.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's not me, JavaScript. &lt;/p&gt;

&lt;p&gt;It's definitely, absolutely, 100% you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Ankitkumar Singh, A JavaScript Developer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS: I'm keeping you for legacy projects, but we're not building anything new together. Consider this a separation.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I make one last cup of chai, sit by my window, and watch the city lights flicker in the distance. Change is scary, but staying in a frustrating relationship is worse.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>angular</category>
    </item>
    <item>
      <title>Clicks to Efficiency: Automate Your Daily Browser Tasks</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Sat, 30 Aug 2025 17:07:18 +0000</pubDate>
      <link>https://dev.to/thedevankit/clicks-to-efficiency-automate-your-daily-browser-tasks-5g55</link>
      <guid>https://dev.to/thedevankit/clicks-to-efficiency-automate-your-daily-browser-tasks-5g55</guid>
      <description>&lt;p&gt;Few months back, I caught myself doing something ridiculous. I was copying the same project update into different systems - our timesheet portal and the client project management tool. Same text, different formats, 20-30 minutes gone. The worst part? I'd been doing this every single month.&lt;/p&gt;

&lt;p&gt;That's when it hit me. I'm a developer. Why am I living like this? And yeah, then I decided to spend the next 3 days of holidays (Saturdays and Sundays) automating this task so that I'd be able to save around 20 minutes on average.&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%2Fr9ksuabgjytitmrrlyp2.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%2Fr9ksuabgjytitmrrlyp2.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Timesheet Problem That Started Everything
&lt;/h2&gt;

&lt;p&gt;Our company timesheet system is... let's call it vintage. You click into a cell, type your hours, add a description, select a project code from a dropdown that loads like we're living in the 90's era, then repeat for every single month. If you work on multiple projects? Multiply that pain.&lt;/p&gt;

&lt;p&gt;I started simple. Really simple, actually. My first Chrome extension just filled in "8 hours", selected the project from the dropdown, and added an empty description. That's it. But even that tiny automation saved me thirty seconds, and more importantly, it proved something: I could bend the browser to my will. Yeah, it felt so good that I could build something to solve my own problem.&lt;/p&gt;

&lt;p&gt;Within a week, I'd expanded it. The extension now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-filled common project codes based on the day of the week&lt;/li&gt;
&lt;li&gt;Copied descriptions from yesterday with one click
&lt;/li&gt;
&lt;li&gt;Batch-filled entire weeks for recurring tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What used to take five minutes now took twenty seconds. But here's where things got interesting - I realized the pattern recognition I was doing manually could be handled by AI. Okay, we’ve covered a lot about the timesheet. Now let’s talk about the next extension I built in the following section. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the AI Models: &lt;a href="https://chromewebstore.google.com/detail/gpt-prompts-by-ankitkumar/lfgdpodagimepkoebgodimklcebdgekn" rel="noopener noreferrer"&gt;My ChatGPT Prompt Automator&lt;/a&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%2Fkdoyrdocys87apov4xc4.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%2Fkdoyrdocys87apov4xc4.png" alt="Code" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the timesheet success, I noticed another pattern. Every morning, I'd open ChatGPT and type variations of the same prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Review this PR description and suggest improvements"&lt;/li&gt;
&lt;li&gt;"Convert this JSON to TypeScript interfaces"&lt;/li&gt;
&lt;li&gt;"Explain this error message: [my text]"&lt;/li&gt;
&lt;li&gt;"Rewrite the sentence and make it formal: [My text]"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompts were similar, but I kept retyping them. So I built a Chrome extension that automated this. It automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Opens ChatGPT&lt;/li&gt;
&lt;li&gt;Shows prompts and on a click pastes everything&lt;/li&gt;
&lt;li&gt;Hits submit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can check out the full journey of building this extension in my previous post: &lt;a href="https://dev.to/thedevankit/how-to-build-chrome-extensions-using-chatgpt-javascript-prompt-engineering-2025-guide-h5k"&gt;How to Build Chrome Extensions Using ChatGPT &amp;amp; JavaScript&lt;/a&gt;. That extension became the foundation for understanding how AI could help me build even more complex automations.&lt;/p&gt;

&lt;p&gt;But wait, you might think - that's just a fancy copy-paste tool. And you'd be half right. The magic came when I started using the AI models themselves to build better versions of the extension. I built all of this with my dear friend, AI—the most talked-about term in 2025. Now, let me show you how you can build with AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AI Models Became My Coding Partners
&lt;/h2&gt;

&lt;p&gt;Here's what changed my entire approach: I stopped trying to code everything myself and started treating Claude, Gemini, and ChatGPT as specialized teammates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude for Complex Logic
&lt;/h3&gt;

&lt;p&gt;When I needed to parse our timesheet's ancient HTML structure, I literally took a screenshot, uploaded it to Claude, and said: "Write a function that extracts all the input fields from this mess."&lt;/p&gt;

&lt;p&gt;Claude didn't just write the code - it explained why the site's structure was problematic and suggested defensive coding patterns for when it inevitably breaks. The function it generated handled edge cases I hadn't even considered, like when the page partially loads or when sessions timeout.&lt;/p&gt;

&lt;h3&gt;
  
  
  ChatGPT for Rapid Prototyping
&lt;/h3&gt;

&lt;p&gt;ChatGPT became my brainstorming partner. I'd describe what I wanted: "I need a Chrome extension that detects when I'm on a Jira ticket and automatically generates a Git branch name from the ticket title."&lt;/p&gt;

&lt;p&gt;What I got back wasn't production-ready code, but it was a working prototype in minutes. The manifest.json, the content script structure, the basic logic - all there. I'd then refine it, but starting from 60% complete beats starting from zero.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini for Documentation Parsing
&lt;/h3&gt;

&lt;p&gt;Gemini surprised me. When I needed to understand Chrome Extension Manifest V3 (which, let's be honest, has documentation that feels deliberately confusing), I fed it specific API docs and asked: "How do I make a content script that only runs after a button click?"&lt;/p&gt;

&lt;p&gt;Not only did it explain the concept, but it also showed me the permission pitfalls I was about to walk into. Saved me hours of debugging "why isn't this working" issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Time Math That Made Me a Believer
&lt;/h2&gt;

&lt;p&gt;Let's talk real numbers. Between these extensions and a few others:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timesheet filling: 5 minutes → 30 seconds daily&lt;/li&gt;
&lt;li&gt;Repetitive ChatGPT prompts: 2 minutes → 10 seconds per use (probably 10 times daily)&lt;/li&gt;
&lt;li&gt;Context switching after meetings: 3-5 minutes → one click&lt;/li&gt;
&lt;li&gt;API response analysis: 2 minutes → instant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conservative estimate? I'm saving 45 minutes every single day. That's almost 4 hours per week of mind-numbing clicking eliminated. And remember, I spent just 3 days building these. The ROI hit positive within the first week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Your First Automation
&lt;/h2&gt;

&lt;p&gt;You want to start? Here's exactly how I'd do it today, knowing what I know now:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick your most annoying daily task.&lt;/strong&gt; Not the complex one, the annoying one. The thing you do every day that makes you think "there has to be a better way."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open Claude/ChatGPT/Gemini and describe it naturally:&lt;/strong&gt; "I have to click through three menus to get to my timesheet every morning. How can I build a Chrome extension that takes me there directly?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with the manifest.json they give you.&lt;/strong&gt; Every Chrome extension needs one. The AI will generate a basic version that actually works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test immediately.&lt;/strong&gt; Load it as an unpacked extension (chrome://extensions/, Developer mode on, Load unpacked). It probably won't work perfectly. That's fine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Iterate with AI.&lt;/strong&gt; Copy any error messages back to the AI. Be specific: "When I click the button, nothing happens. Console shows: 'Cannot read property of undefined'."&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The thing is, you don't need to be a Chrome extension expert. You need to be good at describing problems to AI and testing their solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gotchas Nobody Tells You
&lt;/h2&gt;

&lt;p&gt;Let me save you some pain. These are the things that tripped me up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manifest V3 is weird.&lt;/strong&gt; Background scripts are now service workers. You can't use XMLHttpRequest. Some perfectly logical things just... don't work. When you hit these walls, explicitly tell the AI you're using Manifest V3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permissions matter.&lt;/strong&gt; The AI might suggest code that requires permissions you haven't declared. Always check the manifest.json permissions against what your code is trying to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content scripts are sandboxed.&lt;/strong&gt; They can't directly access your extension's storage or make cross-origin requests. You'll need message passing. This confused me for days until Claude explained the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test on multiple sites.&lt;/strong&gt; Your extension might work perfectly on one site and break on another because of Content Security Policies or different DOM structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Gets Really Interesting
&lt;/h2&gt;

&lt;p&gt;Here's what I'm still working through: these AI models are getting better at understanding context. I recently described a complex workflow involving multiple sites, and Claude suggested a multi-part extension that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detects which part of the workflow you're in&lt;/li&gt;
&lt;li&gt;Automatically proceeds to the next step&lt;/li&gt;
&lt;li&gt;Maintains state across different domains&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I didn't even know that was possible with Chrome extensions. But it is, using a combination of content scripts, background workers, and the storage API.&lt;/p&gt;

&lt;p&gt;The code Claude generated wasn't perfect, but it introduced me to concepts I didn't know existed. That's the real value here - AI as a teacher that responds to exactly what you're trying to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Tomorrow, Thank Yourself Next Week
&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%2Fu2mrwlxi9ntjt842bp8n.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%2Fu2mrwlxi9ntjt842bp8n.png" alt="Developers life" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look, I'll be upfront - your first extension will probably be janky. Mine definitely was. It only worked on Tuesdays (seriously, I had a date bug that took me ages to find). But even that broken Tuesday-only extension saved me time on Tuesdays.&lt;/p&gt;

&lt;p&gt;The barrier to entry is lower than you think. You don't need to understand the entire Chrome Extension API. You don't need to be a JavaScript expert. You need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify a repetitive task&lt;/li&gt;
&lt;li&gt;Describe it to an AI&lt;/li&gt;
&lt;li&gt;Test and iterate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Actually, let's make this concrete. Tomorrow morning, pay attention to the first annoying repetitive thing you do in your browser. Write it down. Then spend your lunch break asking ChatGPT or Claude how to automate it. You might not finish the extension, but you'll start it. And starting is everything.&lt;/p&gt;

&lt;p&gt;The path from "I click these same five buttons every morning" to "my extension does it for me" is shorter than you think. The AI models are like having a senior developer who's infinitely patient and available 24/7. They won't judge you for not knowing what a service worker is. They'll just explain it and help you use it.&lt;/p&gt;

&lt;p&gt;My timesheet now fills itself. My prompts are a keystroke away. My browser remembers what I was doing before that meeting derailed me. These aren't revolutionary innovations - they're personal quality of life improvements that compound every single day.&lt;/p&gt;

&lt;p&gt;Your browser is programmable. AI makes that programming accessible. The question isn't whether you can build these automations. It's whether you'll start tomorrow or keep clicking those same buttons for another month.&lt;/p&gt;

&lt;p&gt;Me? I've got 45 minutes back every day. What could you do with yours?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Build Chrome Extensions Using ChatGPT, JavaScript &amp; Prompt Engineering [2025 Guide</title>
      <dc:creator>Ankitkumar Singh</dc:creator>
      <pubDate>Mon, 28 Jul 2025 13:14:25 +0000</pubDate>
      <link>https://dev.to/thedevankit/how-to-build-chrome-extensions-using-chatgpt-javascript-prompt-engineering-2025-guide-h5k</link>
      <guid>https://dev.to/thedevankit/how-to-build-chrome-extensions-using-chatgpt-javascript-prompt-engineering-2025-guide-h5k</guid>
      <description>&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%2Fkocumbju28sv4v3pa4r4.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%2Fkocumbju28sv4v3pa4r4.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Chrome extensions are powerful tools that enhance browser functionality and streamline workflows. With the rise of AI tools like &lt;strong&gt;ChatGPT&lt;/strong&gt; and the increasing importance of &lt;strong&gt;Prompt Engineering&lt;/strong&gt;, developers can now create highly interactive and intelligent browser tools faster than ever.&lt;/p&gt;

&lt;p&gt;In this technical guide, you'll learn how to build a fully functional Chrome extension using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 JavaScript&lt;/li&gt;
&lt;li&gt;🤖 ChatGPT logic&lt;/li&gt;
&lt;li&gt;🎯 Prompt Engineering principles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll explore the full implementation of &lt;strong&gt;ChatGPT Quick Prompts&lt;/strong&gt;, an open-source Chrome extension created by me &lt;a href="https://www.linkedin.com/in/thedevankit" rel="noopener noreferrer"&gt;(&lt;strong&gt;Ankitkumar Singh&lt;/strong&gt;)&lt;/a&gt; that injects prebuilt prompt automation directly into ChatGPT's UI for faster coding, writing, and task automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔎 Why Build a ChatGPT Chrome Extension?
&lt;/h2&gt;

&lt;p&gt;As &lt;strong&gt;generative AI&lt;/strong&gt; becomes an everyday part of workflows for developers, writers, marketers, and business analysts, browser extensions allow us to:&lt;/p&gt;

&lt;p&gt;✅ Speed up repetitive AI-based tasks (e.g., grammar correction, code analysis)&lt;br&gt;
✅ Instantly insert structured prompts&lt;br&gt;
✅ Streamline team usage of ChatGPT with standard inputs&lt;br&gt;
✅ Automate prompt submission and AI interaction&lt;br&gt;
✅ Improve productivity and consistency across projects&lt;/p&gt;

&lt;p&gt;And with the help of &lt;strong&gt;Prompt Engineering&lt;/strong&gt;, we can fine-tune the behavior of AI tools through optimized input templates—directly from the browser.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔹 Introducing ChatGPT Quick Prompts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT Quick Prompts&lt;/strong&gt; is a developer-focused Chrome extension that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Injects a &lt;strong&gt;custom toolbar&lt;/strong&gt; into the ChatGPT interface&lt;/li&gt;
&lt;li&gt;Offers &lt;strong&gt;one-click&lt;/strong&gt; access to smart AI prompts&lt;/li&gt;
&lt;li&gt;Includes a &lt;strong&gt;side panel&lt;/strong&gt; with categorized prompt libraries&lt;/li&gt;
&lt;li&gt;Automatically inserts and (optionally) &lt;strong&gt;submits messages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;dark mode&lt;/strong&gt; and full customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This extension demonstrates how &lt;strong&gt;JavaScript DOM scripting&lt;/strong&gt;, &lt;strong&gt;Chrome extension APIs&lt;/strong&gt;, and &lt;strong&gt;prompt design&lt;/strong&gt; can work together to create intelligent productivity tools.&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Key Features
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&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;Quick Prompts Bar&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Adds clickable prompt buttons above ChatGPT input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔍 &lt;strong&gt;Side Panel UI&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Expandable categorized prompt library (SEO, legal, tech, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ &lt;strong&gt;One-Click Automation&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Inserts and submits prompts with existing text, saving time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎨 &lt;strong&gt;Modern Design&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fully responsive layout + dark mode support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🛠️ &lt;strong&gt;Easy Customization&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Update &lt;code&gt;content.js&lt;/code&gt; to modify prompt logic, labels, and categories&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h4&gt;
  
  
  🖼️ Screenshots
&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%2Fjk0x0pwvot2u69pj1g74.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%2Fjk0x0pwvot2u69pj1g74.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  How It Works (JavaScript + Prompt Engineering)
&lt;/h2&gt;

&lt;p&gt;The extension is driven by a combination of &lt;strong&gt;DOM manipulation&lt;/strong&gt;, &lt;strong&gt;dynamic event listeners&lt;/strong&gt;, and &lt;strong&gt;prompt injection logic&lt;/strong&gt;. Here’s what happens when a user clicks a prompt:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Finds the text input field&lt;/strong&gt; (textarea or editable div)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inserts a predefined prompt string&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appends any existing user content&lt;/strong&gt;, if present&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dispatches events&lt;/strong&gt; to simulate typing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-submits&lt;/strong&gt; the prompt if necessary&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is where &lt;strong&gt;Prompt Engineering&lt;/strong&gt; plays a pivotal role.&lt;/p&gt;

&lt;p&gt;Well-designed prompts can drastically improve the AI's output quality. For example:&lt;/p&gt;
&lt;h3&gt;
  
  
  Grammar Correction Prompt
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Correct the grammar and spelling of the following text. Only provide the corrected version, do not add any commentary:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Review Prompt
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please review the following code for bugs, optimization suggestions, and formatting improvements:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;These are pre-configured into the extension and triggered via one-click buttons.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔬 Deep Dive into Code: JavaScript Logic
&lt;/h2&gt;

&lt;p&gt;Let’s look at how &lt;code&gt;content.js&lt;/code&gt; makes this happen behind the scenes.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Finding the ChatGPT Input Field
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;findTextArea&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;selectors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt; &lt;span class="nx"&gt;selectors&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;html&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;selector&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;selectors&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;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selector&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;element&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;element&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This ensures the extension works even if OpenAI updates their frontend.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✨ Injecting the Prompt Bar
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;injectPromptBar&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;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;findTextArea&lt;/span&gt;&lt;span class="p"&gt;()?.&lt;/span&gt;&lt;span class="nf"&gt;closest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form&lt;/span&gt;&lt;span class="dl"&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;form&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quick-prompts-container&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="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quick-prompts-container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;mainPrompts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promptData&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        
        &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&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="nf"&gt;handlePromptClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promptData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;form&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;It dynamically renders the prompt toolbar above ChatGPT’s form.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚡ Handling Clicks and Submission
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handlePromptClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;promptText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isMainPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&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;currentTextArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;findTextArea&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;existingText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTextArea&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;currentTextArea&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;trim&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;finalText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;promptText&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;existingText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;finalText&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;existingText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;setTextAndDispatchEvents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTextArea&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;finalText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This logic appends the prompt, updates the DOM, and triggers submission automatically.&lt;/p&gt;


&lt;h4&gt;
  
  
  🖼️ Screenshots
&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%2F575b6d8zy7usyvkdo4hf.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%2F575b6d8zy7usyvkdo4hf.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  📦 Extension Structure (&lt;code&gt;manifest.json&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Your &lt;code&gt;manifest.json&lt;/code&gt; defines the extension’s metadata and content script behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"manifest_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GPT Prompts By Ankitkumar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.1.01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Adds a customizable quick prompts bar to the ChatGPT interface."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"72"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"img/icon-72.png"&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="nl"&gt;"content_scripts"&lt;/span&gt;&lt;span class="p"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"matches"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://chatgpt.com/*"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"content.js"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"css"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"styles.css"&lt;/span&gt;&lt;span class="p"&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="p"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure &lt;code&gt;content.js&lt;/code&gt; and &lt;code&gt;styles.css&lt;/code&gt; are present in the folder you upload via Chrome’s Developer Mode.&lt;/p&gt;




&lt;h2&gt;
  
  
  📥 Installation Instructions
&lt;/h2&gt;

&lt;p&gt;Follow these steps to install the extension locally:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone or download the extension files&lt;/li&gt;
&lt;li&gt;Open Chrome and navigate to &lt;code&gt;chrome://extensions/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Toggle &lt;strong&gt;Developer Mode&lt;/strong&gt; (top-right)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Load unpacked&lt;/strong&gt; and select your folder&lt;/li&gt;
&lt;li&gt;Navigate to &lt;a href="https://chatgpt.com" rel="noopener noreferrer"&gt;https://chatgpt.com&lt;/a&gt; and see your toolbar appear&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠️ Customization
&lt;/h2&gt;

&lt;p&gt;You can add your own prompts in &lt;code&gt;content.js&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="nx"&gt;mainPrompts&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;emoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;📘&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain Like I'm 5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain the following concept in simple terms: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Real-World Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🧑‍💻 Developers&lt;/strong&gt; – Automate bug reporting, code analysis, or boilerplate generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📚 Students&lt;/strong&gt; – Summarize complex topics or generate flashcards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📈 Marketers&lt;/strong&gt; – Auto-generate SEO descriptions or email drafts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🧠 Productivity Nerds&lt;/strong&gt; – Structure AI output faster with reusable prompt blocks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  👨‍💻 About the Developer
&lt;/h2&gt;

&lt;p&gt;Created by &lt;strong&gt;Ankitkumar Singh&lt;/strong&gt;&lt;br&gt;
🔗 &lt;a href="https://www.linkedin.com/in/thedevankit/" rel="noopener noreferrer"&gt;Connect on LinkedIn&lt;/a&gt;&lt;br&gt;
Inspired by productivity workflows, AI automation, and hands-on JavaScript development.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt bar not showing&lt;/td&gt;
&lt;td&gt;Refresh ChatGPT, or reload the extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clicks not triggering submission&lt;/td&gt;
&lt;td&gt;Verify selectors and test in updated DOM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompts not updating&lt;/td&gt;
&lt;td&gt;Re-load unpacked extension in &lt;code&gt;chrome://extensions/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ⚠️ Disclaimer
&lt;/h2&gt;

&lt;p&gt;This project is &lt;strong&gt;not affiliated with or endorsed by OpenAI or ChatGPT&lt;/strong&gt;. Use responsibly and ensure your prompts follow best practices.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Chrome Extensions + Prompt Engineering = 🔥 Developer Superpowers.&lt;/p&gt;

&lt;p&gt;By blending JavaScript automation with smart prompt structuring, you can build powerful tools like &lt;strong&gt;ChatGPT Quick Prompts&lt;/strong&gt; to elevate your daily workflows. Start with this base, and evolve it into your own smart assistant.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>promptengineering</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
