<?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: Menula De Silva</title>
    <description>The latest articles on DEV Community by Menula De Silva (@dmsmenula).</description>
    <link>https://dev.to/dmsmenula</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%2F3517482%2F598b88aa-98d7-4bb4-9045-261b91a5b2b2.png</url>
      <title>DEV Community: Menula De Silva</title>
      <link>https://dev.to/dmsmenula</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dmsmenula"/>
    <language>en</language>
    <item>
      <title>🚀 How I Got 25,000+ Views in 2 Days on a YouTube Short</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Thu, 04 Dec 2025 05:03:30 +0000</pubDate>
      <link>https://dev.to/dmsmenula/how-i-got-25000-views-in-2-days-on-a-youtube-short-1lc1</link>
      <guid>https://dev.to/dmsmenula/how-i-got-25000-views-in-2-days-on-a-youtube-short-1lc1</guid>
      <description>&lt;p&gt;YouTube Shorts can blow up fast but only if you understand how your audience behaves.&lt;/p&gt;

&lt;p&gt;One of my recent Shorts crossed &lt;strong&gt;25K+ views within just 2 days&lt;/strong&gt;, and it's &lt;em&gt;still trending&lt;/em&gt; today.&lt;/p&gt;

&lt;p&gt;Here’s the Short if you want to check it:&lt;br&gt;
&lt;a href="https://youtube.com/shorts/SHmcBMhZ0p0" rel="noopener noreferrer"&gt;https://youtube.com/shorts/SHmcBMhZ0p0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The secret behind that growth wasn’t luck.&lt;br&gt;
It was &lt;strong&gt;analytics&lt;/strong&gt; especially metrics like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stayed to watch (Retention %)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Average view duration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook performance (first 3 seconds)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replays &amp;amp; Loop factor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this guide, I’ll break down everything I learned so you can repeat the same results.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 1. Start by Reading Your Analytics
&lt;/h2&gt;

&lt;p&gt;My video analytics showed something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stayed to watch:&lt;/strong&gt; 66.2%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average view duration:&lt;/strong&gt; 0:20 seconds&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This tells you two BIG things:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Viewers are genuinely interested
&lt;/h3&gt;

&lt;p&gt;Anything above 50% retention is excellent for Shorts.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ But the start could be stronger
&lt;/h3&gt;

&lt;p&gt;A 20s average duration often means people are skipping early so improving your hook increases viral potential.&lt;/p&gt;




&lt;p&gt;‎ &lt;br&gt;
‎ &lt;br&gt;
‎ &lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ 2. The First 3 Seconds Decide Everything
&lt;/h2&gt;

&lt;p&gt;Shorts are brutal. If your intro is weak, people scroll instantly.&lt;/p&gt;

&lt;p&gt;You MUST grab the viewer immediately.&lt;/p&gt;

&lt;p&gt;Here are hooks that work amazingly well:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 High-energy hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Wait, don’t scroll. You need to see this!”&lt;/li&gt;
&lt;li&gt;“I tested something crazy…”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎵 Music + Movement
&lt;/h3&gt;

&lt;p&gt;Start with a beat drop or transition exactly on the first second.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Curiosity hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“I bet you didn’t know this…”&lt;/li&gt;
&lt;li&gt;“This is the mistake most people make…”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good hooks = high retention = YouTube boosts your Short.&lt;/p&gt;

&lt;p&gt;This is a key reason why my Short hit &lt;strong&gt;25K in 2 days.&lt;/strong&gt;&lt;br&gt;
‎ &lt;/p&gt;

&lt;p&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%2F0ajma2wvzbppby4rw2w9.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%2F0ajma2wvzbppby4rw2w9.gif" alt="Song" width="498" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;‎ &lt;/p&gt;

&lt;h2&gt;
  
  
  🎬 3. Keep It Fast, Clean, and Engaging
&lt;/h2&gt;

&lt;p&gt;Shorts should feel like a &lt;strong&gt;constant flow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jump cuts&lt;/li&gt;
&lt;li&gt;Captions&lt;/li&gt;
&lt;li&gt;Quick pacing&lt;/li&gt;
&lt;li&gt;High movement&lt;/li&gt;
&lt;li&gt;Strong background music&lt;/li&gt;
&lt;li&gt;Clear message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The faster the energy, the higher the retention.&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%2F3rnsx70h3b0vjf645asm.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%2F3rnsx70h3b0vjf645asm.gif" alt="Clean Short Video" width="220" height="220"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;‎ &lt;br&gt;
‎ &lt;/p&gt;

&lt;h2&gt;
  
  
  🔁 4. Add a Loop Moment ( Optional )
&lt;/h2&gt;

&lt;p&gt;This is a hack for more views.&lt;/p&gt;

&lt;p&gt;If your video loops smoothly, viewers watch it &lt;em&gt;again without realizing&lt;/em&gt; the algorithm LOVES this.&lt;/p&gt;

&lt;p&gt;Ways to create a loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start and end with the same sentence&lt;/li&gt;
&lt;li&gt;Loop the sound&lt;/li&gt;
&lt;li&gt;Bring the ending visually back to the beginning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My Short had a natural loop feel → more replays → more views.&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%2Fdgcff25l0j5n7orfifep.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%2Fdgcff25l0j5n7orfifep.gif" alt="Loop Moment" width="280" height="300"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;‎ &lt;br&gt;
‎ &lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ 5. Encourage Smart Engagement
&lt;/h2&gt;

&lt;p&gt;Instead of “like &amp;amp; subscribe,” use these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Comment YES if you feel the same”&lt;/li&gt;
&lt;li&gt;“Which one would you choose? A or B?”&lt;/li&gt;
&lt;li&gt;“Want part 2?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More comments = more reach.&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%2F4s94u0einkxrf223lrdm.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%2F4s94u0einkxrf223lrdm.gif" alt="Trending Youtube" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;‎ &lt;/p&gt;

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

&lt;p&gt;Going viral on YouTube Shorts isn’t magic.&lt;br&gt;
It’s &lt;strong&gt;data&lt;/strong&gt;, &lt;strong&gt;retention&lt;/strong&gt;, and &lt;strong&gt;a strong hook&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My Shorts reached &lt;strong&gt;25K+ views in 2 days&lt;/strong&gt; because I paid attention to what my viewers actually do not what I &lt;em&gt;think&lt;/em&gt; they do.&lt;/p&gt;

&lt;p&gt;If you improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the first 3 seconds&lt;/li&gt;
&lt;li&gt;the pacing&lt;/li&gt;
&lt;li&gt;the looping&lt;/li&gt;
&lt;li&gt;and the engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…your next Short has a very high chance of trending too.&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%2F853kaxq9xixcmse8tjo4.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%2F853kaxq9xixcmse8tjo4.gif" alt="See You Soon" width="480" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I learned all these insights from this single video . I’m not promoting it or using it for any money-related purpose.&lt;/p&gt;

&lt;p&gt;I’m simply sharing it so you can learn from it too:&lt;br&gt;
👉 &lt;a href="https://www.youtube.com/watch?v=Zc3ac7EWdbE" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=Zc3ac7EWdbE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to check it out and learn!&lt;/p&gt;

</description>
      <category>socialmedia</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 Introducing Gem Price Estimator (Open Source &amp; Free!)</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Tue, 11 Nov 2025 08:55:11 +0000</pubDate>
      <link>https://dev.to/dmsmenula/introducing-gem-price-estimator-open-source-free-26fi</link>
      <guid>https://dev.to/dmsmenula/introducing-gem-price-estimator-open-source-free-26fi</guid>
      <description>&lt;p&gt;Hey Dev Community! 👋&lt;br&gt;
I'm &lt;strong&gt;Menula De Silva&lt;/strong&gt;, a young developer from Sri Lanka 🇱🇰 and I’m excited to share my latest open-source project:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Gem Price Estimator&lt;/strong&gt;&lt;br&gt;
✅ Live App: &lt;a href="https://gemprice.vercel.app/" rel="noopener noreferrer"&gt;https://gemprice.vercel.app/&lt;/a&gt;&lt;br&gt;
✅ GitHub Repo: &lt;a href="https://github.com/DMS-Menula/Gem-Price-Estimator" rel="noopener noreferrer"&gt;https://github.com/DMS-Menula/Gem-Price-Estimator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎥 &lt;strong&gt;Watch the trailer:&lt;/strong&gt;&lt;br&gt;
➡️ &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=JrD4zy75JMY" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=JrD4zy75JMY&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Is Gem Price Estimator?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;smart, responsive, and user-friendly tool&lt;/strong&gt; that instantly estimates prices for precious gems based on:&lt;/p&gt;

&lt;p&gt;✅ Gem Type&lt;br&gt;
✅ Carat Weight&lt;br&gt;
✅ Market Category&lt;br&gt;
✅ Price Multipliers&lt;br&gt;
✅ Real-time Valuation Logic&lt;/p&gt;

&lt;p&gt;Sri Lanka is world-famous for gems and this tool helps bring that industry into modern tech.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Why I Built This
&lt;/h2&gt;

&lt;p&gt;Gem pricing online is inconsistent, outdated, and often inaccurate.&lt;br&gt;
So I built a &lt;strong&gt;free &amp;amp; open-source alternative&lt;/strong&gt; that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Transparent&lt;/li&gt;
&lt;li&gt;Easy for anyone to use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is to make this Sri Lanka’s &lt;strong&gt;#1 gem pricing tool&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;✅ Modern UI&lt;br&gt;
✅ Real-time gem value calculation&lt;br&gt;
✅ Fully responsive&lt;br&gt;
✅ Beginner-friendly code&lt;br&gt;
✅ Hosted on Vercel&lt;br&gt;
✅ Open-source for everyone&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Calling All Contributors!
&lt;/h2&gt;

&lt;p&gt;I’m welcoming developers from Sri Lanka and around the world to help improve this project.&lt;/p&gt;

&lt;p&gt;Looking for contributors in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend UI&lt;/li&gt;
&lt;li&gt;Pricing logic&lt;/li&gt;
&lt;li&gt;API suggestions&lt;/li&gt;
&lt;li&gt;Math/valuation formulas&lt;/li&gt;
&lt;li&gt;UX design&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Bug fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Every contribution counts&lt;br&gt;
✅ You’ll be listed as a &lt;strong&gt;Core Contributor&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ How to Contribute
&lt;/h2&gt;

&lt;p&gt;1️⃣ Visit the GitHub repo&lt;br&gt;
➡️ &lt;a href="https://github.com/DMS-Menula/Gem-Price-Estimator" rel="noopener noreferrer"&gt;https://github.com/DMS-Menula/Gem-Price-Estimator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Open issues / suggest ideas&lt;br&gt;
3️⃣ Submit your pull request&lt;br&gt;
4️⃣ Join the contributor list!&lt;/p&gt;




&lt;h2&gt;
  
  
  ⭐ Let’s Build Sri Lanka’s Biggest Open Source Gem Project
&lt;/h2&gt;

&lt;p&gt;If you support this project:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Star the GitHub repo&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Share it with Sri Lankan &amp;amp; Global devs&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Contribute if you can&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🦇 Spooky Portal - Halloween CSS Art 🌙✨</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Tue, 04 Nov 2025 06:17:37 +0000</pubDate>
      <link>https://dev.to/dmsmenula/spooky-night-halloween-css-art-4h0n</link>
      <guid>https://dev.to/dmsmenula/spooky-night-halloween-css-art-4h0n</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2025-10-15"&gt;Frontend Challenge - Halloween Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Inspiration
&lt;/h2&gt;

&lt;p&gt;Halloween has always been about that magical mix of spooky and beautiful — the glowing moon, the flying bats, and the mysterious night sky.&lt;br&gt;
I wanted to capture that cinematic moment when bats flutter under a full moon — purely with &lt;strong&gt;HTML and CSS&lt;/strong&gt; (no images or JS needed!).&lt;/p&gt;

&lt;p&gt;The goal was to make it &lt;strong&gt;feel alive&lt;/strong&gt; — with random bat movement, glowing lights, and soft night colors that bring the Halloween vibe to life.&lt;/p&gt;




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

&lt;p&gt;Here’s the live version of my spooky CSS art:&lt;br&gt;
👉 &lt;a href="https://dms-menula.github.io/spooky-portal/" rel="noopener noreferrer"&gt;&lt;strong&gt;View Demo on GitHub Pages&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
🧩 &lt;a href="https://github.com/DMS-Menula/spooky-portal" rel="noopener noreferrer"&gt;&lt;strong&gt;View Source on GitHub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

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




&lt;h2&gt;
  
  
  🕯️ Journey
&lt;/h2&gt;

&lt;p&gt;This started as a simple CSS moon animation… and then the bats came in 🦇&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Creating &lt;strong&gt;natural motion&lt;/strong&gt; using &lt;code&gt;@keyframes&lt;/code&gt; and &lt;code&gt;animation-delay&lt;/code&gt; randomness.&lt;/li&gt;
&lt;li&gt;Layering effects with &lt;strong&gt;pure CSS gradients and transforms&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Making &lt;strong&gt;light glows and depth&lt;/strong&gt; using &lt;code&gt;box-shadow&lt;/code&gt; and &lt;code&gt;filter: blur()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keeping it &lt;strong&gt;responsive and performant&lt;/strong&gt; while keeping that “spooky magic.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I’m proud of:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The entire animation runs on &lt;strong&gt;zero JavaScript&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;bats randomly move&lt;/strong&gt; across the sky, giving life to the art.&lt;/li&gt;
&lt;li&gt;Smooth night ambiance created using &lt;strong&gt;CSS-only glow effects&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What’s next:
&lt;/h3&gt;

&lt;p&gt;I’d love to expand this into a &lt;strong&gt;CSS Art Halloween Scene Generator&lt;/strong&gt;, where each reload spawns a unique night sky with different moon and bat arrangements 🌕💫&lt;/p&gt;




&lt;h2&gt;
  
  
  🧡 Credits &amp;amp; License
&lt;/h2&gt;

&lt;p&gt;Made with love by &lt;a href="https://dev.to/dmsmenula"&gt;@dmsmenula&lt;/a&gt; 🧙‍♂️&lt;br&gt;
Licensed under the &lt;a href="https://opensource.org/licenses/MIT" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>💎How I Built a Medium-Level E-Commerce Website</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Tue, 04 Nov 2025 05:45:38 +0000</pubDate>
      <link>https://dev.to/dmsmenula/how-i-built-a-medium-level-e-commerce-website-4cpd</link>
      <guid>https://dev.to/dmsmenula/how-i-built-a-medium-level-e-commerce-website-4cpd</guid>
      <description>&lt;p&gt;Hey Dev Community 👋  &lt;/p&gt;

&lt;p&gt;I’m &lt;strong&gt;Menula De Silva&lt;/strong&gt;, a 12-year-old developer from Sri Lanka 🇱🇰 who loves building full-stack web apps.&lt;br&gt;&lt;br&gt;
Recently, I created my most advanced project yet — &lt;strong&gt;&lt;a href="https://lustellagems.com" rel="noopener noreferrer"&gt;LustellaGems.com&lt;/a&gt;&lt;/strong&gt;, a complete e-commerce website for selling premium gemstones online.&lt;/p&gt;

&lt;p&gt;This project is extra special to me because it’s inspired by &lt;strong&gt;my mom’s real gem business idea&lt;/strong&gt; 💖&lt;br&gt;&lt;br&gt;
I wanted to turn her dream into a real, working online store — and that’s how Lustella Gems was born.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Vision
&lt;/h2&gt;

&lt;p&gt;It all started when my mom shared her idea of creating an online platform to showcase and sell gemstones.&lt;br&gt;&lt;br&gt;
I decided to take on the challenge and build it from scratch — not just as a demo, but as a &lt;strong&gt;real e-commerce website&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I asked myself:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What would a real gem shop need to run online smoothly?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question helped me design and plan every part of the system carefully.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Tech Stack I Used
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🖥️ Frontend&lt;/td&gt;
&lt;td&gt;HTML, CSS, Bootstrap, JavaScript, jQuery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚙️ Backend&lt;/td&gt;
&lt;td&gt;PHP, MySQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧮 Currency Conversion&lt;/td&gt;
&lt;td&gt;JavaScript (LKR → USD calculation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔐 Authentication&lt;/td&gt;
&lt;td&gt;PHP Sessions + MySQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦 Hosting&lt;/td&gt;
&lt;td&gt;cPanel with a custom domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧩 UI/UX Design&lt;/td&gt;
&lt;td&gt;Figma&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💎 Core Features I Built
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧍 1. Login, Signup, and Profile Management
&lt;/h3&gt;

&lt;p&gt;Users can create accounts, log in securely, and edit their profile details anytime.&lt;br&gt;&lt;br&gt;
The system uses &lt;strong&gt;PHP sessions&lt;/strong&gt; to manage authentication and prevent unauthorized access.  &lt;/p&gt;

&lt;p&gt;All user data is stored safely in MySQL, and both frontend and backend validation ensure clean, secure inputs.&lt;/p&gt;




&lt;h3&gt;
  
  
  🛍️ 2. Dynamic Product System
&lt;/h3&gt;

&lt;p&gt;Products are &lt;strong&gt;database-driven&lt;/strong&gt;, dynamically loaded using PHP and displayed through clean Bootstrap card layouts.&lt;/p&gt;

&lt;p&gt;Each product has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name, price, image, and description
&lt;/li&gt;
&lt;li&gt;Real-time &lt;strong&gt;LKR → USD conversion&lt;/strong&gt; (using JavaScript)
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;“Request Product”&lt;/strong&gt; button for customers who want something custom
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📨 3. Product Request System
&lt;/h3&gt;

&lt;p&gt;This was one of my favorite features to build.&lt;br&gt;&lt;br&gt;
Users can send special requests for gemstones that aren’t currently listed.&lt;br&gt;&lt;br&gt;
Submissions are handled via AJAX and stored in the database (or emailed to the admin).&lt;br&gt;&lt;br&gt;
It gives the site a more personal, customer-friendly feel.&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 4. Review and Rating System
&lt;/h3&gt;

&lt;p&gt;Logged-in users can write reviews on products.&lt;br&gt;&lt;br&gt;
If someone tries without logging in, a &lt;strong&gt;SweetAlert&lt;/strong&gt; pop-up gently reminds them to sign in first — just like a professional shop.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌍 5. LKR → USD Price Conversion
&lt;/h3&gt;

&lt;p&gt;Every product shows both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LKR. 15000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;USD. 50&lt;/code&gt; (automatically calculated and rounded with JavaScript)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It helps international customers easily understand prices, making the store feel global.&lt;/p&gt;




&lt;h3&gt;
  
  
  📰 6. Blog Section
&lt;/h3&gt;

&lt;p&gt;To make the website more engaging, I built a &lt;strong&gt;blog system&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The admin can post articles about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sri Lankan gem history
&lt;/li&gt;
&lt;li&gt;Mining and gemstone culture
&lt;/li&gt;
&lt;li&gt;Gem categories and fun facts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns the site into both an &lt;em&gt;online store&lt;/em&gt; and an &lt;em&gt;educational hub&lt;/em&gt; for gem lovers.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 UI/UX Design
&lt;/h2&gt;

&lt;p&gt;The design follows a &lt;strong&gt;luxurious white, gold, and sapphire blue theme&lt;/strong&gt; — elegant yet minimal.&lt;br&gt;&lt;br&gt;
I designed the layout in &lt;strong&gt;Figma&lt;/strong&gt; and implemented it with &lt;strong&gt;Tailwind + Bootstrap&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
All pages are fully responsive and feature smooth animations for a premium experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚔️ Challenges I Faced
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Building a secure login &amp;amp; signup system with sessions
&lt;/li&gt;
&lt;li&gt;💾 Structuring the database for users, products, reviews, and requests
&lt;/li&gt;
&lt;li&gt;🎨 Keeping the same premium feel across every page and device
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each challenge helped me understand how &lt;strong&gt;real-world e-commerce systems&lt;/strong&gt; are built from the ground up.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How to connect PHP with MySQL efficiently
&lt;/li&gt;
&lt;li&gt;Using AJAX to update data without page reloads
&lt;/li&gt;
&lt;li&gt;Validating user input securely
&lt;/li&gt;
&lt;li&gt;Organizing both frontend and backend logic neatly
&lt;/li&gt;
&lt;li&gt;The importance of combining creativity with functionality
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 What’s Next
&lt;/h2&gt;

&lt;p&gt;I’m currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Admin panel for managing blogs
&lt;/li&gt;
&lt;li&gt;Email notifications using PHPMailer
&lt;/li&gt;
&lt;li&gt;Wishlist and cart system
&lt;/li&gt;
&lt;li&gt;Advanced search filters with real-time results
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is to make &lt;strong&gt;LustellaGems.com&lt;/strong&gt; a complete online store — professional, scalable, and user-friendly.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❤️ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building &lt;strong&gt;Lustella Gems&lt;/strong&gt; wasn’t just a coding project — it was a personal mission to bring my &lt;strong&gt;mom’s gem business idea to life&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It taught me how to balance creativity, logic, and real-world requirements as a young developer.  &lt;/p&gt;

&lt;p&gt;If you’d like to check it out, here’s the live site 👇&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://lustellagems.com" rel="noopener noreferrer"&gt;LustellaGems.com&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;




&lt;h3&gt;
  
  
  Follow Me
&lt;/h3&gt;

&lt;p&gt;LinkedIn - &lt;a href="https://www.linkedin.com/in/dmsmenula/" rel="noopener noreferrer"&gt;Here&lt;/a&gt;&lt;br&gt;
GitHub - &lt;a href="https://github.com/DMS-Menula" rel="noopener noreferrer"&gt;Here&lt;/a&gt;&lt;br&gt;
Portfolio - &lt;a href="https://dms-menula.github.io/" rel="noopener noreferrer"&gt;Here&lt;/a&gt;&lt;br&gt;
Discord - &lt;strong&gt;menuladesilva&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;If you enjoyed this post, please drop a ❤️ or comment your thoughts!&lt;br&gt;&lt;br&gt;
I’d love to hear your feedback and connect with other developers around the world 🙌  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>career</category>
    </item>
    <item>
      <title>👑Get Canva Pro For FREE In 4 Steps!</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Mon, 20 Oct 2025 05:47:45 +0000</pubDate>
      <link>https://dev.to/dmsmenula/get-canva-pro-free-in-4-steps-4pnf</link>
      <guid>https://dev.to/dmsmenula/get-canva-pro-free-in-4-steps-4pnf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Go To &lt;a href="https://bingotingo.com" rel="noopener noreferrer"&gt;Bingo Tingo&lt;/a&gt; . And Find &lt;em&gt;Best Social Media Platforms Card&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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%2F9vuu5c8tlo89bbs25ct1.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%2F9vuu5c8tlo89bbs25ct1.png" alt="Go To Bingotingo.com" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Go To The Bottom Of The Page And Wait Until The Link Loads&lt;/p&gt;
&lt;/blockquote&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%2Fus2dxcqa16yi2p059512.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%2Fus2dxcqa16yi2p059512.png" alt="Go To Bottom Of The Page And Find This" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Try Clicking The Download Button For 2 or 3 times Until Get This&lt;/p&gt;
&lt;/blockquote&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%2F3m31lm5l7gqkb9gv20zg.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%2F3m31lm5l7gqkb9gv20zg.png" alt="Click Download Button" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Try Clicking The Get Now Button Until Redirecting To Canva.com&lt;/p&gt;
&lt;/blockquote&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%2F6o4pxr7eqvrv5xa9on4r.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%2F6o4pxr7eqvrv5xa9on4r.png" alt="Click The Get Now Button" width="592" height="775"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;NOW YOU WILL HAVE THE CANVA PRO FOR FREE !&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;This Is Only For Educational Purposes!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🚀 Do You Know These World-Famous Apps Are Built with Electron?</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Sun, 28 Sep 2025 07:30:57 +0000</pubDate>
      <link>https://dev.to/dmsmenula/do-you-know-these-world-famous-apps-are-built-with-electron-4le5</link>
      <guid>https://dev.to/dmsmenula/do-you-know-these-world-famous-apps-are-built-with-electron-4le5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Cross-platform desktop apps using just &lt;strong&gt;JavaScript, HTML, and CSS&lt;/strong&gt;? Yes — it's real. And it's called &lt;strong&gt;Electron&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&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%2Fh79q0a7kwz87bqj0ko54.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh79q0a7kwz87bqj0ko54.jpg" alt="Apps built with Electron" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 What is Electron?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Electron&lt;/strong&gt; is an open-source framework that allows developers to build desktop applications using &lt;strong&gt;web technologies&lt;/strong&gt; — JavaScript, HTML, and CSS.&lt;/p&gt;

&lt;p&gt;It's like having the power of a browser &lt;em&gt;and&lt;/em&gt; the operating system combined into one powerful platform. With Electron, your app runs on &lt;strong&gt;Windows, macOS, and Linux&lt;/strong&gt;, from a single codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏆 Popular Apps Built with Electron
&lt;/h2&gt;

&lt;p&gt;You use these every day — but did you know they run on Electron?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App Name&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;💬 Discord&lt;/td&gt;
&lt;td&gt;Voice &amp;amp; Text Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧 Visual Studio Code&lt;/td&gt;
&lt;td&gt;Code Editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✍️ Notion&lt;/td&gt;
&lt;td&gt;Notes &amp;amp; Productivity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📁 Dropbox&lt;/td&gt;
&lt;td&gt;File Storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧑‍💻 GitHub Desktop&lt;/td&gt;
&lt;td&gt;Git GUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦 Postman&lt;/td&gt;
&lt;td&gt;API Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎨 Figma&lt;/td&gt;
&lt;td&gt;UI/UX Design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💼 Microsoft Teams&lt;/td&gt;
&lt;td&gt;Collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧾 Slack&lt;/td&gt;
&lt;td&gt;Team Communication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟢 Skype&lt;/td&gt;
&lt;td&gt;Video Calling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 Trello&lt;/td&gt;
&lt;td&gt;Task Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔍 Loom&lt;/td&gt;
&lt;td&gt;Video Messaging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Obsidian&lt;/td&gt;
&lt;td&gt;Markdown Knowledge Base&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 You can find the full list of Electron-powered apps on the &lt;a href="https://www.electronjs.org/apps" rel="noopener noreferrer"&gt;Electron official website&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚙️ Why Use Electron?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Cross-Platform&lt;/strong&gt;: One codebase for Windows, macOS, and Linux.&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Familiar Tools&lt;/strong&gt;: Use React, Vue, Angular, or plain JavaScript.&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Great Community&lt;/strong&gt;: Backed by GitHub, used by developers worldwide.&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;Quick Setup&lt;/strong&gt;: Get your first desktop app running in under 10 minutes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 How Electron Works
&lt;/h2&gt;

&lt;p&gt;Electron combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chromium&lt;/strong&gt; for rendering web content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; for backend-like capabilities (filesystem, networking).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Electron APIs&lt;/strong&gt; for native integration (menus, notifications, system tray).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-electron-app my-app
&lt;span class="nb"&gt;cd &lt;/span&gt;my-app
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Or check out the official boilerplate here: &lt;a href="https://github.com/electron/electron-quick-start" rel="noopener noreferrer"&gt;Electron Quick Start&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Want to Build Something Cool?
&lt;/h2&gt;

&lt;p&gt;You could build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A markdown notes app 📝&lt;/li&gt;
&lt;li&gt;A custom YouTube downloader 📽️&lt;/li&gt;
&lt;li&gt;A cross-platform code snippet manager 💻&lt;/li&gt;
&lt;li&gt;A Discord bot manager UI 🤖&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.electronjs.org/docs" rel="noopener noreferrer"&gt;Electron Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.electronjs.org/fiddle" rel="noopener noreferrer"&gt;Electron Fiddle (Playground)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sindresorhus/awesome-electron" rel="noopener noreferrer"&gt;Awesome Electron Projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




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

&lt;blockquote&gt;
&lt;p&gt;Electron is more than a framework. It's a gateway for web developers to build &lt;em&gt;native-like&lt;/em&gt; desktop apps — fast, powerful, and cross-platform.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve used any of the apps above — you've already experienced Electron’s magic.&lt;br&gt;
Now it’s your turn to &lt;strong&gt;build something awesome&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;💬 &lt;strong&gt;Drop a comment&lt;/strong&gt; if you're interested in a full beginner-friendly Electron tutorial or boilerplate!&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Follow me&lt;/strong&gt; on &lt;a href="https://dev.to/dmsmenula"&gt;Dev.to&lt;/a&gt; or &lt;a href="https://github.com/DMS-Menula" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for more awesome web &amp;amp; desktop dev content.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Introducing to globalprice</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Fri, 26 Sep 2025 07:02:51 +0000</pubDate>
      <link>https://dev.to/dmsmenula/introducing-globalprice-a-smart-pricing-engine-for-160-currencies-5cjh</link>
      <guid>https://dev.to/dmsmenula/introducing-globalprice-a-smart-pricing-engine-for-160-currencies-5cjh</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%2Fl6nhpitqhjrhbqvwhboh.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%2Fl6nhpitqhjrhbqvwhboh.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart and dynamic pricing engine for global applications&lt;/strong&gt;, supporting real-time currency conversion, quantity, discounts, tax calculations, and formatted output.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/DMS-Menula/globalprice" rel="noopener noreferrer"&gt;Github Repo Here&lt;/a&gt;&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 Supports 160+ currencies&lt;/li&gt;
&lt;li&gt;🔄 Auto-fetches latest exchange rates&lt;/li&gt;
&lt;li&gt;🧾 VAT / GST / custom tax support&lt;/li&gt;
&lt;li&gt;💸 Discount by percentage or fixed value&lt;/li&gt;
&lt;li&gt;📦 Quantity multiplier&lt;/li&gt;
&lt;li&gt;🪙 Currency symbol &amp;amp; locale-aware formatting&lt;/li&gt;
&lt;li&gt;🧠 Works offline using cached or fallback rates&lt;/li&gt;
&lt;li&gt;🔐 &lt;code&gt;.env&lt;/code&gt; support for premium API keys&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;globalprice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✨ Usage Example
&lt;/h2&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;calculatePrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;updateRates&lt;/span&gt; &lt;span class="p"&gt;}&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="s2"&gt;globalprice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateRates&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// optional, updates latest rates&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;calculatePrice&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;basePrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;quantity&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="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LKR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;discount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;percent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;tax&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VAT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;format&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;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="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formatted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'Rs 7320.00'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Test Locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔐 Environment Setup
&lt;/h2&gt;

&lt;p&gt;Add &lt;code&gt;.env&lt;/code&gt; for custom API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXCHANGE_API_KEY=your_api_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📁 Folder Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;globalprice/
├── src/
│   ├── index.js
│   ├── rates.js
│   └── currencies.js
├── cache/
│   └── exchangeRates.json
├── test/
│   └── globalprice.test.js
├── .env
├── package.json
├── LICENSE
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📄 License
&lt;/h2&gt;

&lt;p&gt;MIT © &lt;a href="https://github.com/DMS-Menula" rel="noopener noreferrer"&gt;Menula De Silva&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>ai</category>
      <category>react</category>
    </item>
    <item>
      <title>Stop Using `localStorage` for Everything – Here's What to Use Instead</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Thu, 25 Sep 2025 04:11:21 +0000</pubDate>
      <link>https://dev.to/dmsmenula/stop-using-localstorage-for-everything-heres-what-to-use-instead-5f59</link>
      <guid>https://dev.to/dmsmenula/stop-using-localstorage-for-everything-heres-what-to-use-instead-5f59</guid>
      <description>&lt;h2&gt;
  
  
  Stop Using &lt;code&gt;localStorage&lt;/code&gt; for Everything – Here's What to Use Instead
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Warning&lt;/strong&gt;: &lt;code&gt;localStorage&lt;/code&gt; is &lt;strong&gt;NOT&lt;/strong&gt; a secure place to store sensitive data. Yet, it’s used everywhere. Let’s fix that with better alternatives.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  😰 The Problem: &lt;code&gt;localStorage&lt;/code&gt; is Like a Digital Trash Can
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;localStorage&lt;/code&gt; is tempting: it’s fast, globally accessible, and requires no setup. But it has serious flaws:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;No encryption&lt;/strong&gt;: Data is stored in plain text.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Vulnerable to XSS attacks&lt;/strong&gt;: Malicious scripts can access it.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Synchronous&lt;/strong&gt;: Blocks the main thread, slowing down your app.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;No expiration&lt;/strong&gt;: Data persists indefinitely unless manually cleared.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Poor for structured data&lt;/strong&gt;: It’s just key-value pairs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1507146426996-ef05306b995a%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D600%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1507146426996-ef05306b995a%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D600%26q%3D80" alt="Why are you like this?" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Smarter Alternatives to &lt;code&gt;localStorage&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s a quick guide to better storage options based on your use case:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Better Alternative&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Temporary session data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sessionStorage&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication tokens&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HttpOnly Cookies&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured or large data&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;IndexedDB&lt;/code&gt; or &lt;code&gt;Dexie.js&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline support &amp;amp; assets&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Cache API + Service Workers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relational browser database&lt;/td&gt;
&lt;td&gt;SQLite with WebAssembly (e.g., &lt;code&gt;sql.js&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Let’s dive into each option with examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 1. &lt;code&gt;sessionStorage&lt;/code&gt;: Perfect for Tab-Specific Data
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sessionStorage&lt;/code&gt; stores data only for the duration of a browser tab’s session. Once the tab closes, the data is gone.&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;// Save a theme preference&lt;/span&gt;
&lt;span class="nx"&gt;sessionStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Retrieve it&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="nx"&gt;sessionStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "dark"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Isolated to the current tab (no cross-tab interference).&lt;/li&gt;
&lt;li&gt;✅ Simple API, similar to &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Data is cleared when the tab closes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Store temporary UI state, like form inputs or tab-specific settings.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 2. &lt;code&gt;IndexedDB&lt;/code&gt; (or Dexie.js): Scalable, Async, and Structured
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;IndexedDB&lt;/code&gt; is a powerful, asynchronous NoSQL database in the browser, perfect for complex or large datasets. For a simpler API, use &lt;a href="https://dexie.org/" rel="noopener noreferrer"&gt;Dexie.js&lt;/a&gt;, a wrapper around &lt;code&gt;IndexedDB&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Example with Dexie.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Dexie&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dexie&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize database&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&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;Dexie&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MyAppDB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;stores&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;++id, name, age&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Auto-incrementing ID, indexed fields&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add a user&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Menula&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Query users&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;youngUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;below&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toArray&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="nx"&gt;youngUsers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [{ id: 1, name: "Menula", age: 12 }]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Asynchronous, non-blocking.&lt;/li&gt;
&lt;li&gt;✅ Supports complex queries and large datasets (100MB+).&lt;/li&gt;
&lt;li&gt;✅ Structured data with indexing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Steeper learning curve than &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Storing user profiles, app state, or large datasets.&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%2Fimages.unsplash.com%2Fphoto-1516321497487-e288fb19713f%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D600%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1516321497487-e288fb19713f%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D600%26q%3D80" alt="Dexie.js in action" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 3. &lt;code&gt;HttpOnly Cookies&lt;/code&gt;: Secure Authentication
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Never store auth tokens in &lt;code&gt;localStorage&lt;/code&gt;!&lt;/strong&gt; Why? Because any malicious JavaScript can read it:&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;// Hacker script&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="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth_token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 😱 Steals your token!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, use &lt;code&gt;HttpOnly Cookies&lt;/code&gt;, which are inaccessible to JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example (Server-Side):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Set-Cookie: token=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=3600
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Invisible to JavaScript, reducing XSS risks.&lt;/li&gt;
&lt;li&gt;✅ Automatically sent with HTTP requests.&lt;/li&gt;
&lt;li&gt;✅ Configurable expiration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Limited to 4KB per cookie.&lt;/li&gt;
&lt;li&gt;❌ Requires server-side setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Securely storing authentication tokens or session IDs.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 4. &lt;code&gt;Cache API&lt;/code&gt;: Offline Support &amp;amp; Performance
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Cache API&lt;/code&gt;, paired with Service Workers, is ideal for caching assets or data for offline-first apps or Progressive Web Apps (PWAs).&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;// Register a Service Worker&lt;/span&gt;
&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/sw.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Cache assets&lt;/span&gt;
&lt;span class="nx"&gt;caches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;app-cache&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&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;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addAll&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/styles.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/script.js&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;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Enables offline functionality.&lt;/li&gt;
&lt;li&gt;✅ Fast asset retrieval.&lt;/li&gt;
&lt;li&gt;✅ Great for PWAs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Requires Service Worker setup.&lt;/li&gt;
&lt;li&gt;❌ Complex for dynamic data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Caching images, scripts, or API responses for offline access.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 5. SQLite in the Browser: Real SQL Power
&lt;/h2&gt;

&lt;p&gt;With &lt;a href="https://github.com/sql-js/sql.js" rel="noopener noreferrer"&gt;sql.js&lt;/a&gt;, you can run a full SQLite database in the browser using WebAssembly.&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;import&lt;/span&gt; &lt;span class="nx"&gt;initSqlJs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sql.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize SQLite&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SQL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;initSqlJs&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;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;SQL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Create and populate a table&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CREATE TABLE test (col1, col2);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;INSERT INTO test VALUES (?, ?);&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Query data&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SELECT * FROM test&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [{ col1: 1, col2: "hello" }]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Full SQL capabilities.&lt;/li&gt;
&lt;li&gt;✅ Great for relational data.&lt;/li&gt;
&lt;li&gt;✅ Large storage capacity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Requires WebAssembly setup.&lt;/li&gt;
&lt;li&gt;❌ Overhead for simple use cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Complex apps needing relational data, like dashboards or CRMs.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ When is &lt;code&gt;localStorage&lt;/code&gt; Actually OK?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;localStorage&lt;/code&gt; isn’t evil—it’s just overused. It’s fine for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI Preferences&lt;/strong&gt;: E.g., saving a user’s theme choice (&lt;code&gt;"dark"&lt;/code&gt; or &lt;code&gt;"light"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Toggles&lt;/strong&gt;: E.g., enabling/disabling experimental features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Sensitive Metadata&lt;/strong&gt;: E.g., public app settings.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Safe use of localStorage&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feature:beta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&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;
  
  
  🎯 Storage Options Compared
&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;&lt;code&gt;localStorage&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;sessionStorage&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;IndexedDB&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;HttpOnly Cookies&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;Cache API&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Persistent&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secure&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured Data&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity&lt;/td&gt;
&lt;td&gt;~5MB&lt;/td&gt;
&lt;td&gt;~5MB&lt;/td&gt;
&lt;td&gt;100MB+&lt;/td&gt;
&lt;td&gt;&amp;lt;4KB&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Async&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔍 Visual Summary
&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%2Fimages.unsplash.com%2Fphoto-1531403009284-440f080d1e12%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D700%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1531403009284-440f080d1e12%3Fixlib%3Drb-4.0.3%26auto%3Dformat%26fit%3Dcrop%26w%3D700%26q%3D80" alt="Browser storage comparison" width="700" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Credit&lt;/em&gt;: Inspired by &lt;a href="https://blog.logrocket.com/localstorage-vs-sessionstorage-vs-indexeddb-vs-cookies/" rel="noopener noreferrer"&gt;LogRocket Blog&lt;/a&gt;.&lt;/p&gt;




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

&lt;p&gt;Stop defaulting to &lt;code&gt;localStorage&lt;/code&gt; for everything. Instead, choose the right tool based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📌 &lt;strong&gt;Security&lt;/strong&gt;: Prioritize &lt;code&gt;HttpOnly Cookies&lt;/code&gt; for auth.&lt;/li&gt;
&lt;li&gt;📌 &lt;strong&gt;Data Complexity&lt;/strong&gt;: Use &lt;code&gt;IndexedDB&lt;/code&gt; or SQLite for structured data.&lt;/li&gt;
&lt;li&gt;📌 &lt;strong&gt;Performance&lt;/strong&gt;: Leverage &lt;code&gt;Cache API&lt;/code&gt; for offline assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s build &lt;strong&gt;safer&lt;/strong&gt;, &lt;strong&gt;faster&lt;/strong&gt;, and &lt;strong&gt;smarter&lt;/strong&gt; web apps! 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 What’s Your Go-To Storage Solution?
&lt;/h3&gt;

&lt;p&gt;Do you love &lt;code&gt;IndexedDB&lt;/code&gt;? Swear by &lt;code&gt;HttpOnly Cookies&lt;/code&gt;? Or have you found a niche use for &lt;code&gt;sql.js&lt;/code&gt;? Share your favorite tools and tricks in the comments below! 👇&lt;/p&gt;




&lt;h3&gt;
  
  
  ❤️ Support This Post
&lt;/h3&gt;

&lt;p&gt;If you found this helpful, drop a ❤️, 🦄, or 📝 on Dev.to to keep the knowledge sharing going!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>🧬 Why Coding Is Becoming a Blue-Collar Job</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Mon, 22 Sep 2025 15:11:19 +0000</pubDate>
      <link>https://dev.to/dmsmenula/why-coding-is-becoming-a-blue-collar-job-3f3m</link>
      <guid>https://dev.to/dmsmenula/why-coding-is-becoming-a-blue-collar-job-3f3m</guid>
      <description>&lt;h2&gt;
  
  
  🧬 Why Coding Is Becoming a Blue-Collar Job — and That’s a Good Thing
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;🛠️ From elite hackers to everyday builders — why coding is becoming the next skilled trade, and how that's changing the world.&lt;/p&gt;
&lt;/blockquote&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%2F1s2bbjzftx4n4epqw0h2.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%2F1s2bbjzftx4n4epqw0h2.gif" alt="Coding Evolution" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔥 TL;DR
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Coding used to be a mysterious skill for only the chosen few. Today, it’s becoming as learnable, useful, and in-demand as plumbing or carpentry.&lt;br&gt;
&lt;strong&gt;And that’s not an insult — it’s a revolution.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;ol&gt;
&lt;li&gt;Intro: The Elite Coder Era&lt;/li&gt;
&lt;li&gt;Coding Is Becoming a Trade&lt;/li&gt;
&lt;li&gt;Why That’s a &lt;em&gt;Good&lt;/em&gt; Thing&lt;/li&gt;
&lt;li&gt;The Tools Making This Possible&lt;/li&gt;
&lt;li&gt;What It Means for the Future&lt;/li&gt;
&lt;li&gt;Conclusion: We Are the Builders&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🏛️ Intro: The Elite Coder Era
&lt;/h2&gt;

&lt;p&gt;Not long ago, software engineering was seen as something for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Computer science grads 👨‍🎓&lt;/li&gt;
&lt;li&gt;Silicon Valley wizards 🧙‍♂️&lt;/li&gt;
&lt;li&gt;People with \$150,000+ in student loans 💸&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Code was gatekept behind jargon, degree walls, and "leet speak."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But something is changing...&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Coding Is Becoming a Trade
&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%2F9pjv5z57covoahn1pvjy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pjv5z57covoahn1pvjy.webp" alt="Modern Worker" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like welding, plumbing, or electrical work — &lt;strong&gt;coding is becoming a modern trade:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learnable in months (not years)&lt;/li&gt;
&lt;li&gt;Focused on practical output&lt;/li&gt;
&lt;li&gt;Valued for &lt;strong&gt;results&lt;/strong&gt;, not credentials&lt;/li&gt;
&lt;li&gt;More and more people doing it &lt;strong&gt;freelance, remotely, or on YouTube&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💬 Real examples:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🚀 A 12-year-old building ecommerce apps (yes, that’s me 👋)&lt;/li&gt;
&lt;li&gt;👩‍💻 Moms rejoining the workforce as WordPress developers&lt;/li&gt;
&lt;li&gt;👷 Farmers learning Python to automate irrigation&lt;/li&gt;
&lt;li&gt;🔧 Auto mechanics adding diagnostics with Arduino&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💎 Why That’s a &lt;em&gt;Good&lt;/em&gt; Thing
&lt;/h2&gt;

&lt;p&gt;When coding becomes blue-collar:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Good Thing&lt;/th&gt;
&lt;th&gt;💥 Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No degree required&lt;/td&gt;
&lt;td&gt;Lower entry barrier 🚪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Based on skill, not paper&lt;/td&gt;
&lt;td&gt;Equal opportunity ⚖️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid for real output&lt;/td&gt;
&lt;td&gt;Merit-based income 💰&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global reach&lt;/td&gt;
&lt;td&gt;Empowering countries like Sri Lanka 🌍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anyone can be self-taught&lt;/td&gt;
&lt;td&gt;Education freedom 🧠&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧰 The Tools Making This Possible
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 No-Code / Low-Code
&lt;/h3&gt;

&lt;p&gt;Platforms like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bubble&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Glide&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FlutterFlow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Let you build apps without writing a single line of code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔹 Learn-to-Code Platforms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;freeCodeCamp&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YouTube&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alison&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Great Learning&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;And even platforms for &lt;strong&gt;kids&lt;/strong&gt; like Code.org and Codingal 👦&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔹 AI Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT&lt;/strong&gt; for explaining bugs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt; for autocompleting code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replit Ghostwriter&lt;/strong&gt; for real-time AI pair programming&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h2&gt;
  
  
  🔮 What It Means for the Future
&lt;/h2&gt;

&lt;p&gt;🧱 Code becomes the &lt;strong&gt;new brick and mortar&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend = the new architecture&lt;/li&gt;
&lt;li&gt;Backend = the new plumbing&lt;/li&gt;
&lt;li&gt;APIs = the new electrical systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just like in construction — &lt;strong&gt;not everyone needs to be an architect&lt;/strong&gt;.&lt;br&gt;
We need &lt;strong&gt;skilled builders&lt;/strong&gt;, too.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don't just be a software &lt;em&gt;engineer&lt;/em&gt;. Be a software &lt;em&gt;craftsman&lt;/em&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  👷 Conclusion: We Are the Builders
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You don't need a Silicon Valley job to be a real developer.&lt;br&gt;
If you can solve a problem with code — you're already one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;And if coding is becoming blue-collar, guess what?&lt;/strong&gt;&lt;br&gt;
That means &lt;em&gt;anyone&lt;/em&gt; can build the next big thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧵 Join the Conversation
&lt;/h2&gt;

&lt;p&gt;Have you felt this shift too? Are you self-taught?&lt;br&gt;
Do you agree that coding is becoming a modern trade?&lt;/p&gt;

&lt;p&gt;👇 Drop a comment — I’ll reply to everyone!&lt;br&gt;
Let’s build the future together 💪&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Connect With Me
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;🚀 I'm &lt;strong&gt;Menula&lt;/strong&gt;, a 12-year-old full-stack developer from Sri Lanka 🇱🇰&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;a href="https://dms-menula.github.io" rel="noopener noreferrer"&gt;Portfolio Website&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧑‍💻 &lt;a href="https://github.com/DMS-Menula" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💼 &lt;a href="https://www.linkedin.com/in/dmsmenula" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.youtube.com/@blockcodingpro" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; X &lt;a href="https://x.com/dmsmenula" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ❤️ If you liked this post, don't forget to:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Like&lt;/li&gt;
&lt;li&gt;💬 Comment&lt;/li&gt;
&lt;li&gt;🔁 Repost&lt;/li&gt;
&lt;li&gt;⭐ Follow me for more!&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>programming</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
    <item>
      <title>🎭✨ Bringing Interfaces to Life with Theatre.js ✨🎭</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Sun, 21 Sep 2025 05:58:12 +0000</pubDate>
      <link>https://dev.to/dmsmenula/bringing-interfaces-to-life-with-theatrejs-3apm</link>
      <guid>https://dev.to/dmsmenula/bringing-interfaces-to-life-with-theatrejs-3apm</guid>
      <description>&lt;p&gt;Have you ever wished your web animations felt more alive, cinematic, and interactive?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.theatrejs.com/" rel="noopener noreferrer"&gt;Meet Theatre.js&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;– a motion design library built for high-performance animations right in your browser. Whether you're building immersive websites, interactive portfolios, or stunning UI transitions, Theatre.js gives you full control over motion with a timeline-based editor inside your app.&lt;/p&gt;

&lt;p&gt;🔧 Why Theatre.js?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyframe-based animation system 🕹️&lt;/li&gt;
&lt;li&gt;Real-time editing and preview 🔁&lt;/li&gt;
&lt;li&gt;Precise control over easing, duration, and delay ⏱️&lt;/li&gt;
&lt;li&gt;Integration with React, Three.js, HTML/CSS, and more 🌐&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎨 It's like After Effects, but for the web – in code and in real time.&lt;/p&gt;

&lt;p&gt;Whether you're a creative developer or UI/UX designer looking to push visual storytelling on the web, Theatre.js is a powerful tool worth exploring.&lt;/p&gt;

&lt;p&gt;💡 Pro tip: Combine Theatre.js with Three.js for 3D motion, or React for dynamic UIs. The possibilities are endless.&lt;/p&gt;

&lt;p&gt;🚀 Time to bring your frontend to life.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Created Minecraft Browser Game</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Sat, 20 Sep 2025 13:42:09 +0000</pubDate>
      <link>https://dev.to/dmsmenula/i-recreated-minecraft-using--3epc</link>
      <guid>https://dev.to/dmsmenula/i-recreated-minecraft-using--3epc</guid>
      <description>&lt;p&gt;Hey Dev Community! 👋&lt;/p&gt;

&lt;p&gt;I just finished a fun project where I recreated Minecraft in the browser using HTML,CSS,Js,Three.js&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%2Fqvwot1x4mx8qrlsgvmdu.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%2Fqvwot1x4mx8qrlsgvmdu.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check it out here: &lt;a href="https://minefuncraft.vercel.app" rel="noopener noreferrer"&gt;Minefuncraft&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a small sandbox project, but I learned a ton about game mechanics, rendering, and interactive web design while building it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You Can Play This With Multiplayer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts or suggestions for new features! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>🚀 How I Built 5 Projects in 30 Days as a 12-Year-Old Developer</title>
      <dc:creator>Menula De Silva</dc:creator>
      <pubDate>Sat, 20 Sep 2025 09:49:36 +0000</pubDate>
      <link>https://dev.to/dmsmenula/how-i-built-5-projects-in-30-days-as-a-teen-developer-and-you-can-too-254h</link>
      <guid>https://dev.to/dmsmenula/how-i-built-5-projects-in-30-days-as-a-teen-developer-and-you-can-too-254h</guid>
      <description>&lt;p&gt;Hey Dev.to! 👋&lt;/p&gt;

&lt;p&gt;I’m 12 years old and I’ve been coding for 2 years. Last month, I set myself a challenge: build 5 complete projects in 30 days using HTML, CSS, JavaScript, PHP, and React.&lt;/p&gt;

&lt;p&gt;Here’s what happened—and what I learned:&lt;/p&gt;

&lt;p&gt;1️⃣ Start Small, Finish Fast&lt;/p&gt;

&lt;p&gt;Instead of aiming for huge apps, I broke ideas into mini MVPs.&lt;br&gt;
Example: A full eCommerce site? Start with a single product page with add-to-cart.&lt;/p&gt;

&lt;p&gt;2️⃣ Reuse Code Like a Pro&lt;/p&gt;

&lt;p&gt;I made a personal library of components I could copy into new projects:&lt;/p&gt;

&lt;p&gt;Navbar ✅&lt;br&gt;
Login form ✅&lt;br&gt;
Cards &amp;amp; modals ✅ etc.&lt;/p&gt;

&lt;p&gt;3️⃣ Learn by Doing&lt;/p&gt;

&lt;p&gt;React, Angular, and Flutter didn’t come from tutorials—they came from real projects.&lt;br&gt;
Hands-on coding teaches faster than videos ever could.&lt;/p&gt;

&lt;p&gt;4️⃣ Share Your Work&lt;/p&gt;

&lt;p&gt;I uploaded all projects to GitHub and got feedback online. Even small suggestions level up your skills fast.&lt;/p&gt;

&lt;p&gt;My GitHub: &lt;a href="https://github.com/DMS-Menula" rel="noopener noreferrer"&gt;https://github.com/DMS-Menula&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Embrace Mistakes&lt;/p&gt;

&lt;p&gt;Every bug is a lesson. Debugging isn’t frustrating—it’s learning in action 🕵️‍♂️.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>top7</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
