<?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: David</title>
    <description>The latest articles on DEV Community by David (@david_web).</description>
    <link>https://dev.to/david_web</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%2F4018832%2Fdc0fde42-d3ae-4062-bb5c-16f01b8f7949.png</url>
      <title>DEV Community: David</title>
      <link>https://dev.to/david_web</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_web"/>
    <language>en</language>
    <item>
      <title>How I Built 2 Niche Tools That Mainstream Sites Won't Touch (Fish Compatibility + Yarn Substitution)</title>
      <dc:creator>David</dc:creator>
      <pubDate>Wed, 08 Jul 2026 03:47:08 +0000</pubDate>
      <link>https://dev.to/david_web/how-i-built-2-niche-tools-that-mainstream-sites-wont-touch-fish-compatibility-yarn-substitution-2eh5</link>
      <guid>https://dev.to/david_web/how-i-built-2-niche-tools-that-mainstream-sites-wont-touch-fish-compatibility-yarn-substitution-2eh5</guid>
      <description>&lt;h2&gt;
  
  
  Why These Markets?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fish Compatibility Checker (AquaMateCheck)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Every fish compatibility site I found had &lt;strong&gt;low authority&lt;/strong&gt; (DA 15-25). Fishori, TankBrain, AquariumStocking — all new sites, no traction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opportunity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google "can betta live with guppy" → first page has a forum post from 2014&lt;/li&gt;
&lt;li&gt;No algorithm-based tools exist&lt;/li&gt;
&lt;li&gt;All competitors are forum posts or static charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My approach&lt;/strong&gt;: Pairwise compatibility scoring based on &lt;strong&gt;4 scientific parameters&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Temperature overlap (°F range intersection)&lt;/li&gt;
&lt;li&gt;pH overlap (range intersection)&lt;/li&gt;
&lt;li&gt;Temperament match (peaceful + peaceful = good)&lt;/li&gt;
&lt;li&gt;Size predation risk (large mouth + tiny fish = predation)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Yarn Substitution Tool (StitchMatch)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Discontinued yarns are everywhere. Lion Brand "Homespun" (my grandma's favorite) was discontinued in 2023. People search for substitutes but find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Random Reddit posts&lt;/li&gt;
&lt;li&gt;Outdated blog posts from 2019&lt;/li&gt;
&lt;li&gt;Forum threads with contradictory advice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Opportunity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No DA 50+ site specializes in yarn substitution&lt;/li&gt;
&lt;li&gt;Yarnize (DA 15-25) is new and low-authority&lt;/li&gt;
&lt;li&gt;Search intent is clear: "yarn substitute for [brand] [name]"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My approach&lt;/strong&gt;: Match based on &lt;strong&gt;3 physical parameters&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gauge (stitches per 4 inches) — most critical&lt;/li&gt;
&lt;li&gt;Weight category (CYC 0-7 classification)&lt;/li&gt;
&lt;li&gt;Yards per gram (yardage ratio)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Technical Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  pSEO Strategy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fish Compatibility&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;18 fish species → C(18,2) = &lt;strong&gt;153 pairwise pages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Each page title matches search intent: "Can [Fish A] live with [Fish B]?"&lt;/li&gt;
&lt;li&gt;Natural language titles = users search exactly this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Yarn Substitution&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 yarns indexed → each yarn has a profile page&lt;/li&gt;
&lt;li&gt;Discontinued yarns highlighted with &lt;strong&gt;⚠️ badge&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Top 5 substitutes ranked by gauge/weight/fiber match&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Static Site Generator (Python)
&lt;/h3&gt;

&lt;p&gt;Both projects use the same SSG pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# build.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;jinja2&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileSystemLoader&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_site&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Load JSON data
&lt;/span&gt;    &lt;span class="n"&gt;fish_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fish.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Generate pairwise pages
&lt;/span&gt;    &lt;span class="nf"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slug_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fish_a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slug_b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fish_b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;combinations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fish_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;compatibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_compatibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fish_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fish_b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compatibility.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fish_a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fish_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fish_b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fish_b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compatibility&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;compatibility&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="nf"&gt;write_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compatibility/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;slug_a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;slug_b&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Zero dependencies&lt;/strong&gt; — no Node.js, no npm, no React. Just Python + Jinja2.&lt;/p&gt;




&lt;h2&gt;
  
  
  Differentiated Design
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fish Compatibility (Deep Ocean Blue Theme)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Competitor&lt;/th&gt;
&lt;th&gt;My Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Theme&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Light generic&lt;/td&gt;
&lt;td&gt;Deep ocean blue (#001a0f background)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Tool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static chart&lt;/td&gt;
&lt;td&gt;Quick Answer box + JS calculator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forum posts&lt;/td&gt;
&lt;td&gt;FishBase.org (scientific database)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Methodology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vague advice&lt;/td&gt;
&lt;td&gt;4-step algorithmic scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EEAT Signal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Methodology section + FishBase citation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Key innovation: &lt;strong&gt;Water Parameter Overlap Table&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users see exact temperature/pH overlap (e.g., "72-78°F ✓ 6.5-7.5 ✓")&lt;/li&gt;
&lt;li&gt;No vague "these fish might work"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Yarn Substitution (Morandi Warm Tone)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Competitor&lt;/th&gt;
&lt;th&gt;My Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Theme&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modern minimalist&lt;/td&gt;
&lt;td&gt;Warm craft aesthetic (#f5f3f0 background)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Tool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic search&lt;/td&gt;
&lt;td&gt;Gauge + Weight + Fiber matching score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discontinued Alert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No warning&lt;/td&gt;
&lt;td&gt;⚠️ badge + "Discontinued" tag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Calculator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Yardage calculator (skein conversion)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User submissions&lt;/td&gt;
&lt;td&gt;Brand TDS sheets (official data)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Key innovation: &lt;strong&gt;Yardage Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern calls for 5 skeins of discontinued yarn → you need X skeins of substitute&lt;/li&gt;
&lt;li&gt;Accounts for yards/gram ratio differences&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Results After 1 Week
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fish Compatibility (jw-fishcheck.web.app)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pages Built&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;143 (153 pairs + 18 profiles + 3 tools + index)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deploy Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 seconds (Firebase Hosting)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zero Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Firebase free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SEO Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clean URLs, sitemap, robots.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Yarn Substitution (jw-yarnswap.web.app)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pages Built&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;35 (15 profiles + 10 brands + 4 weights + calculator + index)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deploy Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zero Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Firebase free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Blue Ocean Markets Are Real
&lt;/h3&gt;

&lt;p&gt;Both markets have &lt;strong&gt;zero high-authority competitors&lt;/strong&gt;. This is not theoretical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fish compatibility: All sites DA &amp;lt; 30&lt;/li&gt;
&lt;li&gt;Yarn substitution: No dedicated site exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mainstream publishers avoid these niches because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brand safety&lt;/strong&gt;: "Can Oscar eat Neon Tetra?" is violent content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advertiser pressure&lt;/strong&gt;: "Yarn substitute for discontinued brand" = product replacement (bad for advertisers)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. pSEO &amp;gt; Manual Content
&lt;/h3&gt;

&lt;p&gt;Pairwise generation creates &lt;strong&gt;natural search-intent titles&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Can Betta live with Guppy?" = exactly what users search&lt;/li&gt;
&lt;li&gt;"Red Heart Super Saver substitute" = exactly what users search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No keyword research needed — the titles ARE the keywords.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Static Sites Beat CMS
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CMS Approach&lt;/th&gt;
&lt;th&gt;Static Site Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Database query per page&lt;/td&gt;
&lt;td&gt;Pre-generated HTML files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server rendering&lt;/td&gt;
&lt;td&gt;CDN-delivered static files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$10/month hosting&lt;/td&gt;
&lt;td&gt;Firebase free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow TTFB&lt;/td&gt;
&lt;td&gt;&amp;lt;100ms TTFB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4. Scientific Data &amp;gt; Forum Wisdom
&lt;/h3&gt;

&lt;p&gt;Fish compatibility based on FishBase.org = authoritative.&lt;br&gt;
Yarn substitution based on brand TDS = authoritative.&lt;/p&gt;

&lt;p&gt;Users trust &lt;strong&gt;citations&lt;/strong&gt; over "some guy on Reddit said..."&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Phase 1 (Completed)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Fish compatibility: 18 species → 153 pairwise pages&lt;/li&gt;
&lt;li&gt;✅ Yarn substitution: 15 yarns → profile pages + brand/weight categories&lt;/li&gt;
&lt;li&gt;✅ Deployed to Firebase (JW account)&lt;/li&gt;
&lt;li&gt;✅ Fixed 404 issues (added &lt;code&gt;/fish/&lt;/code&gt; and &lt;code&gt;/yarn/&lt;/code&gt; list pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 2 (Planned)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add 50+ fish species → C(50,2) = &lt;strong&gt;1,225 compatibility pages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add 100+ yarns → comprehensive substitution database&lt;/li&gt;
&lt;li&gt;Add GSC verification + submit sitemaps&lt;/li&gt;
&lt;li&gt;Monitor impressions/clicks after 30 days&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fish Compatibility Checker&lt;/strong&gt;: &lt;a href="https://jw-fishcheck.web.app" rel="noopener noreferrer"&gt;https://jw-fishcheck.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yarn Substitution Tool&lt;/strong&gt;: &lt;a href="https://jw-yarnswap.web.app" rel="noopener noreferrer"&gt;https://jw-yarnswap.web.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are free, no ads, no tracking. Just tools that solve niche problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Approach Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero competition&lt;/strong&gt;: All mainstream sites avoid these topics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear search intent&lt;/strong&gt;: Users search "can X live with Y" or "substitute for X"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scientific data&lt;/strong&gt;: FishBase + Brand TDS = authoritative sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static generation&lt;/strong&gt;: Fast, free hosting, zero maintenance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pSEO scale&lt;/strong&gt;: Pairwise pages = exponential growth without manual work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The lesson: &lt;strong&gt;Don't compete in crowded markets. Find niches where all competitors have DA &amp;lt; 30, then build authoritative tools with scientific data.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ssg</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
