Skip to content

feat(vs): /vs comparison pages for OSSInsight + TrendShift - #3188

Open
0motionguy wants to merge 1 commit into
mainfrom
feat/vs-comparison-pages
Open

0motionguy wants to merge 1 commit into
mainfrom
feat/vs-comparison-pages

Conversation

@0motionguy

Copy link
Copy Markdown
Owner

Summary

Pure SEO + signup-conversion moat: two head-to-head landing pages that make the v3 deep-crawl deltas legible at a glance. Per competitor: feature matrix (10 rows), three "why this matters" panels, ComparisonPage / Article JSON-LD, weekly ISR.

  • `/vs` — index, links to every competitor page
  • `/vs/ossinsight` — `TrendingRepo vs OSSInsight`
  • `/vs/trendshift` — `TrendingRepo vs TrendShift`

Rows render shipped, ~ partial / close, not present, not confirmed. Cells include short note describing the qualifier so the partials read honest (e.g. TrendShift covers GitHub + 3 social sources, rendered as partial — not absent — on Data Sources).

Evidence trail

Every checkbox traces back to the v3 deep-crawl deltas captured 2026-06-15 in toolbox PR #241scripts/competitor-deep-crawl/out/2026-06-15T07-19-30-206Z/deltas.md. The crawl confirmed:

  • TrendingRepo's 11+ source consensus (GitHub, HN, X, Bluesky, ProductHunt, Dev.to, arXiv, Hugging Face, npm, Bilibili, XHS) vs OSSInsight (GitHub-only) and TrendShift (GitHub + 3 social) — defensibility 4.0
  • TrendingRepo's webhook + Slack integrations vs no public API / RSS / webhook on either competitor — defensibility 3.0
  • TrendingRepo's $6.50/mo monetization vs sponsor-only TrendShift and no pricing on OSSInsight — defensibility 2.0
  • TrendingRepo's interactive treemap viz vs list/table views only on both — defensibility 2.0

Companion to the L1 / F4 / C-CAT / Tier-C close PRs flagged by the same deep-crawl run.

What changed

  • `src/app/vs/page.tsx` — index landing
  • `src/app/vs/[competitor]/page.tsx` — dynamic route with `generateStaticParams` for both slugs, per-slug JSON-LD
  • `src/lib/vs/competitors.ts` — single source of truth (rows, panels, evidence URL). Adding a new competitor is a single registry entry plus a sitemap re-build
  • `src/app/sitemap-pages.xml/route.ts` — registers `/vs` as a hub and emits each `/vs/` URL in the urlset

Honesty contract

The "why this matters" panels stay on-message but each one names exactly what the competitor does ship before describing what we ship that they don't. Partials are called partials in the data file (status: `partial`), so when the crawl says "close-but-not-quite" the page renders "~" not "✗". The footer + meta both cite `PR #241` so anyone hitting the page can trace the claim.

Test plan

  • `npx tsc --noEmit` — no errors in `src/app/vs`, `src/lib/vs`, or `src/app/sitemap-pages.xml` (pre-existing `.next/types` and storybook noise unrelated)
  • `npx eslint` on the new files — clean
  • (CI) `pnpm verify` re-runs both
  • After merge: hit `/vs`, `/vs/ossinsight`, `/vs/trendshift` on a preview and confirm matrix renders + JSON-LD validates against Google's structured-data tester
  • After merge: check `/sitemap-pages.xml` includes the new URLs

🤖 Generated with Claude Code

Pure SEO + signup-conversion landing pages that make the v3 deep-crawl
deltas legible at a glance. One feature matrix per competitor (10 rows)
plus three "why this matters" panels, ComparisonPage / Article JSON-LD,
weekly ISR.

Routes:
  - /vs                   index, links to every competitor page
  - /vs/ossinsight        TrendingRepo vs OSSInsight
  - /vs/trendshift        TrendingRepo vs TrendShift

Evidence trail: every checkbox traces back to toolbox PR #241
(scripts/competitor-deep-crawl/out/2026-06-15T07-19-30-206Z/deltas.md).
Cells render ~ for partial / close where the competitor genuinely
ships an adjacent capability (e.g. TrendShift covers GitHub + 3 social
sources, we render that as partial rather than absent). Companion to
the L1 / F4 / C-CAT / Tier-C close PRs flagged by the same crawl.

Sitemap entries added to src/app/sitemap-pages.xml/route.ts so the new
URLs join the multi-sitemap index automatically.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant