<?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: Himanshu </title>
    <description>The latest articles on DEV Community by Himanshu  (@himanshuc3).</description>
    <link>https://dev.to/himanshuc3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F52545%2Fb790a984-f3a6-4226-8e2a-8fd84ba70859.jpg</url>
      <title>DEV Community: Himanshu </title>
      <link>https://dev.to/himanshuc3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/himanshuc3"/>
    <language>en</language>
    <item>
      <title>Tangible India - A journey through numbers</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Sun, 28 Sep 2025 22:21:33 +0000</pubDate>
      <link>https://dev.to/himanshuc3/tangible-india-a-journey-through-numbers-3761</link>
      <guid>https://dev.to/himanshuc3/tangible-india-a-journey-through-numbers-3761</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kendoreact-2025-09-10"&gt;KendoReact Free Components Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Tangible India – A journey through numbers&lt;/strong&gt;, an interactive web app that blends facts about India with numbers in a fun and engaging way.  &lt;/p&gt;

&lt;p&gt;The idea is simple yet impactful:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Numbers (0, 1, 2, 3, 1947, …) are the foundation of computer science and daily life.
&lt;/li&gt;
&lt;li&gt;For each number, the app presents a fascinating fact related to India — ranging from history, culture, geography, science, to modern-day achievements.&lt;/li&gt;
&lt;li&gt;As an additional category, memes have been added as categories since a lot of the knowledge movement and news is propagated through such measures.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns abstract digits into &lt;strong&gt;tangible insights&lt;/strong&gt;, helping users learn something new about India while exploring numbers sequentially or randomly.  &lt;/p&gt;

&lt;p&gt;It’s a &lt;strong&gt;learning + curiosity app&lt;/strong&gt; designed for students, educators, trivia lovers, and anyone interested in India.  &lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;Live Project:&lt;/strong&gt; &lt;a href="https://himanshuc3.github.io/tangible-india/" rel="noopener noreferrer"&gt;https://himanshuc3.github.io/tangible-india/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💻 &lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/himanshuc3/tangible-india" rel="noopener noreferrer"&gt;Tangible India - repository&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Screenshots:  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Title/Remarks&lt;/th&gt;
&lt;th&gt;Screenshot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Homepage (light theme)&lt;/td&gt;
&lt;td&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%2Fb65kvu3m0ltfogf2bgfk.png" alt="Light theme - homepage" width="800" height="710"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Homepage (dark theme)&lt;/td&gt;
&lt;td&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%2F46lbgqeimwmjky74ovir.png" alt="Dark theme - homepage" width="800" height="710"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Icons &amp;amp; tabbed navigation&lt;/td&gt;
&lt;td&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%2Fzkh3kqoctmy6jcu9jclm.png" alt="Tabbed Navigation" width="800" height="710"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  KendoReact Components Used
&lt;/h2&gt;

&lt;p&gt;I leveraged KendoReact's components as atomic components for creating the layout for Tangible India from scratch. The usage was restricted to the following components due to a lack of   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Button&lt;/strong&gt; – Used across the whole website for actions of triggering search, random fact generation etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVG Icons (plusOutlineIcon, minusOutlineIcon, etc.)&lt;/strong&gt; – The icon set offers a wide selection of custom icons along with the flexibilty to modify style according to the theme. Used in conjunction with buttons for accessibility and improving UX&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card&lt;/strong&gt; — This acts as a fundamental building block or a Poster in layman terms, for showing the Facts linked to each number. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input&lt;/strong&gt; – Used for getting user input for searching/filtering through available list of facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default Theme&lt;/strong&gt; – Used for importing the base theme used as design system and styles for each of the imported components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabStrip, TabStripTab&lt;/strong&gt; - Useful for displaying multiple facts across linked to the same number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AppBar, AppBarSection, AppBarSpacer&lt;/strong&gt; – The header used in the website is using this component as a building block for layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Popover&lt;/strong&gt; – Showing keyboard shortcuts via popover&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slider, SliderLabel&lt;/strong&gt; – The slider is a critical component giving a bird's eye view of the progression of number based facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooltip&lt;/strong&gt; – Used in defining unknown behavior, like "Want to contribute?" button in header &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChipList, Chip&lt;/strong&gt; - Categories displayed like "historical", "cultural" etc. are leveraging Chips and Chiplist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch&lt;/strong&gt; - Used as a theme toggle switch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Coding Assistant Usage
&lt;/h2&gt;

&lt;p&gt;I used an AI assistant to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suggest initial draft UI layouts to help avoid referencing API and start from 20-30% setup instead of 0%.

&lt;ul&gt;
&lt;li&gt;Generating the header using AppBar.&lt;/li&gt;
&lt;li&gt;The code for generating Slider for showing number progression.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Exploration for best component fit for the UI and UX required. 

&lt;ul&gt;
&lt;li&gt;Describing the UX for: functionality to select among different categories and getting relevant components present under the free tier of KendoReact and going ahead with ChipList. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges Faced using the AI Assistant
&lt;/h3&gt;

&lt;p&gt;While KendoReact AI Assistant (MCP server) does help in a couple of scenarios described above, it still feels in a nascent stage with retaining and differentiating between contexts. As an example, consider the following progression of events:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating Header using AppBar component with relevant context for the features and how the UX should look like.&lt;/li&gt;
&lt;li&gt;Improving a Search button component in Filter Component with an appropriate icon.&lt;/li&gt;
&lt;li&gt;Add a tabbed navigation to facts card for multiple facts linked to the same number.
&lt;strong&gt;MCP hallucination&lt;/strong&gt; — While all of these prompts are given as different chats and make modifications to different components, the code suggested by the Coding Assistant merges all of them to outputs a single component which is an aggregation of all the previous request outputs + the most recent code suggestion.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Components like Animation don't work very intuitively and infact, I skipped using it since the API is consuming and using it out of the box with the help of examples wasn't working.&lt;/p&gt;




&lt;p&gt;✨ With &lt;strong&gt;Tangible India&lt;/strong&gt;, I wanted to show how numbers can tell stories — and how React + KendoReact makes it easy to turn that vision into reality.  &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kendoreactchallenge</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Guide to svelte state for react dummies</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Mon, 07 Jul 2025 16:27:50 +0000</pubDate>
      <link>https://dev.to/himanshuc3/guide-to-svelte-state-for-react-dummies-2bei</link>
      <guid>https://dev.to/himanshuc3/guide-to-svelte-state-for-react-dummies-2bei</guid>
      <description>&lt;p&gt;Are you a legacy React developer?&lt;/p&gt;

&lt;p&gt;Have you heard of the chronicles of a once-mystical creature 👾 known as &lt;a href="https://react.dev/reference/react/Component" rel="noopener noreferrer"&gt;class based components&lt;/a&gt; in React?&lt;/p&gt;

&lt;p&gt;After spending so long exclusively in the React ecosystem — &lt;em&gt;with only brief forays into Vue.js and Angular&lt;/em&gt; — I almost feel confined, as if under house arrest. It's as if React has become a pandemic and developers its captive patients. Attempting to leave this ecosystem — which has admittedly served me well in terms of developer satisfaction and community standards reminiscent of Golang — feels like swimming against the current of &lt;a href="https://trends.stackoverflow.co/?tags=reactjs%2Cvue.js%2Cangular%2Csvelte%2Cangularjs%2Cvuejs3" rel="noopener noreferrer"&gt;global popularity trends.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrnkn03i9q9l3jc1dra6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrnkn03i9q9l3jc1dra6.png" alt=" " width="674" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait, let's pause for a moment… we're drifting from the topic. This isn't an angry rant about why you should abandon React and sail off to svelte land—I'll save those opinions for another day. While I'm not a svelte advocate (having barely dipped my toes in it), there is some evidence in &lt;a href="https://svelte.dev/blog/virtual-dom-is-pure-overhead" rel="noopener noreferrer"&gt;svelte's blog&lt;/a&gt; and a single &lt;a href="https://news.ycombinator.com/item?id=37586203" rel="noopener noreferrer"&gt;Hacker News thread&lt;/a&gt; about the modest runtime performance benefits of svelte over React —though a 95% decrease in bundle size is nothing to laugh at.&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%2F4y8m6du46ue024meuew7.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%2F4y8m6du46ue024meuew7.jpg" alt=" " width="281" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The purpose of this article is to provide an exhaustive guide on the dos, don'ts, and gotchas of local component-level state management in svelte. I was recently influenced by &lt;a href="https://academypublisher.in/2024/10/07/the-yellow-house/" rel="noopener noreferrer"&gt;the yellow house&lt;/a&gt; — while the column explores Van Gogh's artwork and its psychological implications — my takeaways from it gave me the notion (&lt;a href="https://www.notion.com/" rel="noopener noreferrer"&gt;also&lt;/a&gt;, the &lt;em&gt;editor of choice&lt;/em&gt; for writing this article) that drawing parallels from our experiences is the most effective way of learning and moving forward.&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%2F5vhd12vais99o8rie23w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vhd12vais99o8rie23w.png" alt="Empericism" width="273" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Defining the scope
&lt;/h2&gt;

&lt;p&gt;As much as I'd like to cover the intricacies of event handling, idiomatic design patterns, and dive into the internals of svelte, these topics are already well-documented in &lt;a href="https://svelte.dev/docs" rel="noopener noreferrer"&gt;svelte's docs&lt;/a&gt; for those willing to take a deep dive. Instead, we'll focus our exploration on answering these key questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does state management work 💪 and what are runes?&lt;/li&gt;
&lt;li&gt;❓ How does reactivity work?&lt;/li&gt;
&lt;li&gt;What causes dependencies of state to update?&lt;/li&gt;
&lt;li&gt;🪝 How to make custom &lt;code&gt;react-like&lt;/code&gt; hooks in svelte?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's get started 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s Rune your day
&lt;/h2&gt;

&lt;p&gt;Runes constitute the &lt;strong&gt;primary tools&lt;/strong&gt; for &lt;strong&gt;state management&lt;/strong&gt; in svelte. To quote from the &lt;a href="https://svelte.dev/docs/svelte/what-are-runes" rel="noopener noreferrer"&gt;official svelte docs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you think of svelte as a language, runes are part of the syntax — they are keywords.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our exploration will be limited to the following set of runes: &lt;code&gt;$state&lt;/code&gt;, &lt;code&gt;$derived&lt;/code&gt; and &lt;code&gt;$effect&lt;/code&gt;. Starting with a snippet of code, we have the same functionality implemented in svelte and React. The annotations highlight the &lt;strong&gt;1:1 mapping&lt;/strong&gt; between syntax in the two libraries (Even though svelte is a framework, we’ll refer to it as a library for the purposes of this article).&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%2Fjz3ncgqqqotedcakhx7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ncgqqqotedcakhx7x.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ll break down the code piece by piece to highlight the key differences and potential gotchas, so you’re not caught off guard at work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Runes were introduced in &lt;code&gt;v5&lt;/code&gt; — the latest major version at the time of writing this article. All&lt;br&gt;
  state can be safely migrated to use runes, with the added benefit of improved performance. The&lt;br&gt;
  official migration guide is available &lt;a href="https://svelte.dev/docs/svelte/v5-migration-guide" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  State reactivity using proxies
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Fig. 1&lt;/strong&gt;, we declare and initialize a local store using &lt;code&gt;$state(0)&lt;/code&gt;. Under the hood, svelte sets up a &lt;strong&gt;proxy&lt;/strong&gt; to enable reactivity. In simple terms, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy" rel="noopener noreferrer"&gt;proxy&lt;/a&gt; intercepts any read or write operations on the state object. The state is consumed in a way that feels similar to React, although updating state in svelte often requires a slight mental shift to get used to.&lt;/p&gt;

&lt;p&gt;In svelte, state is &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Mutable" rel="noopener noreferrer"&gt;mutable&lt;/a&gt;, irrespective of it's value being a primitive or an object. This is demonstrated in &lt;strong&gt;Fig. 1&lt;/strong&gt; (&lt;strong&gt;Point 3)&lt;/strong&gt; using &lt;code&gt;upvotes++&lt;/code&gt;. This mutation updates the state and triggers a UI re-render in the next animation frame — similar to React’s &lt;code&gt;setState(upvotes + 1)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sweet! Let’s move on to other syntax features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deprecating &lt;code&gt;$:&lt;/code&gt; in favor of &lt;code&gt;$derived&lt;/code&gt; &amp;amp; &lt;code&gt;$effect&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;In svelte, any variables or functions defined &lt;strong&gt;outside of runes&lt;/strong&gt; are declared and run exactly once when the &lt;strong&gt;component is initialized&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;upvotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$state&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;derivedDoubled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$derived&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;doubled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;$effect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are a &lt;a href="https://svelte.dev/playground/46af7389a13c4f70ad5c751cb1228715" rel="noopener noreferrer"&gt;few points to note from the snippet&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;$effect&lt;/code&gt; — acts as a drop-in replacement for &lt;code&gt;useEffect&lt;/code&gt;, with runtime fine-grained dependency tracking.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;derivedDoubled&lt;/code&gt; uses &lt;code&gt;$derived&lt;/code&gt; — it automatically updates based on variables referenced in the expression &lt;code&gt;upvotes.count * 2&lt;/code&gt;. According to the svelte docs, it updates synchronously using &lt;em&gt;push-pull reactivity&lt;/em&gt;, ensuring that any function accessing derived state receives consistent values in sync with its dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;doubled&lt;/code&gt;&lt;/strong&gt; — remains unchanged when &lt;code&gt;upvotes.count&lt;/code&gt; updates, behaving similarly to React’s &lt;code&gt;useRef&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ Use &lt;a href="https://svelte.dev/docs/svelte/$derived#$derived.by" rel="noopener noreferrer"&gt;&lt;code&gt;derived.by(fn)&lt;/code&gt;&lt;/a&gt; for more complex&lt;br&gt;
  logic instead of the shorthand &lt;code&gt;derived(expression)&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Reactivity is fine-grained
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;upvotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$state&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nf"&gt;$effect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Voting has completed`&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Voting not completed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onclick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://svelte.dev/playground/9f44e80e72f24e0baa2a8d9f798afc35" rel="noopener noreferrer"&gt;In the example above&lt;/a&gt;, we’ve modified the upvotes &lt;code&gt;$state&lt;/code&gt; from &lt;strong&gt;number&lt;/strong&gt; to &lt;strong&gt;object&lt;/strong&gt; . To follow :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We’re incrementing the &lt;code&gt;count&lt;/code&gt; property.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;$effect&lt;/code&gt; to log whether the voting has completed — similar to &lt;code&gt;useEffect&lt;/code&gt; in react.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since only &lt;code&gt;upvotes.completed&lt;/code&gt; is consumed in the &lt;code&gt;$effect&lt;/code&gt; block, it is not executed if &lt;code&gt;upvotes.count&lt;/code&gt; is updated. This check is dynamically done at runtime, similar to useEffect. This is called &lt;code&gt;key&lt;/code&gt; level granularity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Voting has completed`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Voting not completed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;upvotes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key Takeaways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;$effect&lt;/code&gt; &lt;strong&gt;observes the reactive signals&lt;/strong&gt; (&lt;code&gt;$state&lt;/code&gt;, &lt;code&gt;$derived&lt;/code&gt;, etc.) &lt;strong&gt;while executing&lt;/strong&gt; its expression. That means dependencies are dynamically detected during the function call—not inferred during build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prevent unncessary re-renders&lt;/strong&gt; — The child components consuming &lt;code&gt;upvotes.completed&lt;/code&gt; will not be re-rendered due to shallow comparison of props.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;React offers better visibility into reactive statement while svelte works for the user with&lt;br&gt;
cleaner syntax and implicitly takes care of the dependencies.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ Svelte optimizes away redundant assignments such as &lt;code&gt;upvotes.count = upvotes.count&lt;/code&gt; or&lt;br&gt;
  &lt;code&gt;upvotes.count += 0&lt;/code&gt; will invalidate state updates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Synchronous state updates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Task&lt;/strong&gt; — We want to execute &lt;code&gt;fetchCountLogs&lt;/code&gt; immediately on update of &lt;code&gt;upvotes.counts&lt;/code&gt; . In React, we couldn’t directly use the next state due to asynchronous updates. Therefore, we are bound to create a new variable called &lt;code&gt;newUpvotes&lt;/code&gt; which needs to be referenced everywhere if we were to use the updated value of &lt;code&gt;upvotes.count&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo52w7qctlu8jq7v5sgg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo52w7qctlu8jq7v5sgg1.png" alt=" " width="772" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;svelte takes a different approach, decoupling state updates from batched DOM re-renders. This allows &lt;code&gt;fetchCountLogs&lt;/code&gt; to run immediately after incrementing the value of &lt;code&gt;upvotes.count&lt;/code&gt; , consuming the latest value of the state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overriding immutable reactivity in &lt;code&gt;$derived&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Coming to the fourth point mentioned in &lt;strong&gt;Fig. 1&lt;/strong&gt;, derived state is rarely mutated manually and therefore declared as a &lt;code&gt;const&lt;/code&gt; in 99% of usecases. A rare case, mentioned in &lt;a href="https://svelte.dev/docs/svelte/$derived#Overriding-derived-values" rel="noopener noreferrer"&gt;svelte docs&lt;/a&gt;, displays the case of optimistic UI updates, where we want to override &lt;code&gt;$derived&lt;/code&gt; manually, hence declaring it as &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;While it helps make the website feel snappy, it should be used in &lt;strong&gt;rare instances&lt;/strong&gt; and in features which aren’t critical to write failures. &lt;strong&gt;For Example&lt;/strong&gt;, liking a video on youtube can have optimistic updates, since the count is an estimate to begin with while commenting on the post could only be shown as sent when the server request is marked completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  An alternative to custom &lt;code&gt;react-like&lt;/code&gt; hooks
&lt;/h2&gt;

&lt;p&gt;By now, we already have all the tools required for creating custom hooks using &lt;code&gt;runes&lt;/code&gt;. It’s a straightforward vanilla solution with an uncanny resemblance to react hooks syntax. I’ve implemented a &lt;code&gt;usePrevious&lt;/code&gt; hook which tracks the previous value of the state variable using runes.&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%2Fc17e6nen0xqy2bx6htlr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc17e6nen0xqy2bx6htlr.png" alt=" " width="425" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working version for the above example is present &lt;a href="https://svelte.dev/playground/b21a77e18b314f2a85d2a28412ae9d8d" rel="noopener noreferrer"&gt;here&lt;/a&gt;. There’s a bunch of commonly used hooks implemented on this &lt;a href="https://userunes.com/explore" rel="noopener noreferrer"&gt;website&lt;/a&gt; in both javascript &amp;amp; typescript . Happy hunting :)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is worth noticing that &lt;code&gt;runes&lt;/code&gt; can only be used in files with extension &lt;code&gt;svelte.{(ts, js)}&lt;/code&gt; .&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What lies ahead?
&lt;/h2&gt;

&lt;p&gt;Despite having discussed exhaustively about the properties of component state management and reactivity, there’s certain topics necessary to make your life easier working with svelte:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Managing global state using svelte stores (next part in the series, hopefully)&lt;/li&gt;
&lt;li&gt;Updating &lt;em&gt;parent state from child components&lt;/em&gt; leveraging &lt;code&gt;$props&lt;/code&gt; &amp;amp; &lt;code&gt;$bindable&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bypassing deep reactivity&lt;/strong&gt; using &lt;code&gt;$state.raw&lt;/code&gt; &amp;amp; &lt;code&gt;$state.snapshot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Handling &lt;a href="https://svelte.dev/playground/bee667bc01d44d4197322007febc3773" rel="noopener noreferrer"&gt;direct DOM mutations&lt;/a&gt; based on state updates using &lt;a href="https://svelte.dev/docs/svelte/lifecycle-hooks#tick" rel="noopener noreferrer"&gt;tick&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Resetting component and it’s state using &lt;a href="https://svelte.dev/docs/svelte/key" rel="noopener noreferrer"&gt;key blocks&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this article helped you understand the basics of runes and state management—and instilled some confidence to support your journey toward becoming a &lt;strong&gt;svelte wizard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to comment on what you liked, disliked or hated. Or reach out directly on &lt;a href="https://x.com/_himanshuc3" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://thoughtspile.github.io/2023/04/22/svelte-state/" rel="noopener noreferrer"&gt;Vladimir Klepov&lt;/a&gt; Highly recommend his deep dive into svelte reactivity&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://svelte.dev/docs" rel="noopener noreferrer"&gt;Svelte Docs&lt;/a&gt; to get lost in the rabit hole of the framework&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy" rel="noopener noreferrer"&gt;MDN Docs&lt;/a&gt; It's more than just documentation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://imgs.xkcd.com/comics/dependency.png" rel="noopener noreferrer"&gt;XKCD Comics&lt;/a&gt; While &lt;a href="https://xkcd.com/2855/" rel="noopener noreferrer"&gt;Empericism&lt;/a&gt; was more apt for the article, one of my favorites is a take on the fragile nature of proprietary projects&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://academypublisher.in/2024/10/07/the-yellow-house/" rel="noopener noreferrer"&gt;Shymanta D, Dyutimitra S.&lt;/a&gt; The Yellow House is one of numerous psychological case studies, distinguished by its clean and concise presentation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://userunes.com/" rel="noopener noreferrer"&gt;UseRunes&lt;/a&gt; - Explore custom hooks&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>svelte</category>
      <category>react</category>
    </item>
    <item>
      <title>💸 Anti-Salesman - My personal Smart Purchase Advisor &amp; Deal Forecaster</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Tue, 24 Jun 2025 20:03:38 +0000</pubDate>
      <link>https://dev.to/himanshuc3/anti-salesman-my-personal-smart-purchase-advisor-deal-forecaster-2lc9</link>
      <guid>https://dev.to/himanshuc3/anti-salesman-my-personal-smart-purchase-advisor-deal-forecaster-2lc9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/runnerh"&gt;Runner H "AI Agent Prompting" Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;An autonomous AI agent that helps users plan smart purchases for any product by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧐 Researching historical pricing trends&lt;/li&gt;
&lt;li&gt;🏷️ Identifying upcoming sales&lt;/li&gt;
&lt;li&gt;🤑 Estimating price drop forecasts and potential savings&lt;/li&gt;
&lt;li&gt;⏳ Suggesting the best time to buy&lt;/li&gt;
&lt;li&gt;👉 Recommend relevant alternatives for the product enquired about&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h4&gt;
  
  
  Video Demo
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://drive.google.com/file/d/1qzpWBunXu7eqQ2O0JvRGaPVpm86lYUEC/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1qzpWBunXu7eqQ2O0JvRGaPVpm86lYUEC/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://runner.hcompany.ai/chat/066726f9-3cda-43b1-bc6e-a6be9661c740/share" rel="noopener noreferrer"&gt;Runner-H Prompt&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Screenshots
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Title/Description&lt;/th&gt;
&lt;th&gt;Screenshot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sample Prompt&lt;/td&gt;
&lt;td&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%2F2wa18xe3hprwtkbs3dxq.png" alt=" " width="800" height="487"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document created in Runner-H&lt;/td&gt;
&lt;td&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%2Fjr61qg0gxrscdk7numes.png" alt=" " width="800" height="487"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output generated with Google Docs integration&lt;/td&gt;
&lt;td&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%2Fipui1r48uc9pkx5jgqry.png" alt=" " width="800" height="487"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mail integration used to recieve the generated Google Docs&lt;/td&gt;
&lt;td&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%2Fjl08jjlnra847ic7080u.png" alt=" " width="800" height="487"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Prompt generation
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;The below prompt is slightly different than the one used in the video. It is improved, more detailed and gives better results compared to the one used for recording the video.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;I’m considering buying Iphone 15 [product to buy] and want to make a financially smart decision. Your role is to act as my Smart Purchase Advisor. I live in India [location for context]. Here’s what I want you to do step-by-step for any product I give you (either by name or link):

🔍 1. Research Current Prices
Search for the product across major Indian e-commerce platforms (Amazon, Flipkart, Croma, Reliance Digital, etc.) and return:
&lt;span class="p"&gt;-&lt;/span&gt; Product name
&lt;span class="p"&gt;-&lt;/span&gt; Platform
&lt;span class="p"&gt;-&lt;/span&gt; Current selling price
&lt;span class="p"&gt;-&lt;/span&gt; Link to listing
&lt;span class="p"&gt;-&lt;/span&gt; Seller name (if available)
Present this data in a clean table or list.

📈 2. Analyze Historical Price Trends
&lt;span class="p"&gt;-&lt;/span&gt; Use public sources like Keepa (Amazon), price tracker APIs, or summaries from past sales to answer:
&lt;span class="p"&gt;-&lt;/span&gt; What was the lowest recorded price in the past 6–12 months?
&lt;span class="p"&gt;-&lt;/span&gt; How much did it drop during past major sales (e.g., Diwali, Amazon Great Indian Festival, Prime Day)?
&lt;span class="p"&gt;-&lt;/span&gt; What has been the average price fluctuation in recent months?
&lt;span class="p"&gt;-&lt;/span&gt; Include clear pricing insights (e.g., “Price usually drops by 12–18% during Diwali sales.”).

📅 3. Detect Upcoming Sales
&lt;span class="p"&gt;-&lt;/span&gt; Based on the product category and current month, identify the next relevant sales or discounts.
&lt;span class="p"&gt;-&lt;/span&gt; For India, focus on: Amazon/Flipkart sales (e.g., Big Billion Days, Prime Day, Independence Day)
&lt;span class="p"&gt;-&lt;/span&gt; Festival discounts (Diwali, Raksha Bandhan, Republic Day)
&lt;span class="p"&gt;-&lt;/span&gt; Global deals (Black Friday, Cyber Monday, if international delivery is relevant)
&lt;span class="p"&gt;-&lt;/span&gt; Mention: Sale Name, Approximate Dates, Product types typically discounted in that sale

💸 4. Forecast Expected Price &amp;amp; Recommend
&lt;span class="p"&gt;-&lt;/span&gt; Based on the price trend and upcoming sales:
&lt;span class="p"&gt;-&lt;/span&gt; Predict a likely sale price during the next event
&lt;span class="p"&gt;-&lt;/span&gt; Estimate how much I could save
&lt;span class="p"&gt;-&lt;/span&gt; Make a recommendation: “Buy Now”, “Wait for [Sale Name]”, or “No major discounts expected, safe to buy now.”

Provide a one-line summary like:
“Waiting 3 weeks for the Diwali sale could save you ₹4,500 (~15%) on this product.”

📤 5. Export Results to Google Sheet
Update the following columns in a sheet titled Smart Purchase Tracker (create it if not already present):
&lt;span class="p"&gt;-&lt;/span&gt; Product Name
&lt;span class="p"&gt;-&lt;/span&gt; Platform
&lt;span class="p"&gt;-&lt;/span&gt; Current Price
&lt;span class="p"&gt;-&lt;/span&gt; Estimated Sale Price
&lt;span class="p"&gt;-&lt;/span&gt; Savings Amount
&lt;span class="p"&gt;-&lt;/span&gt; Best Time to Buy
&lt;span class="p"&gt;-&lt;/span&gt; Recommendation

📧 6. Send Me a Summary
Send a short summary (3–4 bullet points + recommendation) via email or Slack, formatted like:

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Used Runner H
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Use Case &amp;amp; Impact
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Smart Purchase Advisor &amp;amp; Deal Forecaster&lt;/em&gt; addresses a common pain point for millions of online shoppers — not knowing the best time to buy a product and often missing out on significant discounts during major sales.&lt;/p&gt;

&lt;h4&gt;
  
  
  👤 Who Benefits:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Everyday consumers&lt;/strong&gt; who want to save money while shopping online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Students and budget-conscious buyers&lt;/strong&gt; who carefully time purchases (e.g., laptops, smartphones, books).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deal hunters and e-commerce enthusiasts&lt;/strong&gt; who track prices across multiple platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal finance advocates&lt;/strong&gt; who encourage mindful spending.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💡 Real-World Applications:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Tracks historical pricing patterns using data sources like Keepa or CamelCamelCamel.&lt;/li&gt;
&lt;li&gt;Identifies region-specific sale events (like Diwali, Black Friday, Prime Day, etc.).&lt;/li&gt;
&lt;li&gt;Forecasts potential savings and makes a clear “Buy Now or Wait” recommendation.&lt;/li&gt;
&lt;li&gt;Sends updates via Slack or email and maintains a log in Google Sheets for multi-product tracking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🚀 Impact:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saves users time&lt;/strong&gt; by automating comparison shopping and research.&lt;/li&gt;
&lt;li&gt;Increases &lt;strong&gt;purchase confidence&lt;/strong&gt; with data-backed forecasts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduces impulse buying&lt;/strong&gt; by encouraging smarter, strategic purchases.&lt;/li&gt;
&lt;li&gt;Adds &lt;strong&gt;financial literacy&lt;/strong&gt; by showing price trends and historical savings patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of manually checking 3+ sites and waiting for unpredictable discounts, users can now rely on an autonomous agent to handle all the research and notify them exactly when to act — making online shopping both smarter and stress-free.&lt;/p&gt;

&lt;h3&gt;
  
  
  Social Love
&lt;/h3&gt;



&lt;blockquote&gt;
&lt;br&gt;
&lt;p&gt;Save your money by visiting my AI agent workflow powered by Runner-H: &lt;a href="https://t.co/CEu5w7qRPf" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://t.co/CEu5w7qRPf" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://t.co/CEu5w7qRPf" rel="noopener noreferrer"&gt;https://t.co/CEu5w7qRPf&lt;/a&gt;&lt;br&gt;P.S. Don't be shy sharing your opinions, improvements and potential savings on and from the workflow 😉 &lt;a href="https://t.co/E4hTZoHohD" rel="noopener noreferrer"&gt;pic.twitter.com/E4hTZoHohD&lt;/a&gt;&lt;/p&gt;— Himanshu (@_himanshuc3) &lt;a href="https://twitter.com/_himanshuc3/status/1937596731576975765?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;June 24, 2025&lt;/a&gt;&lt;br&gt;
&lt;/blockquote&gt; 

&lt;ul&gt;
&lt;li&gt;Switch over to X and see what folks are creating using &lt;a href="https://x.com/_himanshuc3/status/1937596731576975765" rel="noopener noreferrer"&gt;Runner-H&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Want to collaborate? &lt;a href="https://himanshusb.in" rel="noopener noreferrer"&gt;Visit my portfolio&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>runnerhchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>🌲 Git better at ignore-ing</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Sun, 08 Jun 2025 19:36:39 +0000</pubDate>
      <link>https://dev.to/himanshuc3/git-better-at-ignore-ing-5cmf</link>
      <guid>https://dev.to/himanshuc3/git-better-at-ignore-ing-5cmf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Let’s consider a relatable (albeit slightly exaggerated) scenario.&lt;/strong&gt;&lt;br&gt;
It’s been a long, chaotic day—packed with &lt;em&gt;code reviews&lt;/em&gt;, endless &lt;em&gt;brainstorming sessions&lt;/em&gt;, and a &lt;em&gt;CI pipeline&lt;/em&gt; that seems determined to sabotage your simple one-line bug fix for an entire week. If only this were fiction.&lt;/p&gt;

&lt;p&gt;Amidst the madness, you finally get a notification—someone reviewed your PR. But to your dismay, it’s just one comment. And not even a meaningful one. It’s about a rogue change in a shared config &lt;code&gt;file—env&lt;/code&gt;, &lt;code&gt;config.js&lt;/code&gt;, &lt;code&gt;playwright.config.js&lt;/code&gt;, or the dreaded &lt;code&gt;package.json&lt;/code&gt;—one of those files that sneaked into your commit unnoticed.&lt;/p&gt;

&lt;h2&gt;
  
  
  🥁 Enters update-index
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;git update-index&lt;/code&gt; command updates the index - staging area - entries for one or more files. In simpler terms, it helps you git ignore files valid only to your local index - unlike &lt;code&gt;.gitignore&lt;/code&gt;, which ignores files for every user commiting to that repo.&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%2Fngxk6dc1qfmkmjl84r3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngxk6dc1qfmkmjl84r3a.png" alt="Using update index" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 What this does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🛑 Git &lt;em&gt;stops tracking changes&lt;/em&gt; to &lt;code&gt;package.json&lt;/code&gt; (locally).&lt;/li&gt;
&lt;li&gt;⏳ You can still pull updates from the repo without needing to stash your changes.&lt;/li&gt;
&lt;li&gt;🙌 Your local changes &lt;em&gt;won’t show up&lt;/em&gt; in &lt;code&gt;git status&lt;/code&gt;, and you won’t accidentally commit them.&lt;/li&gt;
&lt;li&gt;🛟 &lt;em&gt;Persists across branch&lt;/em&gt; changes on your local.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s an alternative flag called &lt;code&gt;--assume-unchanged&lt;/code&gt; which achieves a similar function, they defer slightly in how they work in git internals.&lt;/p&gt;

&lt;p&gt;While in 90% of your use cases, you’ll make do with &lt;code&gt;skip-worktree&lt;/code&gt;, here’s a general brief of they differ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--assume-unchanged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Hint to Git&lt;/strong&gt;: "I won’t change this file"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--skip-worktree&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Directive to Git&lt;/strong&gt;: "Ignore my local edits"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;Note.&lt;/strong&gt; If the file shouldn’t be tracked at all (for everyone), use &lt;code&gt;.gitignore&lt;/code&gt; instead.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>todayilearned</category>
      <category>git</category>
      <category>bash</category>
    </item>
    <item>
      <title>⚡️ MEAN vs MERN</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Thu, 31 May 2018 07:54:31 +0000</pubDate>
      <link>https://dev.to/himanshuc3/-mean-vs-mern-1816</link>
      <guid>https://dev.to/himanshuc3/-mean-vs-mern-1816</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03wqhabnb7om9jr5ye0l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03wqhabnb7om9jr5ye0l.gif" alt="MERN vs MEAN" width="372" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think the graphic should have been the other way around 😜, as facebook has been busting google's open source community thrive since it has wanted to try its hand at OSS. Couldn't find one on giphy 👀, happy to have suggestions in comments. &lt;/p&gt;




&lt;h1&gt;
  
  
  The infamous topic
&lt;/h1&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%2Fpnjjp3a7ljp3cw1t25it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnjjp3a7ljp3cw1t25it.png" alt="Angular vs React" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This escalated quickly. See what I did there.&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;MERN / MEAN = R / A.&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
 So, it all boils down to the number of people using React/angular or wanting to learn React/Angular.&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%2F6u84ln5fqxp7j1d359mv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6u84ln5fqxp7j1d359mv.png" alt="Angular vs React stats" width="800" height="489"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Note: For In-depth comparison: &lt;a href="https://www.similartech.com/compare/angular-js-vs-react-js" rel="noopener noreferrer"&gt;Angular-React faceoff&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Please give a ♥️ and a 🦄 to &lt;a href="https://dev.to/himanshuc3/entry-livetable-5h3o"&gt;Livetable&lt;/a&gt;&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;if you like this post. And hopefully you could have a unicorn one day ( I'm skeptical about it. Like I'm skeptical about deadpool ever making it into a X-men movie. But I'm hopeful. And so should you be)&lt;/p&gt;




&lt;h1&gt;
  
  
  Showdown
&lt;/h1&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%2F8wbeibxr0mexm9ffgxap.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wbeibxr0mexm9ffgxap.gif" alt="faceoff" width="480" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React is on the rise but angular has stuck around and proven its worth. Both are fantastic as everyone would expect coming from top tech industries. Both have technical advantages over each other. React though having easier learning curve than angular. Both have jobs in industry. So, coming to the end of this useless post, I think it should be the users of this tech and future front-end entusiasts who decide the fate of who's gonna be more popular.&lt;/p&gt;

&lt;p&gt;You guys can &lt;strong&gt;vote&lt;/strong&gt; right on &lt;strong&gt;this post&lt;/strong&gt; with a ♥️ for this post suggesting you &lt;strong&gt;favor React&lt;/strong&gt; and a 🦄 suggesting &lt;strong&gt;Angular is the way to go&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Leave your &lt;strong&gt;comments&lt;/strong&gt; down below for some &lt;strong&gt;explanation&lt;/strong&gt; for whomsoever you are supporting. I would love to hear them out as much as would be the &lt;strong&gt;people confused in choosing between them&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>react</category>
      <category>angular</category>
    </item>
    <item>
      <title>Livetable</title>
      <dc:creator>Himanshu </dc:creator>
      <pubDate>Tue, 15 May 2018 07:28:41 +0000</pubDate>
      <link>https://dev.to/himanshuc3/entry-livetable-5h3o</link>
      <guid>https://dev.to/himanshuc3/entry-livetable-5h3o</guid>
      <description>&lt;h1&gt;
  
  
  What I built
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VQveIMl4fwQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This is a common room timetable building PWA in which people who have common problems to solve can decide how to allocate time synchronously. For example, suppose a tuition group have a group of students with different schedules trying to set the optimal time to take their common tuition classes. They can go to this app, make there own room and then arrange their timetable. I intend to build a ton of more features in it but right now due to end term exams I'm afraid this is my entry.&lt;/p&gt;

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

&lt;p&gt;Project is deployed on heroku: &lt;a href="https://mysterious-beach-92009.herokuapp.com/" rel="noopener noreferrer"&gt;https://mysterious-beach-92009.herokuapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Features like responsive design, UI design, loading animations, custom features related to timetable manipulation have not been added till now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to 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://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/himanshuc3" rel="noopener noreferrer"&gt;
        himanshuc3
      &lt;/a&gt; / &lt;a href="https://github.com/himanshuc3/LiveTable" rel="noopener noreferrer"&gt;
        LiveTable
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Realtime Timetable scheduling. Could be used by freelancers :)
    &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;LiveTable&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Realtime Timetable scheduling. Could be used by freelancers.&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deployed on: &lt;a href="https://mysterious-beach-92009.herokuapp.com/" rel="nofollow noopener noreferrer"&gt;https://mysterious-beach-92009.herokuapp.com/&lt;/a&gt;
&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;How to Contribute&lt;/h1&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Fork and Clone the project.&lt;/li&gt;
&lt;li&gt;Install the dependencies. There are 2 package.json files - 1 for node/express server and 1 for react app.
&lt;code&gt;npm i&lt;/code&gt; in root folder. Then &lt;code&gt;cd&lt;/code&gt; into client and again &lt;code&gt;npm i&lt;/code&gt; packages.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm run dev&lt;/code&gt; on cmd to run express server and react server concurrently - proxy implied.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;NOTE: react server runs on localhost:3000 and express server runs on &lt;a href="http://localhost:5000" rel="nofollow noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Tech Stack&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;React, Express.&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Redux, cors, redux-thunk etc.&lt;/h3&gt;

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



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/himanshuc3/LiveTable" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Ton of refactoring left to be done!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it (what's the stack? did I run into issues or discover something new along the way?)
&lt;/h2&gt;

&lt;p&gt;MERN Stack:&lt;/p&gt;

&lt;p&gt;Front End - React&lt;br&gt;
Front End libraries - moment, cleave.js, nuka carousel, rodal, react-timetable-events&lt;br&gt;
Back End - Node, Express&lt;br&gt;
Realtime Communication achieved through - pusher😍&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Mongo not integrated right now as right now its a demo app and I didn't have much time too. But surely OAuth will come into play and so will mongo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Issues I came across:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Setting up MERN stack: I've worked with React and Express before. But not combined. Managing two different servers, 1 for react and 1 for Express was a little tricky and challenging at the started, but I conquered it. Thanks to this &lt;strong&gt;challenge&lt;/strong&gt; for that.&lt;/li&gt;
&lt;li&gt;Research: I first tried building my own scheduler. Failed. Tried another one quickly. Failed. And 3 more tries later found the correct library. Lesson: Research saves a ton of time.&lt;/li&gt;
&lt;li&gt;Pusher: It was really hard..... Nah, I was kidding. Pusher integrated smoothly. Hardly wrote 5-6 lines for integration.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Additional Resources/Info
&lt;/h1&gt;

&lt;p&gt;Additional Resources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Found the website undraw.co during development. There were some pretty sweet illustrations there.&lt;/li&gt;
&lt;li&gt;Bootstrapping an idea is easier than I thought. Some hickups, but I take them with both hands open. &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>pushercontest</category>
      <category>timetable</category>
      <category>mern</category>
      <category>heroku</category>
    </item>
  </channel>
</rss>
