open-design/skills/editorial-collage-deck/SKILL.md
Tom Huang 6c2a8ba09f
feat(editorial-collage): introduce Atelier Zero style landing page as… (#366)
* feat(editorial-collage): introduce Atelier Zero style landing page assets and documentation

- Added new design system for Atelier Zero, including a detailed `DESIGN.md` file.
- Created an `editorial-collage` skill with associated assets for a magazine-grade landing page.
- Included example HTML and image assets for various sections (hero, about, capabilities, etc.).
- Updated README files to guide usage and customization of the new skill and design system.
- Introduced a new image generation prompt pack for consistent visual style across the landing page.

* fix(i18n): cover atelier-zero design system and editorial-collage skill in German content

Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code)

* fix(editorial-collage): align manifest with shipped assets and address PR review

- Update image-manifest.json widths/heights/ratios to match the actual PNGs
  on disk: hero/about/cap/testimonial/cta = 1024x1024 (1:1), method-1..4 =
  816x816 (1:1), lab-1..5 and work-1..2 = 768x1024 (3:4). Mirror the new
  dimensions in imagegen-prompts.md headings and in README.md.
- Mark testimonial.png as rekey_on_brand_change so the manifest agrees
  with SKILL.md's "regenerate at minimum testimonial.png" guidance, and
  add work-1/work-2 to the rekey list in SKILL.md and README.md.
- Add a Hero (I.) sec-rule and renumber every following section II..VIII
  in example.html so the eight sections walk sequentially I -> VIII and
  the page-of-008 counter starts at 001.
- Delete editorial-artifact-system/ (16 duplicate PNGs + index.html +
  skills.md draft) — the canonical version is skills/editorial-collage/
  and the duplicate had no consumer references.
- DESIGN.md: spell out which dimensions of each magazine reference
  (Monocle/Apartamento/IDEA), document the rationale for single-accent
  vs multi-accent, and extend the anti-pattern list with AI-image-gen
  artifacts the system explicitly rejects.
- SKILL.md: add italic_words validation guidance (trim, cap at 4,
  verb->noun rewrite, punctuation strip) and replace the broken-image
  fallback with an inline SVG placeholder sized to the slot's
  manifest aspect ratio.

Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code)

* fix(daemon): serve skill example assets via stable API route

Skill example HTML such as `skills/editorial-collage/example.html`
references shipped images via `./assets/*.png`. The web app loads the
example into a sandboxed iframe via `srcdoc`, where relative URLs
resolve against `about:srcdoc` and the PNGs render as broken images in
the Examples preview.

Add a `GET /api/skills/:id/assets/*` route that serves files under the
skill's `assets/` directory with path-traversal guards, and rewrite
`src='./assets/<file>'` / `href='./assets/<file>'` in the example
response to point at that route. The disk preview keeps working
because the on-disk files are unchanged.

Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code)

* feat(landing-page): add new static Next.js 16 site for Open Design marketing

- Introduced a new landing page application using Next.js 16, featuring a static export setup.
- Added essential files including `package.json`, `next.config.ts`, and TypeScript configuration.
- Implemented global styles in `globals.css` to match the Atelier Zero design system.
- Created a detailed `AGENTS.md` for module-level boundaries and purpose.
- Included various image assets for the landing page, ensuring a visually cohesive experience.
- Established a root layout and main page structure to support the marketing content.

* style(landing-page): enhance topbar layout and improve responsiveness

- Added nowrap styling to topbar elements to prevent text overflow.
- Introduced media query to hide mid text in the topbar for screen widths between 1200px and 1280px.
- Updated layout.tsx to suppress hydration warnings for better rendering consistency.
- Removed redundant "Compiled by Open Design" text from the page component.

* feat(landing-page): implement scroll-reveal animations for enhanced user experience

- Added a new `RevealRoot` component to manage scroll-triggered reveal animations.
- Updated `globals.css` with styles for elements using the `data-reveal` attribute, including opacity, translation, and scaling effects.
- Modified `layout.tsx` to include the `RevealRoot` component for managing animations.
- Enhanced `page.tsx` by adding `data-reveal` attributes to various elements for staggered reveal effects.
- Implemented reduced motion support to ensure accessibility for users with motion sensitivity.

* fix(landing-page): update import paths and enhance link styles

- Changed the import path in `next-env.d.ts` to reference the correct routes type definition.
- Enhanced `globals.css` with new styles for topbar links, work cards, and partner elements, improving hover effects and transitions.
- Updated `page.tsx` to include canonical project URLs and made various links point to these URLs for better navigation and accessibility.

* feat(landing-page): implement headroom-style sticky header with live GitHub star count

- Introduced a new `Header` component to manage sticky navigation behavior on scroll, enhancing user experience.
- Updated `globals.css` to style the sticky header, including transitions and visibility toggling based on scroll direction.
- Modified `page.tsx` to replace the static header with the new `Header` component, which fetches and displays the live GitHub star count.
- Ensured accessibility by providing a fallback for users who prefer reduced motion.

* feat(landing-page): enhance editorial landing page with global ticker and new styles

- Updated `next-env.d.ts` to reference the correct routes type definition for development.
- Enhanced `globals.css` with new styles for the global ticker, including responsive design and improved overflow handling.
- Introduced a new `WIRE_CITIES` and `WIRE_CONTRIBS` data structure in `page.tsx` to display a counter-scrolling marquee of cities and contributors.
- Added a ghost button style for the navigation call-to-action in the header.
- Updated various sections in `page.tsx` to integrate the new ticker and improve overall layout and accessibility.

* refactor(landing-page): update paper texture overlay and remove multica-ai link

- Enhanced comments in `globals.css` to clarify the purpose and behavior of the paper texture overlay.
- Adjusted z-index of the overlay to ensure proper layering with other elements.
- Removed the `multica-ai` partner link from `page.tsx` to streamline the partner section.

* feat(landing-page): implement dynamic contributor marquee with GitHub integration

- Added a new `Wire` component to display a counter-scrolling marquee of cities and contributors.
- The contributor list is fetched live from the GitHub API, ensuring up-to-date information.
- Updated `page.tsx` to integrate the `Wire` component, replacing the static contributor list with dynamic content.
- Enhanced comments for clarity regarding the functionality and purpose of the global wire.

* fix(i18n): add German display copy for editorial-collage-deck skill

The Validate workspace test asserts that GERMAN_CONTENT_IDS.skills covers
every curated skill on disk; the new editorial-collage-deck skill was
missing from DE_SKILL_COPY, causing src/i18n/content.test.ts to fail.

Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code)

* feat(landing-page): migrate marketing site to Astro

* perf(landing-page): remove React client runtime

* perf(landing-page): serve images from Cloudflare resizing

* fix(pr): address landing page review feedback

---------

Co-authored-by: mrcfps <mrc@powerformer.com>
2026-05-04 13:39:58 +08:00

7.4 KiB
Raw Blame History

name description triggers od inputs parameters outputs capabilities_required example_prompt
editorial-collage-deck Produce a single-file slide deck in the Atelier Zero visual language (warm-paper background, italic-serif emphasis spans, coral terminating dots, surreal collage plates). The deck uses scroll-snap pagination, arrow-key + space navigation, a live HUD with slide counter and progress bar, and inherits the canonical stylesheet + 16-slot image library from the sister `editorial-collage` skill.
slide deck
演示文稿
pitch deck
keynote
editorial slides
atelier zero deck
category surface audience tone scale craft
brand-deck web founders pitching, conference talks, internal reviews editorial, restrained, premium 6-15 viewport-locked slides
requires
typographic-rhythm
pixel-discipline
id label schema_path
brand Brand identity (shared across slides) ./schema.ts#BrandBlock
id label description
deck_title Kicker shown in the HUD top bar e.g. `'Open Design · Vol. 01 / Issue Nº 26'`.
id label description schema_path
slides Ordered list of typed slides Each entry is one of seven slide kinds. Mix and match freely; the composer routes each by `kind`. ./schema.ts#Slide
id label schema_path
imagery Image library (defaults to sister skill's assets) ../editorial-collage/schema.ts#ImageryConfig
slides_recommended_count
type default description
number 11 8-15 is the sweet spot. Below 6 the deck feels thin; above 18 attendees lose the thread.
path description
<out>/index.html Self-contained HTML deck — Atelier Zero CSS inlined, runtime script inline, images relative.
file-write
node-runtime
Build me an 11-slide pitch deck for "Lumen Field", a focus-soundscape studio. Cover with hero plate, two section dividers, two product content slides with bullets, a stats slide showing 12 soundscapes / 4 presets / 1 daily ritual, a customer quote, a closing CTA, and an end card. Reuse the editorial-collage image library.

editorial-collage-deck

Sister skill to editorial-collage. Same Atelier Zero visual system (warm paper, Inter Tight + Playfair Display, italic-serif emphasis, coral dots), but paginated as a slide deck instead of a long landing page.

inputs.json + ../editorial-collage/styles.css
        │
        └──────────► scripts/compose.ts
                            │
                            ▼
                   <out>/index.html
                   (one viewport per slide, scroll-snap)

What you get

  • A single self-contained HTML file with N viewport-height slides.
  • Keyboard navigation: ←/→ · ↑/↓ · PageUp/PageDown · Space · Home/End.
  • HUD top bar: brand mark, deck title, key hint, live slide counter.
  • Coral progress bar at the bottom that fills as you advance.
  • Scroll-snap pagination with scroll-snap-stop: always so each slide settles cleanly.
  • Reuses the same 16-slot image library as the sister skill — no duplicate assets.

Slide types

Kind Use it for
cover Title plate at the start. 2-column copy + collage art.
section Roman-numeral divider between chapters. Centered, full-bleed.
content Eyebrow + title + body + bullets + optional collage art.
stats Up to 4 large stat cells (value · label · sub-label).
quote Pull quote + author. Optional portrait collage on the right.
cta Closing pitch + 1-2 buttons.
end Mega italic-serif kicker word + signature footer.

A typical 11-slide pitch:

1. cover     — title plate, hero collage
2. section   — "I. The problem"
3. content   — about / manifesto, bullets
4. content   — capabilities, bullets
5. stats     — 4 numbers
6. section   — "II. How it feels"
7. content   — method, bullets
8. content   — selected work
9. quote     — customer testimonial
10. cta      — primary + secondary action
11. end      — mega kicker + signature

Workflow

1. Author inputs.json

Start from inputs.example.json (the Open Design pitch deck). The brand block, image strategy, and assets path mirror the sister skill — if you already filled out an editorial-collage brief, copy brand and imagery over verbatim.

For each slide, pick a kind and fill the typed fields from schema.ts. MixedText (sans-serif baseline + italic-serif emphasis spans + coral terminating dot) is the same encoding used by the sister skill — see its inputs.example.json for examples.

2. (Optional) generate or stub imagery

This skill does not ship its own image generator or placeholder script — it shares the 16-slot library from editorial-collage. To regenerate or stub:

# generate via gpt-image-2 (fal.ai)
FAL_KEY=... npx tsx ../editorial-collage/scripts/imagegen.ts ../editorial-collage/inputs.example.json --out=../editorial-collage/assets/

# or paper-textured SVG placeholders
npx tsx ../editorial-collage/scripts/placeholder.ts ../editorial-collage/assets/

Set your deck's inputs.imagery.assets_path to wherever those PNGs live (default in the example: ../editorial-collage/assets/).

3. Compose the deck

npx tsx scripts/compose.ts inputs.json out/index.html

The composer reads inputs.json, loads the canonical Atelier Zero stylesheet from ../editorial-collage/styles.css, layers deck-specific rules (scroll-snap container, slide layout grid, HUD, keyboard nav) on top, and writes one self-contained HTML file.

4. Self-check

  • Open the HTML in a fresh browser tab; slide 1 (cover) shows with HUD 01 / N in the corner.
  • Press (or Space). Smoothly advances to slide 2 with 02 / N in the counter and the coral progress bar filling.
  • Press End. Jumps to the final slide.
  • Press Home. Returns to slide 1.
  • prefers-reduced-motion: reduce (DevTools → Rendering): smooth scroll still works, but page transitions are instant.
  • Resize to 1080px and 640px. Slides stack appropriately; no horizontal scrollbar; HUD shrinks gracefully.
  • Lighthouse: contrast AA, font-display swap, no layout shift.

Boundaries

  • Reuse the sister skill's stylesheet. The composer reads ../editorial-collage/styles.css at compile time. Do not maintain a duplicate copy here; if Atelier Zero tokens evolve, edit them once in the sister skill.
  • Reuse the sister skill's image library. No need to re-prompt or re-render — the same 16 plates work for both surfaces.
  • Keep slides single-viewport. If a slide's content does not fit 100vh at 1280×800 it will overflow and feel cramped. Trim copy or split into two slides.
  • Do not add a router. This is a single-file artifact. Multi-page decks are out of scope; for a multi-deck experience, render each deck separately and link from a parent index.

See also