<?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: Bellal Hossain</title>
    <description>The latest articles on DEV Community by Bellal Hossain (@bellal_hossain_057bfd620a).</description>
    <link>https://dev.to/bellal_hossain_057bfd620a</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146764%2Fd7c2ee6e-b350-4f22-b705-f57d496995a2.png</url>
      <title>DEV Community: Bellal Hossain</title>
      <link>https://dev.to/bellal_hossain_057bfd620a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bellal_hossain_057bfd620a"/>
    <language>en</language>
    <item>
      <title>Why your loan calculator and your bank disagree (and how to code it correctly)</title>
      <dc:creator>Bellal Hossain</dc:creator>
      <pubDate>Mon, 28 Sep 2026 10:08:40 +0000</pubDate>
      <link>https://dev.to/bellal_hossain_057bfd620a/why-your-loan-calculator-and-your-bank-disagree-and-how-to-code-it-correctly-5gpm</link>
      <guid>https://dev.to/bellal_hossain_057bfd620a/why-your-loan-calculator-and-your-bank-disagree-and-how-to-code-it-correctly-5gpm</guid>
      <description>&lt;p&gt;I've been building a set of free online calculators (loans, mortgages, salary, taxes, investments, and more) and the most common question from users is: &lt;strong&gt;"Why doesn't your result match my bank's?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is almost never "the math is wrong." It's usually that two calculators made different assumptions. Here are the ones that matter, with code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Compounding frequency changes the answer
&lt;/h2&gt;

&lt;p&gt;The standard compound interest formula is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;A = P * (1 + r/n)^(n*t)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;where &lt;code&gt;P&lt;/code&gt; is principal, &lt;code&gt;r&lt;/code&gt; is the annual rate, &lt;code&gt;n&lt;/code&gt; is compounding periods per year, and &lt;code&gt;t&lt;/code&gt; is years.&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;compound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;annualRate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timesPerYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;years&lt;/span&gt;&lt;span class="p"&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;principal&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;annualRate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;timesPerYear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timesPerYear&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;years&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;compound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&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="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// ~16288.95 (annual)&lt;/span&gt;
&lt;span class="nf"&gt;compound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ~16470.09 (monthly)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same principal, same rate, same time. About $181 apart, purely because of compounding frequency. If your calculator assumes annual and your bank compounds monthly, you'll see a mismatch.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. APR and APY are not the same number
&lt;/h2&gt;

&lt;p&gt;APR is the stated yearly rate. APY includes the effect of compounding:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APY = (1 + r/n)^n - 1&lt;/code&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;apy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;apy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ~0.05116, or about 5.116%&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A 5% APR compounded monthly is roughly a 5.116% APY. Mixing these up is one of the most common bugs in finance UIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Loan payments use the amortization formula
&lt;/h2&gt;

&lt;p&gt;For a fixed-rate loan with monthly payments:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;M = P * r(1+r)^n / ((1+r)^n - 1)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;where &lt;code&gt;r&lt;/code&gt; is the monthly rate and &lt;code&gt;n&lt;/code&gt; is the total number of payments.&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;monthlyPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;annualRate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;years&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;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;annualRate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;12&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;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;years&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&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;principal&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// don't divide by zero&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;factor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;principal&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;factor&lt;/span&gt; &lt;span class="o"&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="nf"&gt;monthlyPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.06&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ~1199.10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the zero-rate edge case. Skipping it gives you &lt;code&gt;NaN&lt;/code&gt; and an angry bug report.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Floating point will bite you
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                    &lt;span class="c1"&gt;// 0.30000000000000004&lt;/span&gt;
&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.005&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 1 (not 1.01!)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For money, use one of these approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work in &lt;strong&gt;integer cents&lt;/strong&gt; and only convert for display&lt;/li&gt;
&lt;li&gt;Use a decimal library such as decimal.js or big.js for anything involving repeated multiplication (like amortization schedules)&lt;/li&gt;
&lt;li&gt;Round at defined points, not after every step, and document which&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rounding at every step of a 360-payment schedule can drift from a bank that rounds only at payment time, or vice versa.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Other reasons results differ from a lender
&lt;/h2&gt;

&lt;p&gt;Even with correct formulas, real-world numbers can diverge because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment timing (start vs end of period)&lt;/li&gt;
&lt;li&gt;Day-count conventions (actual/365 vs 30/360)&lt;/li&gt;
&lt;li&gt;Fees, insurance, and promotional rates&lt;/li&gt;
&lt;li&gt;Taxes and withholding rules that vary by region&lt;/li&gt;
&lt;li&gt;Rounding rules specific to the institution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For that reason, I label every result as an &lt;strong&gt;estimate&lt;/strong&gt;, and I'd suggest you do the same in anything you build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd suggest if you're building your own
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Show your assumptions next to the result&lt;/strong&gt; (compounding, payment timing, rounding).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write unit tests with known-good values&lt;/strong&gt;, such as published amortization examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle edge cases&lt;/strong&gt;: zero rates, zero terms, negative inputs, very large values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate formula code from UI code&lt;/strong&gt; so calculators are testable and reusable.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try the calculators
&lt;/h2&gt;

&lt;p&gt;These formulas power calculators like compound interest, mortgage, and loan payments on &lt;a href="https://noloii.com/calculators" rel="noopener noreferrer"&gt;Noloii&lt;/a&gt;, a free set of 100+ calculators across 13 categories (credit, salary, tax, investment, real estate, and more). Each one explains its own assumptions.&lt;/p&gt;

&lt;p&gt;If you find a result that doesn't match a source you trust, tell me in the comments with your inputs. Those reports are the fastest way I find edge cases.&lt;/p&gt;

&lt;p&gt;What's the nastiest rounding or floating-point bug you've hit in a money-related project?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdfwp669aghvc1w5lilus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdfwp669aghvc1w5lilus.png" alt="Calculator Tools: https://noloii.com/calculators" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdd5cuwiwfhtarigo1pjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdd5cuwiwfhtarigo1pjf.png" alt="APR Calculator: https://noloii.com/investment/apr-calculator" width="800" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I'm a solo dev who built 250+ free browser-based tools. Here's what I learned</title>
      <dc:creator>Bellal Hossain</dc:creator>
      <pubDate>Mon, 28 Sep 2026 09:47:48 +0000</pubDate>
      <link>https://dev.to/bellal_hossain_057bfd620a/im-a-solo-dev-who-built-250-free-browser-based-tools-heres-what-i-learned-26em</link>
      <guid>https://dev.to/bellal_hossain_057bfd620a/im-a-solo-dev-who-built-250-free-browser-based-tools-heres-what-i-learned-26em</guid>
      <description>&lt;p&gt;Every time I needed to compress an image, merge two PDFs, or format some JSON, I ended up on a different site full of popups, signup walls, or upload limits. So I started building my own.&lt;/p&gt;

&lt;p&gt;That project became &lt;a href="https://noloii.com/" rel="noopener noreferrer"&gt;Noloii&lt;/a&gt;, a free tools hub with 250+ utilities for files, images, calculators, developers, and everyday tasks. No signup, and it runs in the browser.&lt;/p&gt;

&lt;p&gt;Here's what I've learned building it as a one-person team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I wanted one place that handles the small stuff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compress, resize, and convert images&lt;/li&gt;
&lt;li&gt;Merge, split, and compress PDFs&lt;/li&gt;
&lt;li&gt;Format and validate JSON, decode JWTs, encode Base64&lt;/li&gt;
&lt;li&gt;Loan, salary, and tax calculators&lt;/li&gt;
&lt;li&gt;Currency and time zone converters&lt;/li&gt;
&lt;li&gt;A free ATS-friendly resume builder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these tasks is hard. The friction is the problem, so I set one rule: &lt;strong&gt;open the page, do the task, leave.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;[Fill in your real stack, for example: Next.js + TypeScript, Tailwind, hosted on X. Mention which tools run fully client-side.]&lt;/p&gt;

&lt;p&gt;The biggest architectural decision was &lt;strong&gt;client-side processing wherever possible.&lt;/strong&gt; For tools like image compression and PDF merging, [describe how, e.g. Canvas API, pdf-lib, WebAssembly]. Files never leave the user's device, which is better for privacy and cheaper to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Small tools need a system, not 250 one-offs
&lt;/h3&gt;

&lt;p&gt;After the first ten tools, I noticed I was rewriting the same layout, input handling, and result display. Building a shared tool template and category structure made adding tool #100 much faster than tool #10.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Privacy is a feature people actually check
&lt;/h3&gt;

&lt;p&gt;Users regularly ask, "Is my file uploaded?" Saying clearly on each tool page whether processing happens in the browser builds more trust than any marketing copy.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Explanations beat bare tools
&lt;/h3&gt;

&lt;p&gt;A calculator with no context is easy to replace. I added research-style guides (how payment authorization works, how credit card interest is calculated) next to the tools. People stay longer, and the content is something other sites link to.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. SEO for tool sites is slow, and that's normal
&lt;/h3&gt;

&lt;p&gt;[Share a real number if you have one, such as impressions, clicks, or how long indexing took.] I stopped chasing shortcuts and focused on making each page genuinely better than what already ranks.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Building solo means saying no
&lt;/h3&gt;

&lt;p&gt;I keep a list of tools I &lt;em&gt;won't&lt;/em&gt; build until existing ones are polished. Shipping 250 mediocre tools is worse than 50 great ones.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;[Example: Set up analytics and Search Console on day one]&lt;/li&gt;
&lt;li&gt;[Example: Standardize tool metadata earlier]&lt;/li&gt;
&lt;li&gt;[Example: Test on low-end mobile devices sooner]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;[Examples: more developer utilities, an API, offline support, AI-assisted features.]&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it and tell me what's missing
&lt;/h2&gt;

&lt;p&gt;If you want to look around, it's at &lt;strong&gt;&lt;a href="https://noloii.com/" rel="noopener noreferrer"&gt;noloii.com&lt;/a&gt;&lt;/strong&gt;. I'd especially like feedback on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which tool do you use most often, and what's annoying about the current options?&lt;/li&gt;
&lt;li&gt;What small utility do you wish existed and doesn't?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Drop a comment. I read all of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmup9syci5upy8wtkf9ap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmup9syci5upy8wtkf9ap.png" alt=" " width="680" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flfbfok9h1fes6tudv7fn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flfbfok9h1fes6tudv7fn.png" alt=" " width="794" height="887"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhle7yfmv4cfsp2p6dap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhle7yfmv4cfsp2p6dap.png" alt=" " width="717" height="893"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
