<?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[Dharmin's Blog]]></title><description><![CDATA[Dharmin's Blog]]></description><link>https://blog.dharmin.tech</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 01:46:26 GMT</lastBuildDate><atom:link href="https://blog.dharmin.tech/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A guide to using Web3 Wallet for Beginners]]></title><description><![CDATA[Web3 wallets have become an essential part of the adoption of and conversation around web3 and are here to stay. Unlike traditional digital wallets, Web3 wallets enable users to have complete control over their cryptocurrencies, NFTs, and interaction...]]></description><link>https://blog.dharmin.tech/a-guide-to-using-web3-wallet-for-beginners</link><guid isPermaLink="true">https://blog.dharmin.tech/a-guide-to-using-web3-wallet-for-beginners</guid><dc:creator><![CDATA[Dharmin Nagar]]></dc:creator><pubDate>Fri, 05 Sep 2025 18:30:00 GMT</pubDate><content:encoded><![CDATA[<p>Web3 wallets have become an essential part of the adoption of and conversation around web3 and are here to stay. Unlike traditional digital wallets, Web3 wallets enable users to have complete control over their cryptocurrencies, NFTs, and interactions with decentralized applications (dApps). Understanding how to safely configure and use a Web3 wallet is important as that enables citizens to participate confidently in the emerging digital economy.</p>
<h3 id="heading-step-1-choose-a-reliable-web3-wallet">Step 1: Choose a Reliable Web3 Wallet</h3>
<p><img src="https://cdn-images-1.medium.com/max/1600/0*yK4s3CwwpfHER0RZ.png" alt /></p>
<p>Credits: Metamask</p>
<p>Popular wallets, such as MetaMask, Phantom wallet, or Trust Wallet, provide very easy-to-use interfaces along with high levels of security. For beginners, MetaMask is highly preferred as it works with multiple blockchain networks and makes it easy to extend to most dApps.</p>
<h3 id="heading-step-2-download-and-install">Step 2: Download and Install</h3>
<p><img src="https://cdn-images-1.medium.com/max/1600/1*-Tx1DQ6eLA-MCHRHHr9b6w.png" alt /></p>
<p>You may install MetaMask as browser extension or as a mobile application Download MetaMask from official sources only: the official website of MetaMask or the trusted app stores Avoid scopia or phishing Downloading MetaMask from web source are others than MetaMask official website.</p>
<h3 id="heading-step-3-create-a-new-wallet">Step 3: Create a New Wallet</h3>
<p>After installation, you should create a new wallet by setting your password which should be strong. You will have a unique set of 12 to 24 words, a seed phrase, in the wallet which can be used as your backup. Write this phrase down carefully and save it OFFline because this is the only way to recover your wallet (if you lose access to it).</p>
<h3 id="heading-step-4-secure-your-wallet">Step 4: Secure Your Wallet</h3>
<p><img src="https://cdn-images-1.medium.com/max/1600/1*KtVfidodOAN-SG7ba5uJaw.png" alt /></p>
<p>You should never share your seed phrase or private key online or with anyone. Anyone who has access has control of your assets. Enable extra security functions such as biometric authentication, or PINs if available.</p>
<h3 id="heading-step-5-receive-cryptocurrency">Step 5: Receive Cryptocurrency</h3>
<p><img src="https://cdn-images-1.medium.com/max/1600/1*8iRjjJE_HrVAHzV7e_OYXA.png" alt /></p>
<p>To receive crypto, you must receive and paste your public wallet address to the sender. The address is something similar to your account number in the blockchain. Most wallets have a QR code so that you can easily scan it.</p>
<h3 id="heading-step-6-sending-cryptocurrency-and-using-dapps">Step 6: Sending Cryptocurrency and Using dApps</h3>
<p>When sending crypto, write the address of the receiver, carefully. Blockchain transactions are irreversible, be sure to double check the address and amount. Your wallet will ask for your confirmation and your signature for the transaction using your private key. Also, connect your wallet to dApps. kindly click on the “Connect Wallet” button and you are able to trade, play games or access DeFi services in a secure manner</p>
<hr />
<h3 id="heading-tips-amp-common-mistakes-to-avoid">Tips &amp; Common Mistakes to Avoid</h3>
<p>• Keep your seed phrase offline and private. Avoid storing it digitally at places that are vulnerable to hacks.<br /> • Only download wallets from official sources. Fake apps can steal your assets.<br /> • Double-check addresses carefully before sending crypto. Mistakes are permanent.<br /> • Regularly update wallet app to ensure latest security</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Mastering a Web3 wallet opens up doors to an exciting decentralized digital world, but with responsibility in security and usage are of the utmost importance. By following these steps, anyone can start into their Web3 journey with full confident knowledge while protecting their assets.</p>
]]></content:encoded></item><item><title><![CDATA[A Perspective on striving to be PERFECT]]></title><description><![CDATA[Recently I’ve been reading a book “Steal like an Artist” by Austin Kleon.

Today I was reading a chapter in which Austin was talking about the not-so-secret formula to be known. He broke it down into 2 major things:
\>do good work\>share it with peop...]]></description><link>https://blog.dharmin.tech/a-perspective-on-striving-to-be-perfect</link><guid isPermaLink="true">https://blog.dharmin.tech/a-perspective-on-striving-to-be-perfect</guid><dc:creator><![CDATA[Dharmin Nagar]]></dc:creator><pubDate>Thu, 04 Sep 2025 18:30:00 GMT</pubDate><content:encoded><![CDATA[<p>Recently I’ve been reading a book “Steal like an Artist” by <em>Austin Kleon</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757269012849/b38338e4-1f73-4b63-873c-30ed5345a6cb.png" alt class="image--center mx-auto" /></p>
<p>Today I was reading a chapter in which Austin was talking about the not-so-<em>secret formula</em> to <strong>be known</strong>. He broke it down into 2 major things:</p>
<p>\&gt;do good work<br />\&gt;share it with people</p>
<p>And I got to thinking, we humans like to overcomplicate stuff a little too much. We tend to think over a post to the extent that we don’t want to post thinking it’s not “good enough”. We strive to be perfect when the only thing that makes us <strong>us</strong> is our imperfections. Don’t get me wrong, striving to be perfect isn’t a bad thing and one should definitely have that motivation to be better, but when you start to beat yourself up everytime you get something wrong is where the problem begins. There is a beautiful quote in the book that says:</p>
<blockquote>
<p>“It is our failure to become our perceived ideal that ultimately defines us and makes us unique”</p>
</blockquote>
<p>This one hit home, it’s powerful in the sense that it gives so much perspective about the things that go wrong when we try to do something.</p>
<h3 id="heading-talking-about-doing-something">Talking about doing something</h3>
<p>later in the same chapter, the book had a great illustration of “<em>Life of a Project</em>” which very well demonstrates the thought process every person goes through when trying to build any project.</p>
<p>And seeing this, I was a little taken aback not because this is <em>me</em> everytime I start a project, but one part of me didn’t believe that it was such a widely known thing.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:1180/1*EFvEUTxTvGDS-gkbSC8YoA.png" alt class="image--center mx-auto" /></p>
<p>So, I was there sitting and wondering why it happens and here’s what I thought: I feel that whenever we think of an idea, we are fueled with enthusiasm and the excitement doing something that is going to help other people And then when we actually start to do the thing, we realise that the thing that we’re trying to accomplish requires a version of ourself that’s not available yet, it requires us to level up. We have to learn new things, we have to face obstacles, it all gradually decays the enthusiasm we felt at the beginning But at the lowest bottom, where the author refers to it as <strong>Dark Knight of the Soul</strong>, that’s when that feeling of giving up is at the peak (that’s where majority of people give up btw) When we overcome that and we say “No way, i’m going to do it anyways”, is where the magic happens. For some reason the things you found difficult before, seem simple to you and even if the output of the project isn’t that refined as you initially hoped for, you’ll be <strong>happy</strong>. And this happiness is <em>that</em> sense of accomplishment that you were so excited about.</p>
<p>It is all about a perspective, this is what I took from the book in whatever way my mind was capable to. hell, I didn’t even know i would write this much tbh, but here we are lol. If it helped you in any way, do <strong>share</strong> this so you can help others too :)</p>
]]></content:encoded></item><item><title><![CDATA[Setting up ESLint, Prettier & Husky in a Bun TypeScript Project]]></title><description><![CDATA[This guide will walk you through setting up a complete development environment for a Bun TypeScript project with code linting, formatting, and pre-commit hooks. By the end of this setup, your project will automatically check and format your code befo...]]></description><link>https://blog.dharmin.tech/setting-up-eslint-prettier-and-husky-in-a-bun-typescript-project</link><guid isPermaLink="true">https://blog.dharmin.tech/setting-up-eslint-prettier-and-husky-in-a-bun-typescript-project</guid><dc:creator><![CDATA[Dharmin Nagar]]></dc:creator><pubDate>Tue, 01 Jul 2025 10:22:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/NH0pmKaZeuk/upload/d5e33f73a2e5e8bf6c42de32d77fd46a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This guide will walk you through setting up a complete development environment for a Bun TypeScript project with code linting, formatting, and pre-commit hooks. By the end of this setup, your project will automatically check and format your code before every commit, ensuring consistent code quality across your team.</p>
<h2 id="heading-what-youll-be-setting-up">What You'll Be Setting Up</h2>
<ul>
<li><p><strong>ESLint</strong>: A static code analysis tool that identifies problematic patterns in JavaScript/TypeScript code</p>
</li>
<li><p><strong>Prettier</strong>: An opinionated code formatter that enforces consistent code style</p>
</li>
<li><p><strong>Husky</strong>: Git hooks made easy - runs scripts before commits to ensure code quality</p>
</li>
<li><p><strong>lint-staged</strong>: Runs linters and formatters only on staged files for faster execution</p>
</li>
</ul>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Make sure you have Bun installed on your system. If not, visit <a target="_blank" href="http://bun.sh">bun.sh</a> for installation instructions.</p>
<hr />
<h2 id="heading-step-1-initialize-a-bun-typescript-project">Step 1: Initialize a Bun TypeScript Project</h2>
<p>First, let's create a new Bun project with TypeScript support. The <code>-y</code> flag accepts all default configurations automatically.</p>
<pre><code class="lang-bash">bun init -y
</code></pre>
<p>This command creates a basic project structure with:</p>
<ul>
<li><p><code>package.json</code> with Bun-specific configurations</p>
</li>
<li><p><code>tsconfig.json</code> for TypeScript compilation settings</p>
</li>
<li><p>A basic <code>index.ts</code> file to get you started</p>
</li>
</ul>
<p>Secondly, let's initialise a local git repo in this folder as it is required before configuring husky</p>
<pre><code class="lang-bash">git init
</code></pre>
<hr />
<h2 id="heading-step-2-configure-eslint">Step 2: Configure ESLint</h2>
<p>ESLint will help catch potential bugs and enforce coding standards. The interactive configuration will ask you questions about your project setup and create an appropriate configuration file.</p>
<pre><code class="lang-bash">npm init @eslint/config@latest
OR
yarn create @eslint/config@latest
OR
pnpm create @eslint/config@latest
OR
bun create @eslint/config@latest
</code></pre>
<p>During the interactive setup, you'll be asked about:</p>
<ul>
<li><p>How you'd like to use ESLint (check syntax, find problems, enforce code style)</p>
</li>
<li><p>What type of modules your project uses (ESM/CommonJS)</p>
</li>
<li><p>Which framework you're using (if any)</p>
</li>
<li><p>Whether you're using TypeScript</p>
</li>
<li><p>Where your code runs (browser/Node.js)</p>
</li>
</ul>
<p>The tool will automatically install the necessary ESLint packages and create a configuration file (<code>.eslintrc.js</code>, <code>.eslintrc.json</code>, or similar).</p>
<hr />
<h2 id="heading-step-3-install-prettier">Step 3: Install Prettier</h2>
<p>Prettier is a code formatter that automatically formats your code according to a set of rules. Installing it as a development dependency ensures it's only used during development.</p>
<pre><code class="lang-bash">npm i -D prettier
OR
yarn add -D prettier
OR
pnpm add -D prettier
OR
bun add -D prettier
</code></pre>
<p>The <code>-D</code> flag installs Prettier as a development dependency, meaning it won't be included in your production bundle.</p>
<hr />
<h2 id="heading-step-4-configure-prettier">Step 4: Configure Prettier</h2>
<p>Create a configuration file(<code>.prettierrc</code>) to customize Prettier's formatting rules according to your preferences.</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"singleQuote"</span>: <span class="hljs-literal">false</span>,
  <span class="hljs-attr">"trailingComma"</span>: <span class="hljs-string">"es5"</span>,
  <span class="hljs-attr">"tabWidth"</span>: <span class="hljs-number">2</span>,
  <span class="hljs-attr">"bracketSameLine"</span>: <span class="hljs-literal">true</span>
}
</code></pre>
<p>This configuration sets:</p>
<ul>
<li><p><code>singleQuote: false</code> - Use double quotes instead of single quotes</p>
</li>
<li><p><code>trailingComma: "es5"</code> - Add trailing commas where valid in ES5 (objects, arrays, etc.)</p>
</li>
<li><p><code>tabWidth: 2</code> - Use 2 spaces for indentation</p>
</li>
<li><p><code>bracketSameLine: true</code> - Put the <code>&gt;</code> of a multi-line JSX element at the end of the last line</p>
</li>
</ul>
<p>I like to keep it simple so this is my go-to prettier configuration, you can modify it according to you.</p>
<hr />
<h2 id="heading-step-5-add-husky-and-lint-staged">Step 5: Add Husky and lint-staged</h2>
<p>Husky enables Git hooks, while lint-staged runs linters only on staged files (files that are about to be committed), making the process faster and more efficient.</p>
<pre><code class="lang-bash">npm i -D husky lint-staged
OR
yarn add -D husky lint-staged
OR
pnpm add -D husky lint-staged
OR
bun add -D husky lint-staged
</code></pre>
<p>These tools work together to ensure that only properly formatted and linted code gets committed to your repository.</p>
<hr />
<h2 id="heading-step-6-configure-husky-and-lint-staged">Step 6: Configure Husky and lint-staged</h2>
<h3 id="heading-initialize-husky">Initialize Husky</h3>
<p>Run the following command to set up Husky in your project:</p>
<pre><code class="lang-bash">npx husky
OR
yarn husky
OR
pnpm husky
OR
bun husky
</code></pre>
<p>This creates a <code>.husky</code> folder in your project root with the necessary Git hook infrastructure.</p>
<h3 id="heading-create-pre-commit-hook">Create Pre-commit Hook</h3>
<p>Create a <code>pre-commit</code> file inside the <code>.husky</code> folder and add the following content:</p>
<pre><code class="lang-bash">npx lint-staged
</code></pre>
<p>This script will run lint-staged before every commit, ensuring your staged files are properly linted and formatted.</p>
<h3 id="heading-configure-lint-staged">Configure lint-staged</h3>
<p>Add the following configuration to your <code>package.json</code> file. This tells lint-staged what commands to run on different file types:</p>
<pre><code class="lang-json"><span class="hljs-string">"lint-staged"</span>: {
  <span class="hljs-attr">"*.{ts,js}"</span>: <span class="hljs-string">"eslint --cache --fix"</span>,
  <span class="hljs-attr">"*.{ts,js,css,md}"</span>: <span class="hljs-string">"prettier --write"</span>,
  <span class="hljs-attr">"*.js"</span>: <span class="hljs-string">"eslint --cache --fix"</span>,
  <span class="hljs-attr">"*.{js,css,md}"</span>: <span class="hljs-string">"prettier --write"</span>
}
</code></pre>
<p>This configuration:</p>
<ul>
<li><p>Runs ESLint with auto-fix on TypeScript and JavaScript files</p>
</li>
<li><p>Runs Prettier on TypeScript, JavaScript, CSS, and Markdown files</p>
</li>
<li><p>Uses ESLint's cache feature for faster subsequent runs</p>
</li>
</ul>
<hr />
<h2 id="heading-step-7-configure-packagejson-scripts">Step 7: Configure Package.json Scripts</h2>
<p>Add these utility scripts to your <code>package.json</code> for easy access to linting and formatting commands:</p>
<pre><code class="lang-json"><span class="hljs-string">"scripts"</span>: {
  <span class="hljs-attr">"lint"</span>: <span class="hljs-string">"eslint ."</span>,
  <span class="hljs-attr">"lint:fix"</span>: <span class="hljs-string">"eslint . --fix &amp;&amp; prettier --write ."</span>,
  <span class="hljs-attr">"prepare"</span>: <span class="hljs-string">"lint-staged"</span>
}
</code></pre>
<p>These scripts provide:</p>
<ul>
<li><p><code>lint</code> - Check for linting errors across the entire project</p>
</li>
<li><p><code>lint:fix</code> - Automatically fix linting errors and format all files</p>
</li>
<li><p><code>prepare</code> - Runs lint-staged (this is a special npm script that runs automatically during certain npm operations)</p>
</li>
</ul>
<hr />
<h2 id="heading-how-it-all-works-together">How It All Works Together</h2>
<p>Once everything is set up:</p>
<ol>
<li><p><strong>During development</strong>: Use <code>bun run lint</code> to check for issues or <code>bun run lint:fix</code> to automatically fix problems</p>
</li>
<li><p><strong>Before commits</strong>: Husky automatically runs lint-staged, which lints and formats only the files you're committing</p>
</li>
<li><p><strong>If there are issues</strong>: The commit will be blocked until you fix the problems, ensuring only clean code enters your repository</p>
</li>
</ol>
<h2 id="heading-testing-your-setup">Testing Your Setup</h2>
<p>To verify everything is working:</p>
<ol>
<li><p>Make some changes to your code with intentional formatting issues</p>
</li>
<li><p>Stage the files with <code>git add .</code></p>
</li>
<li><p>Try to commit with <code>git commit -m "test commit"</code></p>
</li>
<li><p>You should see ESLint and Prettier running automatically</p>
</li>
</ol>
<hr />
<p><strong>Congratulations!</strong> 🎉</p>
<p>You have successfully configured ESLint, Prettier &amp; Husky in your Bun TypeScript project. Your development workflow now includes automatic code quality checks that will help maintain consistent, high-quality code across your project.</p>
]]></content:encoded></item></channel></rss>