<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Karthik Dev Articles]]></title><description><![CDATA[Full Stack Developer | Blogger | UX Design]]></description><link>https://karthikdevarticles.com</link><generator>RSS for Node</generator><lastBuildDate>Mon, 18 May 2026 19:11:23 GMT</lastBuildDate><atom:link href="https://karthikdevarticles.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I Created an Interview CLI with Node.js for self-interview preparation]]></title><description><![CDATA[Hi Guys, In this article, we will focus on topics of Node.js, CLI, and Interview Preparation.
I have created a self-interview preparation CLI toolkit, which will show me random questions whenever I run a CLI command called "interview".
Sounds cool ri...]]></description><link>https://karthikdevarticles.com/how-i-created-an-interview-cli-with-nodejs-for-self-interview-preparation</link><guid isPermaLink="true">https://karthikdevarticles.com/how-i-created-an-interview-cli-with-nodejs-for-self-interview-preparation</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[interview]]></category><category><![CDATA[React]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[#codenewbies]]></category><dc:creator><![CDATA[Karthik]]></dc:creator><pubDate>Sat, 02 Oct 2021 18:48:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1633199687785/KI6BeNIKE.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi Guys, In this article, we will focus on topics of Node.js, CLI, and Interview Preparation.</p>
<p>I have created a self-interview preparation CLI toolkit, which will show me random questions whenever I run a CLI command called "interview".</p>
<p>Sounds cool right.</p>
<h2 id="heading-purpose">Purpose</h2>
<p>I felt I would require a real-time experience of attending an interview, but I wanted to have control over what I could be expecting, and still having the random unexpectedness of attending an interview.</p>
<p>This simple project I felt was in the right direction.</p>
<h2 id="heading-prerequisitestools-required">Prerequisites/Tools required.</h2>
<ol>
<li>Latest version of  <a target="_blank" href="https://nodejs.org/">Node.js</a> installed(I used v14.18.0)</li>
<li>Text editor - <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> </li>
</ol>
<p>Next, open your project folder and enter the below commands to create and initiate the node.js project setup.</p>
<pre><code>mkdir interview<span class="hljs-operator">-</span>cli
cd interview<span class="hljs-operator">-</span>cli
npm init <span class="hljs-operator">-</span>y
</code></pre><p>Next, open the interview-cli folder and create a bin folder and an index.js file within it.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1633186344733/tne5Iyehm.png" alt="image.png" /></p>
<pre><code><span class="hljs-comment">//bin/index.js</span>
#!<span class="hljs-regexp">/usr/</span>bin/env node

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Welcome to the Mock Interview!!"</span>);
</code></pre><p>A string that begins with <code>#!</code> is called a “shebang”. With this string, we are explicitly stating the command line/terminal to run our script with <code>node</code>.</p>
<p>Now open the <code>package.json</code> file and update the <code>main</code> key value to the path <code>"bin/index.js"</code> and append a new key <code>bin</code> with the below code.</p>
<pre><code><span class="hljs-string">"bin"</span>: {
    <span class="hljs-string">"interview"</span>: <span class="hljs-string">"./bin/index.js"</span>
 }
</code></pre><blockquote>
<p>Make sure you add a comma(",") to the end of the previous line for the above step.</p>
</blockquote>
<p>Your <code>package.json</code> must look like this.</p>
<pre><code>{
  <span class="hljs-attr">"name"</span>: <span class="hljs-string">"interview-cli"</span>,
  <span class="hljs-attr">"version"</span>: <span class="hljs-string">"1.0.0"</span>,
  <span class="hljs-attr">"description"</span>: <span class="hljs-string">""</span>,
  <span class="hljs-attr">"main"</span>: <span class="hljs-string">"bin/index.js"</span>,
  <span class="hljs-attr">"scripts"</span>: {},
  <span class="hljs-attr">"author"</span>: <span class="hljs-string">""</span>,
  <span class="hljs-attr">"license"</span>: <span class="hljs-string">"ISC"</span>,
  <span class="hljs-attr">"bin"</span>: {
    <span class="hljs-attr">"interview"</span>: <span class="hljs-string">"./bin/index.js"</span>
  }
}
</code></pre><p>At this point, we can run the application like any other node application with the below command.</p>
<pre><code><span class="hljs-attribute">node</span> .
</code></pre><p>But since our goal is to run the application from anywhere, I want to simply open my computer/laptop and hit the command line to prepare for the interview. For achieving that, we install our application globally with the below command.</p>
<pre><code><span class="hljs-built_in">npm</span> install -g .
</code></pre><p>This installs our script globally. This means the "interview" command mentioned in the <code>bin</code> key section in the <code>package.json</code> file is made available to the command line.</p>
<p>Let's run our script globally with the below command</p>
<pre><code>interview
</code></pre><p>Output:
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1633187935207/gI-b6Y2Af.png" alt="image.png" /></p>
<p>Let's now create few questions for the interview in a file called <code>mock-interview-questions.txt</code> at the root of the project
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1633191536251/YJhAV-vRl.png" alt="image.png" /></p>
<p>Now let's add the script to show a random interview question when we enter "interview" in the command line.</p>
<pre><code><span class="hljs-comment">//bin/index.js</span>
#!<span class="hljs-regexp">/usr/</span>bin/env node

<span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">"fs"</span>);
<span class="hljs-keyword">const</span> crypto = <span class="hljs-built_in">require</span>(<span class="hljs-string">"crypto"</span>);

<span class="hljs-keyword">try</span> {
  <span class="hljs-keyword">let</span> data = fs.readFileSync(<span class="hljs-string">"mock-interview-questions.txt"</span>, <span class="hljs-string">"utf8"</span>);
  <span class="hljs-keyword">let</span> questions = data.split(<span class="hljs-string">"\r\n"</span>);

  <span class="hljs-keyword">const</span> n = crypto.randomInt(<span class="hljs-number">0</span>, questions.length);

  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">10</span>; i++) <span class="hljs-built_in">console</span>.log();
  <span class="hljs-built_in">console</span>.log(questions[n]);
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">10</span>; i++) <span class="hljs-built_in">console</span>.log();
} <span class="hljs-keyword">catch</span> (err) {
  <span class="hljs-built_in">console</span>.error(err);
}
</code></pre><blockquote>
<p>For the tutorial I have kept the number of questions to 10, but in reality, I would suggest you add at least 50 questions for keeping the interview interesting and helpful for you</p>
</blockquote>
<h2 id="heading-final-output">Final Output</h2>
<ol>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1633198127126/wYsvK3N4D.png" alt="image.png" /></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1633198067346/azbklHLAh.png" alt="image.png" /></p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Creating a Kanban Board with HTML, CSS & JavaScript]]></title><description><![CDATA[In this article, we are building a Kanban Board with plain HTML, CSS & JavaScript. This article aims to show, how modern UX designs and functionality can also be achieved with much simpler elements of HTML, CSS & JavaScript. This is where it all star...]]></description><link>https://karthikdevarticles.com/creating-a-kanban-board-with-html-css-and-javascript</link><guid isPermaLink="true">https://karthikdevarticles.com/creating-a-kanban-board-with-html-css-and-javascript</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[HTML]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[React]]></category><category><![CDATA[CSS]]></category><dc:creator><![CDATA[Karthik]]></dc:creator><pubDate>Sun, 13 Jun 2021 07:56:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1623570361237/oRGg-VonG.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this article, we are building a Kanban Board with plain HTML, CSS &amp; JavaScript. This article aims to show, how modern UX designs and functionality can also be achieved with much simpler elements of HTML, CSS &amp; JavaScript. This is where it all started right!</p>
<h1 id="heading-what-is-kanban-board-why-use-it">What is Kanban Board? Why use it?</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623562666113/a0FKPp0Jz.jpeg" alt="eden-constantino-OXmym9cuaEY-unsplash.jpg" />
Kanban is a project management tool, used by many software development teams, working with agile processes.</p>
<p>It was designed to help visualize work, reduce work in progress tasks, and maximize the efficiency of teams.</p>
<p>Kanban uses visual cards, columns, and continuous improvement ideology to help teams achieve goals.</p>
<blockquote>
<p>"Kanban" is the Japanese word for "visual signal." If you work in services or technology, your work is oftentimes invisible and intangible. A kanban board helps make your work visible so you can show it to others and keep everyone on the same page.</p>
</blockquote>
<h2 id="heading-lets-start">Let's Start</h2>
<p>Kanban Board, which we are going to build, should eventually look like this
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623524751921/ClJcCiJYl.png" alt="image.png" /></p>
<p>And we must be able to move tasks like this
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623561475526/yHCmNDftp.gif" alt="task-move-action.gif" /></p>
<p>Initial Folder Structure 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623514903992/cdycMFMuW.png" alt="image.png" /></p>
<h2 id="heading-html">HTML</h2>
<blockquote>
<p>HTML (HyperText Markup Language) is the most basic building block of the Web. It defines the meaning and structure of web content.</p>
</blockquote>
<h4 id="heading-iteration-1">Iteration 1</h4>
<p>Initial HTML Boilerplate &amp; Skeleton for <code>kanban.html</code></p>
<pre><code><span class="hljs-operator">&lt;</span><span class="hljs-operator">!</span>DOCTYPE html<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>html lang<span class="hljs-operator">=</span><span class="hljs-string">"en"</span><span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>head<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>title<span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>title<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>body<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>strong class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading-text"</span><span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-board"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div id<span class="hljs-operator">=</span><span class="hljs-string">"todo"</span><span class="hljs-operator">&gt;</span>To Do<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div id<span class="hljs-operator">=</span><span class="hljs-string">"inprogress"</span><span class="hljs-operator">&gt;</span>In Progress<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div id<span class="hljs-operator">=</span><span class="hljs-string">"done"</span><span class="hljs-operator">&gt;</span>Done<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>html<span class="hljs-operator">&gt;</span>
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623515894669/R52T1RZsT.png" alt="image.png" /></p>
<h4 id="heading-iteration-2">Iteration 2</h4>
<p>Adding properties to HTML for working better with CSS later. This means CSS can identify HTML better with these properties.</p>
<p><code>kanban.html</code></p>
<pre><code><span class="hljs-operator">&lt;</span>body<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>strong class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading-text"</span><span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-board"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"todo"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>To Do<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"inprogress"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>In Progress<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"done"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>Done<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">&gt;</span>
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623525654918/8Y-IF-Dmx.png" alt="image.png" /></p>
<h2 id="heading-css">CSS</h2>
<blockquote>
<p>Cascading Style Sheets is used to format &amp; style, the layout of a page</p>
</blockquote>
<h4 id="heading-iteration-3">Iteration 3</h4>
<p>Link CSS to <code>kanban.html</code></p>
<pre><code><span class="hljs-operator">&lt;</span>head<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>link rel<span class="hljs-operator">=</span><span class="hljs-string">"stylesheet"</span> href<span class="hljs-operator">=</span><span class="hljs-string">"./kanban.css"</span><span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>title<span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>title<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">&gt;</span>
</code></pre><h4 id="heading-iteration-4">Iteration 4</h4>
<p>Adding CSS to <code>kanban.css</code></p>
<h4 id="heading-container-andamp-head">Container &amp; Head</h4>
<pre><code><span class="hljs-selector-class">.container</span> {
  <span class="hljs-attribute">width</span>: <span class="hljs-number">70%</span>;
  <span class="hljs-attribute">min-width</span>: <span class="hljs-number">50%</span>;
  <span class="hljs-attribute">margin</span>: auto;
  <span class="hljs-attribute">display</span>: flex;
  <span class="hljs-attribute">flex-direction</span>: column;
}

<span class="hljs-selector-class">.kanban-heading</span> {
  <span class="hljs-attribute">display</span>: flex;
  <span class="hljs-attribute">flex-direction</span>: row;
  <span class="hljs-attribute">justify-content</span>: center;
  <span class="hljs-attribute">font-family</span>: sans-serif;
}

<span class="hljs-selector-class">.kanban-heading-text</span> {
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">1.8rem</span>;
  <span class="hljs-attribute">background-color</span>: tomato;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.8rem</span> <span class="hljs-number">1.7rem</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.5rem</span>;
  <span class="hljs-attribute">margin</span>: <span class="hljs-number">1rem</span>;
}
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623526564942/uo4yBYh9J.png" alt="image.png" /></p>
<h4 id="heading-board-sections">Board sections</h4>
<pre><code><span class="hljs-selector-class">.kanban-board</span> {
  <span class="hljs-attribute">display</span>: flex;
  <span class="hljs-attribute">flex-direction</span>: row;
  <span class="hljs-attribute">justify-content</span>: space-between;
  <span class="hljs-attribute">font-family</span>: sans-serif;
}

<span class="hljs-selector-class">.kanban-block</span> {
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.6rem</span>;
  <span class="hljs-attribute">width</span>: <span class="hljs-number">30.5%</span>;
  <span class="hljs-attribute">min-width</span>: <span class="hljs-number">14rem</span>;
  <span class="hljs-attribute">min-height</span>: <span class="hljs-number">4.5rem</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.3rem</span>;
}

<span class="hljs-selector-id">#todo</span> {
  <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#fec6d1</span>;
}

<span class="hljs-selector-id">#inprogress</span> {
  <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ffaf00</span>;
}

<span class="hljs-selector-id">#done</span> {
  <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#018b01</span>;
}
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623526824539/VOZArVdRW.png" alt="image.png" /></p>
<h4 id="heading-body">Body</h4>
<pre><code><span class="hljs-selector-tag">body</span> {
  <span class="hljs-attribute">background-color</span>: black;
}
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623527026916/wTE6CAqc_.png" alt="image.png" /></p>
<p>As we see now, the output is much better after adding the magic of CSS to it.</p>
<p>Let's now complete the remaining part of adding sample tasks and it's styling to the Kanban Board</p>
<h2 id="heading-html">HTML</h2>
<h4 id="heading-iteration-5">Iteration 5</h4>
<p>Adding sample tasks to "To Do" section
<code>kanban.html</code></p>
<pre><code><span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"todo"</span><span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>To Do<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task-button-block"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>button id<span class="hljs-operator">=</span><span class="hljs-string">"task-button"</span><span class="hljs-operator">&gt;</span>Create <span class="hljs-keyword">new</span> task<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task1"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">1</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task2"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">2</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task3"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">3</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task4"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">4</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task5"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">5</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task6"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">6</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
</code></pre><h4 id="heading-iteration-6">Iteration 6</h4>
<p>Adding styles for sample tasks to <code>kanban.css</code></p>
<pre><code><span class="hljs-selector-class">.task</span> {
  <span class="hljs-attribute">background-color</span>: white;
  <span class="hljs-attribute">margin</span>: <span class="hljs-number">0.2rem</span> <span class="hljs-number">0rem</span> <span class="hljs-number">0.3rem</span> <span class="hljs-number">0rem</span>;
  <span class="hljs-attribute">border</span>: <span class="hljs-number">0.1rem</span> solid black;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.2rem</span>;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.5rem</span> <span class="hljs-number">0.2rem</span> <span class="hljs-number">0.5rem</span> <span class="hljs-number">2rem</span>;
}

<span class="hljs-selector-id">#task-button</span> {
  <span class="hljs-attribute">margin</span>: <span class="hljs-number">0.2rem</span> <span class="hljs-number">0rem</span> <span class="hljs-number">0.1rem</span> <span class="hljs-number">0rem</span>;
  <span class="hljs-attribute">background-color</span>: white;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.2rem</span>;
  <span class="hljs-attribute">width</span>: <span class="hljs-number">100%</span>;
  <span class="hljs-attribute">border</span>: <span class="hljs-number">0.25rem</span> solid black;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.5rem</span> <span class="hljs-number">2.7rem</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0.3rem</span>;
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">1rem</span>;
}
</code></pre><p>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623528043289/U9u4BqrpR.png" alt="image.png" /></p>
<p>As we can see, with a structured HTML &amp; CSS it only gets better</p>
<h2 id="heading-javascript">Javascript</h2>
<blockquote>
<p>JavaScript is a scripting or programming language that allows you to implement complex features on web pages</p>
</blockquote>
<p>Time for some actions.</p>
<p>In our Kanban Board, I want to drag and drop my tasks from "To Do" to "In Progress" and "In Progress" to "Done" Status.</p>
<p>For this, I am going to use the HTML Drag &amp; Drop API,</p>
<blockquote>
<p>HTML Drag and Drop interfaces enable applications to use drag-and-drop features in browsers. The user may select draggable elements with a mouse, drag those elements to a droppable element, and drop them by releasing the mouse button.</p>
</blockquote>
<p> Let me show you all code &amp; deduce it step by step.</p>
<pre><code><span class="hljs-operator">&lt;</span><span class="hljs-operator">!</span>DOCTYPE html<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>html lang<span class="hljs-operator">=</span><span class="hljs-string">"en"</span><span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>head<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>link rel<span class="hljs-operator">=</span><span class="hljs-string">"stylesheet"</span> href<span class="hljs-operator">=</span><span class="hljs-string">"./kanban.css"</span><span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>title<span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>title<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>script<span class="hljs-operator">&gt;</span>
        <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">drag</span>(<span class="hljs-params">ev</span>) </span>{
            ev.dataTransfer.setData(<span class="hljs-string">"text"</span>, ev.target.id);
        }

        <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">allowDrop</span>(<span class="hljs-params">ev</span>) </span>{
            ev.preventDefault();
        }

        <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">drop</span>(<span class="hljs-params">ev</span>) </span>{
            ev.preventDefault();
            <span class="hljs-keyword">var</span> data <span class="hljs-operator">=</span> ev.dataTransfer.getData(<span class="hljs-string">"text"</span>);
            ev.target.appendChild(document.getElementById(data));
        }
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span>body<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>strong class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-heading-text"</span><span class="hljs-operator">&gt;</span>Kanban Board<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-board"</span><span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"todo"</span> ondrop<span class="hljs-operator">=</span><span class="hljs-string">"drop(event)"</span> ondragover<span class="hljs-operator">=</span><span class="hljs-string">"allowDrop(event)"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>To Do<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task-button-block"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>button id<span class="hljs-operator">=</span><span class="hljs-string">"task-button"</span><span class="hljs-operator">&gt;</span>Create <span class="hljs-keyword">new</span> task<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task1"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">1</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task2"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">2</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task3"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">3</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task4"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">4</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task5"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">5</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"task"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"task6"</span> draggable<span class="hljs-operator">=</span><span class="hljs-string">"true"</span> ondragstart<span class="hljs-operator">=</span><span class="hljs-string">"drag(event)"</span><span class="hljs-operator">&gt;</span>
                    <span class="hljs-operator">&lt;</span>span<span class="hljs-operator">&gt;</span>Task <span class="hljs-number">6</span><span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>span<span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"inprogress"</span> ondrop<span class="hljs-operator">=</span><span class="hljs-string">"drop(event)"</span> ondragover<span class="hljs-operator">=</span><span class="hljs-string">"allowDrop(event)"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>In Progress<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"kanban-block"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"done"</span> ondrop<span class="hljs-operator">=</span><span class="hljs-string">"drop(event)"</span> ondragover<span class="hljs-operator">=</span><span class="hljs-string">"allowDrop(event)"</span><span class="hljs-operator">&gt;</span>
                <span class="hljs-operator">&lt;</span>strong<span class="hljs-operator">&gt;</span>Done<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">&gt;</span>
            <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
        <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
    <span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">&lt;</span><span class="hljs-operator">/</span>html<span class="hljs-operator">&gt;</span>
</code></pre><ol>
<li>Using <code>draggable="true"</code> property, we are identifying, what is a draggable element</li>
<li>Using <code>ondragstart="drag(event)"</code>, we are mentioning what method to use when the element is dragged.</li>
<li>With the following function call, we are defining what data needs to be dragged, in our case, it's the HTML element. <pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">drag</span>(<span class="hljs-params">ev</span>) </span>{
     ev.dataTransfer.setData(<span class="hljs-string">"text"</span>, ev.target.id);
}
</code></pre></li>
<li><code>ondrop="drop(event)"</code> specifies when data is dropped, a drop event occurs and we call the <code>drop</code> method</li>
<li>This function sets data to the target element<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">drop</span>(<span class="hljs-params">ev</span>) </span>{
     ev.preventDefault();
     <span class="hljs-keyword">var</span> data <span class="hljs-operator">=</span> ev.dataTransfer.getData(<span class="hljs-string">"text"</span>);
     ev.target.appendChild(document.getElementById(data));
}
</code></pre>Output 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623561475526/yHCmNDftp.gif" alt="task-move-action.gif" /></li>
</ol>
<h1 id="heading-additional-features-added">Additional Features added</h1>
<ul>
<li>Creating a new Task</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623569884195/hB-44tO0f.gif" alt="additional features fast.gif" /></p>
<p>Features Todo</p>
<ol>
<li>Adding State to store information</li>
<li>Editing existing task information</li>
<li>Create tasks to other states(In Progress, Done)</li>
<li>Many more...</li>
</ol>
<p>Track further changes of code here -  <a target="_blank" href="https://codepen.io/karthikdevarticles/pen/PopxPwO">Kanban Board</a> </p>
<h1 id="heading-well-is-this-solution-perfect">Well, is this solution perfect?</h1>
<p>No, it isn't</p>
<p>I am getting some side effects like this Haha!</p>
<p>But definitely, worth learning as a starter.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623561984537/LY4yUW7KI.gif" alt="side-effects.gif" /></p>
<p>Let me know, how this issue can be resolved.</p>
<p>Thanks for reading through this starter. This completes my first article.</p>
]]></content:encoded></item></channel></rss>