<?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: Shaunak Das</title>
    <description>The latest articles on DEV Community by Shaunak Das (@shaunak_38).</description>
    <link>https://dev.to/shaunak_38</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%2F2883347%2F37bdc27a-24b6-474f-8eaf-a32acadc94f2.jpeg</url>
      <title>DEV Community: Shaunak Das</title>
      <link>https://dev.to/shaunak_38</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shaunak_38"/>
    <language>en</language>
    <item>
      <title>My Takeaways from Anthropic's MCP Session</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Wed, 19 Mar 2025 12:04:49 +0000</pubDate>
      <link>https://dev.to/shaunak_38/my-takeaways-from-anthropics-mcp-session-1olb</link>
      <guid>https://dev.to/shaunak_38/my-takeaways-from-anthropics-mcp-session-1olb</guid>
      <description>&lt;p&gt;Hey there, fellow developers! I recently watched a YouTube session by Anthropic about the &lt;strong&gt;Model Control Protocol (MCP)&lt;/strong&gt;, and I couldn’t resist taking some handwritten notes to capture the key points. I’ve included those sketches below for reference (converted hand sketched diagrams to eraser diagrams), and if you want to check out the session yourself, you can find it &lt;a href="https://youtu.be/kQmXtrmQ5Zg?si=75oosvIDu33_OKAA" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;MCP is a fascinating topic that ties together &lt;em&gt;AI&lt;/em&gt;, &lt;em&gt;agents&lt;/em&gt;, and seamless integration with &lt;em&gt;tools&lt;/em&gt; and &lt;em&gt;data sources&lt;/em&gt;, so let’s dive into what I learned!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Caught My Attention&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The big idea that grabbed me was this: &lt;strong&gt;models are only as good as the context provided to them&lt;/strong&gt;. It’s a simple but powerful reminder that even the most advanced AI needs the right data and tools to deliver useful results. &lt;/p&gt;

&lt;p&gt;If the input’s lacking, the output won’t be much better—no matter how smart the model is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding MCP at a Glance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP is described as an &lt;strong&gt;open protocol&lt;/strong&gt; that enables smooth integration between AI agents, tools, and data sources. Here’s what I noted down:&lt;/p&gt;

&lt;p&gt;It standardizes how AI applications interact with external systems, covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Prompts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resources&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This standardization feels like a potential game-changer, making it easier to integrate AI across different platforms without reinventing the wheel each time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The MCP Client and Server Dynamic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I sketched out the relationship between an MCP client and server (you can see this in my first sketch below). The client can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Invoke tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Query for resources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interpolate prompts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, the server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Exposes tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exposes resources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exposes prompts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup creates a collaborative ecosystem where clients and servers work together, giving developers a lot of flexibility in how they build AI-driven solutions.&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%2Fbi9yr3lawt7pt1vsk6bn.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%2Fbi9yr3lawt7pt1vsk6bn.png" alt="My sketch showing the MCP client and server roles, with the client invoking tools and the server exposing resources and prompts." width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of MCP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The session highlighted a few key features of MCP that I found really interesting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. An Official MCP Registry API (Coming Soon)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unified host metadata service&lt;/strong&gt;: This will enable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Discovery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Centralization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verification&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I jotted down a possible structure for this (check out my second sketch below):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;registry: npm&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;published: ...&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;version: 1.2.0&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;type: studio&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another instance with &lt;code&gt;type: sse&lt;/code&gt; and a &lt;code&gt;url: ...&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic mentioned that the registry API is still in the works and will be rolled out in the coming days. Once it’s live, it could be a solid foundation for managing and verifying agent interactions, which I’m really looking forward to.&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%2F9pxvzppr7iavt4t8xz9b.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%2F9pxvzppr7iavt4t8xz9b.png" alt="My sketch of the potential MCP Registry API structure, showing fields like registry, version, and type." width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Sampling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sampling allows a server to request completions from a client, giving the user application full control over security, privacy, and cost. I noted down some Sampling parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model Preferences &amp;amp; Hints&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;System Prompt&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Temperature &amp;amp; Max Tokens&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This control is a big deal—it lets us fine-tune how agents behave without being stuck with server-side limitations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Composability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Composability enables agents to chain together while the client application controls inference. My third sketch (see below) shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;application + LLM&lt;/strong&gt; requesting inference from a &lt;strong&gt;client-server orchestrator agent&lt;/strong&gt;, involving &lt;strong&gt;analysis agents&lt;/strong&gt; and &lt;strong&gt;coding agents&lt;/strong&gt;, all coordinated by a &lt;strong&gt;research agent&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This opens up some creative possibilities for designing AI systems that can handle complex workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this sketch, sampling &amp;amp; composabilty are working together:&lt;/strong&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%2Fb06k3v8h7vlwqkvowcpx.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%2Fb06k3v8h7vlwqkvowcpx.png" alt="My sketch illustrating sampling, with an application + LLM interacting with a client-server setup and various agents like analysis and coding agents." width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building Effective Agents with MCP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The session also covered how to build effective agents using MCP. Here’s what I took away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool-Mode Controlled Functions&lt;/strong&gt;: These are inspired by the model and include:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Retrieve/Search

2. Send a message

3. Update DB records
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;: Application-controlled data exposure, files, and API responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompts&lt;/strong&gt;: User-controlled, pre-defined templates for AI interactions, with output as JSON.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simplifying Interactions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP simplifies how clients and servers interact by allowing a server to request completions from a client, putting the user application in charge of security, privacy, and cost. It’s a practical way to streamline AI workflows while keeping control in the developer’s hands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Practical Example from the Session: Grafana Servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One example from the video that I found really interesting was about &lt;strong&gt;installing and invoking Grafana servers&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The idea was to use MCP to query logs and suggest fixes based on agent insights. My fourth sketch (see below) captures this concept, showing an agent searching for an official Grafana server via the upcoming Registry API. &lt;/p&gt;

&lt;p&gt;This use case got me thinking about the automation possibilities once the API launches—being able to seamlessly integrate with tools like Grafana could be a huge time-saver.&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%2Fw5s47iozexkuxaneaabp.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%2Fw5s47iozexkuxaneaabp.png" alt="My sketch of the Grafana server example from the session—using MCP to query logs and suggest fixes with an agent searching for a Grafana server via the Registry API." width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This session gave me a lot to think about regarding how MCP could transform the way we integrate AI agents with our tools and data. The focus on composability, the upcoming registry API, and the flexibility it offers are really inspiring. &lt;/p&gt;

&lt;p&gt;The Grafana example was a great illustration of how MCP can be applied in real-world scenarios, and I’m eager to see the registry API launch soon so I can start experimenting with these concepts in my own projects. If you’ve watched the session or have thoughts on MCP, I’d love to hear your take in the comments!&lt;/p&gt;

&lt;p&gt;PS: I have already used the github MCP from &lt;a href="https://smithery.ai/" rel="noopener noreferrer"&gt;Smithery.ai&lt;/a&gt; and the &lt;a href="https://browsertools.agentdesk.ai/installation" rel="noopener noreferrer"&gt;browsermcptools&lt;/a&gt; from agentdeskai in my cursor for 2 projects.&lt;/p&gt;

&lt;p&gt;Until next time, happy coding!🚀&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Zero to PlanetHop: How I Built a 3D Space Game in 6 Hours with AI and Three.js</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Mon, 10 Mar 2025 19:23:22 +0000</pubDate>
      <link>https://dev.to/shaunak_38/from-zero-to-planethop-how-i-built-a-3d-space-game-in-6-hours-with-ai-and-threejs-2pda</link>
      <guid>https://dev.to/shaunak_38/from-zero-to-planethop-how-i-built-a-3d-space-game-in-6-hours-with-ai-and-threejs-2pda</guid>
      <description>&lt;p&gt;Hey Dev.to crew, buckle up—because I’m about to take you on a wild, cosmic ride!🪐&lt;/p&gt;

&lt;p&gt;Over one crazy weekend, I went from knowing &lt;em&gt;nothing&lt;/em&gt; about game development or Three.js to launching &lt;strong&gt;PlanetHop&lt;/strong&gt;, a 3D space exploration game where you zip through a galaxy, hopping neon planets with a boost-powered spaceship. &lt;/p&gt;

&lt;p&gt;It’s live at &lt;a href="https://www.planethop.fun/" rel="noopener noreferrer"&gt;planethop.fun&lt;/a&gt;, and I’m still buzzing from the adrenaline of pulling it off in roughly 6 hours. &lt;/p&gt;

&lt;p&gt;How? With a little help from AI magic—Cursor, Claude 3.7 Sonnet, and xAI’s Grok as my trusty co-pilot. Let’s dive into this journey—it’s messy, it’s fun, and it’s proof you can build something epic faster than you think!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Spark: X and Indie Game Dev Vibes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It all started on X (you know, the artist formerly called Twitter). I kept seeing these indie devs—Levelsio with &lt;em&gt;fly.pieter.com&lt;/em&gt; and Nicola Manzini with &lt;em&gt;vibe.sail&lt;/em&gt;—whipping up games in hours using AI tools. &lt;/p&gt;

&lt;p&gt;Levelsio’s retro flight sim? Built in 3 hours. Manzini’s chill sailing vibe? Pure inspiration. I thought, “Wait, I could do that!” No game dev skills? No problem. I had curiosity, a laptop, and a weekend to burn. &lt;/p&gt;

&lt;p&gt;So, I decided: I’m making a space game. Planets, spaceships, neon lights—let’s go!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools: AI as My Wingman
&lt;/h2&gt;

&lt;p&gt;I didn’t start with a blank slate—I had some serious AI firepower:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt;: An AI-powered IDE that writes code like a dream. It’s like having a pair programmer who never sleeps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Claude 3.7 Sonnet&lt;/strong&gt;: Anthropic’s beast of a model, churning out Three.js snippets faster than I could Google them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Grok (xAI)&lt;/strong&gt;: My guide, answering questions like “How do I tilt a spaceship?” or “What’s a HUD?” with cosmic patience.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Picture this: me, a total newbie, asking Grok, “How do I make a 3D cube fly in space?” Six hours later, I’ve got a glowing green ship hopping planets. AI didn’t just help—it made this happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Build: Chaos, Code, and Cosmic Fun
&lt;/h2&gt;

&lt;p&gt;Saturday morning, coffee in hand, I kicked off with Three.js. First step? A spinning cube—my “spaceship.” Cursor spat out a basic scene:&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;scene&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Scene&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BoxGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MeshBasicMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x00ff00&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;spaceship&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;geometry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;spaceship&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It spun like a fidget spinner in space. I was hooked.&lt;/p&gt;

&lt;p&gt;Next, controls. “Claude, give me WASD movement!” Boom—my cube was zooming. But it felt flat. I asked Grok, “How do I tilt it?” We cranked the pitch to 0.5 radians—suddenly, it’s dipping and soaring like a real ship. I flipped the camera 180° to stare down its nose, and &lt;em&gt;whoa&lt;/em&gt;—it felt alive.&lt;/p&gt;

&lt;p&gt;Then came the planets. I wanted them random, glowing, and wild. Claude cooked up a generator—neon hues, sizes from 5 to 20 units, some with cyan rings that burst on spawn. Press &lt;code&gt;P&lt;/code&gt;, and a new planet pops into the galaxy. I’d hop toward one, grinning like a kid.&lt;/p&gt;

&lt;p&gt;Boost mechanics? Space key, a draining bar, and a trail of fiery particles—thanks, Cursor. I even threw in a synthwave track from Pixabay, loaded via Three.js’s AudioListener. Picture this: me bobbing my head to retro beats, flying through a neon cosmos I &lt;em&gt;built&lt;/em&gt;. Six hours in, I’m yelling, “This is a GAME!”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Launch: planethop.fun Takes Flight
&lt;/h2&gt;

&lt;p&gt;Sunday night, I deployed it to Vercel—pushed my &lt;code&gt;public/audio/background.mp3&lt;/code&gt; and all. Bought &lt;code&gt;planethop.fun&lt;/code&gt; on Namecheap (because &lt;code&gt;.fun&lt;/code&gt; screams indie vibes), linked it up, and bam—it’s live. &lt;/p&gt;

&lt;p&gt;No game dev degree, no months of planning—just a weekend, some AI, and a domain that’s now my little corner of the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next? The Sky’s Not the Limit
&lt;/h2&gt;

&lt;p&gt;I’m buzzing to keep going. Multiplayer, maybe—imagine hopping planets with friends! Or mobile controls for on-the-go cosmic fun. &lt;/p&gt;

&lt;p&gt;But for now, I’m thrilled. From zero to &lt;em&gt;this&lt;/em&gt; in 6 hours? That’s the power of AI and a bit of reckless enthusiasm.&lt;/p&gt;

&lt;p&gt;Hop over to &lt;a href="https://www.planethop.fun/" rel="noopener noreferrer"&gt;planethop.fun&lt;/a&gt; and take it for a spin—tell me what you think! Ever built something wild in a weekend? Let’s swap stories in the comments—I’m all ears.&lt;/p&gt;

&lt;p&gt;Happy coding!🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>You Don’t Know JS Yet: My Weekly Journey Through JavaScript Mastery</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Sun, 02 Mar 2025 16:05:27 +0000</pubDate>
      <link>https://dev.to/shaunak_38/you-dont-know-js-yet-my-weekly-journey-through-javascript-mastery-6lm</link>
      <guid>https://dev.to/shaunak_38/you-dont-know-js-yet-my-weekly-journey-through-javascript-mastery-6lm</guid>
      <description>&lt;p&gt;Hey dev.to community!👋 I’m excited to announce a new blog post series I’ll be embarking on over the coming weeks. If you’ve ever felt like JavaScript has more layers than an onion, you’re not alone—and neither am I.&lt;/p&gt;

&lt;p&gt;I’m diving into &lt;em&gt;You Don’t Know JS Yet&lt;/em&gt; (Second Edition) by Kyle Simpson, and I’ll be sharing what I learn from each chapter in weekly posts right here on dev.to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Series?
&lt;/h2&gt;

&lt;p&gt;JavaScript is one of the most powerful and ubiquitous (present, appearing, or found everywhere) languages in web development, but it’s also notoriously tricky to master. &lt;/p&gt;

&lt;p&gt;I’ve been coding for a while, but there’s always more to uncover—especially with a language that evolves as quickly as JS does. &lt;em&gt;You Don’t Know JS Yet&lt;/em&gt; is a fantastic resource for peeling back those layers, and the second edition promises fresh insights, updated for today’s JavaScript landscape (as of 2025).&lt;/p&gt;

&lt;p&gt;This series isn’t just about me learning—it’s about us learning together. Each week, I’ll tackle a chapter from the book, take notes (yes, I’m old-school with pen and paper!), and distill the key takeaways into a blog post. &lt;/p&gt;

&lt;p&gt;My goal? To break down complex concepts, share practical insights, and spark discussions with all of you. Whether you’re a beginner or a seasoned dev, I hope you’ll find value in this journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with "Getting Started"
&lt;/h2&gt;

&lt;p&gt;Let’s kick things off with the first book in the series: &lt;em&gt;Getting Started&lt;/em&gt;. This book lays the foundation for understanding JavaScript, and my handwritten notes (scribbled on graph paper, because why not?) already have me rethinking some basics.  Here’s what I’ve learned so far from the first chapter, &lt;strong&gt;"What is JavaScript"&lt;/strong&gt;:&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript’s Quirky Origins
&lt;/h2&gt;

&lt;p&gt;Did you know the name "JavaScript" was initially given to lure Java developers, but there’s almost zero similarity between the two languages? It’s a fun tidbit—and a reminder that JS has its own unique identity. &lt;/p&gt;

&lt;p&gt;Today, JavaScript is maintained by organizations like &lt;a href="https://tc39.es/" rel="noopener noreferrer"&gt;TC39&lt;/a&gt; and &lt;a href="https://ecma-international.org/" rel="noopener noreferrer"&gt;ECMA&lt;/a&gt;, who meet every other month to decide and vote on new features and review the development of current ones. &lt;a href="https://github.com/tc39/proposals" rel="noopener noreferrer"&gt;TC39 proposals&lt;/a&gt; go through a rigorous 5-stage process (Stage 0 through 4), with members from companies like Mozilla, Apple, Google, and Samsung shaping the language’s future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forward-Compatible? Not Quite.
&lt;/h2&gt;

&lt;p&gt;One surprising takeaway: JavaScript isn’t forward-compatible. That means any new feature added to the JS language specification won’t work in older JS engines. &lt;/p&gt;

&lt;p&gt;For new and incompatible syntax, the solution is &lt;em&gt;transpiling&lt;/em&gt;—converting newer JS syntax to older syntax that can run on older engines. The most popular transpiler? &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;. This process ensures modern JS code can still reach a wide audience, even on legacy systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backward-Compatible, Though!
&lt;/h2&gt;

&lt;p&gt;On the flip side, JS is backward-compatible. All JS code written in the past will always be valid through the future and present. This stability is a huge win for developers, ensuring our old codebases don’t break as the language evolves.&lt;/p&gt;

&lt;h2&gt;
  
  
  How JS Executes: A Quick Peek
&lt;/h2&gt;

&lt;p&gt;JS isn’t just an interpreted language—it’s compiled, too (In the book, Kyle mentions that JS is a compiled language and proves it, but I have decided to stay out of this debate 😝). &lt;/p&gt;

&lt;p&gt;Here’s a high-level look at the execution steps, as outlined in the book:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The JS code gets transpiled by tools like Babel, then bundled (often by &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;) into a single or few files (like &lt;code&gt;bundle.js&lt;/code&gt;). This optimizes the website to load faster, as the browser can fetch everything from one file instead of multiple.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The JS Virtual Machine (JS engine) executes the program, starting with an optimizing JIT (Just-In-Time) compiler.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The engine parses the code into an Abstract Syntax Tree (AST), then converts it into a kind of bytecode, which is further refined and optimized.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These steps highlight how modern tools and engines work together to make JS fast and flexible—a far cry from its humble beginnings!&lt;/p&gt;

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

&lt;p&gt;Over the next few weeks, I’ll work through each chapter of &lt;em&gt;You Don’t Know JS Yet&lt;/em&gt; (Second Edition), starting with &lt;em&gt;Getting Started&lt;/em&gt; and moving on to the other books in the series (as they become available—I hear the series isn’t complete yet, but I’m too excited to wait!). &lt;/p&gt;

&lt;p&gt;You can find more about the book series on &lt;a href="https://me.getify.com/you-dont-know-js/" rel="noopener noreferrer"&gt;Kyle Simpson’s website&lt;/a&gt; or check out the &lt;a href="https://github.com/getify/You-Dont-Know-JS" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; for additional resources.&lt;/p&gt;

&lt;p&gt;Each blog post will dive deeper into the concepts, share my aha moments, and invite your questions and insights in the comments. If you’re curious about JS, want to brush up on the fundamentals, or just enjoy a good coding journey, stick with me. Let’s explore JavaScript together—one chapter, one week, and one blog post at a time.&lt;/p&gt;

&lt;p&gt;Stay tuned for next week’s post, where I’ll dive into the next chapter of Getting Started. In the meantime, what’s your favorite JavaScript quirk or challenge? Drop a comment—I’d love to hear from you!&lt;/p&gt;

&lt;p&gt;Happy coding!🚀&lt;/p&gt;

&lt;p&gt;[PS: There were many other things on topics like WebAssembly etc, that I have not covered here you can find the full chapter in YDKJSY &lt;a href="https://github.com/getify/You-Dont-Know-JS" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Micro-Frontends: The Next Big Thing or Just Hype?</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Wed, 26 Feb 2025 14:38:05 +0000</pubDate>
      <link>https://dev.to/shaunak_38/micro-frontends-the-next-big-thing-or-just-hype-p6f</link>
      <guid>https://dev.to/shaunak_38/micro-frontends-the-next-big-thing-or-just-hype-p6f</guid>
      <description>&lt;p&gt;If you’ve been anywhere near web development circles lately, you’ve probably heard the buzz about &lt;em&gt;micro-frontends&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;It’s being pitched as the shiny new solution to all our frontend woes—modular, scalable, team-friendly. But is it really the game-changer it’s hyped up to be, or just another buzzword destined to fade into obscurity? Let’s break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are Micro-Frontends, Anyway?
&lt;/h2&gt;

&lt;p&gt;Think of micro-frontends as the frontend cousin of microservices. Instead of one giant, monolithic app, you split your UI into smaller, independent pieces. &lt;/p&gt;

&lt;p&gt;Each piece can be owned by a different team, built with its own tech stack, and deployed on its own schedule. Imagine a dashboard where the navigation bar, a widget grid, and a settings panel are all separate apps, stitched together seamlessly (or so the theory goes).&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%2Ff4lceaoniq2f2t3sc1xf.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%2Ff4lceaoniq2f2t3sc1xf.png" alt="Monolith vs Micro-frontends" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The promise? Faster development cycles, easier scaling, and happier teams who aren’t stepping on each other’s toes. Sounds dreamy, right? &lt;/p&gt;

&lt;p&gt;But like any shiny new toy, it comes with trade-offs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Good: Why They’re Turning Heads
&lt;/h2&gt;

&lt;p&gt;First off, micro-frontends shine when you’ve got big teams or sprawling apps. If you’ve ever waited for a 20-person team to align on a single release, you know the pain. Splitting the frontend lets teams move at their own pace—Team A can ship a new feature while Team B polishes their widget, no bottlenecks required.&lt;/p&gt;

&lt;p&gt;They’re also a godsend for legacy migrations. Got an old monolith you’re dying to modernize? Micro-frontends let you incrementally replace chunks of it without a full rewrite. &lt;/p&gt;

&lt;p&gt;Start with a new sidebar in React, keep the rest in jQuery, and phase things out as you go. Check out &lt;a href="https://martinfowler.com/articles/micro-frontends.html" rel="noopener noreferrer"&gt;this intro to micro-frontends&lt;/a&gt; by Martin Fowler for a deeper dive into the concept.&lt;/p&gt;

&lt;p&gt;And let’s not forget flexibility. Want to experiment with a new framework? Go for it—one micro-frontend can be Vue, another Svelte, and the rest whatever your team’s comfy with. No more "all-in" framework bets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Messy: Where It Gets Complicated
&lt;/h2&gt;

&lt;p&gt;But here’s the catch: simplicity isn’t free. Stitching those independent pieces together can feel like herding cats. You’ve got to figure out how they talk to each other—shared state, routing, and styling become your new headaches. Ever tried keeping a consistent look when three teams are wielding their own CSS? Good luck.&lt;/p&gt;

&lt;p&gt;Performance is another gotcha. Each micro-frontend might load its own dependencies, so you could end up with duplicate libraries clogging the browser. Sure, there are tricks like &lt;a href="https://webpack.js.org/concepts/module-federation/" rel="noopener noreferrer"&gt;Webpack’s Module Federation&lt;/a&gt; or server-side composition, but they add complexity. And complexity, as we all know, is the enemy of deadlines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bundle Size Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Bundle Size (MB)&lt;/th&gt;
&lt;th&gt;Key Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monolith&lt;/td&gt;
&lt;td&gt;5.0 MB&lt;/td&gt;
&lt;td&gt;Single, unified bundle. No duplication, but includes everything upfront.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Micro-Frontends (Duplicates)&lt;/td&gt;
&lt;td&gt;8.5 MB&lt;/td&gt;
&lt;td&gt;Each micro-frontend loads its own dependencies (e.g., 3x React at ~2 MB).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimized Micro-Frontends&lt;/td&gt;
&lt;td&gt;6.2 MB&lt;/td&gt;
&lt;td&gt;Shared dependencies (e.g., via Module Federation) reduce redundancy.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Explanation of Values
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monolith (5.0 MB)&lt;/strong&gt;: A single app with all features bundled together. Efficient in terms of no duplication, but it can grow unwieldy for large apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Micro-Frontends with Duplicates (8.5 MB)&lt;/strong&gt;: Assumes three micro-frontends, each bundling a framework like React (~2 MB) plus their own code. Duplication bloats the total size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimized Micro-Frontends (6.2 MB)&lt;/strong&gt;: Uses shared dependencies (e.g., one React instance via Module Federation), cutting redundancy while still splitting the app.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then there’s the tooling. Micro-frontends aren’t as plug-and-play as a monolith yet. You’ll likely need custom build pipelines, deployment scripts, and a solid CI/CD setup. Tools like &lt;a href="https://nx.dev/" rel="noopener noreferrer"&gt;Nx&lt;/a&gt; can help here—its monorepo approach is a lifesaver for managing multiple micro-frontends in one cohesive workspace. Their &lt;a href="https://nx.dev/concepts/module-federation/micro-frontend-architecture" rel="noopener noreferrer"&gt;micro-frontend guide&lt;/a&gt; is worth a peek if you’re curious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Vibes: Is It Worth It?
&lt;/h2&gt;

&lt;p&gt;I’ve been knee-deep in micro-frontends lately, and here’s my take: they’re not a silver bullet, but they’re not hype either. They’re a tool—one that’s clutch when your app’s big, your team’s distributed, or your roadmap’s a moving target. For a small startup churning out an MVP? Probably not worth the hassle.&lt;/p&gt;

&lt;p&gt;The key is knowing your context. If your app’s complexity is outpacing your ability to ship, micro-frontends might save your sanity. &lt;/p&gt;

&lt;p&gt;But if you’re just jumping on the bandwagon because it’s trendy, you might end up with a fragmented mess and a lot of regret.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Next Big Thing or Just Noise?
&lt;/h2&gt;

&lt;p&gt;Micro-frontends aren’t here to replace everything—they’re an evolution, not a revolution. They solve real problems for the right projects, but they’re not a one-size-fits-all fix. The hype’s loud, sure, but beneath it lies a practical approach that’s earning its keep in the wild.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should You Use Micro-Frontends?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Yes&lt;/th&gt;
&lt;th&gt;No&lt;/th&gt;
&lt;th&gt;Outcome After All Questions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Do you have a big team?&lt;/td&gt;
&lt;td&gt;Move to next question&lt;/td&gt;
&lt;td&gt;Move to next question&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is your app complex?&lt;/td&gt;
&lt;td&gt;Move to next question&lt;/td&gt;
&lt;td&gt;Move to next question&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need independent deploys?&lt;/td&gt;
&lt;td&gt;If Yes to any prior question: "Go for it"&lt;/td&gt;
&lt;td&gt;If No to all: "Stick to the monolith"&lt;/td&gt;
&lt;td&gt;Final Decision&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What do you think—are micro-frontends the future, or just another chapter in the endless frontend saga? Drop your thoughts below; I’d love to hear how they’re working (or not) for you!&lt;/p&gt;

&lt;p&gt;Happy coding!🚀&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>JavaScript vs. TypeScript: A Developer’s Guide to Choosing the Right Tool</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Sun, 23 Feb 2025 05:39:17 +0000</pubDate>
      <link>https://dev.to/shaunak_38/javascript-vs-typescript-a-developers-guide-to-choosing-the-right-tool-2c84</link>
      <guid>https://dev.to/shaunak_38/javascript-vs-typescript-a-developers-guide-to-choosing-the-right-tool-2c84</guid>
      <description>&lt;p&gt;JavaScript has been the backbone of web development for decades, powering dynamic and interactive experiences. But as projects grow in complexity, its flexibility can become a double-edged sword. &lt;/p&gt;

&lt;p&gt;Enter TypeScript—a superset of JavaScript that brings static typing and enhanced tooling to the table. In this post, I’ll break down the differences between JavaScript and TypeScript, explore their strengths, and help you decide which one fits your next project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the Deal with JavaScript?
&lt;/h2&gt;

&lt;p&gt;JavaScript is the wild child of programming languages—dynamic, forgiving, and everywhere. It’s what makes your browser dance, from simple button clicks to full-blown single-page applications. Here’s what makes it shine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Universal Adoption&lt;/strong&gt;: It runs natively in browsers and, thanks to Node.js, on servers too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: No strict rules. Want to change a variable’s type mid-flight? Go for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fast Prototyping&lt;/strong&gt;: You can whip up a working app without much setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But that freedom comes with a catch. Take this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "510" – Oops!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JavaScript’s loose typing means bugs like this can sneak in, especially in larger codebases. You won’t know until runtime, and by then, it might be too late.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter TypeScript: JavaScript with Guardrails
&lt;/h2&gt;

&lt;p&gt;TypeScript, developed by Microsoft, builds on JavaScript by adding static types. It’s not a separate language—it’s JavaScript with extra features that get compiled down to plain JS. Here’s why developers love it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;: Catch errors early, during development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Better Tooling&lt;/strong&gt;: Autocomplete, refactoring, and code navigation in IDEs like VS Code are top-notch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Ideal for big teams and complex projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s rewrite that &lt;code&gt;add&lt;/code&gt; function in TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Error: Argument of type 'string' is not assignable to parameter of type 'number'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The TypeScript compiler flags the issue before you even run the code. No surprises in production!&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Differences at a Glance
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  When to Use JavaScript
&lt;/h2&gt;

&lt;p&gt;JavaScript is your go-to when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You’re building a small project or prototype where speed matters more than structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re new to coding and want to avoid extra complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your team prefers minimal tooling and maximum flexibility.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think personal portfolios, quick scripts, or small apps where you can keep the codebase in your head.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use TypeScript
&lt;/h2&gt;

&lt;p&gt;TypeScript shines when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You’re working on a large-scale app with multiple developers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You want to reduce bugs and improve maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re integrating with frameworks like React, Angular, or Vue, which have stellar TypeScript support.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects like enterprise software, open-source libraries, or anything with a long lifespan benefit hugely from TypeScript’s discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Real-World Example
&lt;/h2&gt;

&lt;p&gt;Imagine you’re building a user profile feature. Here’s how it might look in JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; years old`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&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="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "Alex is 28 years old"&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="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sam&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt; &lt;span class="c1"&gt;// "Sam is undefined years old" – No error, just a silent fail&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, with TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; years old`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&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="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "Alex is 28 years old"&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="nf"&gt;displayUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sam&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt; &lt;span class="c1"&gt;// Error: Property 'age' is missing in type '{ name: string; }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript forces you to define what a &lt;code&gt;User&lt;/code&gt; should look like, catching missing properties before they cause trouble.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with TypeScript
&lt;/h2&gt;

&lt;p&gt;Ready to give it a whirl? Here’s a quick setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install TypeScript: &lt;code&gt;npm install -g typescript&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a file, say &lt;code&gt;app.ts&lt;/code&gt;, and write some code.&lt;/li&gt;
&lt;li&gt;Compile it to JavaScript: &lt;code&gt;tsc app.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run the resulting &lt;code&gt;app.js&lt;/code&gt; with Node.js.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a real project, you’ll want a &lt;code&gt;tsconfig.json&lt;/code&gt; to customize your setup—check the &lt;a href="https://www.typescriptlang.org/docs/" rel="noopener noreferrer"&gt;TypeScript docs&lt;/a&gt; for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Take: Why I Lean Toward TypeScript
&lt;/h2&gt;

&lt;p&gt;I started with JavaScript, loving its simplicity. But as my projects grew, so did the chaos—random runtime errors, unclear APIs, and refactoring nightmares. TypeScript changed that. It’s like having a co-pilot who spots mistakes before they crash the plane. Yes, there’s a learning curve, but the payoff in confidence and productivity is massive.&lt;/p&gt;

&lt;p&gt;That said, JavaScript still has its place. Not every project needs the overhead of types. It’s about picking the right tool for the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Are you a JavaScript purist or a TypeScript convert? Maybe you’ve got a killer use case for one over the other—drop it in the comments! If you’re new to TypeScript, try it on your next side project and see how it feels. &lt;/p&gt;

&lt;p&gt;Happy coding!🚀&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>My Journey: From Angular Dev to Remote Job Hunter 🚀</title>
      <dc:creator>Shaunak Das</dc:creator>
      <pubDate>Wed, 19 Feb 2025 15:39:19 +0000</pubDate>
      <link>https://dev.to/shaunak_38/my-journey-from-angular-dev-to-remote-job-hunter-468a</link>
      <guid>https://dev.to/shaunak_38/my-journey-from-angular-dev-to-remote-job-hunter-468a</guid>
      <description>&lt;h2&gt;
  
  
  The Start of the Journey
&lt;/h2&gt;

&lt;p&gt;I've been working with &lt;strong&gt;TypeScript and Angular&lt;/strong&gt; for almost three years now, building frontend applications and navigating the ever-evolving world of web development. While I enjoy my current work, I’ve always had a bigger goal: &lt;strong&gt;landing a remote job with great flexibility and work-life balance&lt;/strong&gt;—ideally something like Buffer or Ghost, where a four-day workweek is a reality. 💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Remote Job Hunt Begins&lt;/strong&gt;🏹&lt;/p&gt;

&lt;p&gt;A few weeks ago, I decided to seriously pursue a &lt;strong&gt;remote JavaScript/TypeScript job&lt;/strong&gt;, specifically targeting companies in the &lt;strong&gt;USA&lt;/strong&gt; or &lt;strong&gt;Europe&lt;/strong&gt; that allow me to work from India. But it turns out, finding &lt;strong&gt;legit remote jobs&lt;/strong&gt; is harder than I expected. Most job boards are flooded with irrelevant postings, and competition is intense.&lt;/p&gt;

&lt;p&gt;So far, I’ve applied to &lt;strong&gt;multiple roles&lt;/strong&gt;, mostly through platforms like &lt;strong&gt;Working Nomads&lt;/strong&gt;, &lt;strong&gt;RemoteOk&lt;/strong&gt;, &lt;strong&gt;JsJobs&lt;/strong&gt;, &lt;strong&gt;Remotive.io&lt;/strong&gt;, etc and direct company career pages. But responses? &lt;em&gt;Crickets&lt;/em&gt;... 🦗&lt;/p&gt;

&lt;h2&gt;
  
  
  The Open-Source Route
&lt;/h2&gt;

&lt;p&gt;To increase my chances, I started contributing to &lt;strong&gt;open-source projects&lt;/strong&gt;. First, I tried &lt;strong&gt;Ghostfolio (Angular + Nest.js)&lt;/strong&gt;—a great learning experience, but the workflow wasn’t always smooth. I also explored &lt;strong&gt;ToolJet&lt;/strong&gt;, but their contribution process was too limited.&lt;/p&gt;

&lt;p&gt;Now, I’m at a crossroads: &lt;strong&gt;Should I stick to TypeScript projects or explore Golang, since Go developers are in demand?&lt;/strong&gt; 🤔 &lt;em&gt;(That is what I noticed while applying)&lt;/em&gt;. So far, I’m leaning towards staying in the JS/TS ecosystem because that’s where my strengths lie.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Hurdles 🏗️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lack of responses&lt;/strong&gt;: Even after applying to multiple jobs, I haven’t landed an interview yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding active remote job listings&lt;/strong&gt;: Many listings are outdated or not truly remote.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balancing work and job hunting&lt;/strong&gt;: Managing my full-time job while applying and contributing to open source is &lt;em&gt;exhausting&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Improve outreach&lt;/strong&gt;: Cold emails, Twitter networking, and possibly writing tech blog posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polish my portfolio&lt;/strong&gt;: I built &lt;strong&gt;Itinerary GPT (Next.js)&lt;/strong&gt;, but the landing page needs work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore more open-source projects&lt;/strong&gt;: Maybe a project where I can work on &lt;strong&gt;AI integrations&lt;/strong&gt; and &lt;strong&gt;Stripe payments&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;This journey is tough, but &lt;strong&gt;I’m not giving up&lt;/strong&gt;. If you’re also trying to break into remote work, let’s connect! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did you land your first remote job?&lt;/strong&gt;&lt;br&gt;
Drop your tips in the comments. 👇&lt;/p&gt;

</description>
      <category>career</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
