landing-page-editor
Skill2 starsChanged 27 days agoMITView on GitHub
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.
In this repository15 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- docs/CLAUDE.mdCLAUDE.md
- astria-apiSkill
- avatarSkill
- behind-the-scenesSkill
- fashion-music-trackSkill
- headshots-from-photosSkill
- muxSkill
- navigationSkill
- packs-guideSkill
- product-photoshootSkill
- prompt-writingSkill
- store-photoshootSkill
- unique-headshotSkill
- virtual-try-onSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 1 is distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
Use get_workspace with the destination workspace id to read the current HTML and update_workspace with that same id and landing_page_html …
- Very specific: line 23
Use brief only for an explicitly requested full regeneration.
- Very specific: line 27
When editing, preserve these invariants (the live /w/:slug page depends on them):
- Very specific: line 32
Every image / video is wrapped in an <a> tag
- Distinctive: line 34
Never use data URIs or embedded image data in HTML or CSS (including base64 images and inline SVG images).
- Very specific: line 43
Call get_workspace and retain landing_page_html unchanged as the starting point.
- Very specific: line 48
Use list_templates, list_references, and list_prompts with their declared schemas.
- Very specific: line 53
Before inserting a supplied image into the page, call attach_workspace_images with id set to the destination workspace ID, image_urls …
- Very specific: line 64
Use the returned images[].url values in the HTML.
- Very specific: line 76
Call update_workspace with the complete landing_page_html and a fresh idempotency_key.
- Very specific: line 83
Only when the user explicitly asks for a full redesign — submit a brief and the server runs LANDING_PAGE_PROMPT against Gemini, overwriting …
- Very specific: line 86
Call update_workspace with the requested brief and a fresh idempotency_key.
- Very specific: line 89
Read the resulting HTML with get_workspace and verify the result.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Workspace Landing Page Editor
The workspace landing page (rendered at /w/:slug) is a single self-contained
HTML blob stored on workspace.landing_page_html. It is generated from scratch
by the server-side LANDING_PAGE_PROMPT whenever a brief is submitted — that
path overwrites the HTML wholesale.
For ANY change that should not regenerate the whole page (typography tweaks,
layout edits, adding a section, changing copy, swapping an image, fixing a
tagline), edit the HTML directly and write it back. Do NOT send a brief
unless the user wants a full regeneration.
Use get_workspace with the destination workspace id to read the current HTML
and update_workspace with that same id and landing_page_html to save edits.
For embedded agents, omit the optional workspace scope to inherit the current
chat scope unless the user explicitly requested another destination.
Use brief only for an explicitly requested full regeneration.
Constraints carried over from LANDING_PAGE_PROMPT
When editing, preserve these invariants (the live /w/:slug page depends on them):
- The output is inner body HTML — no
<html>,<head>,<body>, or<!DOCTYPE>tags - Styling uses Tailwind utility classes (already loaded on the page). Use
<style>only for hover/animation effects Tailwind can't express - Pack links are exactly
/p/{slug}; model/reference links use thelinkfield from the tunes JSON verbatim (do NOT re-encode%5B/%5D) - Every image / video is wrapped in an
<a>tag - Image and video URLs must be ones that already exist — do not invent URLs
- Never use data URIs or embedded image data in HTML or CSS (including base64 images and inline SVG images). Use hosted HTTPS image URLs from Astria workspace attachments instead.
- Videos use
<video autoplay muted loop playsinline poster="POSTER_URL"><source src="VIDEO_URL" type="video/mp4"></video> - 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 - 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]oraspect-[3/4]on portrait containers
Workflow
1. Fetch the current landing page HTML
Call get_workspace and retain landing_page_html unchanged as the starting point.
Preview the rendered page at /w/{slug}.
2. Read data needed for the edit
Use list_templates, list_references, and list_prompts with their declared
schemas. Read only the requested workspace. Use limit/offset pagination as needed.
3. Upload and attach images with Astria
Before inserting a supplied image into the page, call attach_workspace_images
with id set to the destination workspace ID, image_urls containing the supplied
HTTPS URLs, and a fresh idempotency_key. This includes Astria direct-upload URLs:
putting a URL in HTML does not attach its blob, and unattached uploads can be purged.
For local files, use Astria's create_upload tool to prepare the upload, execute
its returned upload command, and verify it succeeds before passing the returned
blob_signed_id to attach_workspace_images in its signed_ids array.
create_upload only prepares an upload slot; it does not upload or attach the
image itself. Never attach a pending upload or embed image bytes in the page.
The tool reuses Astria blobs and imports external images into workspace storage.
Use the returned images[].url values in the HTML. If attachment fails, resolve
the error before saving HTML that uses those images. Images already listed in
get_workspace.images need no attachment call. Do not create a reference or a
generation merely to retain a landing-page image.
4. Make the incremental edit
Preserve unrelated HTML and the constraints above. Save a working text file only if helpful; do not substitute a filename for the HTML tool argument.
5. Save and verify
Call update_workspace with the complete landing_page_html and a fresh
idempotency_key. Do not pass brief. Read it back with get_workspace and
verify the saved change, confirm the new images appear in images, and check the
rendered page when browser access is available.
Regenerating from scratch
Only when the user explicitly asks for a full redesign — submit a brief and
the server runs LANDING_PAGE_PROMPT against Gemini, overwriting the HTML:
Call update_workspace with the requested brief and a fresh idempotency_key.
Attach supplied images using step 3 before submitting the brief, so the generator
receives them as workspace assets.
Read the resulting HTML with get_workspace and verify the result.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

