Skip to content

✨ Add package categorization to extensions and llms.txt#1136

Merged
taras merged 10 commits intov4from
feat/package-categories
Apr 6, 2026
Merged

✨ Add package categorization to extensions and llms.txt#1136
taras merged 10 commits intov4from
feat/package-categories

Conversation

@taras
Copy link
Copy Markdown
Member

@taras taras commented Mar 2, 2026

Motivation

AI agents and developers need better ways to discover the right EffectionX package for their use case. A flat list of 24+ packages makes it hard to find what you need.

This PR adds categorization to both the /effection/x/ page and /llms.txt route, grouping packages by their primary use case.

Approach

Data Layer

Packages are categorized using keywords in their package.json (the standard npm field). The taxonomy definition (category labels, descriptions, and display order) lives in the effectionx root package.json under effectionx.categories (thefrontside/effectionx#211, merged).

Per-package keyword audit: thefrontside/effectionx#210 (merged)

Website Schema

  • Added keywords and description to PackageJsonSchema and PackageManifest
  • Added getKeywords() method to Package interface
  • Updated getDescription() to prefer package.json description over README extraction

Dynamic Taxonomy Loading

The website reads the category taxonomy from the cloned effectionx repo at runtime via useTaxonomy():

  • www/lib/package/taxonomy.tsuseTaxonomy() Operation reads effectionx.categories from the cloned root package.json, validated with Zod
  • Falls back to DEFAULT_CATEGORIES when the field is absent; throws on malformed data
  • www/lib/package/categories.tsgroupPackagesByCategory() accepts taxonomy as a parameter, shared by both routes
  • www/lib/clones.ts — Clone helper now refreshes existing clones (fetch + reset --hard) on every access so taxonomy changes appear without server restart

llms.txt Route

Groups packages by category for better AI agent retrieval:

## EffectionX Packages

### Testing
- [@effectionx/bdd]: BDD testing harness...
- [@effectionx/vitest]: Vitest adapter...

### I/O & Network
- [@effectionx/fetch]: Effection-native fetch...

Extensions Page

Added a sticky sidebar with category navigation:

  • Categories listed with package counts
  • Click to jump to category section
  • Packages grouped under category headings
  • Packages can appear in multiple categories

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Mar 2, 2026

Open in StackBlitz

npm i https://pkg.pr.new/effection@1136

commit: 057afb7

Comment thread www/routes/x-index-route.tsx Outdated
taras added 8 commits April 5, 2026 11:40
Update Node package adapter to read keywords and description from
package.json manifest:

- Add keywords and description to PackageJsonSchema
- Add keywords and description to PackageManifest interface
- Update getManifest() to include both fields
- Add getKeywords() method to Package interface
- Update getDescription() to prefer manifest over README extraction

This enables categorization of packages in the extensions listing and
llms.txt output.
Update llms.txt route to organize packages into semantic categories
based on their keywords in package.json:

- Testing: bdd, vitest, test-adapter, converge
- I/O & Network: fetch, websocket, fs, node
- Processes: process, tinyexec, watch
- Streams: stream-helpers, stream-yaml, jsonl-store
- Concurrency: task-buffer, timebox, scope-eval
- Reactivity: signals, fx
- Interop: effect-ts, chain, context-api
- Platform: worker, raf, deno-deploy

This helps AI agents quickly find the right package for their use case
by browsing semantically grouped categories rather than a flat list.
Reorganize the extensions page with a sidebar navigation showing
categories and grouped package sections:

- Add sticky sidebar with category links (hidden on mobile)
- Group packages into categories based on keywords
- Each category section shows related packages
- Maintain Frameworks section at the top

Categories shown:
- Frameworks (StarFX)
- Testing
- I/O & Network
- Processes
- Streams
- Concurrency
- Reactivity
- Interop
- Platform

Packages appear in multiple categories if they have multiple keywords
(e.g., converge appears in both Testing and Concurrency).
Revolution JSX requires arrays from .map() to be wrapped in container
elements when used directly inside certain parent elements like <nav>
or <article>. Added wrapper <div> elements around mapped arrays to fix
the 'Expected node, not [object Object]' error from hast-util-to-html.
@taras taras force-pushed the feat/package-categories branch from f880e91 to c5930d8 Compare April 5, 2026 15:41
Copy link
Copy Markdown
Member

@cowboyd cowboyd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice!

@taras taras merged commit 9ef1ef7 into v4 Apr 6, 2026
17 checks passed
@taras taras deleted the feat/package-categories branch April 6, 2026 15:40
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.

2 participants