Free tools / Build landing page
Build landing page
The package skill that implements the landing from handoffs (ships inside every Build package).
- Category
- Package skills
- Format
- SKILL.md
- Compatible with
- Claude Code · Cursor · any agent that loads SKILL.md
- License
- Open for learning and client work · Non-commercial productization ban
- Built by
- Frezpo
Why use it
Download a package, open this skill in your agent, and implement without re-running ads-landing nodes.
What it does
Same handoff-first build procedure as frontend-build, stamped as machine/skills/build-landing-page.md in every package ZIP.
What you get
- Exact skill text from the product package machine lane
- Field→markup and copy-sacred rules
- No pipeline re-run required
Package inputs
- Prefer
machine/build_context.json - Use
02_ux.mdfor structure / wireframe narrative - Use
01_content.mdfor copy; do not invent proof
Offline/file-only — does not run the Frezpo strategy pipeline or ship ALM.
How to use
- Read the markdown below, or download / copy it.
- Install into Claude Code (see install guide) or open the SKILL.md in your agent.
- For package skills, unzip a Frezpo Build package first — sample pack works offline.
The skill (SKILL.md)
Raw markdown source — copy or download to use offline.
markdown · SKILL.md
---
name: build-landing-page
description: Implement a landing page from Frezpo package handoffs (build_context + 02_ux + content), one section at a time.
license: PolyForm-Noncommercial-1.0.0
---
> Frezpo free tool — open for learning and paid client work. May not be sold or productized as a competing skill pack. Built by Frezpo (https://frezpo.com).
# Skill: build-landing-page
**Package-native skill** — run in the user's local LLM or coding agent.
Implement a landing page from package **handoffs**. **Do not re-run the pipeline.**
## When to use
Build (or plan) a production-ready landing page from the package **UX wireframe** + copy.
Prefer structured `machine/build_context.json`; use `02_ux.md` / `01_content.md` for humans.
## Inputs (read first)
1. `machine/build_context.json` — UX SSoT: `sections[]` order, presentation, fields, asset_policy.
2. `02_ux.md` — human UX cards (structure only — no design kit).
3. `01_content.md` — copy + hooks + message-match.
4. **Required for visual design:** user brand tokens / Figma kit / host design system
(package does **not** ship fonts, hex palettes, or a house UI kit).
5. Optional: skill `revise-wireframe` first if order/presentation must change offline.
## Constraints
- **One section at a time.** Work through `sections[]` in order via the Build loop below —
brainstorm, clarify, implement, verify, then advance. Never emit the whole page in a
single pass, and never scaffold a later section while the current one is unverified.
- The package declares **no stack, style, or fonts**. Settle them with the user (see
Gap clarification) before writing code; never assume a default.
- **Copy is sacred** — never paraphrase, translate, or normalize `content_fields[].text`.
- **Authority hierarchy** (highest wins): brand don'ts → user brandbook / brand kit →
`developer_notes` → layouts → content field text. There is **no** package design system.
- **The brandbook decides how an element looks, never what it says.** Where it defines a
component's style, follow it — it outranks `developer_notes`. It never changes the copy, the
order of `content_fields[]`, or the order of `sections[]`.
- Section order must match `sections` in `build_context.json` (UX wireframe SSoT).
- Wireframe revise is **offline only** via skill `revise-wireframe` — not the product UX agent.
- Asset policy v2 (generative components): every visual slot ships a bespoke code-only
component that strengthens its section's copy; no image files, no stock photo URLs.
- Implement **structure + copy** from the package; apply **agency** design tokens.
Do not invent a competing brand system when the user has one.
- Soft-fill (`Not produced in this run.`): work around and state assumptions; not invent-license.
## Build rules
### Wireframe is the structure SSoT
`build_context.json` → `sections[]` defines **page order** and **presentation**
(`position`, `ui_component`, layouts). Implement that wireframe; do not invent competing IA.
### Revise offline before build (optional)
If order or presentation must change:
1. Run skill `revise-wireframe` in your own LLM.
2. Patch `machine/build_context.json`.
3. Continue this skill on the revised file.
**Agencies own visual design:** apply **your** design tokens / Figma kit / house system.
### Render authority
`content_fields[]` is the **render list**. Every entry renders exactly **once**, in order.
`cta` and `trust_signal` are **presentation bindings on entries already in that list**,
not extra content. They say *how and where* a field renders — button vs link, destination,
placement — never that it renders a second time. A section's `cta.label` and
`trust_signal.content` normally repeat a `content_fields[]` text verbatim; that is one
element described twice, not two elements.
Procedure per section:
1. Render `content_fields[]` in order via the markup matrix below.
2. For each of `cta` / `trust_signal`, match its `label` / `content` against the text you
already rendered. On a match, apply the binding to that element — do not emit another.
3. Only when the value matches no field text is it new content, and only then does it add
an element of its own.
### Field → markup matrix
| component | Markup role |
|-----------|-------------|
| `heading` | Primary section heading (`h1` only once above the fold; else `h2`) |
| `subheading` | Supporting heading / lead |
| `body` | Paragraph body copy |
| `list_item` | List item (group consecutive items into one list) |
| `cta_label` | Button or link label — use declared CTA destination when present |
| `trust_signal` | Small trust line / badge (do not invent metrics) |
| `transition` | Short bridge line between sections |
| `eyebrow` | Small kicker above a heading (not a second H1) |
| `table_row` | One row in a comparison / feature table (group consecutive rows) |
### CTA
- Apply declared `cta.type`, `label`, `destination`, `placement` to the `cta_label` field
already rendered for that section (see Render authority) — do not add a second button.
- Treat package destinations like `/quiz` or `/checkout` as **intent stubs**, not final
product URLs, unless the user confirms them.
### Accessibility minima
- Section landmarks (`section` + accessible name).
- Stable heading ids for in-page anchors.
- Focus-visible styles for interactive controls.
### Do not invent
- No testimonials, stats, guarantees, or product claims that are not in package fields.
- No stock photo URLs, no binary image files; fill visual slots with bespoke code-only
components (asset policy v2).
### Proof integrity
Testimonial **presentation** requires an attributed source. Do not render copy with
quotation marks, as a pull-quote, inside a testimonial card, beside an avatar or person
icon, or with a star rating **unless the package supplies a name or role attached to that
exact text**. Presentation is a claim: quote marks around a sentence assert that somebody
said it.
Proof copy is often a third-person summary — *"customers describe waking refreshed"* —
which is the brand's own words about its customers, not a quote from one. Render it as
ordinary section copy.
A `ui_component` such as `testimonial_grid` names a **slot**, not evidence that
testimonials exist. When the section has no attributed quotes, implement the slot as
plain content and say so in your notes.
**This rule overrides `developer_notes`.** Notes proposing quote styling, a pull-quote
treatment, or "generic" avatars where no real attribution exists are the exact failure
this prevents — do not follow them. If the section needs real proof, raise it under Gap
clarification and ask the user.
### Brandbook and design tokens
The package ships no design system. If the user has a brandbook, it is the design authority.
Read it once, before section 1.
**Sources, best first:** exported design tokens (Figma Variables, Tokens Studio,
`tokens.json`) → a theme already in the project → a brandbook PDF → screenshots of the brand
pages → a style-guide URL.
If you cannot read the file, ask for an export or the values. Never guess a hex or a font.
**Extract:**
- **Colour** — primary, secondary, accent, neutral scale, semantic, surfaces. Hex plus role.
- **Typography** — families and weights; the scale from display to caption, each with size,
weight, line-height and letter-spacing.
- **Spacing** — base unit, scale, density.
- **Layout** — max width, columns, gutter, breakpoints.
- **Shape** — radius scale, borders, dividers.
- **Elevation** — shadow levels.
- **Icons** — style, stroke, sizes.
- **Motion** — easing, durations.
- **Components** — button, input, card, badge, link, list, table, with hover, focus, active
and disabled states.
- **Don'ts** — the prohibitions the book states outright. These are hard constraints.
Write the tokens in the form the stack consumes.
Show a table of what you extracted and where each value came from. Mark anything you inferred.
Then **ask the user to confirm before section 1.** This stop overrides the review cadence.
### Gap clarification (brainstorm with the user)
This is the **kickoff**, run once before section 1. Read `machine/build_context.json`, list
`sections[]` in order, and show the user that build order. Then run a short **brainstorming /
clarify** pass over the gaps that block the *whole page*: **ask the user** how to fill anything
the package cannot truthfully supply. Do not invent. Gaps that belong to a single section are
asked inside that section's CLARIFY gate, not here.
Typical page-level gaps:
- **CTA destinations / URLs** — real paths, form endpoints, Calendly, checkout, mailto.
- **Quiz / signup / checkout schema** — when a CTA implies a flow the package does not define.
- **Social proof integrity** — missing names/quotes/metrics → ask for proof or soften.
- **Offer & legal** — price, guarantee, refund, disclaimers when copy implies them.
- **Brand assets** — logo, lockup, colors beyond package tokens.
- **Host stack** — if you are inside an existing project, infer it from the manifest and
say so ("building in <stack>, detected from package.json"). Otherwise **stop and ask**.
Never pick silently.
- **Brandbook** — ask for it first: exported tokens, a project theme, or a PDF. See Brandbook
and design tokens. Without one, build structure and copy only.
- **Fonts** — use the brandbook families when it names them. Otherwise the package ships
none: ask which families to use, then load them however suits the chosen stack.
Before starting section 1, also settle two things about how the build itself will run.
**Review cadence — ask, then honour it for the whole build:**
- **A — review every section:** stop after each VERIFY and wait for the user.
- **B — calibrate then run:** stop after section 1; once approved, continue and report at the end.
- **C — only when blocked:** run continuously; stop only on an unresolved gap or a failed verify.
Default to **A** if the user does not answer. Say which cadence is in force before section 1.
**Preview — ask how the page will be looked at:**
- The command that serves the page and the **URL** it serves on.
- Whether you may drive a browser yourself (browser tooling, Playwright, a screenshot CLI).
Record the answer as `agent-driven` or `user-driven`; it decides how VERIFY runs.
Never assume you can open a browser, and never skip the browser half because you cannot.
### Generative visual components (asset policy v2)
- **The copy decides the concept.** Derive each visual from that section's
`content_fields` text and `goal`, shaded by narrative framework and dominant ad angle
from handoffs. Never a new message.
- **Per-section recipe:** (1) one-sentence argument from copy; (2) simplest visual form
(flow, contrast, accumulation, relief, comparison, scale, before/after, …); (3) bespoke
component in the host stack.
- **Execution bar:** inline SVG with explicit `viewBox` and named geometry constants;
colors from **agency / host** palette; honor `prefers-reduced-motion`; decorative
`aria-hidden="true"`, narrated `role="img"` with one accessible label.
- **Hard limits:** no new runtime dependencies; no image/binary files; no external image
or font URLs. Copy inside a visual still obeys the verbatim-copy rule.
## Build loop (one section at a time)
After the kickoff, take the entries of `sections[]` one at a time, **in order**. Each section
passes four gates before the next one starts. Announce which gate you are in.
**1. BRAINSTORM — this section only**
- One sentence on what this section argues, derived from its `content_fields[].text` and
`goal`. It is never a new message; the copy already made the argument.
- The visual form for this section, derived from that same copy (see the per-section recipe
above). The copy is the only source for the concept — there is no separate visual brief
to wait for, so never skip the visual for want of one.
- How `ui_component` maps to markup in the chosen stack, and the `layout_mobile` /
`layout_desktop` approach.
- Which `developer_notes` you will follow, and which the Render-authority or Proof-integrity
rules override — name the rule that overrode them.
Keep it under about eight lines. This is a plan for one section, not a document.
**2. CLARIFY — this section only**
Ask only what *this section* blocks on: its `cta.destination`, attribution for its proof copy,
the price or guarantee wording its copy implies, the form or flow endpoint its CTA implies.
- If nothing is missing, say **no gaps** and move on. Do not manufacture questions.
- Never invent an answer to keep moving. An unanswered gap stops the section.
- A gap that turns out to affect the whole page is settled once, then carried forward.
**3. IMPLEMENT — this section only**
Build just this section; do not scaffold later ones. Render `content_fields[]` in order per
Render authority and the markup matrix, copy verbatim, bind `cta` / `trust_signal` to elements
already rendered, build the bespoke code-only visual to the Execution bar, and apply the
accessibility minima and the user's tokens.
**4. VERIFY — this section only. Both halves are required.**
*Code verify* — read back what you wrote and confirm:
- every `content_fields[].text` present verbatim and exactly once, in order;
- no second CTA or trust element created by a binding;
- no claim, metric, quote, avatar or star rating without an attributed source;
- every `developer_notes` entry followed, or overridden with the rule named;
- section landmark and accessible name, stable heading id, focus-visible controls;
- `prefers-reduced-motion` honoured; no new dependency, image file, or external URL.
*Browser verify* — the section has to be **looked at**, not just compiled. Serve the page and
open it at this section's anchor at a narrow viewport (~390px) and a wide one (~1280px).
- **agent-driven:** open it yourself, inspect or screenshot both widths, and report what you
actually saw — overflowing text, a clipped or squashed visual, broken stacking, an invisible
focus ring, unreadable contrast, a placeholder that survived.
- **user-driven:** give the exact URL, the two widths, and a short list of what to check, then
wait for the user's report.
Report **observations, not intentions**. "Renders as specified" without having opened the page
is a failed verify, not a passed one.
**5. GATE**
- If either half fails, fix it and verify again. Never advance on a failed section.
- If a gap is still unanswered, stop and ask — whatever the cadence says.
- Otherwise honour the kickoff cadence, then move to the next section.
### Section ledger
Keep a running table so a lost context does not lose the build. Update it after every section
and show it whenever you pause:
| section_id | brainstormed | gaps | implemented | code verify | browser verify | notes |
|------------|--------------|------|-------------|-------------|----------------|-------|
## Success criteria
### Per section — the gate to advance
- [ ] Every `content_fields[].text` for this section renders verbatim, exactly once, in order.
- [ ] `cta` / `trust_signal` bound to elements already rendered — nothing rendered twice.
- [ ] No unattributed quote, card, avatar or star rating.
- [ ] Developer notes followed, or overridden with the rule named.
- [ ] Landmark, accessible name, heading id, focus-visible present.
- [ ] Bespoke code-only visual present, tracing to this section's copy.
- [ ] Opened in a **browser** at both widths, and what was seen is reported.
### Whole page — at the end
- [ ] Every section in context has a component / block in the plan or implementation.
- [ ] Every content field text appears **verbatim** and exactly once — no CTA label or
trust line rendered twice because `cta` / `trust_signal` restated it.
- [ ] Every developer note is addressed or explicitly deferred with rationale.
- [ ] No copy is quoted, carded, avatared or star-rated without an attributed source.
- [ ] Agency design kit applied (or structure-only if none provided yet).
- [ ] Mobile + desktop layouts reflected.
- [ ] Every section has a bespoke visual that strengthens its copy — no placeholder boxes.
- [ ] Each visual's concept traces to section copy/goal.
- [ ] Every section was opened in a browser at both widths and the observation recorded.
- [ ] The section ledger is complete, with no section left unverified.
## Notes
- Do not re-run the pipeline; use only package contents + user answers.
- Soft-fill (`Not produced in this run.`) is not invent-license.
Other tools
Need the full campaign story (hooks + landing structure together)?