SEO Platform — Bulk Audits, Rank Tracking & LLM Visibility

Project Info

  • Client Self-funded SaaS
  • Year 2026 → present
  • Category SaaS / SEO platform
  • Status Closed beta — used on my own projects, no public landing page yet, so there is no live link to share
  • Stack Next.js 16 (App Router), React 19, TypeScript, Tailwind v4, Prisma 7 + Postgres, NextAuth v5, next-intl, PM2 (two-instance zero-downtime deploy)
  • Integrations Google Search Console API, Google Indexing API, Ahrefs / Majestic / Moz, DataForSEO, SE Ranking, WayForPay, Brevo, Cloudflare Turnstile, Slack
  • AI OpenAI + Google Gemini + Anthropic Claude — model picked per user in settings

Project Description

A self-funded SEO platform that started as a bulk domain checker — paste up to a hundred domains, tick the checks you need, get one sortable table with WHOIS, DNS, CMS, backlink and traffic metrics — and grew into a full combine: Search Console analytics, rank tracking, AI-visibility monitoring, link and PBN control, technical audits and an AI agent on top of it all. Built for everyday use — running client sites and a link network.

Modules

Module What it does
Bulk domain analysis
  • Up to 100 domains per batch, 8 data sources in one table
  • WHOIS (registrar, created / expires), DNS, CMS, Wayback archive
  • Majestic TF/CF, Ahrefs DR/UR/backlinks/ref. domains, Moz DA + spam score, traffic
  • Async jobs with status polling, sortable results, CSV and XLSX export
  • Per-plan quotas and a check history inside every project
Search Console
  • OAuth-connected properties, each user on their own credentials
  • 16-month backfill plus daily snapshots into our own database — history keeps growing after Google’s window has rolled away
  • Handles Google’s ~3-day data lag and catches up missed dates (up to 30 per run)
  • Striking distance: queries knocking on the top-10 with an estimate of the clicks left on the table
  • Opportunities: queries whose real CTR is under half of what the position should give (positional CTR baselines from the Advanced Web Ranking 2024 study)
  • Content gap: queries at positions 21–100 with 100+ impressions — Google already shows you for the topic, but there is no page for it
  • Cannibalization: where several pages fight over the same query
  • AI spec engine: any report row becomes a ready technical spec for the copywriter or the SEO, with the live page metadata pulled in
  • For cannibalization the prompt carries a 6-scenario playbook (merge, split the intent, de-optimize the secondaries, canonical, internal links, strengthen the main page) — the model lays the options out, the copywriter or the SEO picks
  • Head- and secondary-keyword guards — a spec never hands over a keyword another page already ranks for
  • Query intent classification, drop alerts, an email digest and report export
GEO — LLM visibility
  • Checks how often a brand is mentioned by OpenAI, Gemini and Google AI Overview
  • AI prompt generator: keywords in — the natural questions real people ask an assistant out
  • Branded and unbranded prompt sets, up to 5 variants per keyword, preview before saving
  • Deduplication against existing prompts, up to 50 prompts per project
  • Two-pass detection that cuts false positives
  • Share of voice against up to 20 competitors per project
  • AI Overview detail view and a cited-domains report
  • Automatic re-runs by cron
Rank tracker
  • Keyword positions per project
  • Keywords in folders with drag-and-drop ordering — something SE Ranking does not even offer
  • Position history and per-folder aggregates
  • Refresh on demand or on a cron schedule
Indexing
  • Submissions through the Google Indexing API and external indexing services
  • Queue plus a scheduler for submissions
  • Indexed / not-indexed status checks
  • Submission history with deletion, visible to the whole team
Competitors & keyword gap
  • Competitor registry per project
  • Keyword gap: what they rank for and you do not
  • Regex filters and query clustering
  • Select → export → spec in one pass
Sitemap scanner
  • Recurring crawl of competitor sitemaps
  • Diffs: which URLs appeared since the last run
  • New URLs pushed to Slack in chunks
  • Run history per site
Keyword research
  • Ideas, suggestions and trends via DataForSEO / SE Ranking
  • Minimum-volume filter, up to 200 ideas per query
  • 7-day local cache so API quota is not burned twice
  • Export of the selected keywords
Links control
  • Monitoring of purchased placements: link present, anchor, dofollow / nofollow
  • Daily re-checks (at most one per link per day) through a proxy pool
  • Records the exact date a link disappeared
  • Dispute / “insurance” workflow with the vendor
PBN management
  • Registry for hundreds of network domains (WordPress / Next.js)
  • WHOIS/RDAP expiry watch — warning at 30 days, alarm at 7
  • Per-domain traffic dashboards fed by an own hit-ingest endpoint
  • One-click WordPress login
  • Availability checks per domain
Sitemap health
  • Crawls up to 10,000 sitemap URLs per run
  • Status codes, redirect chains (up to 5 hops), head metadata
  • Polite concurrency and a wall-clock budget — a partial report instead of a failed run
  • Weekly enqueue of all sites plus a Slack digest
Schema checker
  • Extracts and validates schema.org markup on a page
  • Splits findings into errors and warnings per entity type
  • Tells you what exactly to fix
  • Result export
Log audit
  • Upload of server logs (CSV/TSV/XLSX/ZIP, up to 10 files / 50 MB)
  • Who crawls the site and how: bots, status codes, top-20 pages
  • Crawl freshness in buckets: 0–1, 1–3, 3–7, 7–14, 14–31, 30+ days — surfaces pages Google has not seen for months
  • Crawl-budget waste broken down: re-fetched static, redirect chains, 404s, junk endpoints (wc-ajax, admin-ajax, add-to-cart, xmlrpc)
  • And, most importantly, what to do about it — the report ends with prioritized P0/P1/P2 findings, not just numbers: set cache headers, disallow service endpoints in robots.txt, clean up 404s, deal with the bot eating half the budget
  • Every finding carries an expected effect (“frees up ~N hits of crawl budget”) plus a closing “expected effect” summary for the P0–P1 block
  • Configurable rules and thresholds, with a WordPress/WooCommerce ruleset out of the box: re-fetched-static %, 404 hits per URL, top-bot share, bot error rate, redirect hits
  • Findings are stored as keys, not sentences — the report reads in whatever language the reader picked
Text checker
  • AI-origin and originality check for any text
  • Script and encoding check (mixed Cyrillic / Latin and friends)
  • Check history with the cost of every run
  • Runs on the user's own API key
Uptime monitor
  • HTTP checks over projects and network domains
  • Intervals of 1, 3, 6, 12 or 24 hours
  • 5 attempts with back-off — no false “it is down”
  • Alerting and incident history
Teams & access
  • NextAuth v5: email with verification, Turnstile against bots
  • Roles and project sharing inside a team
  • Per-user API keys
  • AI model selectable in settings, admin panel with user management
AI agent — the layer everything is heading towards
  • A chat on top of your own project data, not generic advice — the model reaches for the platform’s own tools mid-answer
  • Today it can already: list projects, pull a rank overview and per-folder aggregates, read the GEO picture (visibility, competitor visibility, cited domains), open the competitor registry and the keyword gap
  • Every answer shows which tools it called, so the numbers are traceable rather than hallucinated
  • Conversations are stored with full history and run on the user’s own API key
  • Where it is going: from reading to doing — the agent should run almost the whole project on its own
  • Planned: launch checks and crawls, add domains, keywords and GEO prompts, write the technical spec for a page and hand it over, push URLs for indexing, open a dispute over a lost link, assemble a client report — all from a single conversation
  • The end state: you describe the goal, the agent decides which module to use and does the work; you review the result

Architecture

Next.js 16 App Router with server actions that never throw — they return { data }, { error } or { success } — Prisma 7 on Postgres, ownership checks on every resource, and admin-tunable settings that fall back to env vars when unset. Long jobs follow one pattern: enqueue, poll state, fetch the result file; the recurring side lives in /api/cron/* endpoints (scheduler, GEO, indexing, rank tracker, uptime, sitemap health, links control, subscriptions). The whole UI is localized through next-intl. Deploys are zero-downtime — two PM2 instances swap behind nginx so a running crawl never gets cut off.

SEO platform — closed beta