<?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: Mawadda Abuhannoud</title>
    <description>The latest articles on DEV Community by Mawadda Abuhannoud (@mabuhann).</description>
    <link>https://dev.to/mabuhann</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%2F3858433%2F5279dbdb-6985-40fb-a681-2139eae5a1fd.jpeg</url>
      <title>DEV Community: Mawadda Abuhannoud</title>
      <link>https://dev.to/mabuhann</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mabuhann"/>
    <language>en</language>
    <item>
      <title>The Court Jester: An Anti-Productivity Extension</title>
      <dc:creator>Mawadda Abuhannoud</dc:creator>
      <pubDate>Sat, 11 Apr 2026 09:25:09 +0000</pubDate>
      <link>https://dev.to/mabuhann/the-court-jester-an-anti-productivity-extension-4n8e</link>
      <guid>https://dev.to/mabuhann/the-court-jester-an-anti-productivity-extension-4n8e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The Court Jester&lt;/strong&gt; — a Chrome extension that injects a chaotic little jester into any webpage to mildly (and sometimes aggressively) inconvenience the user.&lt;/p&gt;

&lt;p&gt;Once unleashed, the jester:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs across your screen for no reason&lt;/li&gt;
&lt;li&gt;Randomly claps or dances in corners&lt;/li&gt;
&lt;li&gt;Interrupts your focus with proclamations&lt;/li&gt;
&lt;li&gt;Occasionally sabotages your YouTube experience by pausing videos&lt;/li&gt;
&lt;li&gt;Becomes significantly more unhinged with &lt;strong&gt;“Make it Worse” mode&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s completely useless, slightly annoying, and deeply committed to the bit.&lt;/p&gt;

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

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

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mabuhann" rel="noopener noreferrer"&gt;
        mabuhann
      &lt;/a&gt; / &lt;a href="https://github.com/mabuhann/the-court-jester" rel="noopener noreferrer"&gt;
        the-court-jester
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A disruptive, anti-productivity jester that runs around the screen causing trouble.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/mabuhann/the-court-jester/assets/jester_logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmabuhann%2Fthe-court-jester%2FHEAD%2Fassets%2Fjester_logo.png" alt="The Court Jester logo" width="240"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;The Court Jester&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A Chrome extension that drops an animated jester into web pages to cause mild chaos.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a href="https://github.com/mabuhann/the-court-jester/./Court%20Jester%20Demo.mp4" rel="noopener noreferrer"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmabuhann%2Fthe-court-jester%2FHEAD%2Fassets%2Fjester_logo.png" alt="Click to play the Court Jester demo video" width="320"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  Click the image to play the demo
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Animated idle, run, clap, and dance states&lt;/li&gt;
&lt;li&gt;Popup controls to enable or disable the jester&lt;/li&gt;
&lt;li&gt;Optional "Make it Worse" mode&lt;/li&gt;
&lt;li&gt;Random behaviors and proclamations on normal web pages&lt;/li&gt;
&lt;li&gt;Pixel-art sprite rendering with normalized frame playback&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How To Use&lt;/h2&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Open any &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt; page&lt;/li&gt;
&lt;li&gt;Click the extension icon&lt;/li&gt;
&lt;li&gt;Toggle the jester from &lt;code&gt;Dormant&lt;/code&gt; to &lt;code&gt;Unleashed&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optionally click &lt;code&gt;Make it Worse&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project Files&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manifest.json&lt;/code&gt;: Chrome extension manifest&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;background.js&lt;/code&gt;: service worker and default storage setup&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content.js&lt;/code&gt;: main in-page jester behavior and animation logic&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content.css&lt;/code&gt;: injected styles for the jester, bubble, and banner&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;popup.html&lt;/code&gt;: extension popup UI&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;popup.js&lt;/code&gt;: popup logic and content-script messaging&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assets/&lt;/code&gt;: sprite sheets and images&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sprite_preview.html&lt;/code&gt;: local sprite preview page&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;browser_demo.html&lt;/code&gt;: staged in-page demo…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mabuhann/the-court-jester" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

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

&lt;p&gt;This project is built entirely with &lt;strong&gt;vanilla JavaScript, HTML, and CSS&lt;/strong&gt;, focusing on DOM manipulation and sprite animation.&lt;/p&gt;
&lt;h3&gt;
  
  
  Core Mechanics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The extension injects &lt;code&gt;content.js&lt;/code&gt; and &lt;code&gt;content.css&lt;/code&gt; into any &lt;code&gt;http/https&lt;/code&gt; page via &lt;code&gt;manifest.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A fixed-position DOM layer is created for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the jester sprite&lt;/li&gt;
&lt;li&gt;speech bubbles&lt;/li&gt;
&lt;li&gt;a chaos banner&lt;/li&gt;
&lt;li&gt;a temporary “veil” effect&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sprite System
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Uses pixel-art sprite sheets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;jester_idle_normalized.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jester_running_normalized.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jester_clapping_normalized.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jester_dancing_normalized.png&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Sprite sources + animation settings are defined at the top of &lt;code&gt;content.js&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;A custom pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;analyzeSprite()&lt;/code&gt; calculates bounding boxes per frame&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;preloadSprite()&lt;/code&gt; normalizes dimensions with scaling&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;applyJesterState()&lt;/code&gt; updates the DOM in real time&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This ensures consistent rendering regardless of sprite differences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Behavior Engine
&lt;/h3&gt;

&lt;p&gt;The jester runs a randomized loop of actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;runAcrossScreen()&lt;/code&gt; → zooms across viewport&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;danceInCorner()&lt;/code&gt; → chaotic corner dancing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;clapRandomly()&lt;/code&gt; → pointless applause&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;centerDistraction()&lt;/code&gt; → interrupts the center of the screen&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;royalTantrum()&lt;/code&gt; → full chaos mode (used more in “Make it Worse”)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are scheduled and triggered through a timing loop inside &lt;code&gt;content.js&lt;/code&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Automatically pauses &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; elements (especially noticeable on YouTube)&lt;/li&gt;
&lt;li&gt;Displays random proclamations via speech bubbles&lt;/li&gt;
&lt;li&gt;Intensifies behavior frequency in “Make it Worse” mode&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Community Favorite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project is intentionally ridiculous, highly visual, and interactive — the kind of thing people try once, laugh at, and immediately send to friends.&lt;/p&gt;

&lt;p&gt;It doesn’t solve a problem.&lt;br&gt;
It &lt;em&gt;creates&lt;/em&gt; them — in the most entertaining way possible.&lt;/p&gt;

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