<?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: Shravan Bobade</title>
    <description>The latest articles on DEV Community by Shravan Bobade (@shravan250).</description>
    <link>https://dev.to/shravan250</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%2F2904406%2Fb1c1bdcd-3330-484a-b4c3-465f49b2955a.png</url>
      <title>DEV Community: Shravan Bobade</title>
      <link>https://dev.to/shravan250</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shravan250"/>
    <language>en</language>
    <item>
      <title>🚀 I Published My First Python Package — bulk-file-organizer 🎉</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Fri, 17 Oct 2025 16:01:10 +0000</pubDate>
      <link>https://dev.to/shravan250/i-published-my-first-python-package-bulk-file-organizer-3dma</link>
      <guid>https://dev.to/shravan250/i-published-my-first-python-package-bulk-file-organizer-3dma</guid>
      <description>&lt;p&gt;Hey folks 👋&lt;/p&gt;

&lt;p&gt;After days of tinkering, testing, breaking things (and fixing them again), I finally published my first ever Python package to &lt;strong&gt;PyPI&lt;/strong&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What It Does
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;bulk-file-organizer&lt;/code&gt; is a simple &lt;strong&gt;CLI tool&lt;/strong&gt; that helps you automatically organize messy folders by file type.&lt;/p&gt;

&lt;p&gt;Whether it’s your &lt;strong&gt;Downloads&lt;/strong&gt; folder that looks like a digital jungle 🌴 or your project assets scattered all over—this little tool tidies everything up into clean folders in one command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation &amp;amp; Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;bulk-file-organizer
bulk-organizer &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;This was my first deep dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python packaging&lt;/strong&gt; with &lt;code&gt;setuptools&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pyproject.toml&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;Testing builds using &lt;strong&gt;TestPyPI&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Creating and using &lt;strong&gt;command-line entry points&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Managing metadata and dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, I went through the whole loop—&lt;strong&gt;confusion ➜ research ➜ errors ➜ debugging ➜ triumph&lt;/strong&gt; 🌀 and that’s what made it fun.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Open Source &amp;amp; Contributions
&lt;/h2&gt;

&lt;p&gt;The project is &lt;strong&gt;open-source&lt;/strong&gt; on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Shravan250/bulk-file-organizer" rel="noopener noreferrer"&gt;github.com/Shravan250/bulk-file-organizer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you try it out, I’d love your feedback! You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐️ Star it if you like it&lt;/li&gt;
&lt;li&gt;🐛 Open issues for bugs&lt;/li&gt;
&lt;li&gt;💡 Suggest features&lt;/li&gt;
&lt;li&gt;🔧 Create pull requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every contribution counts and helps it evolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎥 The Story Behind It
&lt;/h2&gt;

&lt;p&gt;I also recorded a short video sharing my journey—from idea to publishing it on PyPI. It captures all the tiny details, moments of doubt, and that final &lt;strong&gt;“YES, it worked!”&lt;/strong&gt; moment 😄&lt;/p&gt;

&lt;p&gt;

&lt;iframe src="https://player.vimeo.com/video/1128261657" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;




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

&lt;p&gt;It might not be the biggest or most complex project, but it’s mine—built from curiosity, persistence, and a ton of trial &amp;amp; error.&lt;/p&gt;

&lt;p&gt;And that, I think, is the real joy of being a developer. The small steps that make you go, &lt;strong&gt;“Huh, I can actually do this!”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s to more experiments, small wins, and open-source adventures ahead ✨&lt;/p&gt;

</description>
      <category>python</category>
      <category>cli</category>
      <category>pypi</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>MovieNest Gets a Mood Ring: Recommending Films with Weather, Time &amp; Tears</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Fri, 27 Jun 2025 18:18:49 +0000</pubDate>
      <link>https://dev.to/shravan250/movienest-gets-a-mood-ring-recommending-films-with-weather-time-tears-54i0</link>
      <guid>https://dev.to/shravan250/movienest-gets-a-mood-ring-recommending-films-with-weather-time-tears-54i0</guid>
      <description>&lt;h1&gt;
  
  
  🎮 MovieNest Gets a Mood Ring: Recommending Films with Weather, Time &amp;amp; Tears
&lt;/h1&gt;

&lt;p&gt;So I was staring out my window one rainy night, thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Wouldn’t it be cool if my app &lt;em&gt;felt&lt;/em&gt; the vibe and showed me a romantic thriller?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that’s how I spiraled into turning my chill movie app into a &lt;strong&gt;mood-sensing, AI-powered, vibe-aware recommender system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Spoiler: The mood logic was easier than the geolocation permission denial logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Goal: Make MovieNest Feel Emotions (Kind Of)
&lt;/h2&gt;

&lt;p&gt;This update was all about personalization. I wanted the app to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect the current &lt;strong&gt;weather&lt;/strong&gt; and &lt;strong&gt;time&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Guess your &lt;strong&gt;mood&lt;/strong&gt; from that combo (like a fortune teller... but with JavaScript)&lt;/li&gt;
&lt;li&gt;Recommend movies that match that vibe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handle permission denial &lt;em&gt;gracefully&lt;/em&gt; (not by throwing an error and dying 😵)&lt;/li&gt;
&lt;li&gt;Keep everything &lt;strong&gt;snappy&lt;/strong&gt; with virtual scroll + debounce&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 The (Questionable) AI Logic
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Mood Detection
&lt;/h3&gt;

&lt;p&gt;I hooked into OpenWeather’s API + good ol’ &lt;code&gt;Date()&lt;/code&gt; and assigned moods like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rainy Night&lt;/strong&gt; → Romantic Thriller 🌧️🌙&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunny Morning&lt;/strong&gt; → Feel-Good Comedy ☕☀️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foggy Afternoon&lt;/strong&gt; → Mystery Drama 🕵️‍♀️&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, my app is now a softboi who asks,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;*"Are you okay? Here's a comfort film."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Mood → Genre
&lt;/h3&gt;

&lt;p&gt;I made a neat &lt;code&gt;moodGenreMapping&lt;/code&gt; object:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;feelgood&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10751&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Comedy, Family&lt;/span&gt;
  &lt;span class="nx"&gt;cozy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10749&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="c1"&gt;// Romance, Drama&lt;/span&gt;
  &lt;span class="nx"&gt;adventure&lt;/span&gt;&lt;span class="p"&gt;:&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="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Adventure, Action&lt;/span&gt;
  &lt;span class="nx"&gt;mystery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;9648&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Mystery, Thriller&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So each mood maps to TMDB genres — and my app fetches them dynamically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Smart Fetching Flow
&lt;/h3&gt;

&lt;p&gt;If you &lt;strong&gt;allow location&lt;/strong&gt;:&lt;br&gt;
→ Weather + Time → Mood → Genre → Movies&lt;/p&gt;

&lt;p&gt;If you &lt;strong&gt;deny location&lt;/strong&gt; (you rebel):&lt;br&gt;
→ Time-only Mood → Genre → Movies&lt;/p&gt;

&lt;p&gt;If you &lt;strong&gt;search manually&lt;/strong&gt;:&lt;br&gt;
→ I shut up and show you what you want.&lt;/p&gt;

&lt;p&gt;And just to be polite, I added a 🧠 &lt;strong&gt;Mood Explanation Banner&lt;/strong&gt; —&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It’s raining in your area at night, so here’s a romantic thriller.”&lt;br&gt;
Because transparency matters. Even in movie logic.&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%2Fg4hndxa1jir88x3fotl6.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%2Fg4hndxa1jir88x3fotl6.gif" alt="Image description" width="8" height="5"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  😮‍😴 Challenges, AKA “Why Am I Like This?”
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ Weather API 401
&lt;/h3&gt;

&lt;p&gt;I foolishly used OpenWeather's fancy 3.0 OneCall endpoint.&lt;br&gt;
Turns out, that one costs real money 😭&lt;br&gt;
So I switched to a &lt;em&gt;free&lt;/em&gt; and &lt;em&gt;functional&lt;/em&gt; endpoint. Budget dev life.&lt;/p&gt;




&lt;h3&gt;
  
  
  📍 No Location? No Problem.
&lt;/h3&gt;

&lt;p&gt;I realized users could &lt;strong&gt;deny&lt;/strong&gt; geolocation (how dare they), and I wasn’t handling it.&lt;br&gt;
Now I fallback like a champion:\&lt;br&gt;
→ Just use the time and pretend we know the weather 🕰️✨&lt;/p&gt;




&lt;h3&gt;
  
  
  ♻ Infinite Fetch Bug
&lt;/h3&gt;

&lt;p&gt;Forgot to reset the pagination page when a new mood or search triggered.&lt;br&gt;
The app said, “More movies! More!”&lt;br&gt;
I said, “Please stop.”&lt;br&gt;
It now stops.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 Mood Mapping Misfire
&lt;/h3&gt;

&lt;p&gt;I passed the &lt;code&gt;time&lt;/code&gt; directly into &lt;code&gt;moodGenreMapping&lt;/code&gt; like a rookie.&lt;br&gt;
What I needed was:&lt;br&gt;
&lt;code&gt;getMoodFromContext(weather, time) → mood → genres&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Fixed it.&lt;br&gt;
Cried a bit.&lt;/p&gt;




&lt;h3&gt;
  
  
  📱 Mobile Geolocation Weirdness
&lt;/h3&gt;

&lt;p&gt;Some mobile devices didn’t even &lt;em&gt;ask&lt;/em&gt; for permission.&lt;br&gt;
Added logs and tested denial flow manually. (Felt like QA. Still unemployed.)&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The Final Vibe
&lt;/h2&gt;

&lt;p&gt;Now MovieNest can do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It’s raining in Mumbai at night?&lt;br&gt;
→ You get romantic thrillers. 💖🕵️‍♂️&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s sunny in Paris?&lt;br&gt;
→ Boom, comedies and feel-goods. ☀️😂&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Denied location?&lt;br&gt;
→ It’s cool. We’ll guess. We’re chill like that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌈 What’s Next?
&lt;/h2&gt;

&lt;p&gt;I’m building in public — crying in private. Here's what’s coming up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎞️ &lt;strong&gt;Collaborative watchlists&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔊 &lt;strong&gt;Voice-based search&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Better mood prediction using AI (GPT meets weather forecast??)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧩 Try It Out
&lt;/h2&gt;

&lt;p&gt;Live App: &lt;a href="https://shravandev.com/movienest" rel="noopener noreferrer"&gt;https://shravandev.com/movienest&lt;/a&gt;\&lt;br&gt;
Blog 1: &lt;a href="https://dev.to/shravan250/building-movienest-a-chaotic-developer-adventure-ft-vpns-proxies-glassmorphism-4lei"&gt;Proxy, Debounce &amp;amp; Glassmorphism&lt;/a&gt;\&lt;br&gt;
Blog 2: &lt;a href="https://dev.to/shravan250/virtual-scrolling-lazy-loading-a-little-bit-of-crying-optimizing-my-movie-app-2136"&gt;Virtual Scroll + Lazy Loading&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for scrolling through my chaos.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;If your app isn’t emotional yet…&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Are you even building full-stack?&lt;/strong&gt; 😌&lt;/p&gt;

&lt;p&gt;Built with care, mood swings, and &lt;code&gt;navigator.geolocation&lt;/code&gt; —&lt;br&gt;
&lt;strong&gt;Shravan 💻🍿&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>javascript</category>
      <category>appwrite</category>
      <category>weatherapi</category>
    </item>
    <item>
      <title>Virtual Scrolling, Lazy Loading &amp; a Little Bit of Crying: Optimizing My Movie App</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Sat, 21 Jun 2025 13:31:47 +0000</pubDate>
      <link>https://dev.to/shravan250/virtual-scrolling-lazy-loading-a-little-bit-of-crying-optimizing-my-movie-app-2n56</link>
      <guid>https://dev.to/shravan250/virtual-scrolling-lazy-loading-a-little-bit-of-crying-optimizing-my-movie-app-2n56</guid>
      <description>&lt;h1&gt;
  
  
  🎞️ Virtual Scrolling, Lazy Loading &amp;amp; a Little Bit of Crying: Optimizing My Movie App
&lt;/h1&gt;

&lt;p&gt;Let’s be honest — I just wanted a smooth movie app.&lt;/p&gt;

&lt;p&gt;No jank. No stutter. Just silky-smooth scrolling like Netflix on a Sunday morning.&lt;br&gt;&lt;br&gt;
What I got was a rabbit hole of virtualization, broken layouts, and spacing problems that haunted my dreams.&lt;/p&gt;

&lt;p&gt;But hey… &lt;strong&gt;we made it&lt;/strong&gt; (barely).&lt;/p&gt;




&lt;h2&gt;
  
  
  🪜 Step 1: Added Lazy Loading with Pagination
&lt;/h2&gt;

&lt;p&gt;So TMDB API said:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Bro, I give you 20 movies per page. That's it.”  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Me:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool, I’ll just keep asking you again and again.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I added lazy loading logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced &lt;code&gt;page&lt;/code&gt; and &lt;code&gt;hasMore&lt;/code&gt; state&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;fetchMovies()&lt;/code&gt; to append new movies instead of replacing the list like Thanos snapping away my previous results&lt;/li&gt;
&lt;li&gt;Hooked up the &lt;strong&gt;Intersection Observer API&lt;/strong&gt; to keep an eye on the bottom of the list like a snitch.
Whenever it saw the last card, boom — next page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, &lt;strong&gt;lazy loading felt great&lt;/strong&gt;. Not too tricky. It worked.&lt;br&gt;&lt;br&gt;
Confidence level: 100&lt;br&gt;&lt;br&gt;
Reality level: about to drop&lt;/p&gt;




&lt;h2&gt;
  
  
  💀 Step 2: Enter Virtual Scrolling (aka the Boss Level)
&lt;/h2&gt;

&lt;p&gt;Scrolling was smooth… until the list got long. Real long. Like “my fan sounds like a jet engine” long.&lt;/p&gt;

&lt;p&gt;So I said: “Let’s virtualize this bad boy.”&lt;br&gt;&lt;br&gt;
I found the magic duo:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;react-window&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react-virtualized-auto-sizer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👷‍♂️ Created a new component &lt;code&gt;VirtualizedMovieGrid&lt;/code&gt;&lt;br&gt;&lt;br&gt;
🧠 Only renders the movies &lt;strong&gt;actually visible&lt;/strong&gt; in the viewport.&lt;br&gt;&lt;br&gt;
📐 Dynamically calculates &lt;strong&gt;column count based on screen width&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything was going great until…&lt;/p&gt;

&lt;p&gt;💥 &lt;code&gt;IntersectionObserver&lt;/code&gt; no longer worked because… the DOM wasn’t real anymore.&lt;br&gt;&lt;br&gt;
No actual DOM nodes = nothing to observe.&lt;/p&gt;

&lt;p&gt;Switched to using &lt;code&gt;onItemsRendered&lt;/code&gt; from &lt;code&gt;react-window&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
That saved the day. Kinda. Almost. Temporarily.&lt;/p&gt;




&lt;h2&gt;
  
  
  😵 Step 3: My Grid Betrayed Me
&lt;/h2&gt;

&lt;p&gt;You know what they don’t tell you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;FixedSizeGrid&lt;/code&gt; only works if your cards are exactly the same height.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Which my cards… were not.&lt;/p&gt;

&lt;p&gt;So my rows turned into this weird puzzle of overlapping nonsense. I felt like I was watching Inception — but in CSS.&lt;/p&gt;

&lt;p&gt;Solution?&lt;/p&gt;

&lt;p&gt;👉 Switched to &lt;code&gt;VariableSizeGrid&lt;/code&gt;&lt;br&gt;&lt;br&gt;
👉 Dynamically calculated row heights&lt;br&gt;&lt;br&gt;
👉 Added caching because performance was dying&lt;br&gt;&lt;br&gt;
👉 Realized I had to position everything absolutely/relatively&lt;br&gt;&lt;br&gt;
👉 And then... &lt;strong&gt;responsiveness said BYE.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  😭 Styling: My Personal Boss Fight
&lt;/h2&gt;

&lt;p&gt;I spent more time tweaking margins than I spent watching actual movies this year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile was weird
&lt;/li&gt;
&lt;li&gt;Desktop was okay
&lt;/li&gt;
&lt;li&gt;Tablets? Who even owns those? (Still fixed them)
&lt;/li&gt;
&lt;li&gt;I cried a little.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, I added &lt;strong&gt;responsive spacing&lt;/strong&gt; that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shrinks spacing on mobile to make cards bigger&lt;/li&gt;
&lt;li&gt;Expands spacing on desktop for better layout&lt;/li&gt;
&lt;li&gt;Respects the user's device, but NOT my sanity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It still isn’t perfect, but if you squint... it looks great.&lt;br&gt;&lt;br&gt;
(&lt;em&gt;And if you don’t squint, just pretend it’s abstract art.&lt;/em&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Final Result: Scroll Nirvana Achieved
&lt;/h2&gt;

&lt;p&gt;✅ Lazy loading with infinite scroll&lt;br&gt;&lt;br&gt;
✅ Virtual rendering with smooth UX&lt;br&gt;&lt;br&gt;
✅ Responsive, dynamic layout&lt;br&gt;&lt;br&gt;
✅ Survives even large datasets like TMDB's trending chaos&lt;br&gt;&lt;br&gt;
✅ My brain? Slightly melted, but satisfied&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Window is magical… until styling gets involved
&lt;/li&gt;
&lt;li&gt;Fixed size is cute, but variable size is reality
&lt;/li&gt;
&lt;li&gt;Responsive layout + virtualization = many hours of trial and error
&lt;/li&gt;
&lt;li&gt;Don’t trust scrollbars
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tea/Coffee is a legitimate debugging tool&lt;/strong&gt;&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%2Fs1kaohhxz3q5oxe44rj1.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%2Fs1kaohhxz3q5oxe44rj1.gif" alt="Image description" width="56" height="36"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🧪 Live app: &lt;a href="https://shravandev.com/movienest/" rel="noopener noreferrer"&gt;https://shravandev.com/movienest/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📖 Part 1: &lt;a href="https://dev.to/shravan250/building-movienest-a-chaotic-developer-adventure-ft-vpns-proxies-glassmorphism-4lei"&gt;Building MovieNest: Design, Proxy, and Debounce&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 P.S.
&lt;/h2&gt;

&lt;p&gt;If you’ve ever battled virtualization + layout + responsiveness all in one go… I see you.&lt;br&gt;&lt;br&gt;
We are &lt;strong&gt;warriors of the grid&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let me know how you handled it (or if you’re still stuck in the scroll trenches 😅).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with tears, love, and &lt;code&gt;position: relative;&lt;/code&gt; by Shravan 💻&lt;/strong&gt;&lt;br&gt;
Follow my dev chaos on GitHub,Linkedin&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
      <category>react</category>
    </item>
    <item>
      <title>Virtual Scrolling, Lazy Loading &amp; a Little Bit of Crying: Optimizing My Movie App</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Sat, 21 Jun 2025 13:31:47 +0000</pubDate>
      <link>https://dev.to/shravan250/virtual-scrolling-lazy-loading-a-little-bit-of-crying-optimizing-my-movie-app-2136</link>
      <guid>https://dev.to/shravan250/virtual-scrolling-lazy-loading-a-little-bit-of-crying-optimizing-my-movie-app-2136</guid>
      <description>&lt;h1&gt;
  
  
  🎞️ Virtual Scrolling, Lazy Loading &amp;amp; a Little Bit of Crying: Optimizing My Movie App
&lt;/h1&gt;

&lt;p&gt;Let’s be honest — I just wanted a smooth movie app.&lt;/p&gt;

&lt;p&gt;No jank. No stutter. Just silky-smooth scrolling like Netflix on a Sunday morning.&lt;br&gt;&lt;br&gt;
What I got was a rabbit hole of virtualization, broken layouts, and spacing problems that haunted my dreams.&lt;/p&gt;

&lt;p&gt;But hey… &lt;strong&gt;we made it&lt;/strong&gt; (barely).&lt;/p&gt;




&lt;h2&gt;
  
  
  🪜 Step 1: Added Lazy Loading with Pagination
&lt;/h2&gt;

&lt;p&gt;So TMDB API said:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Bro, I give you 20 movies per page. That's it.”  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Me:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cool, I’ll just keep asking you again and again.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I added lazy loading logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced &lt;code&gt;page&lt;/code&gt; and &lt;code&gt;hasMore&lt;/code&gt; state&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;fetchMovies()&lt;/code&gt; to append new movies instead of replacing the list like Thanos snapping away my previous results&lt;/li&gt;
&lt;li&gt;Hooked up the &lt;strong&gt;Intersection Observer API&lt;/strong&gt; to keep an eye on the bottom of the list like a snitch.
Whenever it saw the last card, boom — next page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, &lt;strong&gt;lazy loading felt great&lt;/strong&gt;. Not too tricky. It worked.&lt;br&gt;&lt;br&gt;
Confidence level: 100&lt;br&gt;&lt;br&gt;
Reality level: about to drop&lt;/p&gt;




&lt;h2&gt;
  
  
  💀 Step 2: Enter Virtual Scrolling (aka the Boss Level)
&lt;/h2&gt;

&lt;p&gt;Scrolling was smooth… until the list got long. Real long. Like “my fan sounds like a jet engine” long.&lt;/p&gt;

&lt;p&gt;So I said: “Let’s virtualize this bad boy.”&lt;br&gt;&lt;br&gt;
I found the magic duo:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;react-window&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react-virtualized-auto-sizer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👷‍♂️ Created a new component &lt;code&gt;VirtualizedMovieGrid&lt;/code&gt;&lt;br&gt;&lt;br&gt;
🧠 Only renders the movies &lt;strong&gt;actually visible&lt;/strong&gt; in the viewport.&lt;br&gt;&lt;br&gt;
📐 Dynamically calculates &lt;strong&gt;column count based on screen width&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything was going great until…&lt;/p&gt;

&lt;p&gt;💥 &lt;code&gt;IntersectionObserver&lt;/code&gt; no longer worked because… the DOM wasn’t real anymore.&lt;br&gt;&lt;br&gt;
No actual DOM nodes = nothing to observe.&lt;/p&gt;

&lt;p&gt;Switched to using &lt;code&gt;onItemsRendered&lt;/code&gt; from &lt;code&gt;react-window&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
That saved the day. Kinda. Almost. Temporarily.&lt;/p&gt;




&lt;h2&gt;
  
  
  😵 Step 3: My Grid Betrayed Me
&lt;/h2&gt;

&lt;p&gt;You know what they don’t tell you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;FixedSizeGrid&lt;/code&gt; only works if your cards are exactly the same height.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Which my cards… were not.&lt;/p&gt;

&lt;p&gt;So my rows turned into this weird puzzle of overlapping nonsense. I felt like I was watching Inception — but in CSS.&lt;/p&gt;

&lt;p&gt;Solution?&lt;/p&gt;

&lt;p&gt;👉 Switched to &lt;code&gt;VariableSizeGrid&lt;/code&gt;&lt;br&gt;&lt;br&gt;
👉 Dynamically calculated row heights&lt;br&gt;&lt;br&gt;
👉 Added caching because performance was dying&lt;br&gt;&lt;br&gt;
👉 Realized I had to position everything absolutely/relatively&lt;br&gt;&lt;br&gt;
👉 And then... &lt;strong&gt;responsiveness said BYE.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  😭 Styling: My Personal Boss Fight
&lt;/h2&gt;

&lt;p&gt;I spent more time tweaking margins than I spent watching actual movies this year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile was weird
&lt;/li&gt;
&lt;li&gt;Desktop was okay
&lt;/li&gt;
&lt;li&gt;Tablets? Who even owns those? (Still fixed them)
&lt;/li&gt;
&lt;li&gt;I cried a little.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, I added &lt;strong&gt;responsive spacing&lt;/strong&gt; that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shrinks spacing on mobile to make cards bigger&lt;/li&gt;
&lt;li&gt;Expands spacing on desktop for better layout&lt;/li&gt;
&lt;li&gt;Respects the user's device, but NOT my sanity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It still isn’t perfect, but if you squint... it looks great.&lt;br&gt;&lt;br&gt;
(&lt;em&gt;And if you don’t squint, just pretend it’s abstract art.&lt;/em&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Final Result: Scroll Nirvana Achieved
&lt;/h2&gt;

&lt;p&gt;✅ Lazy loading with infinite scroll&lt;br&gt;&lt;br&gt;
✅ Virtual rendering with smooth UX&lt;br&gt;&lt;br&gt;
✅ Responsive, dynamic layout&lt;br&gt;&lt;br&gt;
✅ Survives even large datasets like TMDB's trending chaos&lt;br&gt;&lt;br&gt;
✅ My brain? Slightly melted, but satisfied&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Window is magical… until styling gets involved
&lt;/li&gt;
&lt;li&gt;Fixed size is cute, but variable size is reality
&lt;/li&gt;
&lt;li&gt;Responsive layout + virtualization = many hours of trial and error
&lt;/li&gt;
&lt;li&gt;Don’t trust scrollbars
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tea/Coffee is a legitimate debugging tool&lt;/strong&gt;&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%2Fs1kaohhxz3q5oxe44rj1.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%2Fs1kaohhxz3q5oxe44rj1.gif" alt="Image description" width="56" height="36"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🧪 Live app: &lt;a href="https://shravandev.com/movienest/" rel="noopener noreferrer"&gt;https://shravandev.com/movienest/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📖 Part 1: &lt;a href="https://dev.to/shravan250/building-movienest-a-chaotic-developer-adventure-ft-vpns-proxies-glassmorphism-4lei"&gt;Building MovieNest: Design, Proxy, and Debounce&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 P.S.
&lt;/h2&gt;

&lt;p&gt;If you’ve ever battled virtualization + layout + responsiveness all in one go… I see you.&lt;br&gt;&lt;br&gt;
We are &lt;strong&gt;warriors of the grid&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let me know how you handled it (or if you’re still stuck in the scroll trenches 😅).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with tears, love, and &lt;code&gt;position: relative;&lt;/code&gt; by Shravan 💻&lt;/strong&gt;&lt;br&gt;
Follow my dev chaos on GitHub,Linkedin&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
      <category>react</category>
    </item>
    <item>
      <title>Building MovieNest: A Chaotic Developer Adventure (ft. VPNs, Proxies &amp; Glassmorphism)</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Tue, 17 Jun 2025 17:25:38 +0000</pubDate>
      <link>https://dev.to/shravan250/building-movienest-a-chaotic-developer-adventure-ft-vpns-proxies-glassmorphism-4lei</link>
      <guid>https://dev.to/shravan250/building-movienest-a-chaotic-developer-adventure-ft-vpns-proxies-glassmorphism-4lei</guid>
      <description>&lt;h1&gt;
  
  
  🎬 Building MovieNest: From Design Clone to Dev Debauchery (ft. VPNs, Bugs &amp;amp; Debounce)
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Yo fellow netizens 👾,&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ever tried building a movie app and accidentally learned full-stack networking? Yeah… that happened.&lt;/p&gt;

&lt;p&gt;So, I set out to build a movie discovery platform for my MovieNest base — a React frontend that was supposed to be a chill, “just-design-it” project. Spoiler alert: it wasn’t.&lt;br&gt;&lt;br&gt;
Let me walk you through the chaotic beauty that unfolded (with humor, caffeine, and broken CORS dreams).&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 1. &lt;em&gt;Cloning JavaScript Mastery, but Make It ✨ Fabulous&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Big shoutout to &lt;a href="https://twitter.com/jsmasterypro" rel="noopener noreferrer"&gt;JavaScript Mastery&lt;/a&gt; for the amazing design base — your UI was my canvas, and I painted over it with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Glassmorphism&lt;/strong&gt;: Because who doesn’t love see-through boxes in 2025?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framer Motion&lt;/strong&gt;: Micro animations so smooth they could dance on butter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom UI polish&lt;/strong&gt;: Added my own spice to the layout with modern CSS to boost the UX.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yeah, it started as a clone, but now it’s a clone with drip.&lt;/p&gt;

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

&lt;h2&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%2Fpxgx5rt8epj2hv1wt956.gif" alt="Image description" width="120" height="60"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🧠 2. &lt;em&gt;Debounce or Die (API Rate Limit Edition)&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;TMDB be like:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You hit me with too many requests… now you must suffer."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Me:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Nah Bro, I got &lt;code&gt;debounce()&lt;/code&gt; from npm.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wired up input fields with debounce logic so API calls chill out while users furiously type “Spiderrmaaan but with 3 a’s.”&lt;br&gt;&lt;br&gt;
Now my API server is less stressed than I am before a code review.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 3. &lt;em&gt;Trending? I Gotchu With My Homemade Algorithm&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Who needs a data scientist when you can just… fake it till you make it?&lt;/p&gt;

&lt;p&gt;I whipped up a &lt;em&gt;very serious and definitely academic&lt;/em&gt; algorithm:&lt;br&gt;&lt;br&gt;
Every time you search for a movie, I increment a counter. Movies with more hits = more trending. Boom. DIY trending.&lt;br&gt;&lt;br&gt;
It’s like Google Trends but powered by your indecisive scrolling.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 4. &lt;em&gt;TMDB Ghosted My Region, So I Became the Proxy I Needed&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s where the real plot twist hit me harder than a JS bug in production.&lt;/p&gt;

&lt;p&gt;TMDB didn’t show results in my region. Solution? VPN.&lt;br&gt;&lt;br&gt;
Then I had an epiphany 💡:&lt;br&gt;&lt;br&gt;
“What if... I became my own VPN?”&lt;br&gt;&lt;br&gt;
Boom. Proxy server time.&lt;/p&gt;

&lt;p&gt;But wait — plot twist #2: my backend is Appwrite now.&lt;br&gt;&lt;br&gt;
Cue montage:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Me, reading docs.
&lt;/li&gt;
&lt;li&gt;Me, writing a serverless function.
&lt;/li&gt;
&lt;li&gt;Me, crying because of CORS.
&lt;/li&gt;
&lt;li&gt;Me, realizing URLs need decoding.
&lt;/li&gt;
&lt;li&gt;Me, breaking and fixing the same code 17 times.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, I did it. Appwrite function deployed. Proxy working. I could see movies from all over the world again. &lt;strong&gt;The web was healing.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧹 5. &lt;em&gt;Virtual Scrolling? More Like Mental Scrolling&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Currently diving into virtual scrolling so users don't download the entire TMDB database when they open the app.&lt;br&gt;&lt;br&gt;
Still learning… so if it breaks, it was probably on purpose. 🤡&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 6. &lt;em&gt;Coming Soon: Parallelism, Lazy-Loading, and Magic&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Future updates I’m planning to flex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Parallel data fetching
&lt;/li&gt;
&lt;li&gt;🪄 Progressive loading
&lt;/li&gt;
&lt;li&gt;🧩 Code-splitting
&lt;/li&gt;
&lt;li&gt;💤 Lazy loading
&lt;/li&gt;
&lt;li&gt;🧠 Aggressive caching (because speed is a feature)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal? &lt;strong&gt;Butter-smooth UX and low time-to-first-interaction.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 7. &lt;em&gt;AI-Powered Madness Coming Soon&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Also experimenting with spicy AI features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎭 Mood-based recommendations
&lt;/li&gt;
&lt;li&gt;🎤 Voice search (talk to your screen, it's 2025)
&lt;/li&gt;
&lt;li&gt;📈 Real-time trends
&lt;/li&gt;
&lt;li&gt;🤝 Collaborative watchlists
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically… making Netflix nervous.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Final Words
&lt;/h2&gt;

&lt;p&gt;This app isn’t just a portfolio piece — it’s my dev journal, my test lab, my digital playground. I’m building it live, breaking stuff, fixing stuff, and learning out loud. If you see a bug, it’s a feature. If you see a delay, it’s probably me debugging at 2am with 17 console logs and a dream.&lt;/p&gt;

&lt;p&gt;If you wanna follow the chaos and cheer me on, drop your thoughts below or follow me on GitHub and Linkedin.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Website&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
MovieNest, &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>learning</category>
      <category>coding</category>
    </item>
    <item>
      <title>Day 6 &amp; 7: Mastering Queues and Trees in Programming</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Tue, 01 Apr 2025 15:37:42 +0000</pubDate>
      <link>https://dev.to/shravan250/day-6-7-mastering-queues-and-trees-in-programming-24aj</link>
      <guid>https://dev.to/shravan250/day-6-7-mastering-queues-and-trees-in-programming-24aj</guid>
      <description>&lt;p&gt;What an exciting few days it's been! After exploring linked lists and stacks, I moved on to two new topics: queues and trees. These basic data structures complete the DSA family and add new dynamic visuals to my project. Let's go through the challenges, insights, and breakthroughs of Day 6 and 7!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 6: Crafting the Queue&lt;br&gt;
**&lt;br&gt;
**Understanding the Queue Concept&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Queues have always interested me the simplicity of a First In, First Out (FIFO) system is just like the order of everyday tasks. Imagine it as a well-organized line at your favorite coffee shop: the first person to arrive is the first one served!&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%2F3u8ddwxril183goc7a9m.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%2F3u8ddwxril183goc7a9m.png" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Implementation Adventure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Implementing the queue was both challenging and fun. I set up the queue with clear enqueue and dequeue operations to ensure everything worked smoothly. The animations I created with D3.js made each push and pop come alive. Here are some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enqueue Operation:&lt;/strong&gt;&lt;br&gt;
Adding new elements was like organizing a parade. Each element smoothly joined the queue, fitting in without disturbing the flow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dequeue Operation:&lt;/strong&gt;&lt;br&gt;
Watching the first element leave was like saying goodbye to an old friend smooth, satisfying, and well-animated. I carefully adjusted the timing to capture the perfect moment of departure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lessons Learned&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Precision Matters:&lt;/strong&gt;&lt;br&gt;
Even a tiny mistake in the animation timing could disrupt the whole sequence. Every delay and easing function needed to be perfectly balanced.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Visuals Enhance Understanding:&lt;/strong&gt;&lt;br&gt;
Using D3.js, each change in the queue was shown instantly, helping users (and me) better understand how the data moves.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 7: Sculpting the Trees&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Branching Out with Trees&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trees combine structure and art, balancing hierarchy with the beauty of connected nodes. On Day 7, I tackled the challenge by creating binary search trees (BSTs), turning static data into dynamic visuals.&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%2Fkqdf6dpmc7jqgipprmvm.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%2Fkqdf6dpmc7jqgipprmvm.png" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Highlights&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Balanced BSTs:&lt;/strong&gt;&lt;br&gt;
Using what I learned before, I improved how to build a balanced BST. The tree now updates in real time, showing each insertion, deletion, and traversal with smooth animations that look like a tree growing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tree Traversals:&lt;/strong&gt;&lt;br&gt;
I added several ways to go through the tree (inorder, preorder, postorder, and level order) to show different ways of processing the tree. Each traversal is animated step-by-step, making it easy to see how data moves through the branches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Overcoming Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Complexity in Animation:&lt;br&gt;
Coordinating animations for insertions, deletions, and traversals was like leading an orchestra. At times, the complexity was daunting, but each debugging session taught me more about improving performance and visual clarity.&lt;/p&gt;

&lt;p&gt;Balancing Aesthetics and Functionality:&lt;br&gt;
Making sure the visuals were both useful and interesting was a careful process. I tried different colors, timings, and easing effects until I found a balance that made the tree structure vibrant and engaging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These last two days have shown how great it is to mix strong data structures with lively visuals. From the neat flow of queues to the branching beauty of trees, each part has deepened my understanding and improved my DSA Visualizer.&lt;/p&gt;

&lt;p&gt;As I keep exploring new ideas, I'm excited about the endless possibilities ahead. Remember: every line of code, every animation change, and every debugging session is a step toward a brighter, more dynamic future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open for Comments and Suggestions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am eager to hear your thoughts and feedback on my journey of creating a DSA Visualizer. Whether it’s about the tech stack, design choices, or any other aspect of the project, your insights are invaluable. Please feel free to share your comments and suggestions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m excited to connect with fellow developers and potential collaborators! You can find the project and follow my journey on GitHub and other social platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Shravan250/DSA-Visualizer" rel="noopener noreferrer"&gt;https://github.com/Shravan250/DSA-Visualizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/shravan-bobade/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shravan-bobade/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to reach out, share your thoughts, or collaborate on this exciting project!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Tuned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The adventure continues! Keep an eye out for more updates as I explore new data structures and refine my visualizer’s capabilities.&lt;/p&gt;

&lt;p&gt;Keep coding, keep innovating, and never let a setback dim your creative spark!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>datastructures</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Day 4 &amp; 5: Exploring Data Structures and Building Dynamic Visualizations</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Fri, 28 Mar 2025 20:01:23 +0000</pubDate>
      <link>https://dev.to/shravan250/day-5-6-exploring-data-structures-and-building-dynamic-visualizations-2l3b</link>
      <guid>https://dev.to/shravan250/day-5-6-exploring-data-structures-and-building-dynamic-visualizations-2l3b</guid>
      <description>&lt;p&gt;What a busy few days it's been! Today, I really got into linked lists and stacks, and I also learned to use D3.js for creating dynamic content. It's been a mix of exploring and trying things out—a great way to learn and grow through projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linked Lists &amp;amp; Stacks: Basics of New Ideas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 4: Mastering the Linked List&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I focused on working with linked lists. I knew they were important in computer science, but creating one from scratch showed me how simple and beautiful they can be when you understand how they work.&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%2Fpoig5bi0q8c1rujvsxr7.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%2Fpoig5bi0q8c1rujvsxr7.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the Concept:&lt;/strong&gt;&lt;br&gt;
A linked list is more than just a list; it's a chain of elements where each node points to the next one. This smart design allows for flexible memory use, making it efficient when the size of the data structure changes over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Challenges:&lt;/strong&gt;&lt;br&gt;
I ran into a few hurdles, like getting the hang of managing pointers correctly. It's a bit like trying to keep track of a bunch of strings tied together one wrong move, and everything gets tangled! And then there was the adventure of creating dynamic components with D3.js for visualization. Imagine trying to paint a moving picture while riding a roller coaster that's how hectic it felt! But every twist and turn taught me something new, and by the end, I was able to enjoy the ride.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaway:&lt;/strong&gt;&lt;br&gt;
This exercise made me appreciate the basics even more. It showed me that even simple structures, when done right, can be very powerful and efficient. It's like learning the rhythm of a new language that connects directly with the core of computational logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 5: Growing with Stacks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shift to stacks felt like a natural next step. If linked lists are like flowing rivers of data, stacks are the mountain climbers, handling data with precision using the LIFO (Last In, First Out) method.&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%2F6hs4hdpw1ybkq819en26.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%2F6hs4hdpw1ybkq819en26.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Push Operation:&lt;/strong&gt; Adding elements to the stack is like layering a cake, each new layer making it stronger and more delicious.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pop &amp;amp; Peek Operations:&lt;/strong&gt; Taking out and checking elements taught me the importance of precision and timing. Even a tiny mistake in indexing (those pesky off-by-one errors!) can turn a smooth process into a debugging mess.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reflection:&lt;/strong&gt;&lt;br&gt;
These exercises highlighted the importance of focusing on the small details. In coding, just like in life, the little things matter a small oversight can lead to bigger problems later on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D3.js: Painting Data with Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alongside working on data structures, I dove into D3.js for creating dynamic content. This amazing library is like a digital paintbrush that brings data to life but can also give some serious headaches for newcommers like me.&lt;/p&gt;

&lt;p&gt;I have to say, making the dynamic parts for both the stack and linked list was quite a ride—especially the stack animations. Every time I thought I had it right, the code would act up, making things really tough. Debugging those animations felt like dealing with a tricky problem that kept confusing me. There were times I wondered if I'd ever get a smooth push or pop animation, or if I'd just keep getting frustrated. But through all the chaos and many facepalm moments, I've learned a lot about being patient, sticking with it, and not letting the code get the best of me—even if it made me question my sanity a few times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These days have shown me how powerful curiosity is and how fun learning can be. As I keep working on the DSL Visualizer, I'm thrilled about all the possibilities ahead. Combining solid data structures with dynamic visuals is just the start—there's much more exciting innovation to come.&lt;/p&gt;

&lt;p&gt;Stay tuned, keep coding, and remember: every line of code brings us closer to a brighter, more dynamic future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open for Comments and Suggestions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am eager to hear your thoughts and feedback on my journey of creating a DSA Visualizer. Whether it’s about the tech stack, design choices, or any other aspect of the project, your insights are invaluable. Please feel free to share your comments and suggestions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m excited to connect with fellow developers and potential collaborators! You can find the project and follow my journey on GitHub and other social platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Shravan250/DSA-Visualizer" rel="noopener noreferrer"&gt;https://github.com/Shravan250/DSA-Visualizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/shravan-bobade/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shravan-bobade/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to reach out, share your thoughts, or collaborate on this exciting project!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_________________________________________________________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Tuned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The adventure continues! Keep an eye out for more updates as I explore new data structures and refine my visualizer’s capabilities.&lt;/p&gt;

&lt;p&gt;Keep coding, keep innovating, and never let a setback dim your creative spark!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>datastructures</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Day 3: Implementing the Visualizer Features</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Tue, 25 Mar 2025 07:39:03 +0000</pubDate>
      <link>https://dev.to/shravan250/day-3-implementing-the-visualizer-features-2488</link>
      <guid>https://dev.to/shravan250/day-3-implementing-the-visualizer-features-2488</guid>
      <description>&lt;p&gt;Yesterday, I finished creating the basic UI for my DSA visualizer and set up the sidebar functions for each data structure. Today, I started working on the visualizer features, full of enthusiasm and a new appreciation for D3 and SVG basics—thanks to The Code Blooded on YouTube for his clear explanations on D3!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting Up the UI and Sidebar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The groundwork is laid: the UI is ready, and the sidebar is filled with functions for different data structures. This foundational work has set the stage for what's next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Battle with Array Visualization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Armed with my "weapon," I set out to visualize my first data structure—an array. What should have been a simple task turned into a major challenge: nothing seemed to work! Frustration hit hard, and for a moment, I even questioned if programming was really for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Much-Needed Break and Breakthrough&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After stepping away for a bit, I decided to revisit the problem with fresh eyes. I spent some quality time with documentation and even asked GPT to explain every line of code—even the humble "const" got its spotlight! During a chat with a friend (a.k.a. ChatGPT), I learned that I could use Framer Motion to animate boxes and manage basic operations. Although I was initially frustrated, I quickly realized that every setback is just another opportunity to learn and innovate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overcoming Data Sharing Hurdles with React Hooks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next came the challenge of sharing data across multiple files. With my sidebar handling functions and the visualizer rendering data, I needed a reliable way to pass data between them. Enter React Hooks! I dedicated hours to mastering shared state across components and ensuring the visualizer was flexible enough to handle various data structures in the future.&lt;/p&gt;

&lt;p&gt;Well, what can I say? Reading and learning about hooks was much simpler than actually implementing them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Component Communication:&lt;/strong&gt;Using React Hooks to share data among descendants was a game-changer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SVG and D3 Dynamics:&lt;/strong&gt; Understanding how SVGs work and how D3 manipulates them gave me a deeper insight into data visualization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embracing Setbacks:&lt;/strong&gt; Even when things don’t go as planned, every misstep is a stepping stone to mastery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts and Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today was full of ups and downs—a real journey through the world of coding. I learned new concepts, from React Hooks to the details of SVGs, and gained valuable insights into troubleshooting and improving my methods. Remember, every challenge is a chance to grow. Innovation isn't about never failing—it's about getting back up each time you do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open for Comments and Suggestions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am eager to hear your thoughts and feedback on my journey of creating a DSA Visualizer. Whether it’s about the tech stack, design choices, or any other aspect of the project, your insights are invaluable. Please feel free to share your comments and suggestions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m excited to connect with fellow developers and potential collaborators! You can find the project and follow my journey on GitHub and other social platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Shravan250/DSA-Visualizer" rel="noopener noreferrer"&gt;https://github.com/Shravan250/DSA-Visualizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/shravan-bobade/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shravan-bobade/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to reach out, share your thoughts, or collaborate on this exciting project!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Tuned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The adventure continues! Keep an eye out for more updates as I explore new data structures and refine my visualizer’s capabilities.&lt;/p&gt;

&lt;p&gt;Keep coding, keep innovating, and never let a setback dim your creative spark!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>react</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Blog 2: UI for DSA Visualizer</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Sun, 23 Mar 2025 17:45:13 +0000</pubDate>
      <link>https://dev.to/shravan250/blog-2-ui-for-dsa-visualizer-kgg</link>
      <guid>https://dev.to/shravan250/blog-2-ui-for-dsa-visualizer-kgg</guid>
      <description>&lt;p&gt;Day 2 was focused on turning plans into pixels as I built the user interface for my DSA Visualizer. I aimed to create an engaging and easy-to-use layout that not only looks sleek but also makes exploring data structures and algorithms enjoyable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I began by creating the Navbar and Footer, which serve as the welcoming bookends of the website. Using Tailwind CSS helped me quickly prototype with utility classes, ensuring the site stays responsive and visually consistent. Every element was designed with a modern, clean look in mind.&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%2Fiksae4ngngmyecp2nslo.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%2Fiksae4ngngmyecp2nslo.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Sidebar was a bit challenging. I wanted it to slide in and out smoothly on different screen sizes, so I used Framer Motion for smooth animations. This gives the interface a dynamic feel, almost like a stage where arrays and stacks perform their choreographed routines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bringing Visualizations to Life&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The highlight of the project is the Visualizer section. Here, I included interactive elements that encourage users to explore various data structures. I added playful icons and hover effects to bring a bit of humor, making even recursive functions feel like part of a fun digital dance.&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%2Fjb67e0p9jfce5q3pcztj.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%2Fjb67e0p9jfce5q3pcztj.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using D3.js, I laid the foundation for future animations that will clearly show how algorithms work. While the logic for the visualizations is still in progress, the UI is now ready to present it all with style and clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploring Other Pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To provide a comprehensive look at the project, I designed several key pages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About Me Page:&lt;/strong&gt; A brief introduction, sharing my journey and passion for DSA.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07s2bwe9x18xuygnkkjw.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%2F07s2bwe9x18xuygnkkjw.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Algorithm Page:&lt;/strong&gt; A dedicated section for exploring various algorithms in action.&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%2Fpffxrvdcvcsfxfa8ehul.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%2Fpffxrvdcvcsfxfa8ehul.png" alt="Image description" width="800" height="520"&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%2Fig8xyoe213b0v9sv523s.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%2Fig8xyoe213b0v9sv523s.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contact Me Page:&lt;/strong&gt; An easy way for visitors to reach out, share feedback, or collaborate.&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%2F5sofad75d0ov1muo2jcj.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%2F5sofad75d0ov1muo2jcj.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dark Mode Consideration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a complete user experience, I prepared dark mode versions for all these pages:&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%2F7qvbbbiu5ju24cwwremf.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%2F7qvbbbiu5ju24cwwremf.png" alt="Image description" width="800" height="520"&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%2F1nz8adi1r4rlex6ln6gc.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%2F1nz8adi1r4rlex6ln6gc.png" alt="Image description" width="800" height="520"&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%2Fmrrbavwai0e291w5bfn7.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%2Fmrrbavwai0e291w5bfn7.png" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today was a whirlwind of creative coding, where I focused on detailed design while keeping the interface user-friendly. As I keep improving the experience, I'm excited about what's next. The UI is more than just attractive; it's a gateway to exploring the fascinating world of data structures and algorithms.&lt;/p&gt;

&lt;p&gt;Stay tuned for more updates, and feel free to check out the project on GitHub if you'd like to join in or share feedback. Happy coding!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open for Comments and Suggestions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am eager to hear your thoughts and feedback on my journey of creating a DSA Visualizer. Whether it’s about the tech stack, design choices, or any other aspect of the project, your insights are invaluable. Please feel free to share your comments and suggestions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m excited to connect with fellow developers and potential collaborators! You can find the project and follow my journey on GitHub and other social platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Shravan250/DSA-Visualizer" rel="noopener noreferrer"&gt;https://github.com/Shravan250/DSA-Visualizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/shravan-bobade/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shravan-bobade/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to reach out, share your thoughts, or collaborate on this exciting project!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>algorithms</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Day 1: Laying the Foundation for My DSA Visualizer</title>
      <dc:creator>Shravan Bobade</dc:creator>
      <pubDate>Sun, 23 Mar 2025 14:49:20 +0000</pubDate>
      <link>https://dev.to/shravan250/day-1-laying-the-foundation-for-my-dsa-visualizer-1en7</link>
      <guid>https://dev.to/shravan250/day-1-laying-the-foundation-for-my-dsa-visualizer-1en7</guid>
      <description>&lt;p&gt;Today, I began my journey of creating a delightful DSA Visualizer. I've always found data structures and algorithms challenging and often felt bored by the repetitive exercises. As a programmer once said, "The best way to learn programming is through practical implementation." So, I decided to use a project-based approach to learn DSA and turn my struggles into a creative project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finalized Tech Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After brainstorming and a lot of research (with a little help from my friend, ChatGPT), I finalized the following tech stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Frontend Framework: React with Next.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why?&lt;/li&gt;
&lt;li&gt;It offers a modern, component-driven architecture that is perfect for interactive UIs and supports server-side rendering when needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Visualization Library:&lt;/strong&gt; D3.js&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why?&lt;/li&gt;
&lt;li&gt;Ideal for crafting dynamic, data-driven visualizations that bring algorithms to life with fluid animations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Styling Framework:&lt;/strong&gt; Tailwind CSS and Shadcn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why?&lt;/li&gt;
&lt;li&gt;These streamline the design process with utility-first classes, ensuring a modern, responsive look with minimal effort.
-Shadcn? Why? Because it’s the GOAT!!! I fcking love it! Shout out to Shadcn for their awesome contributions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Bundler &amp;amp; Development Tool:&lt;/strong&gt; Vite&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why?&lt;/li&gt;
&lt;li&gt;Provides a fast, lean development experience with hot module replacement for rapid feedback during development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. State Management:&lt;/strong&gt; React’s Built-in State (or Redux if needed later)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why?&lt;/li&gt;
&lt;li&gt;React’s native state management is sufficient for now. I can scale to Redux if the application demands more complex interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Testing Frameworks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jest: For unit testing components.&lt;/li&gt;
&lt;li&gt;Cypress: For end-to-end testing of user flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Deployment Platform:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vercel or Netlify: Both offer quick and efficient deployment with built-in CI/CD support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Planning and Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After finalizing the tech stack, I began planning the essentials and creating my "own original design" (if you know, you know). Big thanks to Tomasz Gajda for the amazing Figma design inspiration!&lt;/p&gt;

&lt;p&gt;I brainstormed the functionality and debated the best way to visualize the data structures and algorithms. I considered whether to include user interactions or keep it purely visual. It was a real challenge, but my savior, ChatGPT, helped me decide between building separate modes for "build" and "visualization" or combining them into a hybrid process. I chose the hybrid approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signing Off&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the planning done and a clear vision in place, I headed off for what I hoped would be a good night’s sleep. Oh, wait — it’s already 4 AM. Guess it’s more like “good morning” as I embrace the early hours with excitement for the journey ahead!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open for Comments and Suggestions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am eager to hear your thoughts and feedback on my journey of creating a DSA Visualizer. Whether it's about the tech stack, design choices, or any other aspect of the project, your insights are invaluable. Please feel free to share your comments and suggestions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm excited to connect with fellow developers and potential collaborators! You can find the project and follow my journey on GitHub and other social platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Shravan250" rel="noopener noreferrer"&gt;https://github.com/Shravan250&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;: &lt;a href="https://www.linkedin.com/in/shravan-bobade/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/shravan-bobade/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to reach out, share your thoughts, or collaborate on this exciting project!&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>opensource</category>
      <category>devjournal</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
