Skip to content

Generate the registry.json that blode.co/ui serves - #15

Merged
mblode merged 1 commit into
mainfrom
claude/registry-json-single-source
Aug 18, 2026
Merged

Generate the registry.json that blode.co/ui serves#15
mblode merged 1 commit into
mainfrom
claude/registry-json-single-source

Conversation

@mblode

@mblode mblode commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Found while checking why shadcn-ui/ui#11543 might get rejected.

registry/index.ts has said name: "blode" for a while, with a comment explaining that shadcn's directory pairs the registry name with the namespace (7ovr@7ovr) and a slash doesn't resolve. Three files claimed to be that registry, and only one agreed:

File name $schema items
public/r/registry.json blode yes 85 generated
public/registry.json blode/ui no 168 stale
registry.json blode/ui no 168 stale

public/registry.json is what blode.co/ui/registry.json serves, and that's the URL a directory reviewer opens first. So the advertised registry announced a namespace contradicting @blode, with no $schema, while the file the CLI actually resolves (/r/registry.json) was correct all along.

Nothing regenerated either stale copy. buildRegistryJson only ever wrote to public/r.

Changes

  • buildRegistryJson writes both served paths from the same payload, and formats both, so npm run check stays green after a rebuild
  • Root registry.json deleted rather than fixed: it sits outside public/ so it isn't served, nothing imports it, and the only /registry.json reference in the codebase (app/api/well-known/api-catalog) points at ${siteUrl}/registry.json, which resolves to the public/ copy

Verified

After npm run build:registry, both served files report name: "blode", carry $schema, and list 85 items. npm run check and npm run typecheck both pass.

Still outstanding

77 files still reference the legacy /r/styles/default/ mirror, which AGENTS.md calls the most likely objection to the directory submission. Not in this PR.


Note

Medium Risk
Large generated JSON swap changes what directory reviewers and consumers see at the public registry URL; wrong paths or naming would break installs, but the change is build-pipeline wiring rather than runtime app logic.

Overview
Unifies the advertised registry manifest with what the shadcn CLI already used by having buildRegistryJson emit the same payload to public/r/registry.json and public/registry.json, and running oxfmt on the latter so rebuilds pass npm run check.

Removes the unused root registry.json so there is no third, unserved copy to drift again.

Refreshes public/registry.json from the generator: name is now blode (not blode/ui), $schema is present, example-only entries are dropped, and the catalog matches the current registry/default/ layout (including registry:base ui, titles/descriptions, and expanded component set).

Reviewed by Cursor Bugbot for commit 554af9e. Bugbot is set up for automated code reviews on this repo. Configure here.

`registry/index.ts` has said `name: "blode"` for a while, with a comment
explaining that shadcn's directory pairs the registry name with the namespace
(`7ovr` -> `@7ovr`) and that a slash does not resolve. Three files claimed to be
that registry and only one agreed with it:

  public/r/registry.json   name: blode      $schema: yes   85 items  (generated)
  public/registry.json     name: blode/ui   $schema: no   168 items  (stale)
  registry.json            name: blode/ui   $schema: no   168 items  (stale)

`public/registry.json` is what blode.co/ui/registry.json serves, and that is the
URL a directory reviewer opens first. So the advertised registry was announcing
a namespace that contradicts `@blode`, with no `$schema`, while the file the CLI
actually resolves was correct the whole time. Nothing regenerated either stale
copy; `buildRegistryJson` only ever wrote to `public/r`.

It now writes both paths from the same payload, and formats both, so
`npm run check` stays green after a rebuild.

Root `registry.json` is deleted rather than fixed. It sits outside `public/`, so
it is not served; nothing imports it; and the only `/registry.json` reference in
the codebase is app/api/well-known/api-catalog, which points at
`${siteUrl}/registry.json` and therefore resolves to the `public/` copy. A stale
duplicate of a generated artefact is what caused this.

Verified after rebuild: both served files report name `blode`, carry `$schema`,
and list 85 items.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
blode-ui Ignored Ignored Preview Aug 18, 2026 11:50pm

Request Review

@mblode
mblode marked this pull request as ready for review August 18, 2026 23:54
@mblode
mblode merged commit 2428690 into main Aug 18, 2026
2 checks passed
@mblode
mblode deleted the claude/registry-json-single-source branch August 18, 2026 23:54
@cursor

cursor Bot commented Aug 18, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_b80e99ba-d992-4f1b-8c24-c6eb97abe2c8)

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