open-design/design-templates/open-design-landing
Joey-nexu f1870cbf3d
chore(featured): curate Featured picks down to top 10 across categories (#1966)
* chore(featured): curate Featured picks down to top 10 across categories

The picker's Featured chip currently surfaces 64 plugins because
`isFeaturedPlugin` (apps/web/src/components/plugins-home/facets.ts)
treats any finite `od.featured` number as featured, and the field
had been adopted incrementally by 51 skills + 13 templates without
a curation step. The result is a "Featured" tab that's effectively
"everything tagged at all" — no editorial signal.

Curate down to 10 picks, allocated to keep the showcase legible:

  0.001  skills/deck-swiss-international
  0.01   skills/deck-guizang-editorial
  0.02   design-templates/magazine-poster              [add]
  0.04   skills/doc-kami-parchment
  0.10   design-templates/web-prototype-taste-brutalist [add od: block]
  0.13   skills/video-hyperframes
  0.14   skills/frame-glitch-title
  0.15   skills/vfx-text-cursor
  0.16   skills/frame-logo-outro
  0.17   skills/deck-open-slide-canvas

Selection mirrors the html-anything `recommended: 1..10` ranking
(html-anything is the upstream content source for these skills, per
the `od.upstream` field on each SKILL.md). Two of those 10 picks
weren't in the prior featured set at all — `magazine-poster` had no
`od.featured` field and `web-prototype-taste-brutalist` had no `od:`
block at all — so they get added rather than just rebalanced.

Removes `od.featured` from the other 56 files. No UI code change;
the existing `isFeaturedPlugin` logic now reads a curated set
instead of an accidental one.

* chore(featured): align baked plugin manifests with curated top 10

The picker reads `od.featured` from each plugin's
`plugins/_official/examples/<id>/open-design.json` manifest, not from
the SKILL.md frontmatter the previous commit edited. Without this
follow-up the curated set of 10 would be invisible to users — the
picker's Featured chip would still surface 27 baked plugins from the
pre-existing manifests.

Mirror the SKILL.md curation into the baked layer:

  removed `od.featured` from 19 manifests:
    article-magazine, card-xiaohongshu, data-report,
    frame-data-chart-nyt, frame-flowchart-sticky,
    frame-light-leak-cinema, frame-liquid-bg-hero,
    frame-macos-notification, guizang-ppt, html-ppt,
    kami-deck, kami-landing, mockup-device-3d,
    open-design-landing-deck, ppt-keynote, resume-modern,
    social-reddit-card, social-spotify-card, social-x-post-card

  added `od.featured` to 2 manifests:
    magazine-poster -> 0.02
    web-prototype-taste-brutalist -> 0.10

Verified locally against `daemon /api/plugins`: featured count is
now exactly 10, matching the SKILL.md source of truth from the
previous commit.
2026-05-18 12:56:26 +08:00
..
assets feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
scripts feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
example.html feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
inputs.example.json feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
README.md feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
schema.ts feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00
SKILL.md chore(featured): curate Featured picks down to top 10 across categories (#1966) 2026-05-18 12:56:26 +08:00
styles.css feat: generic skills + split skills/design-templates + finalize-design API (#955) 2026-05-11 17:48:34 +08:00

open-design-landing

Reusable skill that produces a world-class editorial landing page in the Atelier Zero design language — the warm-paper, italic-serif, collage-on-grid aesthetic shared by Monocle, Apartamento, and Études.

The skill is parameterized: fill one typed inputs.json, run one script, get a self-contained HTML file. Optionally generate 16 surreal collage assets with gpt-image-2, or fall back to paper-textured SVG placeholders so the layout still feels intentional with zero image budget.

Read first — the agent contract, inputs schema, and self-check live in SKILL.md. This README is the human quick-start.

30-second tour

# 1. Paper-textured placeholders so the layout renders immediately.
npx tsx scripts/placeholder.ts ./out/assets/

# 2. Compose the standalone HTML from the worked example.
npx tsx scripts/compose.ts inputs.example.json ./out/index.html

# 3. Open it.
open ./out/index.html

That's it. Three commands, full editorial landing page, no API keys.

To brand it for yourself, copy inputs.example.json to inputs.json, edit the fields (the schema is self-documenting — see schema.ts), and re-run step 2.

The three image strategies

Strategy Cost Latency When
placeholder $0 <1s First pass, demo, internal review.
generate ~$0.40 ~6 min Final delivery; original collage plates.
bring-your-own $0 0s You have art direction PNGs ready to drop in.

Set inputs.imagery.strategy to one of the three.

# generate mode (requires FAL_KEY in env)
FAL_KEY=fal-... npx tsx scripts/imagegen.ts inputs.json --out=./out/assets/

Without FAL_KEY, the imagegen script prints the prompts so you can route them through the /gpt-image-fal slash-command skill manually.

Layout at a glance

8 numbered Roman-numeral sections, all responsive at 1280 / 1080 / 880 / 560:

I.   Hero          — display headline + 3 stat rings + 4-step index + collage plate
II.  About         — manifesto + studio stamp + tilted side-note
III. Capabilities  — 4 cards (skills / systems / adapters / BYOK) + ribbon
IV.  Labs          — 5 portrait cards + filter pills + progress bar
V.   Method        — 4 numbered steps with thumbnails on hairline timeline
VI.  Selected work — dark slab, 2 tilted cards (one rotated -1.2°, one +2.4°)
VII. Testimonial   — pull quote + 5 partner glyphs
VIII. CTA          — closing pitch + ribbon + email pill
     Footer       — 4 link columns + huge italic-serif kicker word

Every section has scroll-reveal motion (IntersectionObserver, respects prefers-reduced-motion).

Files

skills/open-design-landing/
├── SKILL.md                 # ← agent contract (read this first)
├── README.md                # ← you are here
├── schema.ts                # typed inputs (single source of truth)
├── styles.css               # Atelier Zero stylesheet (single source of truth)
├── inputs.example.json      # Open Design as the worked example
├── example.html             # canonical rendering, regenerable from inputs.example.json
├── scripts/
│   ├── compose.ts           # inputs.json + styles.css → index.html
│   ├── imagegen.ts          # gpt-image-2 wrapper (fal.ai backend)
│   └── placeholder.ts       # SVG paper-textured frames
└── assets/
    ├── *.png                # 16 collage plates (Open Design instance)
    ├── image-manifest.json  # slot → file / dimensions / prompt mapping
    └── imagegen-prompts.md  # human-readable prompt pack

Regenerate the canonical example

After editing styles.css, schema.ts, or inputs.example.json:

npx tsx scripts/compose.ts inputs.example.json example.html

The example.html in this folder is the pre-rendered known-good demo — useful as a visual reference and for QA against the live composer output.

Migrating from editorial-collage

This skill replaces the older editorial-collage folder:

See also