<?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: meshline nostr</title>
    <description>The latest articles on DEV Community by meshline nostr (@sahamo).</description>
    <link>https://dev.to/sahamo</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%2F4229232%2F0e4897c2-7e49-4bdc-b1fa-4e4ed5d05011.png</url>
      <title>DEV Community: meshline nostr</title>
      <link>https://dev.to/sahamo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sahamo"/>
    <language>en</language>
    <item>
      <title>I Built 6 Niche Calculator Sites with Astro — Here's the Full Stack and Monetization Plan</title>
      <dc:creator>meshline nostr</dc:creator>
      <pubDate>Thu, 05 Nov 2026 20:43:06 +0000</pubDate>
      <link>https://dev.to/sahamo/i-built-6-niche-calculator-sites-with-astro-heres-the-full-stack-and-monetization-plan-59na</link>
      <guid>https://dev.to/sahamo/i-built-6-niche-calculator-sites-with-astro-heres-the-full-stack-and-monetization-plan-59na</guid>
      <description>&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%2Fexck8l6jnvj43ni8ngva.jpeg" 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%2Fexck8l6jnvj43ni8ngva.jpeg" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last year I decided to stop building things for clients and start building things for myself. The goal was simple: a portfolio of small, useful web tools that could generate passive AdSense revenue without needing a team, a marketing budget, or constant content production.&lt;/p&gt;

&lt;p&gt;Six sites later, here's what I built, how I built it, and what the realistic path to monetization looks like. No hype — just the actual decisions I made and why.&lt;/p&gt;





&lt;h2&gt;The Concept: Niche Calculator Sites&lt;/h2&gt;

&lt;p&gt;The idea is boring on purpose. Financial calculators for specific audiences — people who have a specific, high-intent question and need an answer fast. These visitors aren't browsing. They're about to make a decision. That intent is what makes the niche valuable for AdSense (finance keywords carry some of the highest CPMs on the web).&lt;/p&gt;

&lt;p&gt;The six sites I built, in order of priority:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Niche&lt;/th&gt;
&lt;th&gt;Core tools&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://mainstreetnumbers.com" rel="noopener noreferrer"&gt;mainstreetnumbers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Small business / self-employed&lt;/td&gt;
&lt;td&gt;SE tax, SBA loans, break-even, payroll&lt;/td&gt;
&lt;/tr&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://ratenumbers.com" rel="noopener noreferrer"&gt;ratenumbers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Insurance cost estimation&lt;/td&gt;
&lt;td&gt;Home, health, life, car, renters, COBRA&lt;/td&gt;
&lt;/tr&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://recoverynumbers.com" rel="noopener noreferrer"&gt;recoverynumbers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Debt &amp;amp; legal relief&lt;/td&gt;
&lt;td&gt;Debt payoff, settlement, IDR student loans&lt;/td&gt;
&lt;/tr&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://cashflownumbers.com" rel="noopener noreferrer"&gt;cashflownumbers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Real estate investing&lt;/td&gt;
&lt;td&gt;Cash-on-cash return, cap rate, DSCR&lt;/td&gt;
&lt;/tr&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://truckernumbers.com" rel="noopener noreferrer"&gt;truckernumbers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Owner-operator trucking&lt;/td&gt;
&lt;td&gt;Per-mile cost, load profit, fuel breakeven&lt;/td&gt;
&lt;/tr&gt;
    &lt;tr&gt;
&lt;td&gt;&lt;a href="https://meshline.net" rel="noopener noreferrer"&gt;meshline.net&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Savings &amp;amp; yield&lt;/td&gt;
&lt;td&gt;CD calculator, APY, annuity estimator&lt;/td&gt;
&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each site is standalone, targets a different audience, and can rank independently. The portfolio approach means one Google algorithm update doesn't kill the whole thing.&lt;/p&gt;





&lt;h2&gt;The Tech Stack&lt;/h2&gt;

&lt;h3&gt;Web: Astro&lt;/h3&gt;

&lt;p&gt;I chose &lt;strong&gt;Astro&lt;/strong&gt; for the web versions. For a calculator-heavy site, it's close to ideal:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;strong&gt;Static by default&lt;/strong&gt; — pages ship as HTML. Core Web Vitals are easy to hit without optimization theater.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Islands architecture&lt;/strong&gt; — the calculators are interactive React components, everything else is zero-JS static HTML. I'm not shipping a full React bundle for a page that's 90% text.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;File-based routing&lt;/strong&gt; — simple to maintain. Each calculator is its own &lt;code&gt;.astro&lt;/code&gt; file.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Built-in SEO primitives&lt;/strong&gt; — straightforward to wire up canonical tags, Open Graph, structured data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The calculators themselves are React components with &lt;code&gt;client:load&lt;/code&gt; hydration. State stays local — no backend, no database, no API calls. Just math in the browser.&lt;/p&gt;

&lt;pre&gt;---
// src/pages/self-employment-tax.astro
import Layout from '../layouts/Layout.astro';
import SECalculator from '../components/SECalculator.jsx';
---

&amp;lt;Layout title="Self-Employment Tax Calculator 2026"&amp;gt;
  &amp;lt;h1&amp;gt;Self-Employment Tax Calculator&amp;lt;/h1&amp;gt;
  &amp;lt;SECalculator client:load /&amp;gt;
&amp;lt;/Layout&amp;gt;&lt;/pre&gt;

&lt;p&gt;That's it. No SSR complexity, no hydration mismatch headaches for a simple calculator.&lt;/p&gt;

&lt;h3&gt;Mobile: Expo + Capacitor&lt;/h3&gt;

&lt;p&gt;For Android, I wrapped the same Astro web app using &lt;strong&gt;Capacitor&lt;/strong&gt; via &lt;strong&gt;Expo&lt;/strong&gt;. The same calculator components run inside a WebView. I'm not maintaining two codebases — it's one codebase with a Capacitor layer on top.&lt;/p&gt;

&lt;p&gt;The mobile strategy is secondary for now. The web sites are where SEO traffic lands. Mobile is a future AdMob surface once the web properties have established authority.&lt;/p&gt;

&lt;h3&gt;Hosting&lt;/h3&gt;

&lt;p&gt;Cloudflare Pages. Free tier, global CDN, deploys from GitHub on push. For static sites there's genuinely no reason to pay for hosting.&lt;/p&gt;





&lt;h2&gt;Calculator Architecture: Keeping It Simple&lt;/h2&gt;

&lt;p&gt;Each calculator follows the same pattern:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
&lt;strong&gt;Controlled inputs&lt;/strong&gt; — number fields, dropdowns, sliders where useful&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Live computation&lt;/strong&gt; — results recalculate on every input change, no submit button&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Explanation section&lt;/strong&gt; — below the calculator, a plain-English breakdown of the math&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Related calculators&lt;/strong&gt; — internal links to other tools on the same site&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The explanation section is important for two reasons: it helps users understand the output, and it's the SEO content that tells Google what the page is about. I'm not writing 2,000-word blog posts. I'm writing 300–500 words of genuinely useful explanation tied directly to the calculator's output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One thing I got wrong early:&lt;/strong&gt; I initially put all calculators on a single page with anchor links. Bad idea — Google can't assign individual rankings to anchor fragments the same way it can to standalone URLs. Each calculator is now its own page.&lt;/p&gt;

&lt;h3&gt;The Math Layer&lt;/h3&gt;

&lt;p&gt;All calculation logic is pure JavaScript functions — no libraries, no dependencies. This keeps bundle size tiny and makes the math auditable. For something like a self-employment tax calculator:&lt;/p&gt;

&lt;pre&gt;function calculateSETax(netProfit) {
  const seBase = netProfit * 0.9235; // 92.35% of net profit
  const seTax = seBase * 0.153;      // 15.3% SE tax rate
  const deduction = seTax * 0.5;    // above-the-line deduction
  return { seTax, deduction, netAfterDeduction: netProfit - deduction };
}&lt;/pre&gt;

&lt;p&gt;No black boxes. Users who want to verify the math can inspect the source. That transparency is part of the value proposition — especially in finance niches where trust matters.&lt;/p&gt;





&lt;h2&gt;SEO Strategy: Topical Authority, Not Volume&lt;/h2&gt;

&lt;p&gt;I'm not trying to rank for "tax calculator" — that's a Intuit / H&amp;amp;R Block keyword. The strategy is topical depth within a narrow niche:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;self-employment tax calculator for freelancers&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;COBRA vs ACA cost comparison calculator&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;owner-operator trucking cost per mile calculator&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;debt settlement calculator lump sum&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are lower volume but high intent, low competition, and high CPM. Someone searching for "COBRA vs ACA calculator" is in an active coverage decision. That's exactly the kind of visitor that generates AdSense revenue.&lt;/p&gt;

&lt;p&gt;All six sites are currently in positions 60–90. The ranking phase requires backlinks — which I'm now actively building through HARO responses, resource page outreach, and guest posts on personal finance blogs using the calculator data as the hook.&lt;/p&gt;

&lt;h3&gt;Site Architecture for SEO&lt;/h3&gt;

&lt;pre&gt;mainstreetnumbers.com/
├── self-employment-tax-calculator/
├── sba-loan-calculator/
├── break-even-calculator/
├── payroll-tax-calculator/
├── quarterly-tax-calculator/
└── [topic]/resources/   ← supporting content pages&lt;/pre&gt;

&lt;p&gt;Flat structure, descriptive URLs, no dynamic query strings. Each calculator page targets one primary keyword and two or three secondary variants.&lt;/p&gt;





&lt;h2&gt;Monetization: AdSense in High-CPM Niches&lt;/h2&gt;

&lt;p&gt;Finance is the highest-CPM AdSense category. Insurance keywords in particular can hit $8–$25 RPM depending on the specific topic and traffic source. The ceiling across all six sites — if they reach their traffic targets — is around $13,000–$14,000/month in AdSense revenue.&lt;/p&gt;

&lt;p&gt;That number sounds large until you understand the CPM math:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A finance site doing $12 average RPM needs ~1.1M monthly pageviews to hit $13K&lt;/li&gt;
  &lt;li&gt;Spread across 6 sites, that's ~185K pageviews per site per month&lt;/li&gt;
  &lt;li&gt;At positions 5–10 for 15–20 calculator pages each, that's achievable — but it requires actually ranking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which is why the backlink campaign matters more than any other single variable right now.&lt;/p&gt;

&lt;blockquote&gt;The sites are built. The calculators work. The SEO foundation is correct. The only missing variable is domain authority — and that's a backlink problem, not a product problem.&lt;/blockquote&gt;





&lt;h2&gt;What I'd Do Differently&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start the backlink campaign earlier.&lt;/strong&gt; I spent the first four months on product polish when the sites were already good enough to outreach with at month two. Time spent on pixel-perfect calculator UI is wasted if the page isn't ranking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build fewer, deeper sites.&lt;/strong&gt; Six sites is manageable but I underestimated the content depth needed per site. Four sites with 25 calculators each would have been a stronger topical authority play than six sites with 12 calculators each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add an email capture earlier.&lt;/strong&gt; Calculator sites are perfect for lead magnets — a "save your calculation" prompt could build an email list from day one. I didn't do this and it's a missed asset.&lt;/p&gt;





&lt;h2&gt;Current Status&lt;/h2&gt;

&lt;p&gt;All six sites are live. Positions are 60–90 across the board — typical for new sites without established domain authority. The plan for the next 90 days is entirely focused on backlink acquisition: HARO responses, resource page inclusions, and niche edit placements on existing finance articles.&lt;/p&gt;


&lt;p&gt;If you're building something similar or have thoughts on the Astro + calculator architecture, I'd love to hear it in the comments. And if you're a personal finance blogger who covers small business, insurance, real estate, trucking, or debt relief — the calculator data is available if it's useful for your content.&lt;/p&gt;`

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