<?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: Izuchukwu Alaneme</title>
    <description>The latest articles on DEV Community by Izuchukwu Alaneme (@rockhillz).</description>
    <link>https://dev.to/rockhillz</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%2F1924906%2Fd65b160c-d4ca-4456-8f4e-5a7c33dbc3d2.png</url>
      <title>DEV Community: Izuchukwu Alaneme</title>
      <link>https://dev.to/rockhillz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rockhillz"/>
    <language>en</language>
    <item>
      <title>Stop Rewriting the Same Node Utilities — I Built nodecore-kit Instead</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Sun, 15 Mar 2026 12:01:03 +0000</pubDate>
      <link>https://dev.to/rockhillz/stop-rewriting-the-same-node-utilities-i-built-nodecore-kit-instead-3eoc</link>
      <guid>https://dev.to/rockhillz/stop-rewriting-the-same-node-utilities-i-built-nodecore-kit-instead-3eoc</guid>
      <description>&lt;p&gt;If you build backend applications with Node.js regularly, you’ve probably noticed a pattern.&lt;/p&gt;

&lt;p&gt;Every new project seems to require the same set of utilities:&lt;br&gt;
Error classes&lt;br&gt;
JWT helpers&lt;br&gt;
Logging utilities&lt;/p&gt;

&lt;p&gt;And most of the time, developers end up copy-pasting the same code from previous projects.&lt;br&gt;
I’ve done this more times than I can count.&lt;br&gt;
After repeating this process across several projects, I decided to stop rewriting the same utilities and instead package them into a reusable toolkit.&lt;br&gt;
That’s how &lt;strong&gt;&lt;code&gt;nodecore-kit&lt;/code&gt;&lt;/strong&gt; was born.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is nodecore-kit?
&lt;/h2&gt;

&lt;p&gt;nodecore-kit is a lightweight utility toolkit designed to simplify backend development in Node.js applications.&lt;/p&gt;

&lt;p&gt;Instead of recreating common backend helpers in every project, you can install one package and get access to a collection of reusable utilities designed for modern backend workflows.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reduce boilerplate and keep your backend code clean and consistent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;While working on multiple backend services, I noticed the same problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilities scattered across projects&lt;/li&gt;
&lt;li&gt;Slightly different implementations of the same logic&lt;/li&gt;
&lt;li&gt;Rewriting helper functions every time a new project starts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, almost every project needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom error handling&lt;/li&gt;
&lt;li&gt;JWT token utilities&lt;/li&gt;
&lt;li&gt;Logging helpers
Instead of copying these utilities from one repository to another, I decided to centralize them in a single reusable package.
This also helps maintain consistency across different services and codebases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;You can install nodecore-kit from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;nodecore-kit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or with yarn:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add nodecore-kit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Example Usage
&lt;/h2&gt;

&lt;p&gt;Here are a few examples of how nodecore-kit can simplify common backend tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;jwt helpers:
&lt;/li&gt;
&lt;/ul&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;jwtService&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;nodecore-kit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Encode&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&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;jwtService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;secretKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&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="c1"&gt;// Decode + verify&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&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;jwtService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;decode&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&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="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;secretKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="o"&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;ul&gt;
&lt;li&gt;Joi Validation:
&lt;/li&gt;
&lt;/ul&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="nx"&gt;Joi&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;joi&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;joiMiddleware&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;joiValidate&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;nodecore-kit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createUserSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Joi&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Joi&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;required&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="nx"&gt;Joi&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;email&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// As Express middleware&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nf"&gt;joiMiddleware&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;createUserSchema&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Joi&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;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Joi&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;uuid&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;required&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="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;paginationSchema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;allowUnknown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;createUser&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;ul&gt;
&lt;li&gt;Http and async utilites:
&lt;/li&gt;
&lt;/ul&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;makeRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retry&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;nodecore&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;kit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Simple GET&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;makeRequest&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/users/1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// POST with typed body&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;post&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;makeRequest&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CreatePostDto&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-jwt-token&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="c1"&gt;// With retry + timeout&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;makeRequest&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Data&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/slow-endpoint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&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;Also nodecore-kit also include some popular infras like &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;sqs&lt;/code&gt;, s3 etc. Making it easy to simply plug and play.&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;SQS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;S3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Redis&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;nodecore-kit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redis&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;Redis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;redis://localhost:6379&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Core ops&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&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;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&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;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bar&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;1 hour&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;value&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;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MyType&lt;/span&gt;&lt;span class="o"&gt;&amp;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;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;SQS&lt;/em&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;sqs&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;SQS&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;us-east-1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;accessKeyId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;secretAccessKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_SECRET&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

 &lt;span class="c1"&gt;// Enqueue&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sqs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;queueUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://sqs.us-east-1.amazonaws.com/1234/my-queue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user.created&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;userId&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="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;sqs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;queueUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://sqs.us-east-1.amazonaws.com/1234/my-queue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;consumerFunction&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;message&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;await&lt;/span&gt; &lt;span class="nf"&gt;processMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;dlqUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://sqs.us-east-1.amazonaws.com/1234/my-dead-letter-queue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;useRedrivePolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  When Should You Use nodecore-kit?
&lt;/h2&gt;

&lt;p&gt;You might find nodecore-kit useful if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build Node.js APIs frequently&lt;/li&gt;
&lt;li&gt;Want consistent utilities across projects&lt;/li&gt;
&lt;li&gt;Prefer cleaner backend code with less boilerplate&lt;/li&gt;
&lt;li&gt;Work on microservices or multiple backend services
Instead of rewriting the same helper functions repeatedly, you can rely on a centralized toolkit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;The goal of nodecore-kit isn’t to replace frameworks.&lt;br&gt;
It’s simply to provide small, practical utilities that most backend projects need. Think of it as a developer toolkit for common backend patterns.&lt;/p&gt;
&lt;h2&gt;
  
  
  Feedback and Contributions
&lt;/h2&gt;

&lt;p&gt;I’m actively improving nodecore-kit and would love feedback from other developers.&lt;br&gt;
If you find it useful, feel free to:&lt;br&gt;
⭐ Star the repository&lt;br&gt;
🐛 Report issues&lt;br&gt;
🔧 Submit pull requests&lt;/p&gt;

&lt;p&gt;Open source tools get better through collaboration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check it out&lt;/strong&gt;&lt;br&gt;
Github repo: 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Rockhillz" rel="noopener noreferrer"&gt;
        Rockhillz
      &lt;/a&gt; / &lt;a href="https://github.com/Rockhillz/nodeCore-kit" rel="noopener noreferrer"&gt;
        nodeCore-kit
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A utility for nodejs developers
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;nodecore-kit&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;A modular backend SDK for Node.js services.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Provides infrastructure helpers, utilities, and microservice building blocks in a clean, scalable, and framework-agnostic way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/nodecore-kit" rel="nofollow noopener noreferrer"&gt;View on npm&lt;/a&gt;&lt;/p&gt;




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

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Infrastructure&lt;/h3&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; — get/set/expire, scan, hash ops, auth cache helpers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQS&lt;/strong&gt; — enqueue, long-poll dequeue, DLQ support, graceful stop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3&lt;/strong&gt; — upload, download, stream, copy, signed URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron&lt;/strong&gt; — job scheduler with human-readable shorthands, overlap protection, per-job status tracking, and graceful shutdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailer&lt;/strong&gt; — provider-agnostic email adapter with SMTP, Resend, and SendGrid support&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(Future: Kafka, etc.)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;HTTP Utilities&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;makeRequest&lt;/code&gt; — typed, generic fetch wrapper with retry and timeout&lt;/li&gt;
&lt;li&gt;Pagination helpers&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Core Utilities&lt;/h3&gt;

&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;code&gt;uuid&lt;/code&gt; — binary/string conversion, generation, FIFO support, validation&lt;/li&gt;

&lt;li&gt;String utilities — &lt;code&gt;camelCase&lt;/code&gt;, &lt;code&gt;snakeCase&lt;/code&gt;, &lt;code&gt;kebabCase&lt;/code&gt;, &lt;code&gt;pascalCase&lt;/code&gt;, &lt;code&gt;truncate&lt;/code&gt;, &lt;code&gt;maskString&lt;/code&gt;, and more&lt;/li&gt;

&lt;li&gt;Validator utilities — &lt;code&gt;isEmail&lt;/code&gt;, &lt;code&gt;isURL&lt;/code&gt;, &lt;code&gt;isUUID&lt;/code&gt;, &lt;code&gt;isEmpty&lt;/code&gt;, &lt;code&gt;isNil&lt;/code&gt;, and more&lt;/li&gt;

&lt;li&gt;Object utilities — &lt;code&gt;flattenObject&lt;/code&gt;, &lt;code&gt;unflattenObject&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Async utilities — &lt;code&gt;sleep&lt;/code&gt;…&lt;/li&gt;

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



&lt;p&gt;&lt;br&gt;&lt;br&gt;
npm library: &lt;a href="https://www.npmjs.com/package/nodecore-kit" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.npmjs.com/package/nodecore-kit" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/nodecore-kit&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Building backend services often involves repeating the same patterns over and over again.&lt;br&gt;
Creating nodecore-kit helped me eliminate a lot of repetitive setup work and focus more on building actual application logic. If you also find yourself rewriting the same utilities across projects, a small toolkit like this might save you some time.&lt;/p&gt;

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

</description>
      <category>node</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Generate a Secure JWT Secret Using Node.js</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Wed, 08 Jan 2025 08:51:05 +0000</pubDate>
      <link>https://dev.to/rockhillz/how-to-generate-a-secure-jwt-secret-using-nodejs-3n57</link>
      <guid>https://dev.to/rockhillz/how-to-generate-a-secure-jwt-secret-using-nodejs-3n57</guid>
      <description>&lt;p&gt;When working with JSON Web Tokens (JWT) in your applications, ensuring that your secret key is strong and secure is crucial. A secure JWT secret helps protect your application from unauthorized access and ensures the integrity of your data. In this article, we will walk you through a simple method to generate a random, secure JWT secret using Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use a Secure JWT Secret?
&lt;/h2&gt;

&lt;p&gt;The JWT secret is used to sign and verify tokens in your application. If the secret is weak or predictable, attackers could forge tokens and gain unauthorized access to your application. This is why it’s essential to use a strong, randomly generated secret.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating a Secure JWT Secret
&lt;/h2&gt;

&lt;p&gt;Node.js provides a built-in crypto module that allows us to generate secure random data. To generate a 256-bit (32-byte) JWT secret, use the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What This Command Does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;require('crypto'): Imports the crypto module, which provides cryptographic functionalities.&lt;/li&gt;
&lt;li&gt;randomBytes(32): Generates 32 random bytes of data (256 bits).&lt;/li&gt;
&lt;li&gt;.toString('hex'): Converts the random bytes into a hexadecimal string, which is easier to store and use as a secret.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example Output&lt;/strong&gt;&lt;br&gt;
Running the above command will generate a secure JWT secret similar to this:&lt;br&gt;
&lt;code&gt;e3ff5f077839c1331b1d893a728246685cb7dba9e3a77bffe7d52eaccf660988&lt;/code&gt;&lt;br&gt;
This 64-character hexadecimal string is your randomly generated secret key. Use it in your application to sign and verify JWTs&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Use the JWT Secret
&lt;/h2&gt;

&lt;p&gt;Once you have your secret, you can store it in your environment variables for security purposes. For example, in a &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then, in your application, you can access the secret like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require('dotenv').config();
const jwt = require('jsonwebtoken');

const token = jwt.sign({ userId: 123 }, process.env.JWT_SECRET, { expiresIn: '1h' });
console.log(token);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Generating a secure JWT secret is a critical step in securing your application. By using the crypto module in Node.js, you can easily generate a strong secret and ensure your tokens are well-protected. Remember to keep your secret safe by storing it in environment variables and never exposing it in your code repository.&lt;/p&gt;

</description>
      <category>node</category>
      <category>express</category>
      <category>webdev</category>
      <category>jwt</category>
    </item>
    <item>
      <title>Javascript is HARD (with ES6 madness)</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Thu, 26 Sep 2024 21:50:15 +0000</pubDate>
      <link>https://dev.to/rockhillz/javascript-is-hard-with-es6-madness-47j9</link>
      <guid>https://dev.to/rockhillz/javascript-is-hard-with-es6-madness-47j9</guid>
      <description>&lt;p&gt;This will be a long read but Let me say it again. &lt;br&gt;
&lt;strong&gt;JAVASCRIPT&lt;/strong&gt; is hard. last we met, i was stepping into the world of Javascript, bright-eyed, hopeful coder stepping into the wild jungle saying "How hard could it be?". How wrong i was😂😂. It got harder, I'm surviving (barely), here's a little chaotic story about my journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variables: beginning of madness&lt;/strong&gt;&lt;br&gt;
Variables are containers that holds values, where you store or manipulate data. I mean, why do we have 3 ways to create them: var, let, and const? why? &lt;em&gt;laugh in ES6&lt;/em&gt;. &lt;br&gt;
&lt;em&gt;var&lt;/em&gt;: They said var is a loose cannon. like playing a game of chance. Don't go near it.&lt;br&gt;
&lt;em&gt;let&lt;/em&gt;: Great for variables that can change. Easier to manage. &lt;br&gt;
&lt;em&gt;Const&lt;/em&gt;: is for values that stay the same. immovable. Ohh — const doesn't mean the value can’t change, it just means you can’t reassign it.&lt;br&gt;
&lt;strong&gt;Note:&lt;/strong&gt; ECMAScript 2015 or ES6 was the second major revision to JavaScript.&lt;br&gt;
Ooh, we said goodbye to String Concatenation, Hello Template Literals. With Template literals You can now use backticks and embed variables easily with ${}. Life became a little easier here, but figuring out when to use backticks vs quotes? Another mind-bender.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Good old concat
const message = "Hi, " + name + ". You are " + age + " years old.";
// Template literal
const message = `Hi, ${name}! You are ${age} years old.`;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Functions: AKA Mr. Reusability, Mr. Maintainability...&lt;/strong&gt;&lt;br&gt;
A Function is a set of statement that performs a task. Consists of the function keyword, function name, parameter or not, Js statement in curly bracket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function greet() {
  console.log("Hello, fellow strugglers😎!");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They seemed simple at first: encapsulate some logic, call it (i say invoke it), and boom! You’re coding.&lt;br&gt;
Then ES6 said "This is arrow functions, use it". Arrow functions look simple, right? Just a short way to write functions. Took a while i got the syntax.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const greet = () =&amp;gt; {
   console.log("Hello, fellow strugglers😎!");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Loops: Dancing with the Infinite.&lt;/strong&gt;&lt;br&gt;
The Many Ways to Suffer. Loops can execute a block of code a number of times. They are handy, if you want to run the same code over and over again, each time with a different value. They are many:&lt;br&gt;
&lt;em&gt;1. While Loop:&lt;/em&gt; keeps looping as long as the condition is true. Evil. and I'm not talking about its cousin, do-while.&lt;br&gt;
&lt;em&gt;2. for Loop:&lt;/em&gt; Good old for loop, my man. the trusty for loop. So familiar. So safe and So full of potential to throw infinite loops when you forget to increment a variable.&lt;br&gt;
&lt;em&gt;3. forEach:&lt;/em&gt; which is like the for loop’s cooler, more hipster cousin. It doesn’t need counters, doesn't take me to infinite. my man.&lt;br&gt;
&lt;em&gt;4. &amp;amp; 5.&lt;/em&gt; for..in and for..of: One’s great for looping over objects, the other is meant for iterating over arrays. I keep mixing them up and i learn through pain. still learning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//for loop
for (let i = 0; i &amp;lt; 10; i++) {
  console.log(i); // Simple. Right? RIGHT?!
}

// forEach
let numbers = [1, 2, 3, 4, 5];
numbers.forEach(num =&amp;gt; console.log(num));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Arrays: The list that keeps hunting&lt;/strong&gt;&lt;br&gt;
Arrays started out so promisingly. A simple list of items. Push things in, pull things out. Easy, right?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let shoppingList = ["apples", "bananas", "chocolate"];
shoppingList.push("ice cream");
console.log(shoppingList); // ['apples', 'bananas', 'chocolate', 'ice cream']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter filter, map, and find and the rest of the array method gang. My brain hasn’t been the same since.&lt;br&gt;
The filter() method creates a new array filled with elements that pass a test provided by a function. &lt;br&gt;
The find() method returns the value of the first element that passes a test. Array methods are so many, i need documentation for each😉, i mean there's length, splice, slice, join, pop, push, unshift, shift, map.., lets stop here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let numbers = [1, 2, 3, 4, 5];
let evenNumbers = numbers.filter(num =&amp;gt; num % 2 === 0);
console.log(evenNumbers); // [2, 4]

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Objects: The Confusing Cousin of Arrays&lt;/strong&gt;&lt;br&gt;
Then came objects. Objects are kind of like arrays, but with keys and value. I was like, “Cool, I can handle this.” But then JavaScript threw in methods, and suddenly objects were doing things on their own. And then array of objects entered the equation. Accessing properties I'm either using dot notation or bracket notation. And don't get me started with &lt;strong&gt;.this&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Without method
let shoppingCart = {
  apples: 3,
  bananas: 2,
  chocolate: 1
};
// with method
let cart = {
  items: ["apple", "banana"],
  addItem(item) {
    this.items.push(item);
  }
};
cart.addItem("chocolate");
console.log(cart.items); // ['apple', 'banana', 'chocolate']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;DOM Manipulation: Where the Real Struggles Began&lt;/strong&gt;&lt;br&gt;
Once I felt confident with arrays and objects, I thought, “Time to manipulate the DOM! I’m practically a web developer now!” You know nothing, Ygritte famously said.&lt;br&gt;
This should be easy, i said again. Just grab an element and change it. If its an ID, getElementbyId is there for me. A class getElementsbyClassName is also there or queryselector and the one with All its brother.&lt;br&gt;
And then there’s this whole addEventListener business. Sure, it works, but sometimes, events seem to fire off like they have a mind of their own. &lt;br&gt;
Then i tried creating a shopping cart. Took me days and lots of SOS signal to my learned colleagues. Here I'm appendChild, removingChild, creatingElements, grabbing elements, setting attributes, styling, calling functions upon functions. &lt;br&gt;
Then boldly added a mock database; me and array manipulation again. I'm accessing, I'm pushing, I'm finding, I'm tired (gets up again).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imports and Exports: Boldly sharing the Madness😂🤣&lt;/strong&gt;&lt;br&gt;
At some point, I had written so much JavaScript that I needed to modularize my code. Enter import and export.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Copy code
// module.js
export function greet() {
  console.log("Hello from the module!");
}

// main.js
import { greet } from './module.js';
greet();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I thought breaking my code into smaller pieces would make it easier. Little did I know, I would end up importing a mountain of confusion.&lt;/p&gt;

&lt;p&gt;Now I'm about to start Object-Oriented Programming (OOP) sounds fancy, But let me enjoy my weekend first before i get lost again.&lt;br&gt;
Thanks for staying till the end. The goal still remains 1% better everyday. #ES6 #CodingStruggles #WebDevelopment #JavaScriptMadness #ProgrammingHumor #LearnToCode #WebDevelopment #HTML #CSS #ResponsiveDesign #CodingJourney&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>100daysofcode</category>
      <category>webdev</category>
      <category>coding</category>
    </item>
    <item>
      <title>An update on my learning!</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Mon, 09 Sep 2024 20:17:03 +0000</pubDate>
      <link>https://dev.to/rockhillz/an-update-on-my-learning-2d33</link>
      <guid>https://dev.to/rockhillz/an-update-on-my-learning-2d33</guid>
      <description>&lt;p&gt;🚀 It's been almost a week since I last shared my journey in web development, and I've made some exciting progress!&lt;br&gt;
Last week we touched CSS frameworks. Bootstrap and tailwind.&lt;br&gt;
Let me give you a quick rundown; Bootstrap offers a grid layout and pre-designed components, making it easy and faster to create responsive designs. Tailwind provides more flexibility with utility classes, helping to style elements quickly without writing custom CSS(still finding my way round tailwind). Now over the week, i completed three projects and they are all responsive🎉🥳:&lt;br&gt;
1) An E-commerce Website using Bootstrap – diving deep into its responsive grid system and components. Really proud of this one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfwig6udzdzub6461mw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfwig6udzdzub6461mw5.png" alt="E-commerce landing page" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lz35in6ycuke4v17ggx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lz35in6ycuke4v17ggx.png" alt="Still on E-commerce" width="448" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhptprb3zz8m4eoua0j3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhptprb3zz8m4eoua0j3h.png" alt="E-commerce footer" width="679" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) A Blog with Tailwind CSS – still need more work. Kind of having a little hard time with tailwind CSS, but this too shall pass😁😊&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlqe6z4bhnhvocz7on02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlqe6z4bhnhvocz7on02.png" alt="Blog post homepage" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) My Portfolio Website – crafted with pure CSS (and just a touch of Bootstrap(containers class)). A work in progress. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupzpyvw0yfhu8l4x32bh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupzpyvw0yfhu8l4x32bh.png" alt="My portfolio website" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8u9wml5waz7ei4aumlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8u9wml5waz7ei4aumlj.png" alt="continuation of portfolio page" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today i started javascript to add functionalities to the webpages(fingers crossed 😂).&lt;br&gt;
The goal still remain the same: 1% better everyday.&lt;br&gt;
criticisms and questions can come in the comment section. Thanks&lt;/p&gt;

&lt;p&gt;🧩💻 #CodeNewbie #HTML #WebDevelopment #TechJourney #Programming #100DaysOfCode #DeveloperCommunity&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>100daysofcode</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Designed a 404 page</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Mon, 26 Aug 2024 20:05:39 +0000</pubDate>
      <link>https://dev.to/rockhillz/designed-a-404-page-3hd2</link>
      <guid>https://dev.to/rockhillz/designed-a-404-page-3hd2</guid>
      <description>&lt;p&gt;Today i designed a 404 error page! Built the structure in HTML and styled it with CSS. And also made it fully responsive using &lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; queries, so it looks great on mobile. Learning and improving every day! The goal: 1% better everyday 💻 #WebDevelopment #HTML #CSS #ResponsiveDesign #CodingJourney&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n1kyf2c604qoheifp3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n1kyf2c604qoheifp3q.png" alt="desktop version of the 404 page" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rqcusmvsoviqpmbv2db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rqcusmvsoviqpmbv2db.png" alt="Mobile version of the page" width="384" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>html</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Learning CSS: My First Steps in Styling Web Pages</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Wed, 21 Aug 2024 19:40:35 +0000</pubDate>
      <link>https://dev.to/rockhillz/learning-css-my-first-steps-in-styling-web-pages-53jj</link>
      <guid>https://dev.to/rockhillz/learning-css-my-first-steps-in-styling-web-pages-53jj</guid>
      <description>&lt;p&gt;Between Monday and today, I took a significant step forward by diving deeper into CSS, a styling language that breathe into web pages. 🌐&lt;/p&gt;

&lt;p&gt;Started by learning the essentials—selectors, code blocks, declarations, and their values. It was exciting to see how a few lines of code could transform plain HTML into something visually appealing. In CSS, styling can be achieved in three ways: Inline styling (by adding the style attribute in the opening tag), Internal styling (by adding the style element in the head section) and lastly, external styling (by creating a .css file and linking it to the .html file). Now for best practice, we're to use external styling.🎨&lt;/p&gt;

&lt;p&gt;By linking an external stylesheet to our HTML, we were able to apply consistent styles across multiple pages. I experimented with different colors, font types, borders, and margins,paddings and even apply colors to pseudo-class.&lt;/p&gt;

&lt;p&gt;We also explored how to target various containers on the page using IDs and classes. By assigning IDs for unique elements and classes for groups of similar elements, I was able to style sections with precision. This method allowed me to create a clean, organized layout, with each part of the page styled exactly as I envisioned.&lt;/p&gt;

&lt;p&gt;I’m excited to keep pushing forward, learning more, and sharing my progress with you all and becoming. My goal is to be at least 1% better everyday (small right. I know). The journey has just begun, and there’s so much more to create!&lt;/p&gt;

&lt;h1&gt;
  
  
  CodeNewbie #CSS #WebDevelopment #TechJourney #CodingLife #LearnToCode
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7p2zy0ntwteb92jx319u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7p2zy0ntwteb92jx319u.png" alt="HTML code" width="800" height="406"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmc687vc2rknb9kynsym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmc687vc2rknb9kynsym.png" alt="CSS Code" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyo40v3qn9grahiucje2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyo40v3qn9grahiucje2.png" alt="Webpage before CSS" width="800" height="373"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbv5n4ahl830go2g8c96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbv5n4ahl830go2g8c96.png" alt="Applying CSS" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Building Web Pages Step by Step: Exploring Structure and Elements in HTML</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Wed, 14 Aug 2024 19:11:47 +0000</pubDate>
      <link>https://dev.to/rockhillz/building-web-pages-step-by-step-exploring-structure-and-elements-in-html-5198</link>
      <guid>https://dev.to/rockhillz/building-web-pages-step-by-step-exploring-structure-and-elements-in-html-5198</guid>
      <description>&lt;p&gt;🌟 Today marks a key step in my software development journey! 🚀 I wrote my first lines of code, diving into the essentials of HTML. Covered elements and tags. Yesterday, I explored the boxing technique to structure websites, and today I put it into practice by creating sections like headers, footers, and content areas. I also added various HTML elements, including image elements and link elements, and even tried my hand at inner linking on a single-page website. It’s amazing to see how these pieces fit together to build a functional and organized webpage. Can’t wait to keep learning and creating! 💻🛠️ #CodeNewbie #WebDevelopment #HTML #CSS #LearningToCode&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduevv5ycbpknhl0zfrgr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduevv5ycbpknhl0zfrgr.png" alt="Code" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7ozez18knxyp326w3d7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7ozez18knxyp326w3d7.png" alt="Output" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
      <category>learningtocode</category>
    </item>
    <item>
      <title>Started Learning Software Development</title>
      <dc:creator>Izuchukwu Alaneme</dc:creator>
      <pubDate>Tue, 13 Aug 2024 18:52:06 +0000</pubDate>
      <link>https://dev.to/rockhillz/started-learning-software-development-3neh</link>
      <guid>https://dev.to/rockhillz/started-learning-software-development-3neh</guid>
      <description>&lt;p&gt;Started my software development journey and I'm here to document my journey.&lt;/p&gt;

&lt;p&gt;started learning about Git and Github. Using basic Git command lines to run task like creating a repository, making branches etc. and then pushing to the remote environment, Github. Also learnt about the Github workflow&lt;br&gt;
Today, i dived into html. No coding yet. but learnt the basic principle of designing a responsive website, which is boxing. now boxing is a way of breaking down a website design into manageable sections, each represented as a "box." These boxes correspond to different parts of the website's layout, such as headers, footers, sidebars, or content areas. This approach makes it easier to structure the site and style it with CSS. we do this by starting the box from outside to inside. its like building a house! 🧩💻 #CodeNewbie #HTML #WebDevelopment #TechJourney #Programming #100DaysOfCode #DeveloperCommunity&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
    </item>
  </channel>
</rss>
