Skip to content

feat(taxonomy): expand CATEGORIES from 15 to 32 axes (C-CAT) - #3174

Open
0motionguy wants to merge 1 commit into
mainfrom
feat/C-CAT-expand-categories-to-32
Open

0motionguy wants to merge 1 commit into
mainfrom
feat/C-CAT-expand-categories-to-32

Conversation

@0motionguy

Copy link
Copy Markdown
Owner

Summary

Add 17 new categories to CATEGORIES (15 → 32) to close the discovery-surface gap vs OSSInsight, whose 102 hand-curated collections give them an SEO + topical-discovery advantage that 15 categories cannot match.

Evidence (deep-crawl deltas)

From the ULTRA improvement plan crawl (1188 cells across OSSInsight + TrendShift + TrendingRepo):

Curated collections (102 taxonomies) — OSSInsight (evidence) — impact 3.0
OSSInsight's 102 hand-curated collections (e.g., 'javascript-charting') create strong SEO & discovery. TrendingRepo only has 15 auto-curated categories.

New categories

Game Development · IoT & Edge · Education & Learning · Robotics · AR/VR/3D · Bio & Healthcare · Productivity & No-Code · Open Models & Datasets · Networking & Protocols · Observability · Compilers & Runtimes · Testing & QA · Documentation · Embedded Systems · Media & Streaming · Cryptography · Privacy & Surveillance Resistance.

Each entry follows the existing palette + icon convention. Colors hue-spread across Tailwind 400-700; icons distinct so no two adjacent chips collide. Existing 15 entries left untouched so prior SEO + bookmarks still resolve.

Files

  • src/lib/constants.ts — append 17 entries to CATEGORIES.
  • src/lib/category-icons.ts — import + register the 17 new Lucide icons in CATEGORY_ICON_MAP. Without this getCategoryIcon() would return null and the new chips would render iconless.

Deferred follow-up (separate PR)

scripts/classify-categories.ts — batch-classify the top-1000 derived repos against the new taxonomy via NanoGPT (Kimi-K2-Instruct) so the new chips have real repo populations on day one rather than reading "0". Tracked as a follow-up so this PR stays scoped to the taxonomy surface itself.

Test plan

  • pnpm tsc --noEmit clean (existing .next/types errors unrelated)
  • Visit /categories — all 32 chips render with distinct icon + color
  • Click a new chip (e.g. /categories/game-dev) — page renders the identity card with the right Lucide icon, no console error
  • Verify existing 15 categories still navigable (no ID overlaps)

Companion PRs

🤖 Generated with Claude Code

Add 17 new categories to close the discovery-surface gap vs OSSInsight,
whose 102 hand-curated collections give them strong SEO + topical
discovery that 15 categories can't match.

New axes (each with a distinct Lucide icon + hue-spread color):
- Game Development, IoT & Edge, Education & Learning, Robotics,
  AR/VR/3D, Bio & Healthcare, Productivity & No-Code, Open Models &
  Datasets, Networking & Protocols, Observability, Compilers &
  Runtimes, Testing & QA, Documentation, Embedded Systems, Media &
  Streaming, Cryptography, Privacy & Surveillance Resistance.

Picked by mapping the OSSInsight collection taxonomy (deep-crawl
evidence cited below) onto distinct dev-tool clusters TrendingRepo
already surfaces in repo metadata but doesn't yet surface as filter
chips. Existing 15 categories left untouched so SEO + bookmarks
stay valid; new IDs use kebab-case to match the convention.

Files:
- src/lib/constants.ts: append 17 new entries to CATEGORIES.
- src/lib/category-icons.ts: import + register the 17 new Lucide
  icons in CATEGORY_ICON_MAP so getCategoryIcon() returns a valid
  component for every entry (was hardcoded to 10).

A follow-up `scripts/classify-categories.ts` (deferred — separate
PR) will batch-classify the top-1000 derived repos against the new
taxonomy via NanoGPT so the new chips have real repo populations on
day one rather than reading "0".

Evidence: deep-crawl deltas.md →
https://ossinsight.io/collections (102 hand-curated collections
vs our 15 — strong SEO + discovery advantage).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0motionguy added a commit that referenced this pull request Jun 15, 2026
Closes part of the v3 deep-crawl deltas finding that no competitor has any
API/RSS/webhook surface (defensibility 3.0). 32 categories × 1 RSS feed
gives 32 SEO + agent-readable surfaces; the per-category llms.txt section
makes the feeds discoverable to AI agents that follow the convention.

Files:
- src/app/feeds/[slug].xml/route.ts (new) — dynamic [slug] = one of the 32
  category ids from src/lib/constants.ts. Returns RSS 2.0 XML with
  proper content-type + Cache-Control: s-maxage=900, swr=3600. Falls back
  to an "indexing in progress" item when the classifier (PR #3185) hasn't
  populated repo-categories yet.
- src/app/feeds/route.ts (new) — index page listing all 32 feed URLs as
  JSON for agent discovery.
- src/app/llms.txt/route.ts (modified) — adds "Per-category RSS feeds"
  section generated from CATEGORIES so the file scales when the taxonomy
  changes again.
- src/app/categories/[slug]/page.tsx (modified) — adds
  <link rel="alternate" type="application/rss+xml"> so feed readers can
  auto-discover the matching feed.
- src/lib/pipeline/__tests__/feeds-routes.test.ts — RSS XML escaping (&, <, >),
  content-type, and at-least-one <item> shape assertions.
- scripts/check-production-topology-docs.mjs — adds a llms.txt topology
  phrase requirement so the HOSTUP section stays accurate.

No publicly stale batches: when consensus-trending is past 4h, the feed
emits an "indexing in progress" item instead of stale items.

Companion PRs: C-CAT #3174 (taxonomy), classify #3185 (per-repo
assignments), per-category-pages #3181 (HTML landing), Toolbox #241
(ULTRA harness with the deltas evidence).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

This branch has not been deployed

No deployments
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