Files
hyperframes/registry/registry.json
T
Miguel Ángel 4d05b475f0 feat: add Stronkter catalog blocks (#570)
## Problem

The Catalog did not include the four prompt-matched Stronkter one-shot HyperFrames projects, and registry metadata only supported a plain author string, so there was no structured way to show creator attribution or the original generation prompt on generated catalog pages.

## What this fixes

- Adds four Catalog blocks matching the provided prompts, in order:
  - `north-korea-locked-down`
  - `apple-money-count`
  - `nyc-paris-flight`
  - `goonvpn-youtube-spot`
- Attributes each block to [Stronkter](https://x.com/Stronkter).
- Stores and renders the original source prompt for each generated catalog page.
- Adds a local realistic map plate for the North Korea block so rendering does not depend on live map tile requests.
- Extends registry item metadata/schema with `authorUrl` and `sourcePrompt`.
- Updates catalog page generation to read items from `registry/registry.json`, keeping generated docs aligned to the public registry manifest.
- Ignores normal browser media preload `net::ERR_ABORTED` request failures for media assets during `hyperframes validate`, while preserving failures for real missing assets.

## Root cause

The imported projects are Catalog-ready compositions, but the registry/docs pipeline did not have first-class source-prompt or linked-author fields to expose creator credit on generated MDX pages. The audio-backed compositions also surfaced a validation edge case: Chrome can report aborted media preload requests as `net::ERR_ABORTED` even when the audio file exists and playback is valid.

## Verification

### Local

- `bun run --filter @hyperframes/cli test src/commands/validate.test.ts`
- `bun run --filter @hyperframes/core test src/registry/types.test.ts`
- `bun run sync-schemas:check`
- `bunx oxlint packages/cli/src/commands/validate.ts packages/cli/src/commands/validate.test.ts packages/core/src/registry/types.ts packages/core/src/registry/types.test.ts scripts/generate-catalog-pages.ts`
- `bunx oxfmt --check ...` on changed source, registry, docs, and composition files
- `git diff --check`
- `bun packages/cli/src/cli.ts lint` and `validate` against temp installed projects for all four blocks
- Lefthook pre-commit: lint/format/typecheck on the initial commit, plus format on the amend
- Lefthook commit-msg: commitlint

### Browser

- Exercised all four blocks through HyperFrames preview routes with `agent-browser`.
- Captured playback screenshots and WebM recordings for:
  - `north-korea-locked-down`
  - `apple-money-count`
  - `nyc-paris-flight`
  - `goonvpn-youtube-spot`

## Notes

- The zip also contained unrelated project directories, but this PR intentionally includes only the four prompt-matched Catalog blocks requested here.
- The imported one-shot compositions may trigger the existing large-composition lint warning, but there are no lint errors and runtime validation passes.
2026-04-29 22:59:19 +02:00

224 lines
4.4 KiB
JSON

{
"$schema": "https://hyperframes.heygen.com/schema/registry.json",
"name": "hyperframes",
"homepage": "https://hyperframes.heygen.com",
"items": [
{
"name": "warm-grain",
"type": "hyperframes:example"
},
{
"name": "play-mode",
"type": "hyperframes:example"
},
{
"name": "swiss-grid",
"type": "hyperframes:example"
},
{
"name": "vignelli",
"type": "hyperframes:example"
},
{
"name": "decision-tree",
"type": "hyperframes:example"
},
{
"name": "kinetic-type",
"type": "hyperframes:example"
},
{
"name": "product-promo",
"type": "hyperframes:example"
},
{
"name": "nyt-graph",
"type": "hyperframes:example"
},
{
"name": "data-chart",
"type": "hyperframes:block"
},
{
"name": "flowchart",
"type": "hyperframes:block"
},
{
"name": "logo-outro",
"type": "hyperframes:block"
},
{
"name": "grain-overlay",
"type": "hyperframes:component"
},
{
"name": "shimmer-sweep",
"type": "hyperframes:component"
},
{
"name": "grid-pixelate-wipe",
"type": "hyperframes:component"
},
{
"name": "instagram-follow",
"type": "hyperframes:block"
},
{
"name": "tiktok-follow",
"type": "hyperframes:block"
},
{
"name": "yt-lower-third",
"type": "hyperframes:block"
},
{
"name": "x-post",
"type": "hyperframes:block"
},
{
"name": "reddit-post",
"type": "hyperframes:block"
},
{
"name": "spotify-card",
"type": "hyperframes:block"
},
{
"name": "macos-notification",
"type": "hyperframes:block"
},
{
"name": "app-showcase",
"type": "hyperframes:block"
},
{
"name": "north-korea-locked-down",
"type": "hyperframes:block"
},
{
"name": "apple-money-count",
"type": "hyperframes:block"
},
{
"name": "goonvpn-youtube-spot",
"type": "hyperframes:block"
},
{
"name": "nyc-paris-flight",
"type": "hyperframes:block"
},
{
"name": "ui-3d-reveal",
"type": "hyperframes:block"
},
{
"name": "domain-warp-dissolve",
"type": "hyperframes:block"
},
{
"name": "ridged-burn",
"type": "hyperframes:block"
},
{
"name": "whip-pan",
"type": "hyperframes:block"
},
{
"name": "sdf-iris",
"type": "hyperframes:block"
},
{
"name": "ripple-waves",
"type": "hyperframes:block"
},
{
"name": "gravitational-lens",
"type": "hyperframes:block"
},
{
"name": "cinematic-zoom",
"type": "hyperframes:block"
},
{
"name": "chromatic-radial-split",
"type": "hyperframes:block"
},
{
"name": "glitch",
"type": "hyperframes:block"
},
{
"name": "swirl-vortex",
"type": "hyperframes:block"
},
{
"name": "thermal-distortion",
"type": "hyperframes:block"
},
{
"name": "flash-through-white",
"type": "hyperframes:block"
},
{
"name": "cross-warp-morph",
"type": "hyperframes:block"
},
{
"name": "light-leak",
"type": "hyperframes:block"
},
{
"name": "transitions-3d",
"type": "hyperframes:block"
},
{
"name": "transitions-blur",
"type": "hyperframes:block"
},
{
"name": "transitions-cover",
"type": "hyperframes:block"
},
{
"name": "transitions-destruction",
"type": "hyperframes:block"
},
{
"name": "transitions-dissolve",
"type": "hyperframes:block"
},
{
"name": "transitions-distortion",
"type": "hyperframes:block"
},
{
"name": "transitions-grid",
"type": "hyperframes:block"
},
{
"name": "transitions-light",
"type": "hyperframes:block"
},
{
"name": "transitions-mechanical",
"type": "hyperframes:block"
},
{
"name": "transitions-other",
"type": "hyperframes:block"
},
{
"name": "transitions-push",
"type": "hyperframes:block"
},
{
"name": "transitions-radial",
"type": "hyperframes:block"
},
{
"name": "transitions-scale",
"type": "hyperframes:block"
}
]
}