<?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[Hey! This is Vishal Mahajan's Blog]]></title><description><![CDATA[Thoughts on tech, life, code, and everything I find worth sharing.]]></description><link>https://blog.vishalrmahajan.in</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 02:05:44 GMT</lastBuildDate><atom:link href="https://blog.vishalrmahajan.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Developer CLI Portfolio That Lives Inside Your Terminal | npx vishalrmahajan]]></title><description><![CDATA[Introduction
Imagine a world where your developer portfolio isn’t just another web page, but an experience that comes to life right inside the terminal , a familiar environment for every coder. That’s exactly the idea behind npx vishalrmahajan: my pe...]]></description><link>https://blog.vishalrmahajan.in/a-developer-cli-portfolio-that-lives-inside-your-terminal-npx-vishalrmahajan-12b5518c9976</link><guid isPermaLink="true">https://blog.vishalrmahajan.in/a-developer-cli-portfolio-that-lives-inside-your-terminal-npx-vishalrmahajan-12b5518c9976</guid><dc:creator><![CDATA[Vishal Mahajan]]></dc:creator><pubDate>Sun, 20 Jul 2025 13:55:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1753128711017/fe0df948-4242-4c48-bd8a-8265db9b1f7f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>Imagine a world where your developer portfolio isn’t just another web page, but an experience that comes to life right inside the terminal , a familiar environment for every coder. That’s exactly the idea behind <strong>npx vishalrmahajan</strong>: my personal CLI-based portfolio, accessible to anyone, anywhere, with a simple command.</p>
<p>In this post, I’m sharing the journey, technical architecture, creative ideas, and a step-by-step approach. Whether you love tinkering with Node.js or just want your portfolio to stand out, this guide will help you craft an unforgettable, interactive command-line narrative.</p>
<h3 id="heading-why-build-a-terminal-portfolio">Why Build a Terminal Portfolio?</h3>
<p><strong>Authentic for developers</strong><br /> It tells your story in a space where developers naturally spend time.</p>
<p><strong>Instant access</strong><br />Anyone can type <code>npx vishalrmahajan</code> and dive in. No browser needed.</p>
<p><strong>Interactive</strong><br />Supports real commands, navigation, and links that actually work.</p>
<p><strong>Unusual in the best way</strong><br />Most portfolios live on the web. This one lives in the command line</p>
<h3 id="heading-the-technical-architecture">The Technical Architecture</h3>
<h3 id="heading-1-terminal-ui-with-terminal-kit">1. Terminal UI with <code>terminal-kit</code></h3>
<p>The interface uses <a target="_blank" href="https://www.npmjs.com/package/terminal-kit">terminal kit</a>, a powerful library for building terminal applications. It helps create a smooth user experience with features like:</p>
<ul>
<li><p>Section navigation (Home, Skills, Experience, Projects)</p>
</li>
<li><p>Layouts that adjust when the terminal is resized</p>
</li>
<li><p>Bold headings, ASCII art, and visual structure</p>
</li>
</ul>
<h3 id="heading-2-modular-section-design">2. Modular Section Design</h3>
<p>Each part of the portfolio is kept in its own file to make things easy to maintain and extend.</p>
<ul>
<li><p><code>home.js</code> contains the welcome message and profile links</p>
</li>
<li><p><code>skills.js</code> lists the languages, tools, and frameworks</p>
</li>
<li><p><code>experience.js</code> shows your work history and key highlights</p>
</li>
<li><p><code>projects.js</code> walks through your favorite work with links and short descriptions</p>
</li>
</ul>
<p>You can also include hidden content, such as fun easter eggs, an “about me” story, or a simple terminal game.</p>
<h3 id="heading-3-command-input-and-navigation">3. Command input and navigation</h3>
<p>The terminal isn’t just for reading. It’s interactive. Users can:</p>
<ul>
<li><p>Type <code>help</code> to view available commands</p>
</li>
<li><p>Jump between sections by typing their names</p>
</li>
<li><p>Use commands like <code>github</code> or <code>linkedin</code> to open links</p>
</li>
</ul>
<p>A custom command handler listens for input, maps commands, and even launches external URLs using the <code>[open](https://www.npmjs.com/package/open)</code> package.</p>
<h3 id="heading-4-visual-touches-and-animations">4. Visual touches and animations</h3>
<p>On startup and exit, simple animations like spinners and progress bars make the experience smoother and more personal. Libraries like <code>[chalk](https://www.npmjs.com/package/chalk)</code> and <code>[cfonts](https://www.npmjs.com/package/cfonts)</code> let you add colors and large text fonts that feel polished and fun without going over the top.</p>
<h3 id="heading-5-clean-formatting-and-edge-case-handling">5. Clean formatting and edge case handling</h3>
<p>To make sure your output looks great on every terminal:</p>
<ul>
<li><p>Add <code>terminal link</code> to make links clickable in supported environments</p>
</li>
<li><p>Watch for screen size changes and redraw the layout to keep everything clean and readable</p>
</li>
</ul>
<iframe src="https://www.youtube.com/embed/aqoyMsZe2K0?feature=oembed" width="700" height="393"></iframe>

<h3 id="heading-initalizing-your-own-step-by-step-guide">Initalizing Your Own: Step-by-Step Guide</h3>
<p>You don’t need much to get started. Here’s a basic walkthrough to set up your own terminal-based portfolio.</p>
<h3 id="heading-1-project-bootstrap">1. Project Bootstrap</h3>
<p>mkdir my-terminal-portfolio<br />cd my-terminal-portfolio<br />npm init -y</p>
<h3 id="heading-2-entry-point">2. Entry Point</h3>
<p>Create <code>index.js</code></p>
<p>#!/usr/bin/env</p>
<p>console.log("This is terminal portfolio");</p>
<p>Update your <code>package.json</code> :</p>
<p>"bin": {<br />"myportfolio": "./index.js"<br />}</p>
<h3 id="heading-3-run-and-publish">3. Run and Publish</h3>
<ul>
<li><p>Test locally: <code>node index.js</code></p>
</li>
<li><p>Make your script executable: <code>chmod +x index.js</code></p>
</li>
<li><p>Publish on npm: <code>npm publish</code></p>
</li>
</ul>
<p>Anyone can now do:</p>
<p>npx myportfolio</p>
<h3 id="heading-4-libraries-you-can-use-to-build-and-polish-it">4. Libraries You Can Use to Build and Polish It</h3>
<p>You can use the following libraries to build your own terminal-based portfolio with structure, interactivity, and style:</p>
<ul>
<li><p><a target="_blank" href="https://www.npmjs.com/package/terminal-kit">terminal-kit</a> : For building responsive terminal UIs</p>
</li>
<li><p><a target="_blank" href="https://www.npmjs.com/package/chalk">chalk</a> : For adding color and emphasis to your output</p>
</li>
<li><p><a target="_blank" href="https://www.npmjs.com/package/cfonts">cfonts</a> : To display stylish ASCII headers and banners</p>
</li>
<li><p><a target="_blank" href="https://www.npmjs.com/package/open">open</a> : To open links and external apps directly from your terminal</p>
</li>
<li><p><a target="_blank" href="https://www.npmjs.com/package/terminal-link">terminal-link</a> : For clickable links in supported terminals</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>A terminal-based portfolio is more than just a cool trick. It’s a creative way to express your personality, show off your skills, and spark curiosity. <code>npx vishalrmahajan</code> reflects who I am and how I think   in a way a static page never could.</p>
<p>If this sounds fun, build your own. Experiment. Tell your story in the terminal. You might just surprise yourself and the next person who runs your command.</p>
<p>Want to connect, try out <code>npx vishalrmahajan</code>, or share your own? Reach out on <a target="_blank" href="https://X.com/VishalRMahajan">Twitter</a>, or just type <strong>chat</strong> on <code>npx vishalrmahajan</code>.</p>
<p>Happy hacking.</p>
]]></content:encoded></item></channel></rss>