AGENTS.md
apps/landing-page/AGENTS.mdAGENTS.md
Quality
82/100
Scores the file, not the repository.Length
1,021 words
8 headings · 1 code blocksRepository
83k
— · pushed 0 days agoLast changed
3 days ago
First indexed 3 days ago.1# apps/landing-page/AGENTS.md23Follow the root `AGENTS.md` and `apps/AGENTS.md` first. This file only4records module-level boundaries for `apps/landing-page/`.56## Purpose78`apps/landing-page` is a stand-alone static Astro site that renders9the Open Design marketing surface in the **Atelier Zero** style and10ships a public plugin library plus compatibility/detail catalog pages for11repository skills, design templates, design systems, craft principles, and12legacy live-artifact templates.1314Tightly coupled with:1516- Design template: `design-templates/open-design-landing/` — agent workflow + the source-of-truth17 `example.html` known-good rendering for the homepage hero.18- Design system: `design-systems/atelier-zero/DESIGN.md` — token spec.19- Image assets: `design-templates/open-design-landing/assets/*.png` are uploaded to20 Cloudflare R2 (`open-design-static`) and served through21 `static.open-design.ai` with Image Resizing (`format=auto`). Do not22 commit local mirrored PNGs into `apps/landing-page/public/assets/`.2324## What it is2526- Astro static output. Its catalog route groups are:27 - `/` — Atelier Zero homepage (`app/pages/index.astro`).28 - `/plugins/` — primary public discovery hub, with `/plugins/templates/`,29 `/plugins/skills/`, `/plugins/systems/`, `/plugins/craft/`, and plugin30 detail/search/preview routes. The hub reads bundled manifests from31 `plugins/_official/` and mirrors the in-app plugin taxonomy.32 - Direct `/skills/`, `/systems/`, `/craft/`, and `/templates/` catalog,33 facet, and detail routes remain for compatibility and deep links. The34 template catalog is primarily `design-templates/*/SKILL.md`; legacy35 `templates/live-artifacts/*/README.md` entries remain compatibility records.36- Content sources are **never** mirrored into this app. Astro content37 collections (`app/content.config.ts`) glob the canonical Markdown38 bundles in the repo root at build time. When a contributor adds or39 edits a `SKILL.md`/`DESIGN.md` or plugin manifest, the next build picks it up — no40 intermediate "register your skill here" step.41- The shaped data layer lives in `app/_lib/catalog.ts`. Page templates42 import shaped records from there and never re-parse Markdown in JSX.43- React is used only at build time (`renderToStaticMarkup`) for44 `app/page.tsx` and the shared `Header`. The output ships45 CDN-ready HTML/CSS plus a small inline enhancement script;46 no React runtime ships to browsers.47- All styles split between `app/globals.css` (homepage, kept in48 lockstep with `design-templates/open-design-landing/example.html`) and49 `app/sub-pages.css` (catalog/facet/detail pages).50- All page imagery is referenced through `app/image-assets.ts`, which51 builds Cloudflare Image Resizing URLs for the R2 originals.52- Per-skill / per-template thumbnails are rendered offline by53 `scripts/generate-previews.ts` (Playwright). Output lives in54 `public/previews/<bucket>/<slug>.<ext>` and is **gitignored** — CI55 regenerates on every deploy. The script preserves the actual file56 extension so a future sharp/webp post-processor will work without57 touching the data layer.5859## What it is NOT6061- Not part of `apps/web`. The web app is the product surface; the62 landing page is a marketing surface. They share design tokens but63 not state, routes, or runtime.64- Not connected to `apps/daemon`. There is no `/api`, no `/artifacts`,65 no `/frames` — no proxy to set up.66- Not a CMS. Content authors edit canonical sources in `skills/`,67 `design-templates/`, `design-systems/`, `craft/`,68 `templates/live-artifacts/`, or `plugins/` at the repo root; the landing69 page rebuilds against those sources and ships to Cloudflare Pages.7071## Boundary constraints7273- Must remain a static Astro output.74- Must not import from `@open-design/web`, `@open-design/daemon`,75 `@open-design/desktop`, `@open-design/sidecar*`, or76 `@open-design/contracts`. Those are product runtime concerns.77- Must not introduce a `src/` shell — keep all source under `app/`.78 Component bundles live in `app/_components/<name>.{tsx,astro}`.79- Must not depend on any non-Google web font.80- Visible "X skills" / "Y systems" claims must read from81 `getCatalogCounts()` — never hardcode. The hero, capabilities cards,82 labs pills, selected-work fractions, and footer Library all derive83 from the same call so a fresh content edit can never publish84 contradictory totals. The homepage `<meta name="description">` is85 intentionally scenario-focused and no longer states catalog totals, so86 it is not a count-backed surface; `getHomeSeo()` still accepts the87 counts and its `{skills}`/`{systems}` substitution stays as a no-op88 hook, so if the description ever surfaces a count again it must route89 through `getCatalogCounts()`.90- When the canonical `design-templates/open-design-landing/example.html`91 changes, the corresponding section JSX in `app/page.tsx` and rules92 in `app/globals.css` must be updated to match. Those two files are93 kept in lockstep; the rest of the landing-page sources are not.94- Content-collection schemas in `app/content.config.ts` stay loose95 (`passthrough()`). Validation lives at render time so vendored96 upstream Markdown (e.g., `guizang-ppt`) doesn't break the build97 when an author uses a slightly different `od:` key.9899## Deploy contract (staging → manual production)100101Deploys are split across **two Cloudflare Pages projects** so a merge to102`main` can never publish to the live site on its own:103104- Production project `open-design-landing` → `open-design.ai`.105- Staging project `open-design-landing-staging` → `staging.open-design.ai`.106107The safety gate is project separation: only the manual production workflow108ever names the production project.109110- `.github/workflows/landing-page-staging.yml` runs on push to `main` and111 deploys to the **staging project** (`open-design-landing-staging`,112 `staging.open-design.ai`).113- `.github/workflows/landing-page-production.yml` is **manual**114 (`workflow_dispatch`) and is the only workflow that names the production115 project (`open-design-landing`, `open-design.ai`). Gate it with required116 reviewers on the GitHub `production` environment.117- `.github/workflows/landing-page-ci.yml` runs on PRs: it validates the build118 and, for same-repo branches, deploys a per-PR preview into the staging119 project (`--branch=pr-<number>` →120 `pr-<number>.open-design-landing-staging.pages.dev`) and comments the URL.121122The staging workflow triggers when **any** of these change:123124- `apps/landing-page/**`125- `design-templates/open-design-landing/**`126- `design-templates/**`127- `skills/**`128- `design-systems/**`129- `craft/**`130- `templates/**`131- `plugins/**`132- `package.json`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`133- the workflow files themselves134135A push that only edits a catalog source or bundled plugin manifest MUST trigger136the staging workflow. If it does not, the `paths:` filter has drifted from the137build-time readers and the staged site will fall behind silently.138139## Common commands140141```bash142pnpm --filter @open-design/landing-page dev # http://127.0.0.1:17574143pnpm --filter @open-design/landing-page typecheck144pnpm --filter @open-design/landing-page previews # render thumbnails145pnpm --filter @open-design/landing-page build # static export → out/146```147148## When to update this app149150- Added/edited a skill, design template, `DESIGN.md`, craft principle,151 live-artifact compatibility template, or bundled plugin manifest at the152 repo root → no landing-page edit required; CI153 rebuilds and re-renders thumbnails on the next push to `main`.154- Adding a new top-level route group (e.g. `/playbooks/`) → add an155 Astro page directory under `app/pages/`, a content collection in156 `app/content.config.ts`, a shaping function in `app/_lib/catalog.ts`,157 and route entries that match the existing index/detail/facet pattern.158- New section added to the canonical landing page → port it into159 `app/page.tsx` and `app/globals.css` keeping lockstep with160 `design-templates/open-design-landing/example.html`.161- Brand re-keying for a non-Open-Design tenant → fork the app, update162 copy, swap PNGs. Do not parameterize this app for multi-tenancy.163
Also in nexu-io/open-design
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| nexu-io/open-designplugins/AGENTS.md · 83k | AGENTS.md | stylearchsecuritydo-not | 68/100 | 3 days ago | |
| nexu-io/open-design.github/AGENTS.md · 83k | AGENTS.md | stylearchgitapi+3 | 83/100 | 3 days ago | |
| nexu-io/open-designAGENTS.md · 83k | AGENTS.md | setupteststylearch+9 | 74/100 | 3 days ago | |
| nexu-io/open-designapps/AGENTS.md · 83k | AGENTS.md | testarchmonorepo | 90/100 | 3 days ago | |
| nexu-io/open-designapps/daemon/AGENTS.md · 83k | AGENTS.md | teststylearchtesting-strategy+4 | 86/100 | 3 days ago | |
| nexu-io/open-designapps/daemon/src/critique/AGENTS.md · 83k | AGENTS.md | archtesting-strategymonorepo | 52/100 | 3 days ago | |
| nexu-io/open-designapps/packaged/AGENTS.md · 83k | AGENTS.md | monorepodo-not | 54/100 | 3 days ago | |
| nexu-io/open-designapps/web/src/components/Theater/AGENTS.md · 83k | AGENTS.md | testarchmonorepo | 72/100 | 3 days ago | |
| nexu-io/open-designdesign-systems/_schema/AGENTS.md · 83k | AGENTS.md | archtesting-strategyapi | 58/100 | 3 days ago | |
| nexu-io/open-designdesign-templates/AGENTS.md · 83k | AGENTS.md | apiui | 43/100 | 3 days ago | |
| nexu-io/open-designe2e/AGENTS.md · 83k | AGENTS.md | teststylearchtesting-strategy+3 | 93/100 | 3 days ago | |
| nexu-io/open-designpackages/AGENTS.md · 83k | AGENTS.md | archdependenciesmonorepo | 86/100 | 3 days ago | |
| nexu-io/open-designskills/AGENTS.md · 83k | AGENTS.md | no sections | 39/100 | 3 days ago | |
| nexu-io/open-designtools/AGENTS.md · 83k | AGENTS.md | testing-strategy | 82/100 | 3 days ago | |
| nexu-io/open-designtools/pack/AGENTS.md · 83k | AGENTS.md | styletesting-strategyperformancedeployment+1 | 85/100 | 3 days ago | |
| nexu-io/open-designtools/serve/AGENTS.md · 83k | AGENTS.md | do-not | 32/100 | 3 days ago |
Diff against plugins/AGENTS.md Diff against .github/AGENTS.md Diff against AGENTS.md Diff against apps/AGENTS.md Diff against apps/daemon/AGENTS.md Diff against apps/daemon/src/critique/AGENTS.md Diff against apps/packaged/AGENTS.md Diff against apps/web/src/components/Theater/AGENTS.md Diff against design-systems/_schema/AGENTS.md Diff against design-templates/AGENTS.md Diff against e2e/AGENTS.md Diff against packages/AGENTS.md Diff against skills/AGENTS.md Diff against tools/AGENTS.md Diff against tools/pack/AGENTS.md Diff against tools/serve/AGENTS.md
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| aaif-goose/gooseAGENTS.md · 52k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 3 days ago | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 67k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 2 days ago | |
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 3 days ago | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 199k | AGENTS.md | buildteststylearch+3 | 100/100 | 3 days ago | |
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | 3 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 3 days ago | |
| trick77/agents-md-syncAGENTS.md · 2 | AGENTS.md | setupbuildteststyle+5 | 100/100 | 3 days ago | |
| elastic/elasticsearchx-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/AGENTS.md · 78k | AGENTS.md | buildtestlint-formatstyle+2 | 100/100 | 3 days ago |
