<?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: Lalchand Prajapat</title>
    <description>The latest articles on DEV Community by Lalchand Prajapat (@iamlalchand).</description>
    <link>https://dev.to/iamlalchand</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%2F3958251%2F1aeed1bf-d888-4b7b-b5e2-42356abd7bd7.png</url>
      <title>DEV Community: Lalchand Prajapat</title>
      <link>https://dev.to/iamlalchand</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iamlalchand"/>
    <language>en</language>
    <item>
      <title>I built 21 small web tools in one app, and a few things finally clicked</title>
      <dc:creator>Lalchand Prajapat</dc:creator>
      <pubDate>Fri, 29 May 2026 10:46:44 +0000</pubDate>
      <link>https://dev.to/iamlalchand/i-built-21-small-web-tools-in-one-app-and-a-few-things-finally-clicked-3n5b</link>
      <guid>https://dev.to/iamlalchand/i-built-21-small-web-tools-in-one-app-and-a-few-things-finally-clicked-3n5b</guid>
      <description>&lt;p&gt;This started as one annoying afternoon.&lt;/p&gt;

&lt;p&gt;I needed to format a messy JSON blob. Quick thing. So I searched "json formatter online", clicked the first result, and got hit with a cookie banner, two ads, and a popup asking me to subscribe before I'd even pasted anything. I closed it, tried the next one, same story.&lt;/p&gt;

&lt;p&gt;At some point I thought, you know what, I'll just build my own. How hard can a JSON formatter be.&lt;/p&gt;

&lt;p&gt;That one tool turned into 21. It's a small app called UtilityBox now ( &lt;a href="https://www.utilitybox.shop/" rel="noopener noreferrer"&gt;https://www.utilitybox.shop/&lt;/a&gt; ) and it has the usual suspects: calculator, QR code generator, password generator, regex tester, EMI calculator, currency converter, a split-expense thing for trips, SQL formatter, and a bunch more. No account, no ads in your face, everything runs in your browser.&lt;/p&gt;

&lt;p&gt;I'm not going to pretend it's some big engineering achievement. But building this many tiny tools back to back taught me a few things I wish I'd known on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most of these tools don't need a server at all
&lt;/h2&gt;

&lt;p&gt;This sounds obvious now but it wasn't to me when I started. My first plan had a backend, an API, the whole thing.&lt;/p&gt;

&lt;p&gt;Then I sat down and actually thought about it. A password generator that sends your password to &lt;em&gt;my&lt;/em&gt; server? That's a worse product, not a better one. A JSON formatter doesn't need a database. A cron expression builder is just string logic.&lt;/p&gt;

&lt;p&gt;So I made one rule: if it can run in the browser, it runs in the browser. Nothing leaves your machine.&lt;/p&gt;

&lt;p&gt;Turns out this fixed three problems at once. The tools feel instant because there's no network call. Privacy is actually real instead of a line in a privacy policy. And hosting is basically free because it's just static files.&lt;/p&gt;

&lt;p&gt;For the stuff that needs to remember things, like the quick notes tool and the budget tracker, &lt;code&gt;localStorage&lt;/code&gt; does everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;saveNotes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ub_notes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;loadNotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ub_notes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;raw&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire "database" for half the app. No auth, no sync, no server bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  My CSS was a disaster until I forced myself to stop
&lt;/h2&gt;

&lt;p&gt;Honestly the first 4 or 5 tools each looked slightly different. Different button sizes, different spacing, slightly off colors. Stitched together it looked like 5 separate websites.&lt;/p&gt;

&lt;p&gt;I stopped adding tools and spent a day pulling everything into shared variables, colors, spacing, font sizes, card style. Then I built a theme switcher on top (Corporate Light, Midnight, Emerald, a few others). Now every new tool just inherits all of it.&lt;/p&gt;

&lt;p&gt;If I could give past me one piece of advice it would be this: build the system before you build the content. That one boring day saved me from rewriting CSS twenty separate times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Each tool loads on its own
&lt;/h2&gt;

&lt;p&gt;Early version loaded every tool's logic up front. Slow first load for no reason. Now it's set up like a workspace, you click a tool card and only that tool opens. The calculator doesn't care that the regex tester exists. Way lighter, and I can break one without breaking the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part nobody warns you about: nobody finds it
&lt;/h2&gt;

&lt;p&gt;I genuinely believed if the tools were good, people would show up. They did not.&lt;/p&gt;

&lt;p&gt;What actually helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing real page titles and descriptions the way people actually search ("json formatter online", not "JSON Tool 3000")&lt;/li&gt;
&lt;li&gt;Making it fast on mobile, because that's where most people land&lt;/li&gt;
&lt;li&gt;Posts like this one, honestly. Getting a few links out there is half the battle and I kept treating it as optional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good tool that nobody can find is just a hobby. Took me a while to accept that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making it installable was suspiciously easy
&lt;/h2&gt;

&lt;p&gt;Added a manifest and a service worker, and now it's a PWA. People can add it to their home screen and it opens like an app, even works offline for the tools that don't need the internet. Tiny bit of code for a feature that feels way bigger than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stuff I'd do differently
&lt;/h2&gt;

&lt;p&gt;Write tests for anything that does math. An EMI calculator quietly returning a wrong number is the worst kind of bug, because nobody reports it, they just stop trusting you.&lt;/p&gt;

&lt;p&gt;Ship sooner. I waited way too long trying to have "enough" tools before launching. Should've put up 5 good ones and gone from there.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's it
&lt;/h2&gt;

&lt;p&gt;If you want to poke at it, it's live and free here: &lt;a href="https://www.utilitybox.shop/" rel="noopener noreferrer"&gt;https://www.utilitybox.shop/&lt;/a&gt; . No signup, takes two seconds.&lt;/p&gt;

&lt;p&gt;Real question for the comments though: what's a tool you keep needing but can never find a clean, ad-free version of? I'm picking the next few to build based on whatever you all say.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
