write-tech-landing
Use when writing or redesigning a public product landing page; when a first draft is only a hook and a few facts; when product process names appear without definition; when the lede or heading names an engine, store file, or query language; when getting started is a repo clone or a language runner; when values are copied from a brief without grilling; or when the site also needs a first-success path and an interface lookup.
Synopsis
User-invoked. Name this skill when you want the agent to apply it. disable-model-invocation is true.
Source file: skills/write-tech-landing/SKILL.md.
Front matter
- name
write-tech-landing- description
- Use when writing or redesigning a public product landing page; when a first draft is only a hook and a few facts; when product process names appear without definition; when the lede or heading names an engine, store file, or query language; when getting started is a repo clone or a language runner; when values are copied from a brief without grilling; or when the site also needs a first-success path and an interface lookup.
- disable-model-invocation
true
Full contents
---
name: write-tech-landing
description: Use when writing or redesigning a public product landing page; when a first draft is only a hook and a few facts; when product process names appear without definition; when the lede or heading names an engine, store file, or query language; when getting started is a repo clone or a language runner; when values are copied from a brief without grilling; or when the site also needs a first-success path and an interface lookup.
disable-model-invocation: true
---
# Write a landing page
Read [write-tech-core](../write-tech-core/SKILL.md) first. Keep that ledger private.
A landing page is the pitch for the **product as a whole**. It is not a lesson and not a lookup.
**REQUIRED SUB-SKILL:** [write-tech-getting-started](../write-tech-getting-started/SKILL.md) for `/start/`.
**REQUIRED SUB-SKILL:** [write-tech-reference](../write-tech-reference/SKILL.md) for `/docs/`.
**REQUIRED SUB-SKILL:** `frontend-design` for the landing visual. Read it before CSS. Do not apply it to start or docs prose.
**REQUIRED SUB-SKILL:** `grilling` for product values. `/grill-me` is that skill. Do this after the private brief and before any landing copy.
**Violating the letter of the rules is violating the spirit of the rules.**
## Page contract
Private first: the reader and whose voice you write in (hosted owner vs field user is a different page). List every product noun the pitch will use.
Then **stop**. Run `grilling` on the value tree only, not the whole product. Ask the open frontier in one round. Number each question. Give your recommended answer. Wait.
Value tree:
- vs a popular cloud stack: which claims, and which are the same fact? Category, no brand.
- vs another self-hosted box: is that alternative real? If yes, which claims?
- For each claim word: what it means here. Independence of deploy is not schema control. Local-first is not “no vendor.” Isolation is not multi-tenancy. Code-first is files you commit, plus agents if that is true.
- Whose voice: hosted owner vs field user.
A brief that lists value words is not settled values. Do not draft the page until that frontier is empty and the user confirms.
Then write these parts, in order.
1. **Hook.** Title, heading, lede. The heading is the offer the buyer wants. It is not a storage or pipeline metaphor. A draft that says “one store” or “one file” is not approved. Replacing only that noun is not a new hook. If the heading wraps, you choose the break. The lede is buyer outcomes: surfaces in, reports out, one tool. No engine name, no query language, no wire format, no “a query can join them.”
2. **Nouns.** Define each process name in a short pair before using it as jargon. They support the system. They are not the product. Do not name the database engine here.
3. **Values.** Why this instead of a popular cloud stack (category, no brand). Why this instead of another self-hosted box, if that alternative is real. Separate claims that are not the same fact.
4. **Visual.** One memorable structure from `frontend-design`. Not a column of type.
5. **Actions.** The first button uses the painted theme primary. Override shared-kit tokens if they win. The label names the first success, not only “Getting started.” Links go to start and docs that you write in this pass.
Then write start and docs with those skills. A brief that asks only for the hook is not a reason to skip them. Start’s default path is the **published binary or image**: install script, compiled CLI, or container. Not a source checkout. Not `bun run`. Not `npm i -g` or `bun install -g` of the repo package. A button to a page you did not write is a broken path.
## Rules
- Sell the whole system. A page that sells only the shipper, the file, or the dashboard failed review.
- Simplicity can be a value. It has to ring: few nouns, one install, one store. Do not write “simple” and then a stack dump.
- A hook plus three facts is too short. Values sit under the hook.
- Implementation details (database engine, SQL, protocol names) stay off the landing. How or docs may name an engine once.
- Independence of deployment is not “you choose the schema.” Local-first is not “there is no vendor.” Offline-keep-events is reliability for the field device.
- Isolation of products or components is context isolation. It is not multi-tenancy marketing.
- Code-first means a report is a file you commit. If an agent can add that file, say so.
- Do not name competitor products. No unverified speed or completeness.
- Sentence-case headings. No ALL-CAPS eyebrows, middle-dot meta lines, or decorative 01 / 02 / 03.
- Click the local UI. Do not change public hostnames until that review.
## When not to use
Not for a README, a how-to, or a blog post. Not to fold start or docs into the landing.
## Rationalizations
| Excuse | Reality |
| --- | --- |
| Keep the drafted hook | A store or pipeline metaphor is not approved. |
| Swap “store” for “product” and ship | That is the same heading. |
| The database is the story / name it after the lede | Off the landing. |
| “A query can join them” is concrete | Jargon. Say what the buyer can do. |
| bun run / bun install -g ships today | Public path is the binary or image. |
| Clone the repo / package on npm later | CTA is then a dead end. |
| Docs later / not in today’s ship list | Same pass. |
| The founder asked to name a cloud vendor | Category only. |
| Design later / type is enough | Bare type failed review twice. |
| The button looks fine in code | Check the painted primary. |
| Founder already wrote the values / do not interview | Those words are unsettled. Grill what each means. |
| Time is gone / ship the values | Values from a brief failed review. |
| We sell the collector | You sell the system. |
## Red flags — stop
- Values written before a grill round
- Hero and ≤3 facts, then done
- Storage or pipeline metaphor as H1
- Engine or query language on the landing
- Product noun used before it is defined
- Competitor brand
- Start or docs not written in the same pass
- Start path is clone, `bun run`, or a language-package install
- ALL-CAPS eyebrow, middle-dot chrome, fake numbered cards
- Hostname change before a local click-through