<?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: Khushal Sarode</title>
    <description>The latest articles on DEV Community by Khushal Sarode (@khushalsarode).</description>
    <link>https://dev.to/khushalsarode</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F953256%2Fcea4963f-1a44-4f64-af20-00b39982e711.jpg</url>
      <title>DEV Community: Khushal Sarode</title>
      <link>https://dev.to/khushalsarode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khushalsarode"/>
    <language>en</language>
    <item>
      <title>🍲 Annapurna's Kitchen — Every tiffin has Home's Flavour (Perfect Landing)</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Sat, 15 Aug 2026 18:03:17 +0000</pubDate>
      <link>https://dev.to/khushalsarode/annapurnas-kitchen-every-tiffin-has-homes-flavour-perfect-landing-48b6</link>
      <guid>https://dev.to/khushalsarode/annapurnas-kitchen-every-tiffin-has-homes-flavour-perfect-landing-48b6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tagline:&lt;/strong&gt; &lt;em&gt;अन्नपूर्णा की रसोई&lt;/em&gt; — every tiffin has Home's Flavour 🏠✨&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  💡 Inspiration
&lt;/h2&gt;

&lt;p&gt;The Challenge asks for a polished, functional landing page with a food theme — a real or imaginary restaurant, a recipe collection, or anything that captures comfort food and demonstrates excellent frontend fundamentals.&lt;/p&gt;

&lt;p&gt;When I read that, I didn't picture stock photos and a dead "Order Now" button. 📸❌&lt;/p&gt;

&lt;p&gt;I pictured &lt;strong&gt;dinner at home&lt;/strong&gt; — the meal you crave the moment you step outside it. 🪔&lt;/p&gt;

&lt;h3&gt;
  
  
  🍽️ Comfort food, for us, is lunch and dinner
&lt;/h3&gt;

&lt;p&gt;Not snacks. Not street food on the go.&lt;/p&gt;

&lt;p&gt;In my home, comfort food means &lt;strong&gt;proper meals&lt;/strong&gt; — the dishes my mother cooks for lunch and dinner, served the way our family has always eaten: together, on the floor, in the traditional &lt;strong&gt;baitak&lt;/strong&gt; way.&lt;/p&gt;

&lt;p&gt;Everyone sits in a circle. Plates in front. The main course in the centre. And around it — the small things that complete the meal:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Side ritual&lt;/th&gt;
&lt;th&gt;What it adds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🥒 &lt;strong&gt;Achar&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;That pop when the jar opens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🍅 &lt;strong&gt;Tomato&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fresh slices with salt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🫓 &lt;strong&gt;Papad&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Crisp over the flame&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥗 &lt;strong&gt;Koshimbir&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Cool balance on the side&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nobody rushes. You eat with your hands when the dish asks for it. You break bhakri and drag it through thecha. That rhythm &lt;em&gt;is&lt;/em&gt; the comfort.&lt;/p&gt;

&lt;p&gt;🌾 &lt;strong&gt;The native dishes I grew up with&lt;/strong&gt; — click to read&lt;/p&gt;
&lt;h3&gt;
  
  
  Varan bati — the heart of it 💛
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Varan&lt;/strong&gt; is a simple, honest dal — toor dal tempered with ghee, mustard seeds, curry leaves, asafoetida. No heavy masala. Just warmth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bati&lt;/strong&gt; are round wheat-flour balls — roasted or baked until golden, crisp outside and soft within. Break a bati open, pour varan over it, add ghee, a pinch of salt, sometimes lemon — and you have the meal that feels like &lt;strong&gt;home on a plate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On tired days, on rainy afternoons, after a long journey — varan bati is what my body asks for before my mind catches up.&lt;/p&gt;
&lt;h3&gt;
  
  
  Bharit — soul of the side plate 🔥
&lt;/h3&gt;

&lt;p&gt;Brinjal roasted directly on flame until the skin chars and the inside turns smoky-soft, then mashed with onion, garlic, green chilli, and sometimes yogurt. It sits beside the rice, rich and earthy. Not fancy. &lt;strong&gt;Native.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Bhakri and thecha — rustic power 🌶️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Bhakri&lt;/strong&gt; is a thick jowar or bajra flatbread, hand-pressed, cooked on a tawa until it smells like the countryside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thecha&lt;/strong&gt; is the punch — green chillies pounded with garlic and roasted peanuts. Break bhakri, press into thecha, eat. That combination has carried generations through hard work and hot afternoons.&lt;/p&gt;

&lt;p&gt;These three — varan bati, bharit, bhakri-thecha — aren't items on a trend menu. They're &lt;strong&gt;dinner&lt;/strong&gt;. They're &lt;strong&gt;lunch&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏡 When you leave home — the craving begins
&lt;/h3&gt;

&lt;p&gt;You can eat anywhere. Hotels. Hostels. Office canteens. Cities far from your town.&lt;/p&gt;

&lt;p&gt;But the body remembers. You start craving &lt;strong&gt;exactly&lt;/strong&gt; what home tasted like — not "similar Indian food," not "dal rice somewhere."&lt;/p&gt;

&lt;p&gt;That craving isn't weakness. It's how deeply food is tied to &lt;strong&gt;place, people, and habit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What shapes your comfort plate today?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;😌 &lt;strong&gt;Mood&lt;/strong&gt; — light varan bati on a heavy day, bhakri-thecha when you need grounding&lt;/li&gt;
&lt;li&gt;🌧️ &lt;strong&gt;Season&lt;/strong&gt; — monsoon warmth; summer simplicity&lt;/li&gt;
&lt;li&gt;🎉 &lt;strong&gt;Festival&lt;/strong&gt; — what you cook for Diwali, Pola, harvest&lt;/li&gt;
&lt;li&gt;🥬 &lt;strong&gt;Diet&lt;/strong&gt; — vegetarian days, fasting rules, family wisdom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this decides what comfort food &lt;em&gt;is&lt;/em&gt; for you on a given day. Not a generic menu. A &lt;strong&gt;context&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗺️ The idea behind Annapurna's Kitchen
&lt;/h3&gt;

&lt;p&gt;I built &lt;strong&gt;Annapurna's Kitchen&lt;/strong&gt; because I wanted a landing page that understands this depth — not just "order food," but &lt;strong&gt;find the meal that matches your mood, season, festival, and diet&lt;/strong&gt;, customize it the way you'd tell your mother &lt;em&gt;"thoda kam teekha"&lt;/em&gt; or &lt;em&gt;"extra ghee."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annapurna's Kitchen&lt;/strong&gt; is an imaginary pan-India comfort-food service — a &lt;strong&gt;Comfort Food Atlas&lt;/strong&gt; where lunch and dinner bowls from every state are explored the way we actually choose food in life.&lt;/p&gt;

&lt;p&gt;Map on the left 🗺️ · Story on the right 📖 · &lt;strong&gt;अन्नपूर्णा की रसोई&lt;/strong&gt; everywhere.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What home taught me 🏠&lt;/th&gt;
&lt;th&gt;What I built into this landing page 💻&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Varan bati on tired days&lt;/td&gt;
&lt;td&gt;😌 Mood filters — find the bowl that matches how you feel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bharit, papad, achar on the side&lt;/td&gt;
&lt;td&gt;🧂 Per-line customization — extras, sides, prep notes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bhakri-thecha heat level&lt;/td&gt;
&lt;td&gt;🌶️ Special request presets — &lt;em&gt;"thoda kam teekha,"&lt;/em&gt; extra ghee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Baitak — eating together&lt;/td&gt;
&lt;td&gt;👨‍👩‍👧‍👦 Family feast order scenario at checkout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Craving home food when away&lt;/td&gt;
&lt;td&gt;🧺 Comfort Tiffin — collect bowls, persist in &lt;code&gt;localStorage&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Season and festival meals&lt;/td&gt;
&lt;td&gt;🌦️ Season + festival filters synced to the map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diet on certain days&lt;/td&gt;
&lt;td&gt;🥬 Vegetarian, prep-time, and diet filters across 250+ bowls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same taste, wherever you are&lt;/td&gt;
&lt;td&gt;🧾 Demo ordering with receipt, scenarios, shareable journey&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The logo is a &lt;strong&gt;tiffin carrier on a discovery orbit&lt;/strong&gt; 🛰️🍱 — because comfort lunch and dinner travel with you, even when home doesn't.&lt;/p&gt;




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

&lt;p&gt;A single-page &lt;strong&gt;Perfect Landing&lt;/strong&gt; for an imaginary pan-India comfort-food service — six chapters, one cohesive flow:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;Experience&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Arrival&lt;/strong&gt; 🌅&lt;/td&gt;
&lt;td&gt;Brand-first hero, pure CSS bowl, quiet script whisper, atlas + tiffin CTAs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Atlas&lt;/strong&gt; 🗺️&lt;/td&gt;
&lt;td&gt;Split workspace — interactive India map + tabbed dish theater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;III&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Collection&lt;/strong&gt; 🔍&lt;/td&gt;
&lt;td&gt;Fuse.js search; filter by mood, season, festival, diet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IV&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Desi Fusion&lt;/strong&gt; ✨&lt;/td&gt;
&lt;td&gt;Fusion gallery + recipe battles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Memory Wall&lt;/strong&gt; 💬&lt;/td&gt;
&lt;td&gt;Share the meal that reminds you of home&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VI&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;The Why&lt;/strong&gt; 📜&lt;/td&gt;
&lt;td&gt;Editorial story — comfort food is emotion, not cuisine&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;⚙️ &lt;strong&gt;Under the hood&lt;/strong&gt; — tech stack&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vite 8&lt;/strong&gt; + &lt;strong&gt;TypeScript&lt;/strong&gt; + vanilla HTML/CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lenis&lt;/strong&gt; scroll · &lt;strong&gt;Motion&lt;/strong&gt; animations · &lt;strong&gt;Fuse.js&lt;/strong&gt; search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Howler&lt;/strong&gt; optional ambient sound 🔊&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@svg-maps/india&lt;/strong&gt; for the interactive map&lt;/li&gt;
&lt;li&gt;Main JS chunk trimmed from ~667 KB → ~214 KB (lazy map, deferred CSS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The functional part judges can click:&lt;/strong&gt; full &lt;strong&gt;Comfort Tiffin&lt;/strong&gt; demo ordering 🧺&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add lunch and dinner bowls&lt;/li&gt;
&lt;li&gt;Customize each line (extras, kitchen notes, special requests)&lt;/li&gt;
&lt;li&gt;Live pricing (₹49–₹349 + 18% GST)&lt;/li&gt;
&lt;li&gt;3-step checkout wizard&lt;/li&gt;
&lt;li&gt;Four comfort scenarios&lt;/li&gt;
&lt;li&gt;Demo only — labeled upfront. No payment. No backend. ✅&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Demo — Try It Yourself!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Khushalsarode" rel="noopener noreferrer"&gt;
        Khushalsarode
      &lt;/a&gt; / &lt;a href="https://github.com/Khushalsarode/flavours-of-bharat" rel="noopener noreferrer"&gt;
        flavours-of-bharat
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      dev.to Landing page Challenege
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Annapurna's Kitchen&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An interactive comfort-food atlas of India&lt;/strong&gt; — explore 36 states and 250+ regional lunch &amp;amp; dinner bowls, then build a demo Comfort Tiffin order. Pure CSS bowl art, regional stories in local scripts, and a polished vanilla TypeScript landing experience.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Every tiffin has Home's Flavour.&lt;/em&gt; · &lt;strong&gt;अन्नपूर्णा की रसोई&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat/./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://vitejs.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bfc311024b112b8322dec124137b80e5d76b875274f82b7b071974306901a23a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d382d3634366366663f6c6f676f3d76697465266c6f676f436f6c6f723d7768697465" alt="Vite"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d2b19c56bf530067483d8d2756fac7800e0aef54ef4360460d778c23ccc3db2b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d3331373843363f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://dev.to/challenges/frontend-2026-07-29" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/75c7c8ff06b659ac262e8e2fc4de11662dfa6ab179e1b5137288091b1dc7b527/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4445562d436f6d666f7274253230466f6f6425323045646974696f6e2d633435633236" alt="DEV Challenge"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Live demo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[Try live](https://proud-poetry-e9ba.khushalsarode-in.workers.dev/)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://github.com/Khushalsarode/flavours-of-bharat.git&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat/./LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs index&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat/./docs/README.md" rel="noopener noreferrer"&gt;docs/README.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#annapurnas-kitchen" rel="noopener noreferrer"&gt;Annapurna's Kitchen&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#table-of-contents" rel="noopener noreferrer"&gt;Table of contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#about" rel="noopener noreferrer"&gt;About&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#atlas-and-discovery" rel="noopener noreferrer"&gt;Atlas and discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#comfort-tiffin-demo-ordering" rel="noopener noreferrer"&gt;Comfort Tiffin (demo ordering)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#visual-motion-and-audio" rel="noopener noreferrer"&gt;Visual, motion, and audio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#performance" rel="noopener noreferrer"&gt;Performance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#screenshots" rel="noopener noreferrer"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#quick-start" rel="noopener noreferrer"&gt;Quick start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#scripts" rel="noopener noreferrer"&gt;Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#user-flows" rel="noopener noreferrer"&gt;User flows&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#explore" rel="noopener noreferrer"&gt;Explore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#demo-order" rel="noopener noreferrer"&gt;Demo order&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#project-structure" rel="noopener noreferrer"&gt;Project structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#tech-stack" rel="noopener noreferrer"&gt;Tech stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#accessibility" rel="noopener noreferrer"&gt;Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#deploy" rel="noopener noreferrer"&gt;Deploy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#support" rel="noopener noreferrer"&gt;Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#credits" rel="noopener noreferrer"&gt;Credits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#challenge-submission" rel="noopener noreferrer"&gt;Challenge submission&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#changelog" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/flavours-of-bharat#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Annapurna's Kitchen&lt;/strong&gt; is an open-source, single-page &lt;strong&gt;Perfect Landing&lt;/strong&gt; experience for an imaginary pan-India comfort-food service. It is not a static restaurant brochure and not a backend-powered marketplace.&lt;/p&gt;
&lt;p&gt;It combines:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Comfort Food Atlas&lt;/strong&gt; — interactive India map + dish theater (story, history, culture…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Khushalsarode/flavours-of-bharat" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://proud-poetry-e9ba.khushalsarode-in.workers.dev/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;proud-poetry-e9ba.khushalsarode-in.workers.dev&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  🗺️ Explore — find the meal that feels like your home
&lt;/h3&gt;

&lt;p&gt;Copy this checklist and tick as you go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⏳ Wait for the loader — scripts cycling, &lt;strong&gt;36 states · 250+ bowls&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🍲 Land on &lt;strong&gt;Annapurna's Kitchen&lt;/strong&gt; — brand hero, pure CSS bowl, &lt;strong&gt;Open the atlas&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🖱️ Click your state on the India map &lt;em&gt;(keyboard: Tab + Enter)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;📖 Open the dish theater — Story · History · Culture · Recipe · Sensory&lt;/li&gt;
&lt;li&gt;👵 Read grandma's tip at the bottom&lt;/li&gt;
&lt;li&gt;🎛️ Filter by &lt;strong&gt;mood&lt;/strong&gt;, &lt;strong&gt;season&lt;/strong&gt;, &lt;strong&gt;festival&lt;/strong&gt;, or &lt;strong&gt;diet&lt;/strong&gt; — watch the map light up&lt;/li&gt;
&lt;li&gt;🔊 Toggle ambient sound &lt;em&gt;(optional)&lt;/em&gt; — right-click for the sound catalog&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧺 Order — build your comfort tiffin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;➕ Add lunch or dinner bowls from the map, theater, or catalog&lt;/li&gt;
&lt;li&gt;🎒 Open the tiffin drawer — badge shows bowl count + estimated total&lt;/li&gt;
&lt;li&gt;✏️ Customize — sides, prep extras, kitchen note (&lt;em&gt;"extra ghee," "mild thecha"&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;🎁 Add order-wide extras — comfort packaging, grandma's tip note card&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Review order&lt;/strong&gt; → pick a scenario:

&lt;ul&gt;
&lt;li&gt;🌧️ Rainy morning tiffin&lt;/li&gt;
&lt;li&gt;💼 Office lunch box&lt;/li&gt;
&lt;li&gt;👨‍👩‍👧‍👦 &lt;strong&gt;Family feast&lt;/strong&gt; &lt;em&gt;(the baitak meal, scaled up)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;🌙 Late-night craving&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;✅ Place demo order → share receipt → tell me which dish reminded you of home&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 &lt;strong&gt;After you try it:&lt;/strong&gt; Which bowl felt most like home? Drop it in the comments — I'd love to know. 🙏&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;😅 &lt;strong&gt;I started with a landing page that didn't understand comfort food&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First draft: hero, feature grid, footer CTA. Looked like every food startup. It treated comfort food like a marketing keyword — not like &lt;strong&gt;varan bati on a tired evening&lt;/strong&gt;, not like &lt;strong&gt;baitak with your family&lt;/strong&gt;, not like &lt;strong&gt;craving bharit when you're three cities away from home&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Perfect Landing prompt asks for &lt;strong&gt;polished and functional&lt;/strong&gt;. So I rebuilt around a question:&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;What should work when someone arrives hungry for home?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A map they can explore. Filters for mood, season, festival, diet. A cart they can fill with real lunch and dinner bowls. A checkout they can finish — with customization, not just a dead button.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗺️ Building the Comfort Food Atlas
&lt;/h3&gt;

&lt;p&gt;I started with Maharashtra — varan bati, bharit, bhakri, thecha — then expanded to &lt;strong&gt;36 states&lt;/strong&gt; and &lt;strong&gt;250+ bowls&lt;/strong&gt;. Each dish carries story, history, culture, recipe, nutrition, and sensory data. Because comfort food without context is just calories.&lt;/p&gt;

&lt;p&gt;The core UI is a &lt;strong&gt;split workspace&lt;/strong&gt;: map left, dish theater right.&lt;/p&gt;

&lt;p&gt;Select a state → atmosphere shifts 🌧️ · accents change 🎨 · optional ambient sound plays 🔊&lt;/p&gt;

&lt;p&gt;Five tabs: Story · History · Culture · Recipe · Sensory. Grandma's tip at the bottom — the kind of note your mother would actually give.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧺 Comfort Tiffin — home taste, wherever you are
&lt;/h3&gt;

&lt;p&gt;The atlas let you explore. But I kept thinking about being &lt;strong&gt;outside home&lt;/strong&gt; — hostel, office, another city — craving the &lt;strong&gt;exact&lt;/strong&gt; plate, with &lt;strong&gt;your&lt;/strong&gt; customizations.&lt;/p&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;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🍱 Personal tiffin&lt;/td&gt;
&lt;td&gt;Add regional lunch and dinner bowls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✏️ Line customization&lt;/td&gt;
&lt;td&gt;Extras, sides, prep notes, special requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📝 Kitchen notes&lt;/td&gt;
&lt;td&gt;Order-wide preferences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💰 Live totals&lt;/td&gt;
&lt;td&gt;Subtotal, 18% GST, grand total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧙 3-step checkout&lt;/td&gt;
&lt;td&gt;Review → Scenario → Confirm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎭 Four scenarios&lt;/td&gt;
&lt;td&gt;Rainy morning · Office · Family feast · Late-night&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The wizard says &lt;strong&gt;"Demo only — no real checkout"&lt;/strong&gt; — honest. But the flow is real.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Craft choices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🥣 &lt;strong&gt;Pure CSS hero bowl&lt;/strong&gt; — clay kulhad, broth, steam. No stock photos.&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Cream-crimson product UI&lt;/strong&gt; — navbar, themed scrollbars, 11 scripts in the loader.&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Performance&lt;/strong&gt; — lazy map, deferred CSS, butter-smooth scroll.&lt;/li&gt;
&lt;li&gt;♿ &lt;strong&gt;Accessibility&lt;/strong&gt; — keyboard map, focus traps, &lt;code&gt;prefers-reduced-motion&lt;/code&gt; throughout.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It should feel like a service you'd open when you're far from home — and find something close enough to baitak.&lt;/p&gt;

&lt;h3&gt;
  
  
  💌 A note for my family
&lt;/h3&gt;

&lt;p&gt;For every baitak dinner, every plate of varan bati, every bharit that smelled of fire, every bhakri broken over thecha — this one's built from that table. 🪔&lt;/p&gt;

&lt;p&gt;And for every family whose native dishes are different from mine — you deserve a place on the map too. 🗺️❤️&lt;/p&gt;

&lt;p&gt;Team — &lt;a class="mentioned-user" href="https://dev.to/rajat_savdekar"&gt;@rajat_savdekar&lt;/a&gt; — you know which plate I mean. 🍛&lt;/p&gt;




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

&lt;p&gt;Open source under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;
  &lt;strong&gt;🍲 Built with comfort · Served with code · Shared with love&lt;/strong&gt;&lt;br&gt;
  &lt;em&gt;अन्नपूर्णा की रसोई — Every tiffin has Home's Flavour&lt;/em&gt;
&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Nukkad Chat Corner 🍵 | Comfort Food Isn’t a Restaurant — It’s a Thela. That’s Where the Soul Gets Comfort. I Sculpted Mine in CSS.</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Wed, 12 Aug 2026 23:10:51 +0000</pubDate>
      <link>https://dev.to/khushalsarode/nukkad-chat-corner-comfort-food-isnt-a-restaurant-its-a-thela-thats-where-the-soul-gets-df0</link>
      <guid>https://dev.to/khushalsarode/nukkad-chat-corner-comfort-food-isnt-a-restaurant-its-a-thela-thats-where-the-soul-gets-df0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;When DEV said &lt;em&gt;comfort food&lt;/em&gt;, I didn't think of restaurant platters or Sunday lunch.&lt;/p&gt;

&lt;p&gt;I thought of home. College. Friends walking through the city with no plan except &lt;strong&gt;to find something to eat&lt;/strong&gt;. I thought of the &lt;strong&gt;aroma&lt;/strong&gt; that hits you when you pass a &lt;strong&gt;thela&lt;/strong&gt; — that small street cart — and your feet turn toward it before your brain catches up. 😮‍💨&lt;/p&gt;

&lt;p&gt;That smell. That steam. That queue. That's where this project starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chai — the anytime drink 🍵
&lt;/h3&gt;

&lt;p&gt;Back here in India, &lt;strong&gt;chai is not a morning-only drink&lt;/strong&gt;. It never was.&lt;/p&gt;

&lt;p&gt;Wake up early? Chai.&lt;/p&gt;

&lt;p&gt;Study? Chai.&lt;/p&gt;

&lt;p&gt;Work? Chai.&lt;/p&gt;

&lt;p&gt;Friends hanging out? Chai.&lt;/p&gt;

&lt;p&gt;Just woke up from a nap? &lt;strong&gt;First thing — chai.&lt;/strong&gt; 😴➡️🍵&lt;/p&gt;

&lt;p&gt;Cutting, full, adrak wali, elaichi — the variations change, but the feeling doesn't. One hot sip and you feel &lt;strong&gt;totally alive and awake&lt;/strong&gt;. That's not marketing copy. That's memory. ✨&lt;/p&gt;

&lt;p&gt;Back home, it's tradition. When a guest visits — any programme, any festival, any gathering — the &lt;strong&gt;first thing&lt;/strong&gt; offered is chai. It sounds odd to outsiders. Here it's normal. It's just how things work.&lt;/p&gt;

&lt;p&gt;I come from a town built around agriculture and education. Chai isn't one crowd's drink. Workers, teachers, officers, employees — everyone has their spot. There's a chai &lt;strong&gt;thela wala&lt;/strong&gt; near us who keeps a &lt;strong&gt;separate monthly account&lt;/strong&gt; for each regular. They settle up at month-end. It sounds extreme until you live it — and it isn't addiction. 😅 Chai is the fastest, easiest drink with a little belly-filling warmth. People pair it with biscuits or toast. Folks in agriculture often eat &lt;strong&gt;salted rotis with chai&lt;/strong&gt;. My father leaves early for work — chai then too. I used to have mine with biscuits and toast. Same ritual, different schedules.&lt;/p&gt;

&lt;h3&gt;
  
  
  With friends — the real comfort menu 🌙
&lt;/h3&gt;

&lt;p&gt;When we gathered for a walk or to kill free time, we didn't just walk. We &lt;strong&gt;ate our way through the city&lt;/strong&gt;. Sometimes the whole evening was one food stop after another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pani puri&lt;/strong&gt; was — and still is — my absolute go-to. Tangy, semi-spicy, that one-bite explosion where teekha pani, potato, and crunch land together. You can't eat it slow. You shouldn't. Six puris, six little decisions, zero regrets. 💥&lt;/p&gt;

&lt;p&gt;And here's the tradition where I'm from: a true pani puri lover always asks for &lt;strong&gt;two suki papdi&lt;/strong&gt; after the last puri. If you don't — well, don't call yourself a lover. It's the finishing move here — crunchy and dry after all that pani. Non-negotiable. 🫡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vada pav&lt;/strong&gt; is a whole culture. There are &lt;em&gt;tons&lt;/em&gt; of famous shops for one dish. Same ingredients everywhere — pav, batata vada, chutneys — and yet &lt;strong&gt;every shop tastes different&lt;/strong&gt;. We picked the stall based on &lt;strong&gt;mood&lt;/strong&gt;. Feeling classic? One place. Feeling spicy? Another. Feeling nostalgic? The one from college days.&lt;/p&gt;

&lt;p&gt;A couple recently opened a shop nearby with &lt;strong&gt;35+ variations&lt;/strong&gt; — genuinely fantastic, mind-blowing. That place changed the game, but mood-based shop picking never stopped. 🤯&lt;/p&gt;

&lt;p&gt;I still prefer &lt;strong&gt;Mumbai style&lt;/strong&gt;: green chutney, onion, vada, dry chutney, tamarind chutney. Simple layers — wholesome ingredients, nothing fancy, just done right.&lt;/p&gt;

&lt;p&gt;And honestly? &lt;strong&gt;One vada pav is enough&lt;/strong&gt; for an average appetite. Fast, filling, done. That's the beauty of it. 🙌&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Banana chips&lt;/strong&gt; are the road home. 🛣️🍌&lt;/p&gt;

&lt;p&gt;I belong to &lt;strong&gt;Jalgaon, Maharashtra&lt;/strong&gt; — Banana City. It sits in the heart of India's banana belt: the prime hub of banana production in the country. Drive those highways and you don't only see plantations. Every few kilometres there are &lt;strong&gt;small shops&lt;/strong&gt; frying &lt;strong&gt;banana chips live&lt;/strong&gt; — paper-thin nendran coins, still hot from the oil, tossed with &lt;strong&gt;black salt&lt;/strong&gt; and &lt;strong&gt;red chilli powder&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You stop. You take a paper cone. You pinch a coin with every sip of chai. Fresh. Loud. Crisp. That smell of hot oil and spice is as much home as the thela itself — and it's the plate on this counter. 🔥&lt;/p&gt;

&lt;p&gt;Our breakfast-with-friends wasn't always idli or dosa. Sometimes it was &lt;strong&gt;poha&lt;/strong&gt; — and never plain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rasa poha&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Misal poha&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tari poha&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A squeeze of &lt;strong&gt;lemon&lt;/strong&gt; on top&lt;/li&gt;
&lt;li&gt;A pinch of &lt;strong&gt;black salt&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wah. Even writing this makes my mouth water. 🤤&lt;/p&gt;

&lt;p&gt;These were my &lt;strong&gt;go-to comfort foods with friends&lt;/strong&gt; in college and the years we were still learning who we were. Even today, when we gather, we &lt;strong&gt;don't miss the chance&lt;/strong&gt;. Same hunger. Same lanes. Same laughter. Different year. 🫶&lt;/p&gt;

&lt;h3&gt;
  
  
  At home — mother's kitchen 🏠
&lt;/h3&gt;

&lt;p&gt;At home, my mother often made &lt;strong&gt;idli&lt;/strong&gt;, &lt;strong&gt;dosa&lt;/strong&gt;, &lt;strong&gt;sambar&lt;/strong&gt;, and &lt;strong&gt;poha&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poha&lt;/strong&gt; became &lt;em&gt;the&lt;/em&gt; comfort dish when I was hungry &lt;strong&gt;between lunch and dinner&lt;/strong&gt; — that in-between hunger when you don't want a full meal but need warmth. Amma would make it quickly, and somehow it always tasted like she knew exactly how hungry you were. 💛&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idli and dosa&lt;/strong&gt; weren't snacks for me — I often replaced a full meal with them. Nutrient-rich, satisfying, served with &lt;strong&gt;sambar&lt;/strong&gt;, &lt;strong&gt;coconut chutney&lt;/strong&gt;, &lt;strong&gt;potato sabji&lt;/strong&gt; spread inside, and a thin layer of &lt;strong&gt;dry chutney&lt;/strong&gt; on top. Still the best combination for me.&lt;/p&gt;

&lt;p&gt;The dosa I love most? &lt;strong&gt;Paper-thin and super crisp&lt;/strong&gt; — the kind that crackles when you bite — with &lt;strong&gt;cheese&lt;/strong&gt; melted inside and &lt;strong&gt;coconut chutney&lt;/strong&gt; on the side. (The counter art is paneer dosa — same love, different stuffing — but the feeling is identical.) 🧀&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I built Nukkad Chat Corner ✨
&lt;/h3&gt;

&lt;p&gt;All of this lives at a &lt;strong&gt;thela&lt;/strong&gt; — not a fancy restaurant, not a food court. Steel counter. String lights. Queue on the wall. Someone calling out order numbers. The smell of chai and fried batter before you even see the menu. 🏮&lt;/p&gt;

&lt;p&gt;That's the world I wanted to rebuild in CSS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nukkad Chat Corner&lt;/strong&gt; is the name of the website — a single-page night &lt;strong&gt;thela&lt;/strong&gt; of eight dishes from my real life, sculpted in &lt;strong&gt;pure CSS&lt;/strong&gt;. No food photographs. No menu prices. No frameworks. Just gradients, &lt;code&gt;@keyframes&lt;/code&gt;, &lt;code&gt;@property&lt;/code&gt;, &lt;code&gt;:has()&lt;/code&gt; rituals, steam, and a little JavaScript where CSS alone couldn't finish the story.&lt;/p&gt;

&lt;p&gt;Each plate carries a &lt;strong&gt;ritual line&lt;/strong&gt; (how we actually eat it). Click opens a comfort-plate theater — enlarged CSS sculpture first, then story, craft tags, and optional nutrition tucked below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plate&lt;/th&gt;
&lt;th&gt;Ritual / meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🍵 &lt;strong&gt;Masala Chai&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Cutting · two dunks — the anytime drink&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💧 &lt;strong&gt;Pani Puri&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Always two suki papdi — friends and teekha pani&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥪 &lt;strong&gt;Vada Pav&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Shop by mood — one is enough&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥥 &lt;strong&gt;Idli Platter&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Break, dip, then chutney — Amma's quiet comfort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥞 &lt;strong&gt;Paneer Dosa&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Tear while it crackles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🍋 &lt;strong&gt;Indori Poha&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Lemon first, sev last&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌶️ &lt;strong&gt;Misal Pav&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Farsan just before the bite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🍌 &lt;strong&gt;Jalgaon Banana Chips&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A coin with every sip of chai&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Open &lt;strong&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt;. A short welcome curtain greets you — &lt;em&gt;"Arre bhai, cutting chai garam hai…"&lt;/em&gt; — then the hero chai, comfort story, and eight CSS plates. 👋&lt;/p&gt;

&lt;h3&gt;
  
  
  A note for my hometown friends 💛
&lt;/h3&gt;

&lt;p&gt;This one's for every walk we took, every pani puri stand we debated, every vada pav shop we chose by mood, every highway stop for hot banana chips, and every poha breakfast that tasted better because we were together.&lt;/p&gt;

&lt;p&gt;Shoutout to my town friend — &lt;a class="mentioned-user" href="https://dev.to/rajat_savdekar"&gt;@rajat_savdekar&lt;/a&gt; — you know exactly which thela I mean.&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://css-art-food-challenge.khushalsarode-in.workers.dev/" rel="noopener noreferrer"&gt;Nukkad Chat Corner&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://css-art-food-challenge.khushalsarode-in.workers.dev/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;css-art-food-challenge.khushalsarode-in.workers.dev&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;strong&gt;Try this flow:&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Open the live site — skip or watch the CSS welcome curtain 👋&lt;/li&gt;
&lt;li&gt;Smell the night thela — sit with the hero chai (pure CSS, full-bleed) 🍵&lt;/li&gt;
&lt;li&gt;Hover the &lt;strong&gt;food directly&lt;/strong&gt; — biscuit dunk, pani fill-tilt-pop, vada bun press 👆&lt;/li&gt;
&lt;li&gt;Click any plate for the enlarged CSS sculpture + comfort story 🍽️&lt;/li&gt;
&lt;li&gt;Scroll the plates — night counter, native smooth scroll, no layout jumps ✨&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why a thela, not a gallery? 🏮
&lt;/h3&gt;

&lt;p&gt;Most CSS art sits on a white page like a museum piece. Comfort food in India doesn't live in museums. It lives at a &lt;strong&gt;thela&lt;/strong&gt; — steel surface, string lights, queue on the wall, chai steam in the air.&lt;/p&gt;

&lt;p&gt;I didn't want a menu website. I wanted you to feel like you're &lt;strong&gt;walking past a shop at night&lt;/strong&gt; and stopping because the smell won. 😮‍💨&lt;/p&gt;

&lt;p&gt;The micro welcome curtain came first — kulhad steam, &lt;em&gt;"Arre bhai, cutting chai garam hai…"&lt;/em&gt; — then a brand-forward hero chai and a plates theater with signature food rituals, not ₹ price tags.&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS is the star ⭐
&lt;/h3&gt;

&lt;p&gt;Every dish is built from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;repeating-linear-gradient&lt;/code&gt;&lt;/strong&gt; — pav crust, kulhad ridges, wood grain, banana leaf ribs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;radial-gradient&lt;/code&gt; / &lt;code&gt;conic-gradient&lt;/code&gt;&lt;/strong&gt; — tea meniscus, puri shells, idli pores, dosa griddle burns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;@keyframes&lt;/code&gt;&lt;/strong&gt; — steam convection, string-light flicker, heat shimmer, lamp pool pulse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;transform-style: preserve-3d&lt;/code&gt;&lt;/strong&gt; — pani puri isometric clusters, idli platters, dosa cones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:has()&lt;/code&gt; food hovers&lt;/strong&gt; — hover the chai &lt;em&gt;cup&lt;/em&gt;, not the card, and the steam responds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cards stay &lt;strong&gt;static&lt;/strong&gt; so scrolling stays smooth. The food inside moves. Early versions lifted whole cards and the page fought itself — the final build keeps cards still and lets the food breathe. 😌&lt;/p&gt;

&lt;h3&gt;
  
  
  Light JavaScript, on purpose ⚡
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Indori Poha&lt;/strong&gt; is a CSS flake mound — box-shadow rice, radial turmeric, a CSS spoon. Everything on the counter is CSS.&lt;/p&gt;

&lt;p&gt;Near-zero JS: one tiny &lt;code&gt;app.js&lt;/code&gt; only wires reduced-motion and keyboard Escape/Enter for the plate radios. Welcome, back-to-top, lights, scroll, and the plate overlay are CSS/HTML. No framework. No animation loop. JavaScript supports the story; &lt;strong&gt;CSS tells it&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lighting and atmosphere 🌙
&lt;/h3&gt;

&lt;p&gt;Warm string bulbs. Amber corner pools. Neon spill. Chai steam catching lamplight. The kind of night you know from a &lt;strong&gt;galli&lt;/strong&gt; when you're waiting for your order with friends. 🫶&lt;/p&gt;

&lt;p&gt;&lt;code&gt;prefers-reduced-motion&lt;/code&gt; is respected throughout — welcome curtain hides, smooth scroll turns off, rituals settle.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I'm proud of 💛
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;chai glass&lt;/strong&gt; — because chai isn't just a beverage here, it's a lifestyle 🍵&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pani puri&lt;/strong&gt; as a 7-puri cluster — the dish I was most excited to render in CSS 💥&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jalgaon banana chips&lt;/strong&gt; — the highway shops of home, fried live, black salt and chilli 🍌&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modal dish tickets&lt;/strong&gt; — history, how to eat, healthier style, nutrition per serving&lt;/li&gt;
&lt;li&gt;A counter that scrolls smooth &lt;strong&gt;and&lt;/strong&gt; feels like the shops we grew up around&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;Tell me which dish feels most like &lt;em&gt;your&lt;/em&gt; thela — I'd love to hear it.&lt;/li&gt;
&lt;/ul&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Khushalsarode" rel="noopener noreferrer"&gt;
        Khushalsarode
      &lt;/a&gt; / &lt;a href="https://github.com/Khushalsarode/css-art-food-challenge" rel="noopener noreferrer"&gt;
        css-art-food-challenge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      dev.to CSS Food Art Challenege
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Nukkad Chat Corner&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;The comfort food I grew up eating — sculpted in pure CSS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A single-page night-tapri experience for the &lt;a href="https://dev.to/challenges/frontend-2026-07-29" rel="nofollow"&gt;DEV Frontend Challenge: Comfort Food Edition&lt;/a&gt; &lt;strong&gt;CSS Art&lt;/strong&gt; prompt. Eight Indian street and household dishes, zero food photographs, zero frameworks, zero build step.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Arre bhai, cutting chai garam hai!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge/./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a0e6f1acd92594e8996fce3ce0b5b583e5a836feeca564a66a42f888837d3d8c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f48544d4c352d4533344632363f6c6f676f3d68746d6c35266c6f676f436f6c6f723d7768697465" alt="HTML5"&gt;&lt;/a&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2db98a73d71c937410177d6eec77ce6a3a251e82a40c92d9c100427a8e7f7167/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f435353332d3135373242363f6c6f676f3d63737333266c6f676f436f6c6f723d7768697465" alt="CSS3"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge/./js/app.js" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a95cef3a7b2f8bfc059f4059e3d2b7cf8e5ac10aa34f3323b0cdc810c1d1fab9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176615363726970742d6e6561722d2d7a65726f2d4637444631453f6c6f676f3d6a617661736372697074266c6f676f436f6c6f723d626c61636b" alt="JavaScript"&gt;&lt;/a&gt;
&lt;a href="https://dev.to/challenges/frontend-2026-07-29" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/0429878d7b85d368674cd138f8368ce3236ad89b5078ec67f93501c240ffa7d1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4445562d46726f6e74656e642532304368616c6c656e67652d3041304130413f6c6f676f3d646576646f74746f266c6f676f436f6c6f723d7768697465" alt="DEV Frontend Challenge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Live demo&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;&lt;code&gt;&lt;a href="https://css-art-food-challenge.khushalsarode-in.workers.dev/" rel="noopener noreferrer"&gt;https://css-art-food-challenge.khushalsarode-in.workers.dev/&lt;/a&gt;&lt;/code&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;&lt;code&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge.git" rel="noopener noreferrer"&gt;https://github.com/Khushalsarode/css-art-food-challenge.git&lt;/a&gt;&lt;/code&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge/./LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Docs index&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge/./docs/README.md" rel="noopener noreferrer"&gt;docs/README.md&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;


&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of contents&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#nukkad-chat-corner" rel="noopener noreferrer"&gt;Nukkad Chat Corner&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#table-of-contents" rel="noopener noreferrer"&gt;Table of contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#about" rel="noopener noreferrer"&gt;About&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#screenshots" rel="noopener noreferrer"&gt;Screenshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#scripts-and-commands" rel="noopener noreferrer"&gt;Scripts and commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#user-flow" rel="noopener noreferrer"&gt;User flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#project-structure" rel="noopener noreferrer"&gt;Project structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#tech-stack" rel="noopener noreferrer"&gt;Tech stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#accessibility" rel="noopener noreferrer"&gt;Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#contributing-and-community" rel="noopener noreferrer"&gt;Contributing and community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Khushalsarode/css-art-food-challenge#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;
&lt;br&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Nukkad Chat Corner&lt;/strong&gt; rebuilds an Indian night tapri as CSS art: steel counter energy, string lights, chai steam, and eight plates drawn with gradients, transforms, and keyframes — not photographs.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;It is&lt;/th&gt;

&lt;th&gt;It is not&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;A static HTML/CSS/JS art page&lt;/td&gt;

&lt;td&gt;A restaurant ordering SaaS&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;A DEV CSS Art challenge submission&lt;/td&gt;

&lt;td&gt;A framework demo or SPA&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Memory theater with ritual lines&lt;/td&gt;

&lt;td&gt;A priced menu&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;…&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Khushalsarode/css-art-food-challenge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>comfortfood</category>
    </item>
    <item>
      <title>Passion Uncorked — I Built an App That Ages Your Passion Into Wine or Forges It Into Steel</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Mon, 13 Jul 2026 11:34:47 +0000</pubDate>
      <link>https://dev.to/khushalsarode/passion-uncorked-i-built-an-app-that-ages-your-passion-into-wine-or-forges-it-into-steel-7mk</link>
      <guid>https://dev.to/khushalsarode/passion-uncorked-i-built-an-app-that-ages-your-passion-into-wine-or-forges-it-into-steel-7mk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Passion Uncorked&lt;/strong&gt; — you type a single word or a full sentence about whatever you're passionate about ("open source," "football," "cooking for people I love," anything), then choose to either &lt;strong&gt;age it in wine&lt;/strong&gt; 🍷 or &lt;strong&gt;forge it in fire&lt;/strong&gt; 🔥. Within about 30 seconds you get back a completely unique, narrated artifact for that exact passion: either a wine label (château name, vintage year, tasting notes, a collector's note) or a forge mark (forge name, smith's title, temper notes, a smith's mark) — read aloud in a voice built for that vessel.&lt;/p&gt;

&lt;p&gt;Same input, two entirely different pieces of writing, visual direction, and narration. The idea came straight from the challenge prompt: passion isn't one thing — it's devotion for one person and intensity for another, so the app treats those as two genuinely different creative outputs instead of one template with a palette swap.&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://passion-uncorked.khushalsarode-in.workers.dev" rel="noopener noreferrer"&gt;Passion Uncorked Demo Link&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F28zyodepo0kzoav0n3o2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F28zyodepo0kzoav0n3o2.gif" alt="Passion Uncorked demo" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Khushalsarode" rel="noopener noreferrer"&gt;
        Khushalsarode
      &lt;/a&gt; / &lt;a href="https://github.com/Khushalsarode/dev.to-challenge"&gt;
        dev.to-challenge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DEV Weekend Challenge: Passion Edition Submission
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🍷🔥 Passion Uncorked&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0914104ad39a77e8398d1798737dfa1c36da8e5243aa8fbcc06af6be6c94fd1f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31382d3134396563613f6c6f676f3d7265616374266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/0914104ad39a77e8398d1798737dfa1c36da8e5243aa8fbcc06af6be6c94fd1f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31382d3134396563613f6c6f676f3d7265616374266c6f676f436f6c6f723d7768697465" alt="React 18"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3dc8a526ab94b68138a5358d9e82c553d95de0498f637f90176c8291feb7ed85/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d352d3634364346463f6c6f676f3d76697465266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/3dc8a526ab94b68138a5358d9e82c553d95de0498f637f90176c8291feb7ed85/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d352d3634364346463f6c6f676f3d76697465266c6f676f436f6c6f723d7768697465" alt="Vite 5"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d291cac6ac238192b52ac47486ab2b00269a207c2fb6c0dec4a3fd4e39b89eb7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f6f676c6525323047656d696e692d322e352d3432383546343f6c6f676f3d676f6f676c6567656d696e69266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/d291cac6ac238192b52ac47486ab2b00269a207c2fb6c0dec4a3fd4e39b89eb7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f6f676c6525323047656d696e692d322e352d3432383546343f6c6f676f3d676f6f676c6567656d696e69266c6f676f436f6c6f723d7768697465" alt="Google Gemini"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a4e262f5b9f88574d5e2a675a7903462104d1694fd4060a7c6a230fa79576007/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c6576656e4c6162732d566f69636525323041492d3030303030303f6c6f676f3d656c6576656e6c616273266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/a4e262f5b9f88574d5e2a675a7903462104d1694fd4060a7c6a230fa79576007/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c6576656e4c6162732d566f69636525323041492d3030303030303f6c6f676f3d656c6576656e6c616273266c6f676f436f6c6f723d7768697465" alt="ElevenLabs"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/713a805c75b98e44815fbe2d9432a0f138f78b8c1730591516fdf83a216df39c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642532306f6e2d436c6f7564666c6172652d4633383032303f6c6f676f3d636c6f7564666c617265266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/713a805c75b98e44815fbe2d9432a0f138f78b8c1730591516fdf83a216df39c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642532306f6e2d436c6f7564666c6172652d4633383032303f6c6f676f3d636c6f7564666c617265266c6f676f436f6c6f723d7768697465" alt="Deployed on Cloudflare"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2888d0bccf57175eeafc0d8054b8b34f0dd05a384aa1dd05f575cd8a5ed92fd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4445562532305765656b656e642532304368616c6c656e67652d50617373696f6e25323045646974696f6e2d3342343944463f6c6f676f3d646576646f74746f266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/2888d0bccf57175eeafc0d8054b8b34f0dd05a384aa1dd05f575cd8a5ed92fd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4445562532305765656b656e642532304368616c6c656e67652d50617373696f6e25323045646974696f6e2d3342343944463f6c6f676f3d646576646f74746f266c6f676f436f6c6f723d7768697465" alt="DEV Weekend Challenge: Passion Edition"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/Khushalsarode/dev.to-challenge/passion-uncorked.khushalsarode-in.workers.dev"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FKhushalsarode%2Fdev.to-challenge%2FHEAD%2F.%2Fpublic%2Fdemo.gif" alt="Passion Uncorked — type a passion, pick wine or fire, get a narrated label" width="920"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;Type any passion → age it in wine or forge it in fire → a one-of-a-kind, narrated artifact in under 30 seconds.&lt;/strong&gt;&lt;br&gt;
  &lt;a href="https://passion-uncorked.khushalsarode-in.workers.dev" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Live demo →&lt;/strong&gt;&lt;/a&gt; · Gemini-written copy · ElevenLabs narration · original browser-synthesized score
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why we built this&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;The &lt;strong&gt;DEV Weekend Challenge: Passion Edition&lt;/strong&gt; asked for something inspired by passion — the fire that drives obsession, devotion, and craft, in whatever form that takes.&lt;/p&gt;

&lt;p&gt;Everyone's passion looks different, but almost nobody gets to see theirs &lt;em&gt;presented&lt;/em&gt; as something precious. A sommelier ages a grape harvest into a vintage worth collecting. A blacksmith tempers raw ore into a blade worth naming. We asked: what if we did that to &lt;em&gt;your&lt;/em&gt; passion instead — whether it's "open source," "football," or "cooking for people I love"?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passion Uncorked&lt;/strong&gt; takes a single word or a full sentence and, in real time, turns it into one of two completely different artifacts:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;…&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Khushalsarode/dev.to-challenge"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;
  
  
  Video Explanation
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/CUfcfTuXDW4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;React 18 + Vite, no backend — Gemini for copy, ElevenLabs for narration, the Web Audio API for an original ambient score, and &lt;code&gt;html2canvas&lt;/code&gt; for the downloadable PNG export. Deployed on Cloudflare Pages.&lt;/p&gt;

&lt;p&gt;Here's the stuff that actually took real thought (or real debugging) to get right:&lt;/p&gt;

&lt;p&gt;We didn't just let Gemini free-write and hope for the best. Every call goes out with &lt;code&gt;responseMimeType: 'application/json'&lt;/code&gt; against a strict schema per vessel, so we always get back a title, tasting or temper notes, a rarity or intensity line — and, this one mattered more than we expected, a separate &lt;code&gt;tts_script&lt;/code&gt; field. Turns out copy that reads well on a label doesn't always sound natural out loud, so we just had the model write both versions instead of reusing one.&lt;/p&gt;

&lt;p&gt;Gemini's flash models have this "thinking" budget quirk that cost us an evening early on: they'll quietly burn tokens on invisible reasoning by default, and if you don't set &lt;code&gt;thinkingConfig: { thinkingBudget: 0 }&lt;/code&gt; yourself, you can get back a response that looks totally successful and is completely empty. Fun one to debug. We also added a small JSON repair-and-retry step for the rare case where a response gets cut off mid-object.&lt;/p&gt;

&lt;p&gt;Wine and fire don't share a narrator, on purpose. Each vessel has its own ElevenLabs voice ID and its own &lt;code&gt;voiceSettings&lt;/code&gt; — stability and style tuned differently — pulled in through the official SDK. It only loads once someone actually hits submit.&lt;/p&gt;

&lt;p&gt;The bottle and the flame actually pay attention to what the AI wrote. The wine's liquid color comes straight from whatever &lt;code&gt;color_mood&lt;/code&gt; Gemini picked; the fire's flame height and glow scale off the &lt;code&gt;intensity&lt;/code&gt; line it generated, so a result described as "White-Hot" really does burn brighter on screen than one that's "Smoldering." It's all SVG and CSS — no image model involved, so it's instant and costs nothing.&lt;/p&gt;

&lt;p&gt;The ambient music isn't a loop we found somewhere — it's genuinely being composed in your browser while you're on the page, using the Web Audio API. Wine gets a soft arpeggio, fire gets a darker ostinato, both built live from oscillators and gain envelopes, no audio files anywhere.&lt;/p&gt;

&lt;p&gt;And the certificate itself got rebuilt from SVG to plain HTML/CSS partway through, mostly because long AI-generated titles kept overflowing the card and it looked broken. CSS container queries fixed that properly — the type now scales to the card's own width instead of us guessing at font sizes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Google AI&lt;/strong&gt; — Gemini drives structured JSON generation, tone switching (a "classy" and a "sassy roast" mode), the color-mood system that tints the entire UI, and the narration script itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; — every result is narrated through the official ElevenLabs SDK with distinct, deliberately-tuned voices per vessel, making narration a first-class output rather than a bolt-on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built by a team of two: &lt;a class="mentioned-user" href="https://dev.to/khushalsarode"&gt;@khushalsarode&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/rajat_savdekar"&gt;@rajat_savdekar&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thanks for reading — go pour or forge your own passion 🍷🔥&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Are you Facing ‘Docker Permission Denied’ error! Let’s fix it and get you started with your shipping! 😵😕🔍</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Fri, 10 Jul 2026 20:55:30 +0000</pubDate>
      <link>https://dev.to/khushalsarode/are-you-facing-docker-permission-denied-error-lets-fix-it-and-get-you-started-with-your-36pd</link>
      <guid>https://dev.to/khushalsarode/are-you-facing-docker-permission-denied-error-lets-fix-it-and-get-you-started-with-your-36pd</guid>
      <description>&lt;h5&gt;
  
  
  Stop typing 'sudo' before every single Docker command. Learn how to instantly and securely fix the docker.sock permission denied error.
&lt;/h5&gt;

&lt;h1&gt;
  
  
  How to Fix the Docker Permission Denied Error (&lt;code&gt;docker.sock&lt;/code&gt;)
&lt;/h1&gt;

&lt;p&gt;Have you ever run a &lt;code&gt;docker ps&lt;/code&gt; or &lt;code&gt;docker build&lt;/code&gt; only to be met with this frustrating message?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a common issue when setting up a new Linux machine or cloud VM. Let’s explore why it happens and how to fix it for good.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Issue
&lt;/h2&gt;

&lt;p&gt;When you run Docker commands, your terminal shows a permission denied error. This forces you to add &lt;code&gt;sudo&lt;/code&gt; to every command, which disrupts automated scripts and becomes a hassle to type.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Docker uses a Unix socket file located at &lt;code&gt;/var/run/docker.sock&lt;/code&gt; to connect the CLI tool you use with the background service that runs the containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly is &lt;code&gt;/var/run/docker.sock&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;/var/run/docker.sock&lt;/code&gt; file is a Unix domain socket that enables communication between the Docker CLI and the daemon. It typically needs root permissions.&lt;/p&gt;

&lt;p&gt;By default, &lt;strong&gt;root owns this socket file&lt;/strong&gt;. For security reasons, regular Linux user accounts are not allowed to access it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two Ways to Fix It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The Proper Way (Recommended)
&lt;/h3&gt;

&lt;p&gt;This method gives your specific user account permanent and secure access by adding it to a specific security group.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Create the Docker system group (it usually exists, but just in case):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;groupadd docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Add your current user account to that group:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="se"&gt;\$&lt;/span&gt;USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; Activate the group changes right away without logging out:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Test it by running &lt;code&gt;docker run hello-world&lt;/code&gt; without &lt;code&gt;sudo&lt;/code&gt;!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Quick Way
&lt;/h3&gt;

&lt;p&gt;If you are in a hurry, working on a temporary VM, and just need it to work &lt;em&gt;right now&lt;/em&gt;, you can take a shortcut.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Command:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo chmod &lt;/span&gt;666 /var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Catch:&lt;/strong&gt; This permission change &lt;strong&gt;goes away when you reboot&lt;/strong&gt; the machine. Additionally, it lets &lt;em&gt;any&lt;/em&gt; user or process on that machine read and write to Docker, which is a significant security risk in production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;quick way&lt;/strong&gt; is fine for a brief local test, but the &lt;strong&gt;proper way&lt;/strong&gt; is the best practice. It persists through reboots and keeps your environment safe. Take the extra 5 seconds to set up the user group— Enjoy 🐬📦🏗!&lt;br&gt;
Happy Learning!!😊👨‍💻📌&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>tutorial</category>
      <category>help</category>
    </item>
    <item>
      <title>Python Virtual Environment Setup: Commands, Structure, and Sample Program 🐍👩‍💻👨‍💻</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Fri, 11 Jul 2025 23:17:27 +0000</pubDate>
      <link>https://dev.to/khushalsarode/python-virtual-environment-setup-commands-structure-and-sample-program-4g63</link>
      <guid>https://dev.to/khushalsarode/python-virtual-environment-setup-commands-structure-and-sample-program-4g63</guid>
      <description>&lt;p&gt;Whether you're building data pipelines, web apps, or experimenting with AI models, managing project dependencies is crucial. That’s where Python virtual environments come into play.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔍 What is a Python Virtual Environment?&lt;/li&gt;
&lt;li&gt;⚙️ Prerequisites&lt;/li&gt;
&lt;li&gt;
💻 Virtual Environment Setup by OS

&lt;ul&gt;
&lt;li&gt;🖥 Windows&lt;/li&gt;
&lt;li&gt;🍎 macOS / 🐧 Linux&lt;/li&gt;
&lt;li&gt;🧪 Verify the Environment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📁 Virtual Environment Directory Structure&lt;/li&gt;
&lt;li&gt;✅ Steps to Setup a Project&lt;/li&gt;
&lt;li&gt;🧾 Sample Program: main.py&lt;/li&gt;
&lt;li&gt;💡 Bonus Tips&lt;/li&gt;
&lt;li&gt;📌 Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔍 What is a Python Virtual Environment?
&lt;/h2&gt;

&lt;p&gt;A virtual environment is an isolated environment for Python projects. It allows you to manage dependencies separately for each project, preventing conflicts between libraries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A virtual environment helps you keep each Python project separate on the same computer.

It lets you use specific versions of packages for each project without interfering with other projects or your system.

This logical separation makes it easy to manage multiple projects with different requirements at the same time.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ensure Python is installed:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;    &lt;span class="c"&gt;# or python3 --version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not, &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;download Python&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Virtual Environment Setup by OS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🖥 Windows
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Command Prompt or PowerShell&lt;/li&gt;
&lt;li&gt;Create a virtual environment
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv &lt;span class="nb"&gt;env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Replace &lt;code&gt;env&lt;/code&gt; with your desired environment name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Creating a Python Virtual Environment with a Specific Version
&lt;/h3&gt;

&lt;p&gt;Setting up a virtual environment with a specific Python version ensures your project dependencies remain isolated and compatible. Below are different ways to create a Environment using the version you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Using python3.x (Linux/macOS)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3.10 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a virtual environment named venv using Python 3.10 (if installed).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Using py -3.x (Windows)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;py &lt;span class="nt"&gt;-3&lt;/span&gt;.10 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the preferred way on Windows when managing multiple Python versions via the Python Launcher (py).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Activate the environment
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.&lt;span class="se"&gt;\e&lt;/span&gt;nv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Command Prompt : &lt;code&gt;env\Scripts\activate.bat&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Powershell : &lt;code&gt;env\Scripts\Activate.ps1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🍎 macOS / 🐧 Linux
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Terminal&lt;/li&gt;
&lt;li&gt;Create the virtual environment
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Activate the environment
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source env/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧪 Verify the Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;which python&lt;/code&gt;     # Linux/macOS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;where python&lt;/code&gt;     # Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You should see the path pointing to your local &lt;code&gt;env&lt;/code&gt; folder.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📁 Virtual Environment Directory Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project-folder/
│
├── env/                     # Virtual environment directory
│   ├── bin/ or Scripts/     # Executables (python, pip)
│   ├── include/             # Header files
│   ├── lib/                 # Installed packages
│   └── pyvenv.cfg           # Config file
│
├── main.py                  # Your Python script
└── requirements.txt         # Project dependencies (optional)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🐾 Steps to Setup a Project
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a project folder
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir myproject &amp;amp;&amp;amp; cd myproject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create the virtual environment
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m venv env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Activate it
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;### Windows
.\env\Scripts\activate

### macOS/Linux
source env/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install packages
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Freeze requirements
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run your Python program
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you activate environment it will show as shown in image:&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%2Fhucja913azg5vllanr9z.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%2Fhucja913azg5vllanr9z.jpg" alt="Virtual Env Sample" width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧾 Sample Program: main.py
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getpost&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Make a GET request to a public API
&lt;/span&gt;    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://jsonplaceholder.typicode.com/posts/1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Print the response content Json
&lt;/span&gt;    &lt;span class="c1"&gt;#print(response.json())
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Request was successful!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User ID{user_id} Title: {title} Body: {body}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;userId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Request failed with status code:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Check the status code
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status Code: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;getpost&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💡 Bonus Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To deactivate the environment:
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To delete the virtual environment:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm -rf env     # macOS/Linux
rmdir /s env   # Windows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use requirements.txt to share dependencies with teammates:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using a virtual environment keeps your Python projects clean and manageable. It’s an essential skill for every developer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One does not simply pip install without a virtual environment&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🚀 Fixing Tailwind Init Error in React (Vite) Projects</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Mon, 26 May 2025 19:04:29 +0000</pubDate>
      <link>https://dev.to/khushalsarode/fixing-tailwind-init-error-in-react-vite-projects-3ca7</link>
      <guid>https://dev.to/khushalsarode/fixing-tailwind-init-error-in-react-vite-projects-3ca7</guid>
      <description>&lt;p&gt;Integrating Tailwind CSS with a React + Vite project is usually smooth — but if you’ve run into an error during the &lt;code&gt;tailwindcss&lt;/code&gt; init process, don’t worry. This guide walks you through the right way to set up Tailwind, what causes the init error, and how to fix it quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 1: Create a React + Vite Project
&lt;/h2&gt;

&lt;p&gt;First, set up your React app using Vite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm create vite@latest &amp;lt;project_name&amp;gt; --template react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Prompts to follow:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project name:&lt;/strong&gt; &lt;code&gt;project_name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; React&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variant:&lt;/strong&gt; JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, navigate into your project and install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd tech-stack-suggestor
npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Step 2: Install Tailwind CSS
&lt;/h2&gt;

&lt;p&gt;Here’s where many developers hit the error. The standard command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -D tailwindcss postcss autoprefixer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fk2fh62mn12ehgunzoqg1.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%2Fk2fh62mn12ehgunzoqg1.jpg" alt="Installed Tailwind postcss autoprefixer" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, you may see an error during &lt;code&gt;tailwindcss init&lt;/code&gt;, especially if the Tailwind CLI version is mismatched or if PostCSS isn’t configured properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❌ The Problem: Tailwind Init Error
&lt;/h2&gt;

&lt;p&gt;In some cases, running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tailwindcss init -p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results in an error like:&lt;br&gt;
Fails silently without generating the &lt;code&gt;tailwind.config.js&lt;/code&gt; and &lt;code&gt;postcss.config.js&lt;/code&gt; files.&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%2Ftjkqd8kr6nfg9hezcgej.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%2Ftjkqd8kr6nfg9hezcgej.jpg" alt="Error while Init the tailwind config files" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm ERR! could not determine executable to run
npm ERR! A complete log of this run can be found in: C:\Users\HP.KHUSHALSARODE.000\AppData\Local\npm-cache\_logs\2025-05-26T16_52_47_671Z-debug-0.log

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 Cause:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The init command is no longer available in Tailwind CSS v4. For v3, 
make sure to use the correct version qualifier during installation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ The Fix: Specify Tailwind Version Explicitly
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -D tailwindcss@3.4.1 postcss autoprefixer
npx tailwindcss init -p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will correctly generate the &lt;code&gt;tailwind.config.js&lt;/code&gt; and &lt;code&gt;postcss.config.js&lt;/code&gt; files, resolving the init error.&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%2F28rlqy032n71ah6soflx.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%2F28rlqy032n71ah6soflx.jpg" alt="Config files generated successfully" width="678" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 3: Configure Tailwind
&lt;/h2&gt;

&lt;p&gt;Update &lt;code&gt;tailwind.config.js&lt;/code&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./index.html",
    "./src/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, update &lt;code&gt;./src/index.css&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@tailwind base;
@tailwind components;
@tailwind utilities;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure this CSS file is imported in your &lt;code&gt;main.jsx&lt;/code&gt; or &lt;code&gt;main.tsx&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import './index.css';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Step 4: Run Your App
&lt;/h2&gt;

&lt;p&gt;Now start the development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your Tailwind-powered React app should be live at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:5173

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>tailwindcss</category>
      <category>help</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Easily Manage Node.js Versions with NVM — Complete Setup + Tips (macOS, Linux, Windows)</title>
      <dc:creator>Khushal Sarode</dc:creator>
      <pubDate>Sat, 19 Apr 2025 21:06:47 +0000</pubDate>
      <link>https://dev.to/khushalsarode/easily-manage-nodejs-versions-with-nvm-complete-setup-tips-macos-linux-windows-17m6</link>
      <guid>https://dev.to/khushalsarode/easily-manage-nodejs-versions-with-nvm-complete-setup-tips-macos-linux-windows-17m6</guid>
      <description>&lt;h2&gt;
  
  
  ⚡ Manage Node.js Versions Easily with NVM
&lt;/h2&gt;

&lt;p&gt;Need to switch between different Node.js versions for different projects? &lt;strong&gt;NVM (Node Version Manager)&lt;/strong&gt; makes it quick and painless. With just a few commands, you can install, switch, and manage multiple Node versions on your system.&lt;/p&gt;

&lt;p&gt;Let’s get right to it — installation, usage, and some handy tips. &lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 What is NVM?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NVM&lt;/strong&gt; is a CLI tool to manage multiple Node.js versions — perfect for switching between projects or testing on different versions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ NVM supports:&lt;br&gt;
&lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Linux&lt;/strong&gt;, &lt;strong&gt;macOS&lt;/strong&gt;, &lt;strong&gt;WSL&lt;/strong&gt;, &lt;strong&gt;Cygwin&lt;/strong&gt;, and &lt;strong&gt;MSYS&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;⚠  Always restart your terminal after installation or configuration changes&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  On macOS/Linux:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install NVM using &lt;code&gt;curl&lt;/code&gt; or &lt;code&gt;wget&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add to your shell config (if not auto-added):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/nvm"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Then reload your shell:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc  &lt;span class="c"&gt;# or ~/.zshrc, depending on your shell&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To verify installation:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&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%2F9bt88urox4wkj6l23kh9.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%2F9bt88urox4wkj6l23kh9.jpg" alt="nvm version" width="637" height="160"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  On Windows:
&lt;/h2&gt;

&lt;p&gt;NVM-Windows (Recommended)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/coreybutler/nvm-windows" rel="noopener noreferrer"&gt;https://github.com/coreybutler/nvm-windows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ [ &lt;a href="https://github.com/coreybutler/nvm-windows/releases" rel="noopener noreferrer"&gt;Download nvm for windows&lt;/a&gt; ]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the &lt;code&gt;.exe&lt;/code&gt; installer.&lt;/li&gt;
&lt;li&gt;Run it and follow the setup steps.&lt;/li&gt;
&lt;li&gt;Open a new terminal and check:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! You're ready to manage Node.js versions on Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Version Available for Node.js Version Managers for Windows
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nodists/nodist" rel="noopener noreferrer"&gt;&lt;strong&gt;nodist&lt;/strong&gt;&lt;/a&gt; – Manages Node and npm versions.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jasongin/nvs" rel="noopener noreferrer"&gt;&lt;strong&gt;nvs&lt;/strong&gt;&lt;/a&gt; – Cross-platform manager with auto-switch and profiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Using NVM to Manage Node.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Check nvm version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install a Specific Node.js Version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="nx"&gt;specific&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nx"&gt;or&lt;/span&gt; 
&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;lts&lt;/span&gt;
            &lt;span class="nx"&gt;or&lt;/span&gt; 
&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List Installed Versions&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt; &lt;span class="nx"&gt;or&lt;/span&gt; &lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;remote&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Switch Between Node Versions&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use 16
&lt;/code&gt;&lt;/pre&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%2Fif4ebg6iwtylj8to0zu6.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%2Fif4ebg6iwtylj8to0zu6.jpg" alt="list available version" width="694" height="169"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set a default version globally:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;Set&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="nx"&gt;globally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update Node to the Latest Version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;reinstall&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;packages&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;
&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;alias&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the currently active Node.js version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;
&lt;/code&gt;&lt;/pre&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%2Fhda089cnzs2hlp519kof.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%2Fhda089cnzs2hlp519kof.jpg" alt="current version" width="613" height="106"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run a file using a specific Node.js version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nt"&gt;js&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
usage: nvm run 14 app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Execute a command using a specific Node.js version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
usage: nvm exec 16 npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the path to the Node.js binary for a version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uninstall a Version&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm uninstall 14.21.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚙️ Using Into project directory
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If need to switch version for project using node: &lt;br&gt;
Use a &lt;code&gt;.nvmrc&lt;/code&gt; file in your project directory to specify which Node version it requires:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;18.17.1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nvmrc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;nvm&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on &lt;code&gt;.nvmrc&lt;/code&gt; config file you want to change version runtime need to use node version switch with tool like &lt;a href="https://github.com/wbyoung/avn" rel="noopener noreferrer"&gt;https://github.com/wbyoung/avn&lt;/a&gt; [auto version switching] &lt;/p&gt;

&lt;p&gt;To install &lt;code&gt;avn&lt;/code&gt; and its plugin for &lt;code&gt;nvm&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g avn avn-nvm avn-n
avn setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Let’s focus on writing code — version conflicts? NVM’s got it covered! 😉&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
