<?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: Jules Mendonca</title>
    <description>The latest articles on DEV Community by Jules Mendonca (@alansdead).</description>
    <link>https://dev.to/alansdead</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%2F2894772%2F7a004514-685f-432e-8a45-37c6815493d2.png</url>
      <title>DEV Community: Jules Mendonca</title>
      <link>https://dev.to/alansdead</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alansdead"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Mon, 23 Mar 2026 22:01:00 +0000</pubDate>
      <link>https://dev.to/alansdead/-4p06</link>
      <guid>https://dev.to/alansdead/-4p06</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/steady5063/the-ultimate-mobile-accessibility-resource-guide-53gh" class="crayons-story__hidden-navigation-link"&gt;The Ultimate Mobile Accessibility Resource Guide&lt;/a&gt;


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

          &lt;a href="/steady5063" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595171%2F40dfac43-7061-423f-a887-cd1033a74aaa.jpeg" alt="steady5063 profile" class="crayons-avatar__image" width="800" height="772"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/steady5063" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mark Steadman
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mark Steadman
                
              
              &lt;div id="story-author-preview-content-1710898" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/steady5063" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595171%2F40dfac43-7061-423f-a887-cd1033a74aaa.jpeg" class="crayons-avatar__image" alt="" width="800" height="772"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mark Steadman&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/steady5063/the-ultimate-mobile-accessibility-resource-guide-53gh" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 29 '23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/steady5063/the-ultimate-mobile-accessibility-resource-guide-53gh" id="article-link-1710898"&gt;
          The Ultimate Mobile Accessibility Resource Guide
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/a11y"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;a11y&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mobile"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mobile&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/android"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;android&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ios"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ios&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/steady5063/the-ultimate-mobile-accessibility-resource-guide-53gh" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;49&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/steady5063/the-ultimate-mobile-accessibility-resource-guide-53gh#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              3&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

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

&lt;/div&gt;


</description>
      <category>a11y</category>
      <category>mobile</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Interactive Keypad | Osu sayo device inspired (CSS/JS)</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Mon, 23 Mar 2026 01:24:26 +0000</pubDate>
      <link>https://dev.to/alansdead/interactive-keypad-osu-sayo-device-inspired-cssjs-4nfo</link>
      <guid>https://dev.to/alansdead/interactive-keypad-osu-sayo-device-inspired-cssjs-4nfo</guid>
      <description>&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/yyOVPGe?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>javascript</category>
      <category>css</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>I created a CodePen project inspired by the horror manga UZUMAKI</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Mon, 23 Mar 2026 01:00:17 +0000</pubDate>
      <link>https://dev.to/alansdead/uzumaki-ali</link>
      <guid>https://dev.to/alansdead/uzumaki-ali</guid>
      <description>&lt;p&gt;A spiral is a curving line that revolves around an originating point, &lt;/p&gt;




&lt;p&gt;Inspired by Junji Ito's UZUMAKI&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/zxGyOmx?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>javascript</category>
      <category>css</category>
      <category>horror</category>
    </item>
    <item>
      <title>Your guide to implementing accessible typography in iOS and Android apps</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Sat, 21 Mar 2026 09:49:48 +0000</pubDate>
      <link>https://dev.to/alansdead/typography-system-guide-42b8</link>
      <guid>https://dev.to/alansdead/typography-system-guide-42b8</guid>
      <description>&lt;p&gt;Last year, I developed an open-source interactive visual reference project to help designers and developers understand and implement accessible typography for mobile apps on iOS and Android.&lt;/p&gt;

&lt;p&gt;I've pushed an update with the latest accessibility and typography guidelines from iOS 18, Android 14, and the latest W3C Web Accessibility Initiative (WAI) recommendations. &lt;/p&gt;




&lt;h2&gt;
  
  
  You can check out the project here:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://alansdead.github.io/typography-system-guide/" rel="noopener noreferrer"&gt;https://alansdead.github.io/typography-system-guide/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback, issues, and contributions are welcome (repo link)
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/julesfermen_github-alansdeadtypography-system-guide-activity-7436465727286538240-vv8a?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAACNRVEcBDZTm7H6GNGylhh2sfedEVAkbm8k" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD5627AQH4RiOnfdef5g%2Farticleshare-shrink_1280_800%2FB56ZzOheMQGQAQ-%2F0%2F1772991407237%3Fe%3D2147483647%26v%3Dbeta%26t%3DQDRBzAeKtmf8MSRI6w8TTnHit7pwq1P_5hlJ_bJu6hY" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/julesfermen_github-alansdeadtypography-system-guide-activity-7436465727286538240-vv8a?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAACNRVEcBDZTm7H6GNGylhh2sfedEVAkbm8k" rel="noopener noreferrer" class="c-link"&gt;
            iOS 18 Android 14 Typography Guidelines Update | Juliana Mendonca posted on the topic | LinkedIn
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Last year, I developed an open-source interactive visual reference project to help designers and developers understand and implement accessible typography for mobile apps on iOS and Android.

I've pushed an update with the latest #Accessibility and typography guidelines from iOS 18, Android 14, and the latest W3C Web Accessibility Initiative (WAI) recommendations. 

You can check out the project here: Typography System Guide
https://lnkd.in/daJ8e-eV

Feedback, issues, and contributions are welcome (repo link)
https://lnkd.in/dZhe5a_Z

#Typography #iOS #Android #A11y #WCAG #MobileDesign
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>a11y</category>
      <category>opensource</category>
      <category>mobile</category>
      <category>design</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Fri, 20 Mar 2026 17:52:38 +0000</pubDate>
      <link>https://dev.to/alansdead/-1c81</link>
      <guid>https://dev.to/alansdead/-1c81</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/steady5063/accessibility-snapshot-testing-in-ios-408e" class="crayons-story__hidden-navigation-link"&gt;Accessibility Snapshot Testing in iOS&lt;/a&gt;


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

          &lt;a href="/steady5063" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595171%2F40dfac43-7061-423f-a887-cd1033a74aaa.jpeg" alt="steady5063 profile" class="crayons-avatar__image" width="800" height="772"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/steady5063" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mark Steadman
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mark Steadman
                
              
              &lt;div id="story-author-preview-content-3257061" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/steady5063" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595171%2F40dfac43-7061-423f-a887-cd1033a74aaa.jpeg" class="crayons-avatar__image" alt="" width="800" height="772"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mark Steadman&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/steady5063/accessibility-snapshot-testing-in-ios-408e" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 20&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/steady5063/accessibility-snapshot-testing-in-ios-408e" id="article-link-3257061"&gt;
          Accessibility Snapshot Testing in iOS
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ios"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ios&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mobile"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mobile&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/testing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;testing&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/steady5063/accessibility-snapshot-testing-in-ios-408e" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/steady5063/accessibility-snapshot-testing-in-ios-408e#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

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

&lt;/div&gt;


</description>
      <category>ios</category>
      <category>mobile</category>
      <category>testing</category>
      <category>automation</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Fri, 20 Mar 2026 15:20:39 +0000</pubDate>
      <link>https://dev.to/alansdead/-23k1</link>
      <guid>https://dev.to/alansdead/-23k1</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/alansdead/falseuntilyoutouchit-5al6" class="crayons-story__hidden-navigation-link"&gt;false_until_you_touch_it&lt;/a&gt;


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

          &lt;a href="/alansdead" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2894772%2F7a004514-685f-432e-8a45-37c6815493d2.png" alt="alansdead profile" class="crayons-avatar__image" width="800" height="778"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/alansdead" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jules Mendonca
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jules Mendonca
                
              
              &lt;div id="story-author-preview-content-3377350" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/alansdead" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2894772%2F7a004514-685f-432e-8a45-37c6815493d2.png" class="crayons-avatar__image" alt="" width="800" height="778"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jules Mendonca&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/alansdead/falseuntilyoutouchit-5al6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 20&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/alansdead/falseuntilyoutouchit-5al6" id="article-link-3377350"&gt;
          false_until_you_touch_it
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/codepen"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;codepen&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/css"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;css&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/design"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;design&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/alansdead/falseuntilyoutouchit-5al6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

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

&lt;/div&gt;


</description>
      <category>codepen</category>
    </item>
    <item>
      <title>false_until_you_touch_it</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Fri, 20 Mar 2026 15:20:24 +0000</pubDate>
      <link>https://dev.to/alansdead/falseuntilyoutouchit-5al6</link>
      <guid>https://dev.to/alansdead/falseuntilyoutouchit-5al6</guid>
      <description>&lt;p&gt;A canvas of hidden checkboxes where every cell holds a single boolean: &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Nothing is random. Everything is either &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/dPpRxEM?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>javascript</category>
      <category>css</category>
      <category>design</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Mon, 09 Mar 2026 06:01:54 +0000</pubDate>
      <link>https://dev.to/alansdead/-4gdk</link>
      <guid>https://dev.to/alansdead/-4gdk</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815" class="crayons-story__hidden-navigation-link"&gt;Squircle Mathematics Explorer [EN/PT Interactive]&lt;/a&gt;


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

          &lt;a href="/alansdead" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2894772%2F7a004514-685f-432e-8a45-37c6815493d2.png" alt="alansdead profile" class="crayons-avatar__image" width="800" height="778"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/alansdead" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jules Mendonca
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jules Mendonca
                
              
              &lt;div id="story-author-preview-content-3325064" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/alansdead" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2894772%2F7a004514-685f-432e-8a45-37c6815493d2.png" class="crayons-avatar__image" alt="" width="800" height="778"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jules Mendonca&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815" id="article-link-3325064"&gt;
          Squircle Mathematics Explorer [EN/PT Interactive]
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/codepen"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;codepen&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/resources"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;resources&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

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

&lt;/div&gt;


</description>
      <category>codepen</category>
    </item>
    <item>
      <title>Squircle Mathematics Explorer [EN/PT Interactive]</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Sun, 08 Mar 2026 02:09:07 +0000</pubDate>
      <link>https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815</link>
      <guid>https://dev.to/alansdead/squircle-mathematics-explorer-enpt-interactive-1815</guid>
      <description>&lt;p&gt;You don’t need to be a developer to build with code. If you already think in design systems, you’re closer than you think.&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%2F6uz1y43lkttj6zax2k5k.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%2F6uz1y43lkttj6zax2k5k.png" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m a designer who loves creative coding, and I keep noticing the same pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designers understand code faster when it’s explained like a design system.&lt;/li&gt;
&lt;li&gt;Developers understand design faster when the intent is made explicit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I’ll walk you through a small CodePen I built: &lt;strong&gt;Squircle Mathematics Explorer&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a squircle?
&lt;/h3&gt;

&lt;p&gt;A squircle is the shape that lives between a circle and a square. You’ve seen it everywhere. One of the most famous examples is the Apple app icon.&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%2Fi1a2okdmoeoh3z4ocqmw.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%2Fi1a2okdmoeoh3z4ocqmw.png" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image from Apple &lt;a href="https://developer.apple.com/design/resources/" rel="noopener noreferrer"&gt;Design Resources&lt;/a&gt; (icon templates).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The math behind it has a long history: Gabriel Lamé described the superellipse in 1818. Piet Hein later popularized it. Apple made it iconic through the app icon grid.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1) The big idea: one variable controls everything
&lt;/h3&gt;

&lt;p&gt;$$&lt;br&gt;
|x|^n + |y|^n = 1&lt;br&gt;
$$&lt;/p&gt;

&lt;p&gt;The only thing that changes is the value of &lt;strong&gt;n&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When &lt;strong&gt;n = 2&lt;/strong&gt;, you get a perfect circle.&lt;/li&gt;
&lt;li&gt;When &lt;strong&gt;n = 4&lt;/strong&gt;, you get a squircle.&lt;/li&gt;
&lt;li&gt;As you move toward &lt;strong&gt;n = 10&lt;/strong&gt;, the shape becomes more square.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When one parameter changes, the entire geometry reacts.&lt;/p&gt;

&lt;p&gt;If you’ve ever used design tokens, this will feel familiar. It’s the same mental model: &lt;strong&gt;change one variable, and the whole system responds.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2) Canvas: a blank artboard (that redraws itself)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff18e8d2x2ic76mi7vk42.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%2Ff18e8d2x2ic76mi7vk42.png" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the browser, the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element is like a blank artboard. It does not “contain” shapes the way SVG or Figma does. It’s closer to saying:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;“Here is a rectangle of pixels. Now draw something onto it.”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the canvas structure in HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"squircle-canvas"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now comes the key shift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Figma, the shape exists immediately, and you tweak its properties.&lt;/li&gt;
&lt;li&gt;On Canvas, the shape only exists after your function &lt;em&gt;calculates&lt;/em&gt; it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why the drawing function clears and redraws the canvas each frame:&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;drawSquircle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clearRect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&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;centerX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;centerY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// ... (calculates points and draws the path)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice, &lt;code&gt;drawSquircle()&lt;/code&gt; calculates thousands of points along the curve and connects them into a path.&lt;/p&gt;

&lt;p&gt;If you’ve ever edited a vector path, it’s like placing many anchor points and closing the shape. &lt;strong&gt;Except here, math generates the points for you.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3) The slider: a live design token
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01w8x5xfnenayxao4qg4.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%2F01w8x5xfnenayxao4qg4.png" width="712" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The range slider is the control that changes &lt;code&gt;n&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In HTML, it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"range"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"n-slider"&lt;/span&gt; &lt;span class="na"&gt;min=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;max=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="na"&gt;step=&lt;/span&gt;&lt;span class="s"&gt;"0.1"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is delightfully “design-y”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; are your constraints.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;step&lt;/code&gt; is your granularity.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;value&lt;/code&gt; is your default token value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In JavaScript, every slider movement updates a single variable. Everything else in the system reads that value and reacts.&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;slider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&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;nValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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;h3&gt;
  
  
  4) The text system: a content component with variants
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kt2ww0fl6q5u65rmiqg.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%2F2kt2ww0fl6q5u65rmiqg.png" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pen also teaches while you explore. There’s an object that holds descriptions for key values of &lt;code&gt;n&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;educationalContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;n = 2: The perfect circle...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;n = 4: The SQUIRCLE! Piet Hein's superellipse, popularized by Apple's app icons...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;n = 8: Nearly square now...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you’re a designer, read that as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One component&lt;/strong&gt; (the education panel)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple variants&lt;/strong&gt; (the copy changes per key value)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A prop&lt;/strong&gt; (the current &lt;code&gt;n&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5) The language toggle: a theme switch for words
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfpyd3f638vma25uni4a.gif" 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%2Fqfpyd3f638vma25uni4a.gif" width="540" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The EN/PT buttons at the top switch the whole UI language at once.&lt;/p&gt;

&lt;p&gt;There’s a translations object that stores strings in both languages:&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;translations&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="p"&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;SQUIRCLE MATHEMATICS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sliderLabel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt; SQUIRCLE_EXPONENT:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;pt&lt;/span&gt;&lt;span class="p"&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;MATEMÁTICA DO SQUIRCLE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sliderLabel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt; EXPOENTE_SQUIRCLE:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you click a language button, a function updates each UI label:&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="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;main-title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&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;slider-label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sliderLabel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ...and so on&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  A quick note on the visuals
&lt;/h3&gt;

&lt;p&gt;The CRT scanlines, noise overlay, and background grid are purely visual.&lt;/p&gt;

&lt;p&gt;In CSS, the scanline effect is just a repeating gradient layered on top of everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  The outcome: code is full of familiar design concepts
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqczkhnuwl9lb1f9cp6b.gif" 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%2Faqczkhnuwl9lb1f9cp6b.gif" width="760" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you take one thing from this post, let it be this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables are tokens.&lt;/li&gt;
&lt;li&gt;Objects are component props.&lt;/li&gt;
&lt;li&gt;State changes are variant switches.&lt;/li&gt;
&lt;li&gt;Animation timing is motion design logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this project with HTML, CSS, and JS on &lt;a href="https://codepen.io/Alansdead" rel="noopener noreferrer"&gt;CodePen&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you start seeing code through the lens of systems and design thinking, it stops feeling like a separate skill and starts feeling like another creative tool.&lt;/p&gt;

&lt;p&gt;An interactive educational tool that explores the mathematics behind squircles&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/myJEevg?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>programming</category>
      <category>resources</category>
      <category>learning</category>
    </item>
    <item>
      <title>Cicada Principle Visualizer</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Thu, 05 Mar 2026 08:31:40 +0000</pubDate>
      <link>https://dev.to/alansdead/cicada-principle-visualizer-25cp</link>
      <guid>https://dev.to/alansdead/cicada-principle-visualizer-25cp</guid>
      <description>&lt;p&gt;Watch how patterns with prime-numbered cycles (3, 5, 7, 11, 13, 17) create complex, non-repeating designs.&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/EaxdWVY?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>javascript</category>
      <category>css</category>
      <category>resources</category>
    </item>
    <item>
      <title>Interactive Keypad | Osu sayo device inspired (CSS/JS)</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Thu, 05 Mar 2026 01:48:04 +0000</pubDate>
      <link>https://dev.to/alansdead/interactive-keypad-osu-sayo-device-inspired-cssjs-3551</link>
      <guid>https://dev.to/alansdead/interactive-keypad-osu-sayo-device-inspired-cssjs-3551</guid>
      <description>&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alansdead/embed/yyOVPGe?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>PSX COLOR LAB</title>
      <dc:creator>Jules Mendonca</dc:creator>
      <pubDate>Tue, 30 Sep 2025 19:02:41 +0000</pubDate>
      <link>https://dev.to/alansdead/psx-color-lab-2mo7</link>
      <guid>https://dev.to/alansdead/psx-color-lab-2mo7</guid>
      <description>&lt;p&gt;Check out this Pen I made!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codepen.io/Alansdead/pen/ogbbGpx" rel="noopener noreferrer"&gt;https://codepen.io/Alansdead/pen/ogbbGpx&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
  </channel>
</rss>
