DEV Community

David
David

Posted on

How I Built 2 Niche Tools That Mainstream Sites Won't Touch (Fish Compatibility + Yarn Substitution)

Why These Markets?

Fish Compatibility Checker (AquaMateCheck)

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

Opportunity:

  • Google "can betta live with guppy" → first page has a forum post from 2014
  • No algorithm-based tools exist
  • All competitors are forum posts or static charts

My approach: Pairwise compatibility scoring based on 4 scientific parameters:

  1. Temperature overlap (°F range intersection)
  2. pH overlap (range intersection)
  3. Temperament match (peaceful + peaceful = good)
  4. Size predation risk (large mouth + tiny fish = predation)

Yarn Substitution Tool (StitchMatch)

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

  • Random Reddit posts
  • Outdated blog posts from 2019
  • Forum threads with contradictory advice

Opportunity:

  • No DA 50+ site specializes in yarn substitution
  • Yarnize (DA 15-25) is new and low-authority
  • Search intent is clear: "yarn substitute for [brand] [name]"

My approach: Match based on 3 physical parameters:

  1. Gauge (stitches per 4 inches) — most critical
  2. Weight category (CYC 0-7 classification)
  3. Yards per gram (yardage ratio)

Technical Architecture

pSEO Strategy

Fish Compatibility:

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

Yarn Substitution:

  • 15 yarns indexed → each yarn has a profile page
  • Discontinued yarns highlighted with ⚠️ badge
  • Top 5 substitutes ranked by gauge/weight/fiber match

Static Site Generator (Python)

Both projects use the same SSG pattern:

# build.py
from jinja2 import Environment, FileSystemLoader

def build_site():
    # Load JSON data
    fish_data = load_json("fish.json")

    # Generate pairwise pages
    for (slug_a, fish_a), (slug_b, fish_b) in combinations(fish_data.items(), 2):
        compatibility = calculate_compatibility(fish_a, fish_b)
        html = render("compatibility.html", {
            "fish_a": fish_a,
            "fish_b": fish_b,
            "compatibility": compatibility
        })
        write_html(f"compatibility/{slug_a}/{slug_b}", "index.html", html)
Enter fullscreen mode Exit fullscreen mode

Zero dependencies — no Node.js, no npm, no React. Just Python + Jinja2.


Differentiated Design

Fish Compatibility (Deep Ocean Blue Theme)

Feature Competitor My Approach
Theme Light generic Deep ocean blue (#001a0f background)
Core Tool Static chart Quick Answer box + JS calculator
Data Source Forum posts FishBase.org (scientific database)
Methodology Vague advice 4-step algorithmic scoring
EEAT Signal None Methodology section + FishBase citation

Key innovation: Water Parameter Overlap Table

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

Yarn Substitution (Morandi Warm Tone)

Feature Competitor My Approach
Theme Modern minimalist Warm craft aesthetic (#f5f3f0 background)
Core Tool Basic search Gauge + Weight + Fiber matching score
Discontinued Alert No warning ⚠️ badge + "Discontinued" tag
Calculator None Yardage calculator (skein conversion)
Data Source User submissions Brand TDS sheets (official data)

Key innovation: Yardage Calculator

  • Pattern calls for 5 skeins of discontinued yarn → you need X skeins of substitute
  • Accounts for yards/gram ratio differences

Results After 1 Week

Fish Compatibility (jw-fishcheck.web.app)

Metric Value
Pages Built 143 (153 pairs + 18 profiles + 3 tools + index)
Deploy Time 5 seconds (Firebase Hosting)
Zero Cost Firebase free tier
SEO Structure Clean URLs, sitemap, robots.txt

Yarn Substitution (jw-yarnswap.web.app)

Metric Value
Pages Built 35 (15 profiles + 10 brands + 4 weights + calculator + index)
Deploy Time 5 seconds
Zero Cost Firebase free tier

Lessons Learned

1. Blue Ocean Markets Are Real

Both markets have zero high-authority competitors. This is not theoretical:

  • Fish compatibility: All sites DA < 30
  • Yarn substitution: No dedicated site exists

Mainstream publishers avoid these niches because:

  • Brand safety: "Can Oscar eat Neon Tetra?" is violent content
  • Advertiser pressure: "Yarn substitute for discontinued brand" = product replacement (bad for advertisers)

2. pSEO > Manual Content

Pairwise generation creates natural search-intent titles:

  • "Can Betta live with Guppy?" = exactly what users search
  • "Red Heart Super Saver substitute" = exactly what users search

No keyword research needed — the titles ARE the keywords.

3. Static Sites Beat CMS

CMS Approach Static Site Approach
Database query per page Pre-generated HTML files
Server rendering CDN-delivered static files
$10/month hosting Firebase free tier
Slow TTFB <100ms TTFB

4. Scientific Data > Forum Wisdom

Fish compatibility based on FishBase.org = authoritative.
Yarn substitution based on brand TDS = authoritative.

Users trust citations over "some guy on Reddit said..."


What's Next

Phase 1 (Completed)

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

Phase 2 (Planned)

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

Links

Both are free, no ads, no tracking. Just tools that solve niche problems.


Why This Approach Works

  1. Zero competition: All mainstream sites avoid these topics
  2. Clear search intent: Users search "can X live with Y" or "substitute for X"
  3. Scientific data: FishBase + Brand TDS = authoritative sources
  4. Static generation: Fast, free hosting, zero maintenance
  5. pSEO scale: Pairwise pages = exponential growth without manual work

The lesson: Don't compete in crowded markets. Find niches where all competitors have DA < 30, then build authoritative tools with scientific data.

Top comments (0)