<?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>Forem: Umar Muktar</title>
    <description>The latest articles on Forem by Umar Muktar (@ucodes).</description>
    <link>https://forem.com/ucodes</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%2F1582296%2F1b5ee59b-fd24-48be-a2cf-6b45f37c83fa.jpg</url>
      <title>Forem: Umar Muktar</title>
      <link>https://forem.com/ucodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ucodes"/>
    <language>en</language>
    <item>
      <title>Creating AI Agents with Mastra and Typescript</title>
      <dc:creator>Umar Muktar</dc:creator>
      <pubDate>Sat, 01 Nov 2025 18:40:21 +0000</pubDate>
      <link>https://forem.com/ucodes/creating-ai-agents-with-mastra-and-typescript-4d6o</link>
      <guid>https://forem.com/ucodes/creating-ai-agents-with-mastra-and-typescript-4d6o</guid>
      <description>&lt;p&gt;AI, AI Agents, Agentic AI... You can't go a day without coming across at least one of these.&lt;/p&gt;

&lt;p&gt;What exactly are they???&lt;/p&gt;

&lt;p&gt;In today's blog we'll be looking at AI Agents, what they are, what they do and how to create one.&lt;/p&gt;

&lt;p&gt;Let's take them one by one.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;AI (Artificial intelligence): AI or Artificial intelligence is the ability of of computer systems to perform tasks that normally require human intelligence, such as learning, problem-solving, decision making and recognizing patterns. You can see how that applies when using chatbots and LLMs like ChatGPT and Gemini.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI Agents: An AI Agent is a program that combines intelligence with the ability to act. It doesn’t just process information, it can take action using connected tools and systems, often without human intervention.&lt;br&gt;
For example, when you ask a regular AI chatbot to grab an article from some blog for you, it won't be able to do that. That's because these type of AI models only use data from their knowledge base to respond, they can't visit websites or fetch data.&lt;br&gt;
That's where AI Agents come into play they combine their intelligence and some "tools" they can use to make even tasks like checking the weather and planning your trip possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agentic AI: This is the framework or the broad concept of building AI Agents.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;With that out of the way, let's see how to build our own AI agent.&lt;/p&gt;

&lt;p&gt;We will be building a very simple agent with a focus on understanding how these AI Agents work without all the complexity.&lt;/p&gt;

&lt;p&gt;Also to make the process easy and follow a structured approach, we will be using &lt;a href="https://mastra.ai/" rel="noopener noreferrer"&gt;Mastra&lt;/a&gt;. Mastra as they brand it is "The TypeScript Agent Framework". It does all the work of connecting agents to tools and other agents without a hitch and ensure a clean workflow.&lt;/p&gt;

&lt;p&gt;So, we will be build an AI agent that returns the current time.&lt;/p&gt;

&lt;p&gt;As simple as that sounds, LLMs can't do that by themselves.&lt;/p&gt;

&lt;p&gt;So let's get into it.&lt;/p&gt;

&lt;p&gt;First things first,let's set up  our environment using mastra CLI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create mastra@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the CLI interface to setup a project, one your done you'll have a starter project, then open it in your favorite Code Editor or IDE.&lt;/p&gt;

&lt;p&gt;After that, grab your API key for the model you selected in the setup and add it to a &lt;em&gt;.env&lt;/em&gt; file.&lt;/p&gt;

&lt;p&gt;It'll have this structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/mastra/
├── index.ts              # Main Mastra configuration
├── agents/
│   └── weather-agent.ts     # Example weather agent
'── tools/
   └── weather-tool.ts     # Example weather tool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's ignore the example project and build our own.&lt;/p&gt;

&lt;p&gt;Create a &lt;em&gt;time-tool.ts&lt;/em&gt; file in the tools/ directory and paste/write this.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createTool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@mastra/core/tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;zod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeTool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get-time&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Get current time for a location&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Timezone&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="na"&gt;outputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="c1"&gt;// The actual function that gets the time and returns it&lt;/span&gt;
  &lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;context&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;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&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;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toLocaleTimeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en-GB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&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="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;time&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So basically, we're expecting the LLM to send us a javascript format timezone, and then we get the time and return it to the model.&lt;/p&gt;

&lt;p&gt;Next, we'll create the Agent.&lt;br&gt;
Create a &lt;em&gt;time-agent.ts&lt;/em&gt; file in the agents/ directory and paste/type this snippet:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@mastra/core/agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;timeTool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../tools/time-tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&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;Time Agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
      You are a helpful time assistant that provides accurate time for a given timezone.

      Your primary function is to help users get the current time  for specific timezones. When responding:
      - Always ask for a timezone if none is provided
      - If provided with a location, infer its timezone
      - If the location name isn't in English, please translate it
      - If giving a timezone with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
      - Keep responses concise but informative
      - Make sure to pass a javascript format timezone (e.g. Africa/Lagos)

      Use the timeTool to fetch current time data.
`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Replace with your model&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google/gemini-2.5-pro&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;timeTool&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;Great, you just created your AI Agent and gave it instruction and how to use a "tool".&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tool is basically a function available to an Agent to get extra context/data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's let Matra know about out Agent by registering it in the &lt;em&gt;index.ts&lt;/em&gt; file.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Mastra&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@mastra/core/mastra&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;timeAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./agents/time-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mastra&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Mastra&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;timeAgent&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;That's literally it. Now Mastra knows about our agent and will provide us with a server and a UI to interact with our Agent via a chat interface.&lt;/p&gt;

&lt;p&gt;Open your terminal and run&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;One the server is started visit &lt;em&gt;&lt;a href="http://localhost:4111" rel="noopener noreferrer"&gt;http://localhost:4111&lt;/a&gt;&lt;/em&gt; in your browser.&lt;br&gt;
You'll see your Time Agent, click on to open the chat page.&lt;/p&gt;

&lt;p&gt;Here you can prompt it to get a time for a timezone, eg "What's the time in Nigeria?"&lt;/p&gt;

&lt;p&gt;And if you've done everything correctly, you should get a response from the Agent with the current time in the timezone you asked for.&lt;/p&gt;

&lt;p&gt;Congrats🎉, you just build a working AI Agent to solve the problem of AI not knowing the current time.&lt;/p&gt;

&lt;p&gt;I hope you learnt a thing or two. Now that you know how to build AI Agents, the sky is your limit.&lt;/p&gt;

&lt;p&gt;Go build something awesome.&lt;/p&gt;

&lt;p&gt;If you enjoyed the blog, drop a follow and check me out on &lt;a href="https://youtube.com/@ucodes880" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>agents</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Creating a simple Web Server with Node and ExpressJS</title>
      <dc:creator>Umar Muktar</dc:creator>
      <pubDate>Fri, 17 Oct 2025 08:41:37 +0000</pubDate>
      <link>https://forem.com/ucodes/creating-a-simple-web-server-with-node-and-expressjs-53g6</link>
      <guid>https://forem.com/ucodes/creating-a-simple-web-server-with-node-and-expressjs-53g6</guid>
      <description>&lt;p&gt;Web server, we've all heard of them, but how do they work and how do we create one?&lt;/p&gt;

&lt;p&gt;That's the question we're going to answer today.&lt;/p&gt;

&lt;p&gt;A Web Server is a piece of software that listens to web requests sent from a client: A browser, script or mobile app. It recieves the request, extract required data, perform some operations and return a response.&lt;/p&gt;

&lt;p&gt;That's all web server is, so lets create one.&lt;/p&gt;

&lt;p&gt;Our server will be a really simple one with a single endpoint to get our information, a random cat fact and the current timestamp.&lt;/p&gt;

&lt;p&gt;Let's get our hand dirty and write some code.\n\nFirst things first, we need to install some stuff to setup our environmen.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/download" rel="noopener noreferrer"&gt;NodeJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;VsCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After installing these, open up your terminal or command prompt\n\nThe commands i'll be using are linux commands, so please look up their equivalent in you OS&lt;/p&gt;

&lt;p&gt;In the terminal create a folder and enter&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;And open it in vscode with&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;then open the terminal with Ctl + j and run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;span class="nb"&gt;touch &lt;/span&gt;index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have a package.json file and an index.js file,&lt;br&gt;
Install dependencies with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i express
npm i &lt;span class="nt"&gt;--save-dev&lt;/span&gt; nodemon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;open the package.json file and paste this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nodemon index.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.1.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nodemon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.1.10"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;Great, now we have our scripts in place&lt;/p&gt;

&lt;p&gt;create a file for fetching cat data with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch cats.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;open it and paste&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;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://catfact.ninja/fact&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getCatFact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="k"&gt;try&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fact&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&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="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to fetch cat fact&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="nf"&gt;getCatFact&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;This code will handle fetching a random cat fact and handle errors if any&lt;/p&gt;

&lt;p&gt;now in our index.js, paste this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getCatFact&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./cats.js&lt;/span&gt;&lt;span class="dl"&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;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/me&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;const&lt;/span&gt; &lt;span class="nx"&gt;currentTimestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&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;catFact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getCatFact&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;catFact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;catFact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ummuktar917@gmail.com&lt;/span&gt;&lt;span class="dl"&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;Umar Muhammad Muktar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Node/Express&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="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentTimestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;catFact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&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;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="s2"&gt;`Server running on  http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Save all files and in your terminal run&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;this will run our server on &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;open &lt;a href="http://localhost:3000/me" rel="noopener noreferrer"&gt;http://localhost:3000/me&lt;/a&gt; in your browser to see the response.&lt;/p&gt;

&lt;p&gt;Now let's explain whats going on&lt;/p&gt;

&lt;p&gt;the &lt;em&gt;cats.js&lt;/em&gt; file sends a request to &lt;a href="https://catfact.ninja/" rel="noopener noreferrer"&gt;Catfact&lt;/a&gt; to get a random cat fact and return an object with the data and other meta data&lt;/p&gt;

&lt;p&gt;the &lt;strong&gt;index.js&lt;/strong&gt; file the imports that function&lt;/p&gt;

&lt;p&gt;create the server, and create a route handler at "/me", any requests to /me goes here.&lt;br&gt;
we then create a timestamp with new Date()&lt;/p&gt;

&lt;p&gt;grab a random cat fact using our function&lt;/p&gt;

&lt;p&gt;then build a response object with our info and status based on the cat fetch status.&lt;/p&gt;

&lt;p&gt;And there we have it, we learn how to create a server with nodejs and express, consume external API and build dynamic response objects.&lt;/p&gt;

&lt;p&gt;I hope we know all know what a web server is and how to build a simple one.&lt;/p&gt;

&lt;p&gt;Follow for more     &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My Web Development Journey</title>
      <dc:creator>Umar Muktar</dc:creator>
      <pubDate>Thu, 12 Jun 2025 21:20:28 +0000</pubDate>
      <link>https://forem.com/ucodes/my-web-development-journey-3943</link>
      <guid>https://forem.com/ucodes/my-web-development-journey-3943</guid>
      <description>&lt;p&gt;It all started in August 2023, on a fateful day while scrolling through YouTube. I saw a video by Web Dev Simplified titled &lt;strong&gt;"Learn React in 40 Minutes."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I had more than 40 minutes of free time, so I clicked on it. That one video changed my life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I ALREADY KNEW HTML, CSS, JAVASCRIPT, AND PYTHON.&lt;/p&gt;

&lt;p&gt;I did the usual tutorial follow-along stuff — watched the video, copied him step by step — and by the end of the video, I had a carbon copy of his todo app.&lt;/p&gt;

&lt;p&gt;I learnt a lot from that single video — from Virtual DOM to Components to States to Props and so much more.&lt;/p&gt;

&lt;p&gt;From past experiences learning other languages and tools, I knew that one project wasn’t enough. So, I deleted everything and started from scratch.&lt;/p&gt;

&lt;p&gt;I created my own custom UI using HTML and CSS. Then, using what I learnt from the video, I built all the components from the ground up with no functionality or interactivity.&lt;br&gt;&lt;br&gt;
Next, I used my knowledge of JavaScript plus my newfound understanding of State and Props to add CRUD functionalities to the app.&lt;/p&gt;

&lt;p&gt;Just like that, I recreated the entire app myself from scratch using React — the same day I learnt it.&lt;br&gt;&lt;br&gt;
I felt on top of the world. I was so happy that I even created a Git repo and uploaded my codebase to GitHub (something I never did voluntarily).&lt;/p&gt;

&lt;p&gt;After that project, I found a repo called &lt;strong&gt;30 Days of React&lt;/strong&gt; on GitHub and followed along for the next few days. I didn’t have much internet access because of my location at that time, so luckily, I never fell into tutorial hell.&lt;/p&gt;

&lt;p&gt;A week later, it was time to build a new project to further enhance my knowledge. I’m an anime/movie lover, so I thought, &lt;em&gt;why not build a movie/anime discovery app?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That led to my next project: &lt;strong&gt;Movie Sure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built the UI in HTML and CSS, then built the components in React. I already knew how to use APIs in Python, so it wasn’t that hard to implement. Even though the code was messy, it still worked.&lt;/p&gt;

&lt;p&gt;Everything was going smoothly until I had to synchronize the search component (which was in the header) with the movie cards (which were in the main components).&lt;br&gt;&lt;br&gt;
As a beginner, I knew nothing about state managers or the Context API, so I did the most beginner thing to do — &lt;strong&gt;prop drilling.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I drilled props everywhere I needed data and everything got messy. But at long last, the app was completed — and it works. It still works today… I think.&lt;/p&gt;

&lt;p&gt;I was the proudest man on earth. I felt like I could build anything. I was so happy and proud of my newfound skill.&lt;/p&gt;

&lt;p&gt;I kept building projects and eventually… I made my first money from programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More on that in the next episode — this is getting a bit too long.&lt;br&gt;&lt;br&gt;
Follow me to get notified when the next episode drops.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A huge shoutout to my brother &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/ACoAAB5ultABz5IqsIitIMgQJmQrEXbkFibHBIE/" rel="noopener noreferrer"&gt;Abubakar Muhammad Muktar&lt;/a&gt;&lt;/strong&gt; for encouraging me and always supporting me. No matter how bad my app looked, he always complimented it and pointed out issues in a calm way.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;I love you, bro.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ll be making a &lt;strong&gt;video version&lt;/strong&gt; and doing a &lt;strong&gt;code review&lt;/strong&gt; on all the projects on my YouTube channel: &lt;a href="https://youtube.com/@ucodes880" rel="noopener noreferrer"&gt;https://youtube.com/@ucodes880&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Subscribe to get notified when it drops.&lt;/p&gt;




&lt;h3&gt;
  
  
  Links to my projects and GitHub:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://ucodes.vercel.app" rel="noopener noreferrer"&gt;https://ucodes.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/python-fuse/" rel="noopener noreferrer"&gt;https://github.com/python-fuse/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;YouTube:&lt;/strong&gt; &lt;a href="https://www.youtube.com/@ucodes880" rel="noopener noreferrer"&gt;https://www.youtube.com/@ucodes880&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 1:&lt;/strong&gt; &lt;a href="https://github.com/python-fuse/react_todo_app" rel="noopener noreferrer"&gt;https://github.com/python-fuse/react_todo_app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Project 2:&lt;/strong&gt; &lt;a href="https://movie-sure.vercel.app" rel="noopener noreferrer"&gt;https://movie-sure.vercel.app&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React vs. Next.js: A Detailed Comparison</title>
      <dc:creator>Umar Muktar</dc:creator>
      <pubDate>Mon, 01 Jul 2024 08:43:48 +0000</pubDate>
      <link>https://forem.com/ucodes/react-vs-nextjs-a-detailed-comparison-33kk</link>
      <guid>https://forem.com/ucodes/react-vs-nextjs-a-detailed-comparison-33kk</guid>
      <description>&lt;h4&gt;
  
  
  Introduction
&lt;/h4&gt;

&lt;p&gt;In the world of frontend development, React and Next.js are two powerful tools that have gained significant traction. React, a JavaScript library for building user interfaces, has been a go-to choice for developers due to its component-based architecture and flexibility. Next.js, on the other hand, is a React framework that offers additional features for server-side rendering and static site generation. In this article, we'll dive deep into the differences between React and Next.js, exploring their features, use cases, and what makes each of them shine.&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%2F452w7rv37x6tf6i9l1ug.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%2F452w7rv37x6tf6i9l1ug.png" alt="React Logo" width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  React: The Library for Building User Interfaces
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;
React is a JavaScript library developed by Facebook, designed for building dynamic user interfaces. Its component-based architecture allows developers to build reusable UI components, making code easier to manage and scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Component-Based Architecture:&lt;/strong&gt; React's components are self-contained, reusable pieces of UI that can be composed to build complex applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual DOM:&lt;/strong&gt; React uses a virtual DOM to efficiently update and render only the components that change, improving performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unidirectional Data Flow:&lt;/strong&gt; React's data flow is one-way, making it easier to understand and debug applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks:&lt;/strong&gt; React Hooks allow developers to use state and other React features without writing classes, making functional components more powerful.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why Choose React:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; React can be used to build both simple and complex applications. Its flexibility allows developers to integrate with other libraries and frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community and Ecosystem:&lt;/strong&gt; React has a large and active community, with a rich ecosystem of libraries, tools, and resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; The virtual DOM and efficient re-rendering contribute to React's performance, making it suitable for high-performance applications.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h4&gt;
  
  
  Next.js: The React Framework for Production
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;
Next.js is a React framework developed by Vercel that provides additional features for building production-ready applications. It offers server-side rendering (SSR), static site generation (SSG), Incremental Static Regeneration(ISR) and other optimizations out of the box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server-Side Rendering (SSR):&lt;/strong&gt; Next.js can pre-render pages on the server, improving SEO and initial load times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Site Generation (SSG):&lt;/strong&gt; Next.js can generate static HTML pages at build time, which can be served quickly and efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incremental Static Regeneration(ISR):&lt;/strong&gt; Next.Js allows you to create or update static pages after you’ve built your site. Incremental Static Regeneration (ISR) enables you to use static-generation on a per-page basis, without needing to rebuild the entire site. With ISR, you can retain the benefits of static while scaling to millions of pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Routes:&lt;/strong&gt; Next.js allows developers to create API endpoints directly within the application, simplifying backend integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Code Splitting:&lt;/strong&gt; Next.js automatically splits code to ensure faster page loads and better performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File-Based Routing:&lt;/strong&gt; Next.js uses a file-based routing system, making it easy to create routes by simply adding files to the pages directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why Choose Next.js:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance and SEO:&lt;/strong&gt; SSR and SSG improve performance and SEO, making Next.js ideal for web applications that require fast load times and search engine visibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Experience:&lt;/strong&gt; Next.js offers a great developer experience with built-in features like API routes, automatic code splitting, and file-based routing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Next.js is designed to scale with your application, providing features that help manage growing projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  React vs. Next.js: A Side-by-Side Comparison
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;React&lt;/th&gt;
&lt;th&gt;Next.js&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Library&lt;/td&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendering&lt;/td&gt;
&lt;td&gt;Client-Side Rendering (CSR)&lt;/td&gt;
&lt;td&gt;Server-Side Rendering (SSR), Static Site Generation (SSG)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;Custom (using React Router or similar)&lt;/td&gt;
&lt;td&gt;File-Based Routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;Requires additional configuration&lt;/td&gt;
&lt;td&gt;Built-in support with SSR and SSG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Efficient with virtual DOM&lt;/td&gt;
&lt;td&gt;Enhanced with SSR, SSG, and automatic code splitting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Custom setup&lt;/td&gt;
&lt;td&gt;Simplified with Vercel, easy deployment options&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Use Cases and When to Choose Each
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;When to Choose React:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building highly interactive user interfaces.&lt;/li&gt;
&lt;li&gt;Developing applications where client-side rendering is sufficient.&lt;/li&gt;
&lt;li&gt;Needing maximum flexibility in choosing libraries and tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Choose Next.js:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building SEO-friendly websites with fast load times.&lt;/li&gt;
&lt;li&gt;Needing server-side rendering or static site generation out of the box.&lt;/li&gt;
&lt;li&gt;Simplifying deployment and scaling with built-in features and optimizations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Both React and Next.js are powerful tools for building modern web applications. React offers unparalleled flexibility and a strong community, making it a great choice for a wide range of projects. Next.js, as a framework built on top of React, adds valuable features for server-side rendering, static site generation, and more, making it ideal for production-ready applications with a focus on performance and SEO.&lt;/p&gt;

&lt;p&gt;Choosing between React and Next.js ultimately depends on your project requirements and goals. If you need a flexible, customizable solution, React is a solid choice. If you're looking for out-of-the-box optimizations and features that simplify development and deployment, Next.js is the way to go.&lt;/p&gt;

&lt;p&gt;For more insights and resources, check out my previous articles and stay tuned for more in-depth comparisons and tutorials!&lt;/p&gt;




&lt;p&gt;Umar Muktar.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Exploring Frontend Technologies: Svelte vs. SolidJS</title>
      <dc:creator>Umar Muktar</dc:creator>
      <pubDate>Fri, 28 Jun 2024 23:56:52 +0000</pubDate>
      <link>https://forem.com/ucodes/exploring-frontend-technologies-svelte-vs-solidjs-1gjh</link>
      <guid>https://forem.com/ucodes/exploring-frontend-technologies-svelte-vs-solidjs-1gjh</guid>
      <description>&lt;p&gt;As a web developer, you're likely familiar with the popular frontend frameworks and libraries like React, Angular, and Vue. However, today I want to introduce you to two lesser-known but equally exciting technologies: Svelte and SolidJS. Both are modern frontend tools that offer unique approaches to building user interfaces, and each has its own strengths and weaknesses. In this article, we'll dive into what makes Svelte and SolidJS stand out and why you might consider using them in your next project.&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%2F34p0fivvohaz8fo7mi7j.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%2F34p0fivvohaz8fo7mi7j.png" alt="Image description" width="426" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://solidjs.com" rel="noopener noreferrer"&gt;Svelte: The Compiler Framework&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;
Svelte is a relatively new frontend framework that takes a different approach compared to traditional frameworks. Instead of doing most of the work in the browser, Svelte shifts that work to compile time. This means that your Svelte components are converted into highly efficient imperative code that updates the DOM when the state of your app changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No Virtual DOM:&lt;/strong&gt; Svelte does away with the virtual DOM, which reduces the overhead associated with diffing and patching. This can result in better performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reactivity:&lt;/strong&gt; Svelte's reactivity model is simple and intuitive. It uses assignments to trigger updates, which can make your code easier to understand and maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Use:&lt;/strong&gt; Svelte offers a more straightforward syntax that can be more approachable for beginners and can reduce the amount of boilerplate code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why Choose Svelte:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Because it compiles your code to highly efficient JavaScript, Svelte apps can be incredibly fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity:&lt;/strong&gt; The reactivity model and lack of a virtual DOM make Svelte code cleaner and easier to follow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small Bundle Sizes:&lt;/strong&gt; Svelte's compilation step can result in smaller bundle sizes, which is great for performance.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;a href="https://svelte.dev" rel="noopener noreferrer"&gt;SolidJS: The Reactive Framework&lt;/a&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;
SolidJS is another innovative frontend library that emphasizes fine-grained reactivity and high performance. Like Svelte, SolidJS does not use a virtual DOM, but it achieves reactivity in a different way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fine-Grained Reactivity:&lt;/strong&gt; SolidJS tracks dependencies at a very granular level, which allows it to update the DOM with minimal re-renders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSX Support:&lt;/strong&gt; SolidJS uses JSX for its templating, making it familiar to developers who have worked with React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small and Fast:&lt;/strong&gt; SolidJS is designed to be lightweight and fast, often resulting in smaller bundle sizes and quicker performance than many other frameworks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why Choose SolidJS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; The fine-grained reactivity model can lead to highly optimized updates and efficient performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Compatibility:&lt;/strong&gt; If you're coming from a React background, the JSX syntax will feel familiar, making the transition easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; SolidJS offers a flexible approach to building components, allowing developers to write highly optimized and readable code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ReactJS in HNG: My Journey
&lt;/h4&gt;

&lt;p&gt;As part of the HNG Internship program, I'm diving deep into ReactJS, a library that's already a staple in the frontend development world. React's component-based architecture and extensive ecosystem make it a powerful tool for building complex, interactive web applications. At HNG, I'm excited to leverage React to create scalable and maintainable applications while learning best practices from industry experts.&lt;/p&gt;

&lt;p&gt;My journey with HNG has been quite eventful. During my first attempt, my PC broke down, which unfortunately led to my disqualification. It was a challenging time, but I didn't give up. Now, I'm back, more determined than ever to complete the program and excel in React development. You can check out one of my projects from that time at &lt;a href="https://movie-sure.vercel.app" rel="noopener noreferrer"&gt;movie-sure.vercel.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What makes React special in my journey is its versatility and the strong community support. Whether it's state management with hooks or performance optimizations, React offers solutions that are both elegant and efficient. Through HNG, I aim to master these aspects and contribute to innovative projects.&lt;/p&gt;

&lt;p&gt;If you're interested in learning more about the HNG Internship program, check out their &lt;a href="https://hng.tech/internship" rel="noopener noreferrer"&gt;internship page&lt;/a&gt; and the &lt;a href="https://hng.tech/hire" rel="noopener noreferrer"&gt;hire page&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;I hope you find this comparison of Svelte and SolidJS interesting and informative. Each of these technologies has its own unique strengths, and depending on your project requirements, one might be a better fit than the other. As for me, I'm thrilled to be honing my React skills at HNG and can't wait to see where this journey takes me!&lt;/p&gt;




</description>
    </item>
  </channel>
</rss>
