Skip to content

fix: serve registry.json on GitHub Pages#25

Closed
tellaho wants to merge 1 commit intoblock:mainfrom
tellaho:fix/serve-registry-json-on-pages
Closed

fix: serve registry.json on GitHub Pages#25
tellaho wants to merge 1 commit intoblock:mainfrom
tellaho:fix/serve-registry-json-on-pages

Conversation

@tellaho
Copy link
Copy Markdown
Collaborator

@tellaho tellaho commented Apr 8, 2026

Problem

registry.json returns 404 at https://block.github.io/ghost/registry.json.

The build:registry step generates registry.json at the package root (packages/ghost-ui/registry.json), but Vite only copies files from public/ into dist/. Without an explicit copy step, registry.json is never included in the Pages deployment artifact.

The individual component files (public/r/*.json) are served correctly because shadcn build outputs them directly into public/r/.

Fix

Adds a cp step between build:registry and the Vite build so registry.json lands in public/ and Vite picks it up automatically.

Verification

  • Reproduced locally: VITE_BASE_PATH=/ghost/ pnpm --filter @ghost/ui builddist/registry.json is present after the copy step, absent without it.
  • Confirmed the latest successful deploy (run 24144692488, commit 8095a88) does NOT include this step in the logs.
  • Confirmed curl -I https://block.github.io/ghost/registry.json returns 404 today.

Impact

Downstream consumers (e.g. components.json pointing at the ghost-ui registry) can use the canonical Pages URL instead of raw.githubusercontent.com workarounds.

The build:registry step generates registry.json at the package root
(packages/ghost-ui/registry.json), but Vite only copies files from
public/ into dist/. Without this copy step, registry.json is never
included in the Pages deployment artifact, resulting in a 404 at
https://block.github.io/ghost/registry.json.

This adds a cp step between build:registry and the Vite build so
registry.json lands in public/ and Vite picks it up automatically.
@tellaho tellaho requested a review from nahiyankhan as a code owner April 8, 2026 21:01
tellaho added a commit to block/goose2 that referenced this pull request Apr 8, 2026
The raw.githubusercontent.com URL is a workaround for registry.json
not being served on GitHub Pages. PR block/ghost#25 fixes the deploy
workflow. Once merged and deployed, both ghost.config.ts and
components.json should switch to:
  https://block.github.io/ghost/registry.json
@tellaho
Copy link
Copy Markdown
Collaborator Author

tellaho commented Apr 8, 2026

Closing, learned it lives at https://block.github.io/ghost/r/registry.json

@tellaho tellaho closed this Apr 8, 2026
tellaho added a commit to block/goose2 that referenced this pull request Apr 8, 2026
The registry was already being served at /ghost/r/registry.json via
shadcn build output in public/r/. Switch both components.json and
ghost.config.ts from the raw.githubusercontent.com workaround to the
proper GitHub Pages URL.

Removes the TODO tracking block/ghost#25 — that PR is still useful
for serving at the root path, but no longer blocking us.
tellaho added a commit to block/goose2 that referenced this pull request Apr 8, 2026
The raw.githubusercontent.com URL is a workaround for registry.json
not being served on GitHub Pages. PR block/ghost#25 fixes the deploy
workflow. Once merged and deployed, both ghost.config.ts and
components.json should switch to:
  https://block.github.io/ghost/registry.json
tellaho added a commit to block/goose2 that referenced this pull request Apr 8, 2026
The registry was already being served at /ghost/r/registry.json via
shadcn build output in public/r/. Switch both components.json and
ghost.config.ts from the raw.githubusercontent.com workaround to the
proper GitHub Pages URL.

Removes the TODO tracking block/ghost#25 — that PR is still useful
for serving at the root path, but no longer blocking us.
tellaho added a commit to block/goose2 that referenced this pull request Apr 9, 2026
* feat: migrate from boss-ui to Ghost UI foundation

Swap the design system foundation from boss-ui to Ghost UI, the
open-source successor design language from block/ghost.

Font swap:
- Remove Cash Sans (CDN) and Cash Sans Wide (local) font faces
- Add HK Grotesk (local woff2, 7 weights: 300–900)
- Update --font-sans, --font-display to "HK Grotesk"
- Update --font-mono to "Geist Mono"

CSS tokens (globals.css):
- Adopt Ghost's main.css as the token source of truth
- Add hero-blur-in, fadeToFull, fadeToSubtle keyframes from Ghost
- Add scrollbar hover styles from Ghost
- Preserve all goose2-specific tokens: --color-brand, --density-spacing,
  --text-subtle, --radius-overlay, compat color scales for ai-elements
- Preserve goose2 custom utilities: density spacing, page transitions,
  content-fade-in, prefers-reduced-motion, keyboard-nav focus, app shell lock

UI primitives (47 of 49 files):
- Copy Ghost UI components with import path adjustment
  (@/lib/utils → @/shared/lib/cn) and "use client" removal
- Preserve goose2's button.tsx (leftIcon/rightIcon, forwardRef,
  ghost-light/toolbar variants, xs/icon-lg sizes, compound variants)
- Preserve goose2's tabs.tsx (CVA variants: default, buttons)
- Restore dialog.tsx showCloseButton prop (used by ImageLightbox)
- Fix sonner.tsx useTheme import to @/shared/theme/ThemeProvider

Not included (PR 2):
- ai-elements migration (48 files, separate scope)

* fix: add type="button" to SidebarRail per AGENTS.md

Ghost upstream omits type="button" on the SidebarRail <button>.
Goose2 requires it on all button elements to prevent accidental
form submission (AGENTS.md coding conventions).

PR review feedback from Marge.

* fix: restore 20px radius on popup surfaces (dropdown → overlay parity)

* fix: remove HK Grotesk font — align with upstream Ghost 'no bundled fonts' model

Upstream block/ghost PRs #23 and #24 removed all HK Grotesk @font-face
declarations and switched to a 'consumers bring their own fonts' model.
Align our branch with this change:

- Replace --font-sans and --font-display with system font stack
- Remove all 7 @font-face declarations (300–900 weights)
- Delete 7 HKGrotesk-*.woff2 font files from src/assets/fonts/

The system font stack (system-ui, -apple-system, BlinkMacSystemFont,
Segoe UI, Roboto, sans-serif) matches upstream Ghost's new defaults.

318/318 tests passing. Biome clean.

* fix: restore rounded-overlay class on overlay surfaces

The migration commit incorrectly replaced rounded-overlay with
rounded-dropdown on all popup/overlay components. Both tokens resolve
to 20px currently, but rounded-overlay is the correct semantic token
for overlay surfaces (popovers, hover cards, context menus, selects,
dropdown menus, menubars).

Restores 9 occurrences across 6 shared UI components.

* fix: strip internal references from CSS comments

Remove migration-specific context from globals.css comments that
wouldn't make sense to future consumers of the design system:

- Remove '(upstream Ghost PRs #23/#24)' from font comment
- Replace redundant font narration with '@font-face — add your own here'
- Remove '(from dsgn-playground)' from gray scale comment

Comments should help the next person, not document our migration.

* feat: point components.json at ghost-ui registry + add ghost.config.ts

Step 2: Update components.json to consume from ghost-ui registry:
- style: new-york → ghost
- baseColor: zinc → neutral
- Add registryUrl pointing to block.github.io/ghost/registry.json
- Add iconLibrary: lucide

Future `npx shadcn add <component>` commands will now pull
ghost-styled components from the upstream registry.

Step 3: Add ghost.config.ts for drift detection:
- Points at ghost-ui registry for goose2's shared UI components
- Enables value + structure scanning
- Configures rules: hardcoded-color (error), token-override (warn),
  missing-token (warn), structural-divergence (error)

Run `ghost scan` to detect drift from the parent design system.

* fix: use raw GitHub URL for ghost-ui registry

The GitHub Pages deploy doesn't include registry.json in dist/ —
it only serves the Vite SPA. The raw.githubusercontent.com URL
points directly at the source file and resolves correctly.

Long-term: ghost repo should copy registry.json to public/ so
it's served at block.github.io/ghost/registry.json.

* chore: add TODO to switch registry URL once block/ghost#25 lands

The raw.githubusercontent.com URL is a workaround for registry.json
not being served on GitHub Pages. PR block/ghost#25 fixes the deploy
workflow. Once merged and deployed, both ghost.config.ts and
components.json should switch to:
  https://block.github.io/ghost/registry.json

* fix: use canonical Pages URL for ghost-ui registry

The registry was already being served at /ghost/r/registry.json via
shadcn build output in public/r/. Switch both components.json and
ghost.config.ts from the raw.githubusercontent.com workaround to the
proper GitHub Pages URL.

Removes the TODO tracking block/ghost#25 — that PR is still useful
for serving at the root path, but no longer blocking us.

* chore: revert formatting-only changes (import/export reordering)

Reverts Biome auto-sort import reordering and export alphabetizing
across 39 shared/ui component files. These were formatting-only changes
that added noise to the ghost-ui migration PR without any functional
impact.

9 files fully reverted (pure formatting noise):
- collapsible, hover-card, popover, tooltip, table, label,
  separator, progress, avatar

30 files surgically cleaned (import/export order restored,
real ghost-ui class changes preserved):
- accordion, alert, alert-dialog, badge, breadcrumb, button-group,
  calendar, carousel, chart, checkbox, command, context-menu, dialog,
  dropdown-menu, form, input-group, input-otp, menubar, navigation-menu,
  pagination, radio-group, resizable, scroll-area, select, sheet,
  sidebar, slider, switch, toggle, toggle-group

* chore: revert remaining export reordering (round 2)

Missed 13 more files with alphabetized exports in the first pass.
Restored original export order in: alert-dialog, card, carousel,
command, context-menu, drawer, dropdown-menu, form, input-group,
menubar, navigation-menu, pagination, sheet.

card.tsx and drawer.tsx are now fully clean (zero diff vs main).

* fix: restore rounded-full on InputGroup container

Reverts ghost-ui registry's rounded-md back to rounded-full per design
direction. The InputGroup container uses a fixed h-9 height, so pill
radius renders correctly.

Also restores rounded-[calc(var(--radius)-5px)] on the sm button variant
for proper nested radius calculation.

* chore: simplify ghost.config.ts — remove speculative scan/rules

The scan and rules blocks were added speculatively without explicit
design decisions. Strip down to just the registry pointer until we
decide on lint rules.
jamadeo pushed a commit to aaif-goose/goose that referenced this pull request Apr 13, 2026
* feat: migrate from boss-ui to Ghost UI foundation

Swap the design system foundation from boss-ui to Ghost UI, the
open-source successor design language from block/ghost.

Font swap:
- Remove Cash Sans (CDN) and Cash Sans Wide (local) font faces
- Add HK Grotesk (local woff2, 7 weights: 300–900)
- Update --font-sans, --font-display to "HK Grotesk"
- Update --font-mono to "Geist Mono"

CSS tokens (globals.css):
- Adopt Ghost's main.css as the token source of truth
- Add hero-blur-in, fadeToFull, fadeToSubtle keyframes from Ghost
- Add scrollbar hover styles from Ghost
- Preserve all goose2-specific tokens: --color-brand, --density-spacing,
  --text-subtle, --radius-overlay, compat color scales for ai-elements
- Preserve goose2 custom utilities: density spacing, page transitions,
  content-fade-in, prefers-reduced-motion, keyboard-nav focus, app shell lock

UI primitives (47 of 49 files):
- Copy Ghost UI components with import path adjustment
  (@/lib/utils → @/shared/lib/cn) and "use client" removal
- Preserve goose2's button.tsx (leftIcon/rightIcon, forwardRef,
  ghost-light/toolbar variants, xs/icon-lg sizes, compound variants)
- Preserve goose2's tabs.tsx (CVA variants: default, buttons)
- Restore dialog.tsx showCloseButton prop (used by ImageLightbox)
- Fix sonner.tsx useTheme import to @/shared/theme/ThemeProvider

Not included (PR 2):
- ai-elements migration (48 files, separate scope)

* fix: add type="button" to SidebarRail per AGENTS.md

Ghost upstream omits type="button" on the SidebarRail <button>.
Goose2 requires it on all button elements to prevent accidental
form submission (AGENTS.md coding conventions).

PR review feedback from Marge.

* fix: restore 20px radius on popup surfaces (dropdown → overlay parity)

* fix: remove HK Grotesk font — align with upstream Ghost 'no bundled fonts' model

Upstream block/ghost PRs #23 and #24 removed all HK Grotesk @font-face
declarations and switched to a 'consumers bring their own fonts' model.
Align our branch with this change:

- Replace --font-sans and --font-display with system font stack
- Remove all 7 @font-face declarations (300–900 weights)
- Delete 7 HKGrotesk-*.woff2 font files from src/assets/fonts/

The system font stack (system-ui, -apple-system, BlinkMacSystemFont,
Segoe UI, Roboto, sans-serif) matches upstream Ghost's new defaults.

318/318 tests passing. Biome clean.

* fix: restore rounded-overlay class on overlay surfaces

The migration commit incorrectly replaced rounded-overlay with
rounded-dropdown on all popup/overlay components. Both tokens resolve
to 20px currently, but rounded-overlay is the correct semantic token
for overlay surfaces (popovers, hover cards, context menus, selects,
dropdown menus, menubars).

Restores 9 occurrences across 6 shared UI components.

* fix: strip internal references from CSS comments

Remove migration-specific context from globals.css comments that
wouldn't make sense to future consumers of the design system:

- Remove '(upstream Ghost PRs #23/#24)' from font comment
- Replace redundant font narration with '@font-face — add your own here'
- Remove '(from dsgn-playground)' from gray scale comment

Comments should help the next person, not document our migration.

* feat: point components.json at ghost-ui registry + add ghost.config.ts

Step 2: Update components.json to consume from ghost-ui registry:
- style: new-york → ghost
- baseColor: zinc → neutral
- Add registryUrl pointing to block.github.io/ghost/registry.json
- Add iconLibrary: lucide

Future `npx shadcn add <component>` commands will now pull
ghost-styled components from the upstream registry.

Step 3: Add ghost.config.ts for drift detection:
- Points at ghost-ui registry for goose2's shared UI components
- Enables value + structure scanning
- Configures rules: hardcoded-color (error), token-override (warn),
  missing-token (warn), structural-divergence (error)

Run `ghost scan` to detect drift from the parent design system.

* fix: use raw GitHub URL for ghost-ui registry

The GitHub Pages deploy doesn't include registry.json in dist/ —
it only serves the Vite SPA. The raw.githubusercontent.com URL
points directly at the source file and resolves correctly.

Long-term: ghost repo should copy registry.json to public/ so
it's served at block.github.io/ghost/registry.json.

* chore: add TODO to switch registry URL once block/ghost#25 lands

The raw.githubusercontent.com URL is a workaround for registry.json
not being served on GitHub Pages. PR block/ghost#25 fixes the deploy
workflow. Once merged and deployed, both ghost.config.ts and
components.json should switch to:
  https://block.github.io/ghost/registry.json

* fix: use canonical Pages URL for ghost-ui registry

The registry was already being served at /ghost/r/registry.json via
shadcn build output in public/r/. Switch both components.json and
ghost.config.ts from the raw.githubusercontent.com workaround to the
proper GitHub Pages URL.

Removes the TODO tracking block/ghost#25 — that PR is still useful
for serving at the root path, but no longer blocking us.

* chore: revert formatting-only changes (import/export reordering)

Reverts Biome auto-sort import reordering and export alphabetizing
across 39 shared/ui component files. These were formatting-only changes
that added noise to the ghost-ui migration PR without any functional
impact.

9 files fully reverted (pure formatting noise):
- collapsible, hover-card, popover, tooltip, table, label,
  separator, progress, avatar

30 files surgically cleaned (import/export order restored,
real ghost-ui class changes preserved):
- accordion, alert, alert-dialog, badge, breadcrumb, button-group,
  calendar, carousel, chart, checkbox, command, context-menu, dialog,
  dropdown-menu, form, input-group, input-otp, menubar, navigation-menu,
  pagination, radio-group, resizable, scroll-area, select, sheet,
  sidebar, slider, switch, toggle, toggle-group

* chore: revert remaining export reordering (round 2)

Missed 13 more files with alphabetized exports in the first pass.
Restored original export order in: alert-dialog, card, carousel,
command, context-menu, drawer, dropdown-menu, form, input-group,
menubar, navigation-menu, pagination, sheet.

card.tsx and drawer.tsx are now fully clean (zero diff vs main).

* fix: restore rounded-full on InputGroup container

Reverts ghost-ui registry's rounded-md back to rounded-full per design
direction. The InputGroup container uses a fixed h-9 height, so pill
radius renders correctly.

Also restores rounded-[calc(var(--radius)-5px)] on the sm button variant
for proper nested radius calculation.

* chore: simplify ghost.config.ts — remove speculative scan/rules

The scan and rules blocks were added speculatively without explicit
design decisions. Strip down to just the registry pointer until we
decide on lint rules.
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