Skip to content

feat(seo): add use-case landing pages for rules, data MCP, and slash commands#465

Open
sxxtony wants to merge 3 commits into
JSONbored:mainfrom
sxxtony:feat/seo-use-case-landing-pages-431
Open

feat(seo): add use-case landing pages for rules, data MCP, and slash commands#465
sxxtony wants to merge 3 commits into
JSONbored:mainfrom
sxxtony:feat/seo-use-case-landing-pages-431

Conversation

@sxxtony
Copy link
Copy Markdown

@sxxtony sxxtony commented May 21, 2026

Pull Request

Summary

  • Adds three new use-case landing pages to the existing /best/[slug] system so visitors can browse the registry by intent instead of registry category.
  • New slugs target gaps in the current 10 clusters — no existing cluster headlines rules or commands, and there is no narrow data/database-focused MCP page:
    • /best/claude-rules-for-engineering-teams — TypeScript, React, security, OWASP, performance rules
    • /best/mcp-servers-for-databases-and-data — database, infra, deployment, and ops MCP servers
    • /best/slash-commands-for-claude-code — testing, documentation, refactoring, performance, security audits, automation
  • Pages are generated from existing registry data via seoClusterDefinitions in apps/web/src/lib/seo-clusters.ts; the route, scoring, JSON-LD, sitemap, and generateStaticParams already handle new slugs automatically.

Submission Source

  • New content file(s) added under content/<category>/
  • Existing content updated
  • Submission issue resolved (link it here): feat(seo): add use-case landing pages for top Claude workflows #431
  • Direct content submissions include submittedBy and submittedByUrl frontmatter matching the PR author.
  • I did not modify README.md, generated registry outputs, or apps/web/public/downloads/** unless this is a maintainer/internal automation branch.
  • I did not request HeyClaude-hosted /downloads/... package hosting for community-submitted ZIP/MCPB artifacts.

Schema and Quality Checks

  • pnpm validate:content passed (pnpm validate:content:strict — 386 files validated)
  • pnpm validate:packages passed (not applicable — no package changes)
  • pnpm scan:packages passed when package artifacts changed (not applicable)
  • pnpm audit:content ran and I reviewed findings (not applicable — no content file changes)
  • No forbidden fields were added (viewCount, copyCount, popularityScore)
  • Install/use/copy paths are practical and complete (not applicable — no content entries)
  • Skill submissions include capability metadata (not applicable)

Validation

  • Local build passed (pnpm build) — /best/[slug] now prerenders 13 paths (10 existing + 3 new)
  • I spot-checked the affected detail page(s) via the suggested vitest suites:
    • pnpm exec vitest run tests/seo-jsonld.test.ts tests/discovery-surfaces.test.ts tests/seo-metadata.test.ts — 16/16 passed
  • git diff --check clean
  • All three seoDescription values are within the 120–160 character bound enforced by tests/seo-metadata.test.ts (153, 159, 151)

Acceptance criteria for #431

  • At least three useful use-case pages are added (3 new slugs, none duplicating the existing 10).
  • Pages are generated from existing registry data — same getSeoCluster/scoreItem path as the existing clusters.
  • Page copy is concise, practical, and non-promotional.
  • SEO metadata is present — same generateMetadata + JSON-LD helpers (buildBreadcrumbJsonLd, buildCollectionPageJsonLd, buildItemListJsonLd) used by the existing clusters.
  • PR includes Closes #431.

Notes

  • No registry/schema churn. No new routes. No generated artifact changes.
  • Sitemap and generateStaticParams automatically pick up the new slugs through getSeoClusterDefinitions().
  • Slug rationale:
    • rules and commands were not previously headline categories in any of the 10 existing clusters — these add long-tail intent pages.
    • mcp-servers-for-databases-and-data complements the broad mcp-servers cluster with a narrower data-focused intent ("Claude MCP database", "Postgres MCP", etc.).

Closes #431

…commands

Add three new use-case clusters to the existing /best/[slug] landing page
system so visitors can browse by intent rather than registry category:

- claude-rules-for-engineering-teams (rules category, not previously headlined)
- mcp-servers-for-databases-and-data (narrower MCP intent than the broad cluster)
- slash-commands-for-claude-code (commands category, not previously headlined)

Pages are generated from existing registry data through the current
seoClusterDefinitions config; no schema, route, or SEO infrastructure
changes are needed. The route already emits BreadcrumbList, CollectionPage,
and ItemList JSON-LD via the shared seo helpers, and sitemap entries are
auto-derived from the definitions list.

Closes JSONbored#431
@sxxtony sxxtony requested a review from JSONbored as a code owner May 21, 2026 16:44
@superagent-security superagent-security Bot added the contributor:verified Contributor passed trust analysis. label May 21, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 21, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: c35e7097-0add-47ee-9ebd-2069f9981d73

📥 Commits

Reviewing files that changed from the base of the PR and between 3826821 and 5c584ee.

📒 Files selected for processing (1)
  • apps/web/src/lib/seo-clusters.ts
📜 Recent review details
🧰 Additional context used
📓 Path-based instructions (2)
apps/web/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (Custom checks)

apps/web/src/**/*.{ts,tsx}: Client components ('use client') must not import server-only utilities (unstable_cache, headers, cookies)
Client components ('use client') must not use Node.js APIs (fs, path, etc.)
Client components ('use client') must use client-safe logging (logClientError, not logger from server)
Server components must not use browser APIs (window, document, localStorage)
Server components must not use React hooks (useState, useEffect, etc.)
Server components must use server logging from @heyclaude/web-runtime/logging/server
Server components and pages must track duration with withDuration()
Server components and pages must include requestId in all logs
Server components and pages must use normalizeError() in catch blocks
Server components and pages must have a final summary log
Client components with async operations must use useLoggedAsync hook
Client components with async operations must never use raw try/catch without logging
Do not use user input in database queries without sanitization
Do not construct URLs without validation
Do not perform file path operations without sanitization
Server actions must have auth checks before executing operations
Do not perform direct database mutations without permission checks
Do not log PII without hashing (userId, email, etc.)
Do not expose sensitive data in error messages
Do not include API keys or secrets in code
Do not use unsanitized user input in HTML rendering
Do not use dangerous eval() or Function() with user input
Do not use unsanitized user input in database queries (SQL/NoSQL injection prevention)

Files:

  • apps/web/src/lib/seo-clusters.ts
apps/web/src/**/*

📄 CodeRabbit inference engine (AGENTS.md)

Website/API behavior must live under apps/web/src/

Files:

  • apps/web/src/lib/seo-clusters.ts
🔇 Additional comments (1)
apps/web/src/lib/seo-clusters.ts (1)

175-226: Nice work on these three additions! ☕ I checked them over and they slot in cleanly alongside the existing clusters:

  • Slugs are unique within seoClusterDefinitions and follow the established kebab-case convention.
  • seoDescription values all land within the 120–160 character SEO window you called out in the PR description.
  • Categories (rules, mcp, commands) align with the filter logic in getSeoCluster, and since each new entry is single-category, the score > 0 || categories.length === 1 branch will gracefully include zero-score matches — so the pages won't go empty if tag overlap is thin.
  • Tag selections look well-targeted for the intent each landing page advertises (TypeScript/React/OWASP for engineering rules, database/devops for data MCP, testing/refactoring/security for slash commands).

Purely data-only additions through an existing, well-tested pipeline — exactly the lightweight approach issue #431 was asking for. LGTM!


📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • New Features
    • Added three new content discovery categories: Claude engineering team tools, MCP database servers and workflows, and Slash commands for Claude Code.

Walkthrough

Three new SEO cluster definitions are added to support use-case landing pages for engineering team rules, MCP servers for data workflows, and Claude Code slash commands. Each cluster includes slug, display titles, descriptions, category, tags, and item limits for registry filtering.

Changes

SEO Cluster Definitions for Use-Case Landing Pages

Layer / File(s) Summary
Three new use-case landing page cluster definitions
apps/web/src/lib/seo-clusters.ts
Three cluster objects added: claude-rules-for-engineering-teams, mcp-servers-for-databases-and-data, and slash-commands-for-claude-code. Each defines SEO metadata, category membership, tag filters, and item limits to power discovery landing pages.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

Poem

🚀 Three clusters bloom in SEO's garden bed,
Rules for teams, databases well-fed,
Slash commands dancing bright,
Discovery landing pages take flight! ✨


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ❌ Error Docstring coverage is 0.00% which is insufficient. The required threshold is 90.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Logging Standards Compliance ❓ Inconclusive The logging standards rules file .cursor/rules/logging-instrumentation.mdc does not exist in the repository, making the check unverifiable. Add the .cursor/rules/logging-instrumentation.mdc file to the repository, or clarify if logging standards compliance applies only to certain file categories.
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: adding three new use-case landing pages targeting rules, data MCPs, and slash commands for improved SEO and discoverability.
Description check ✅ Passed The description is thorough and well-structured, following the template with checked boxes for submission source, validation steps, and detailed acceptance criteria confirmation for issue #431.
Linked Issues check ✅ Passed All acceptance criteria from #431 are met: three use-case pages added (rules, data MCP, slash commands), generated from existing registry data, non-promotional copy provided, SEO metadata included, and PR closes the issue.
Out of Scope Changes check ✅ Passed All changes are scoped to adding three new SEO cluster definitions in seo-clusters.ts; no hand-maintained catalogs, promotional content, external data fetching, or site redesigns introduced.
Security Pattern Review ✅ Passed PR adds only static data entries with no security anti-patterns: safe slug comparison, no PII/secrets, no injection risks, no file operations, all hardcoded.
Client/Server Boundary Validation ✅ Passed PR correctly respects Next.js boundaries. Modified file is server-only with safe imports; all consumers are server components; no client/API route violations found.
✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@superagent-security superagent-security Bot added the pr:verified PR passed security analysis. label May 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor:verified Contributor passed trust analysis. pr:verified PR passed security analysis.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(seo): add use-case landing pages for top Claude workflows

2 participants