{"id":20520,"plugin_id":"plugins_6aa518f7d9608191aa8b89c668c2fbe1","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:18.938Z","digest":"edd2bb8a2cdc4929726031e5d5262a18ec6a608182910c9edaff6fa3fff6f724","against":null,"payload":{"name":"landing-page-editor","description":"Use when editing, updating, or iterating on a workspace's landing page HTML (the magazine-style /w/:slug page). Supports incremental edits — fetch the current HTML, make targeted changes, then write it back. NOT for initial generation — that comes from the `brief` field which runs the server-side LANDING_PAGE_PROMPT against Gemini.","included_files":[],"skill_md_contents":"---\nname: landing-page-editor\ndescription: Use when editing, updating, or iterating on a workspace's landing page HTML (the magazine-style /w/:slug page). Supports incremental edits — fetch the current HTML, make targeted changes, then write it back. NOT for initial generation — that comes from the `brief` field which runs the server-side LANDING_PAGE_PROMPT against Gemini.\nallowed-tools: Bash(astria:*), Read, Write, Edit\n---\n\n# Workspace Landing Page Editor\n\nThe workspace landing page (rendered at `/w/:slug`) is a single self-contained\nHTML blob stored on `workspace.landing_page_html`. It is generated from scratch\nby the server-side `LANDING_PAGE_PROMPT` whenever a `brief` is submitted — that\npath overwrites the HTML wholesale.\n\nFor ANY change that should not regenerate the whole page (typography tweaks,\nlayout edits, adding a section, changing copy, swapping an image, fixing a\ntagline), edit the HTML directly and write it back. Do NOT send a `brief`\nunless the user wants a full regeneration.\n\nAll commands use the `astria` CLI (see the `astria-api` skill). Pass\n`-w <workspace_id>` to target the workspace.\n\n## Constraints carried over from `LANDING_PAGE_PROMPT`\n\nWhen editing, preserve these invariants (the live `/w/:slug` page depends on them):\n\n- The output is **inner body HTML** — no `<html>`, `<head>`, `<body>`, or `<!DOCTYPE>` tags\n- Styling uses **Tailwind utility classes** (already loaded on the page). Use `<style>` only for hover/animation effects Tailwind can't express\n- Pack links are exactly `/p/{slug}`; model/reference links use the `link` field from the tunes JSON verbatim (do NOT re-encode `%5B`/`%5D`)\n- Every image / video is wrapped in an `<a>` tag\n- Image and video URLs must be ones that already exist — do not invent URLs\n- Videos use `<video autoplay muted loop playsinline poster=\"POSTER_URL\"><source src=\"VIDEO_URL\" type=\"video/mp4\"></video>`\n- The string `__TUNES_JSON_PAYLOAD__` inside `<script type=\"application/json\" id=\"tunes-data\">…</script>` is a server-side placeholder. The server substitutes it at render time with the live tunes JSON. **Never replace it with literal JSON** — that freezes the cast and newly added tunes won't appear\n- Editorial styling: serif headlines, generous whitespace, hairline rules, `object-cover object-[center_top]` on portrait images, `max-h-[70vh]` on hero spreads, `aspect-[4/5]` or `aspect-[3/4]` on portrait containers\n\n## Workflow\n\n### 1. Fetch the current landing page HTML\n\n```bash\nastria landing get -w <workspace_id> --html > /tmp/landing_page.html\n```\n\n`astria landing get -w <workspace_id>` (without `--html`) returns the full\nworkspace JSON — `title`, `slug`, `brief`, `url`, `public_at`, `unlisted_at` —\nwhen you need those. Preview the rendered page at `/w/{slug}`.\n\n### 2. Pull workspace data (when an edit needs to reference real packs / prompts / tunes)\n\n```bash\nastria packs list -w <workspace_id> --limit 100\nastria tunes list -w <workspace_id> --limit 200            # the \"cast\" rendered on the page\nastria prompts list -w <workspace_id> --limit 100 --offset 0   # page with --offset until empty\nastria prompts list -w <workspace_id> --pack-id <pack_id>      # cheaper, one section at a time\n```\n\nList endpoints paginate via `--limit`/`--offset` (default sort id desc). Loop\nwith `--offset` until a page comes back empty.\n\n### 3. Make the incremental edit\n\nEdit `/tmp/landing_page.html` locally. Keep changes surgical — the generator\nproduced thousands of bytes of layout and most of it should stay verbatim.\nRe-read the constraints section above before saving.\n\n### 4. Write the page back\n\n```bash\nastria landing set -w <workspace_id> --html-file /tmp/landing_page.html\n```\n\nDo NOT pass `--brief` here — that discards your edits and regenerates from\nscratch via Gemini.\n\n### 5. Verify\n\nOpen `/w/{slug}` and visually confirm the change. The `__TUNES_JSON_PAYLOAD__`\nplaceholder is replaced server-side at render time — if a JSON-shaped string\nstill shows on the rendered page, the placeholder was accidentally deleted or\nrenamed.\n\n## Regenerating from scratch\n\nOnly when the user explicitly asks for a full redesign — submit a `brief` and\nthe server runs `LANDING_PAGE_PROMPT` against Gemini, overwriting the HTML:\n\n```bash\nastria landing set -w <workspace_id> \\\n  --brief \"Editorial fashion lookbook, AW26, dark moody palette, emphasize the womenswear packs\"\n```\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}