Data changelog & quality report
The catalogue shows its work.
Oryxen's catalogue currently holds 28,878 active records across 13 categories. When that number changes, we write down what changed and why — before anyone has to ask.
Catalogue quality pass: 4,214 renames, 7,203 retirements
Renamed
4,214
display names normalized from raw source paths to the tools' own names
Retired
7,203
records flagged inactive with a provenance reason — kept, never deleted
Active now
28,878
down from 36,081 — the shrink is cleanup, not loss
What was retired, exactly:
| Provenance flag | Records | What it means |
|---|---|---|
| duplicate | 5,088 | Same tool recorded more than once under different slugs — one canonical record kept, the rest retired with a duplicate_of reference. |
| junk_name | 1,714 | Scraped navigation labels and clone titles, not tool names: "Source Code" ×1,239, "octocat" ×105, "Home", "Readme" and similar. |
| foreign_language | 398 | Records whose entire description is a foreign-language README excerpt (Thai, Persian, Cyrillic, CJK, Hungarian, German) — not useful for an English-speaking audience. |
| boilerplate | 3 | Copy-paste vendor boilerplate with no tool-specific content. |
| total retired | 7,203 | applied in full during a single script run with a hard safety cap |
duplicate ×5,088 — Same tool recorded more than once under different slugs — one canonical record kept, the rest retired with a duplicate_of reference.
junk_name ×1,714 — Scraped navigation labels and clone titles, not tool names: "Source Code" ×1,239, "octocat" ×105, "Home", "Readme" and similar.
foreign_language ×398 — Records whose entire description is a foreign-language README excerpt (Thai, Persian, Cyrillic, CJK, Hungarian, German) — not useful for an English-speaking audience.
boilerplate ×3 — Copy-paste vendor boilerplate with no tool-specific content.
The rules that governed the pass
- Nothing was deleted. Every retired record stays in the database with a machine-readable provenance flag and timestamp — retrievable and reversible.
- Display-name renames turn raw repository paths ("0xdea/jiggy") into the tool's own name ("jiggy"). Deterministic and repeatable.
- Retirements are evidence-based: exact-name duplicates, scraped nav labels, and non-English-only descriptions. No editorial taste, no paid influence — order stays deterministic.
- Public totals always derive from the baked snapshot. "Not recorded" stays distinct from "no".
Description corrections: 4 records, documented publicly
Four high-traffic records carried descriptions copied from an unrelated source repository during early imports. Each is now corrected using the vendor's own public description. The original wrong text is listed here on purpose: a corrections page that hides what it corrected isn't a corrections page. Each record carries a description_corrected_editorial flag with a timestamp, so the change is machine-readable too.
/tools/chatgpt
was "Turn brief ideas into engaging, AI-generated videos for any platform…" (a video-generation product)
now OpenAI's AI assistant for answering questions, drafting and analyzing text, generating code and problem solving
/tools/python
was "A curated list of awesome Go frameworks, libraries, and software…" (an awesome-Go README))
now A high-level programming language with a large standard library and package ecosystem for web, data, AI and scripting
/tools/typescript
was "OpenLM: a drop-in OpenAI-compatible library…" (an unrelated wrapper project))
now A strongly typed language that builds on JavaScript, adding static types and compiling to plain JavaScript
/tools/kubernetes-2
was "[OpenShift] - An open source PaaS built on [kubernetes]… by Red Hat")
now An open-source system for automating the deployment, scaling and management of containerized applications
Category mappings for Python and TypeScript were part of a wider audit of 1,212 records, recorded below. Category counts were re-derived and the snapshot regenerated afterwards.
Category audit: 1,212 records moved, 3,454 left for review
Every active record was scored against all thirteen categories using only its own name, description and repository fields. A move required a score of at least 8, a lead of at least 35% over the runner-up, and no signal at all for the category the record was already in. AI and Other are never automatic targets; leaving AI needs a score of 14 with zero AI signal, and leaving the attribute-style Self-Hosted and Open Source categories needs 16. Ambiguous records were left alone and queued for a human instead of guessed.
Scanned
28,878
active records scored against every category
Moved
1,212
4.2% — each with a recorded confidence
Left for review
3,454
mixed evidence — nothing changed without a human decision
Largest corrections. Postman and Kubernetes had been filed under Automation; Figma and Sketch plugins had been imported under AI Coding; command-line tools had been filed under Design.
| From | To | Records |
|---|---|---|
| AI Coding | Developer Tools | 270 |
| Other | Design | 228 |
| AI Coding | Design | 184 |
| Design | Developer Tools | 129 |
| Automation | Developer Tools | 47 |
| Category | Before | After | Change |
|---|---|---|---|
| AI | 9,367 | 9,339 | -28 |
| AI Coding | 6,235 | 5,647 | -588 |
| Developer Tools | 3,687 | 4,121 | +434 |
| Design | 3,375 | 3,734 | +359 |
| Other | 3,720 | 3,453 | -267 |
| Automation | 699 | 632 | -67 |
| Audio | 533 | 566 | +33 |
| Learning | 412 | 469 | +57 |
| Productivity | 261 | 283 | +22 |
| Self-Hosted | 282 | 280 | -2 |
| Startup | 154 | 152 | -2 |
| Video | 56 | 105 | +49 |
| Open Source | 97 | 97 | 0 |
Each moved record carries category_source = classified, a category_confidence and a category_reviewed_at timestamp. The original category and JSON array are kept indirectory_tool_category_backupand a single rollback command restores them. Full rules and the review queue are documented in the repo under docs/data/categories.md.
Pricing audit: 244 labels corrected, 10 monthly prices recorded
Pricing labels were checked against each record's own text. A label moved only on an explicit phrase: a free tier or free plan is Freemium, an unconditional free offer is Free, and a free trial is neither. "Open source" alone was not treated as free, and a price was recorded only when the text gave exactly one explicit monthly amount. Credits, revenue thresholds, per-call fees and one-off packages were rejected. 28,628 records without explicit evidence were left as they were.
Scanned
28,878
active records checked against their text
Changed
250
244 label corrections and 10 prices
Vendor-verified
0
text inference is labeled, never presented as a quote
Corrections found in both directions. ChatGPT was Paid while its text said "free to use, with paid plans"; Fontshare was Paid while its text said "100% free". HuggingChat gained its recorded $9/month Pro price.
| Record | Was | Now | Evidence |
|---|---|---|---|
| ChatGPT | Paid | Freemium | free to use, with paid plans |
| Appcircle.io | Paid | Freemium | Free for 30 minutes max build time |
| Postman | Unknown | Freemium | free forever with certain limits |
| Fontshare | Paid | Free | 100% free for personal and commercial use |
| HuggingChat | Free | Freemium | Free: High usage limits. Pro: $9/mo |
| Gemini | Unknown | Freemium | Advanced: $19.99/mo |
| Was | Now | Records |
|---|---|---|
| Unknown | Freemium | 106 |
| Free | Freemium | 87 |
| Unknown | Free | 39 |
| Paid | Freemium | 8 |
| Paid | Free | 4 |
| Label | Before | After |
|---|---|---|
| Unknown | 21,848 | 21,703 |
| Free | 3,678 | 3,634 |
| Freemium | 2,020 | 2,221 |
| Paid | 1,332 | 1,320 |
Recorded monthly prices include api-hub ($2.99), HuggingChat ($9.00), Metashot ($12.00), XFlux ($19.00), Gemini ($19.99). Each changed record carries pricing_source = text_inferred, a pricing_confidence and a pricing_checked_at timestamp. price_verified_at stays empty until a person checks the provider. Originals are in directory_tool_pricing_backup and rollback was exercised before publishing: 250 records restored to the exact pre-audit distribution, then re-applied. Rules and holds are documented in docs/data/pricing.md.
Integration matrix: 3,639 records, each with its phrase
API, MCP, SDK and self-hosted are now facts with evidence, not substrings. A flag is set only when the record's own name or description contains an explicit phrase; everything else stays unrecorded, which is not a claim that the capability is absent. A client library for somebody else's API is not counted as an API provider, and the bulk Self-Hosted category tag is not treated as evidence.
Scanned
28,878
active records read for explicit capability phrases
Recorded
3,639
at least one capability, with the matched phrase kept
Unrecorded
24,771
no explicit phrase; not recorded is not a "no"
| Capability | Records |
|---|---|
| API | 256 |
| MCP | 3,128 |
| SDK | 113 |
| Self-hosted | 330 |
| Two or more | 181 |
| Any flag | 3,639 |
| Filter | Substring | Evidence |
|---|---|---|
| API | 2,074 | 256 |
| Self-hosted | 3,483 | 330 |
The old API filter counted the letters api inside "capital", "rapid" and "therapist". The old self-hosted filter's 3,483 matches were almost all the bulk Self-Hosted category tag; only 237 descriptions mentioned self-hosting. Both filters now read the flags, so a record appears only when its text supports the claim.
| Record | Recorded | Evidence |
|---|---|---|
| Den | API, self-hosted | Self-hosted sandbox runtime… REST API and WebSocket support |
| nocturnusai | API, MCP, SDK | REST API, Python/TypeScript SDKs, and MCP server integration |
| Crystallize | API | Built-in GraphQL API |
| Euterpe | API, self-hosted | Self-hosted music streaming server… REST API |
| 1ClickClaw | Self-hosted | Self-host OpenClaw to build and deploy AI agents |
| rs-es | None recorded | Client for the Elastic REST API — a client, not an API provider |
Each changed record carries integration_source = 'text_evidence', an integration_confidence and an integration_checked_at timestamp. Originals are in directory_tool_integration_backup; rollback was exercised before publishing, clearing all 3,639 flags and then re-applying them. The UI labels the flag MCP, not "MCP server", because the flag covers MCP clients as well as servers. Nothing here is vendor-verified. Rules are documented in docs/data/integrations.md.
What happens next
New imports run the same quality rules before records go live, so duplicates and junk names are stopped at the gate. Category counts re-derive from the active set after every change, and this page records every further catalogue-wide change. A bulk JSON snapshot export is on the API roadmap so you can diff the catalogue yourself.
