Files
Zakaria a46764fb1b
ci / Validate workspace (push) Has been cancelled
landing-page-ci / Validate landing page (push) Has been cancelled
landing-page-deploy / Deploy landing page (push) Has been cancelled
github-metrics / Generate repository metrics SVG (push) Has been cancelled
refresh-contributors-wall / Refresh contributors wall cache bust (push) Waiting to run
first-commit
2026-05-04 14:58:14 -04:00

120 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`](./SKILL.md). This README is the human
> quick-start.
## 30-second tour
```bash
# 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`](./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.
```bash
# 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
```text
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`:
```bash
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:
- **Path:** `skills/editorial-collage/``skills/open-design-landing/`.
- **Shared assets:** downstream paths such as `../editorial-collage/assets/`
(for example from the slide-deck skill) should use
[`../open-design-landing/assets/`](./assets/) — see
[`open-design-landing-deck`](../open-design-landing-deck/README.md).
## See also
- [`design-systems/atelier-zero/DESIGN.md`](../../design-systems/atelier-zero/DESIGN.md) — colors, type, motion tokens.
- [`apps/landing-page/`](../../apps/landing-page/) — Astro static site that mirrors this skills markup at deploy time.
- [`skills/open-design-landing-deck/`](../open-design-landing-deck/) — sibling skill that produces a slide deck in the same visual language.