Fill packages/landing/src/content/site.ts from brief.md. The landing template already ships to the venture via platform-modules in bootstrap Step 1 โ this skill only populates content.
Installation
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fรผgen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prรผfen und installieren.
Fill packages/landing/src/content/site.ts from brief.md. The landing template already ships to the venture via platform-modules in bootstrap Step 1 โ this skill only populates content.
agent
_builder
argument-hint
<venture-name>
/populate-landing โ Fill Landing Content from Brief
What It Does
The landing template already lives in ../<venture-name>/packages/landing/ after the base
scaffold (bootstrap Step 1 rsyncs platform-modules/, which now includes
packages/landing/). This skill only fills content:
Populate packages/landing/src/content/site.ts:
meta (brand name, tagline, description, URLs, emails, social, keywords) from brief.
branding.accent (hex from brief), optional fontSans/fontMono/borderRadius/borderWidth.
Every home.*, mobile.*, business.*, pricing.*, blog.*, contact.*, privacy,
terms slot that the brief supplies.
Leave untouched: page set, component sequence, and everything in src/components/*,
src/app/*, src/lib/*, globals.css.
Ensure packages/landing/package.json.name equals @<venture-name>/landing
(the bootstrap rebrand step handles this; verify it landed).
Edit only src/content/site.ts (and design.ts if token-level overrides are needed).
Excess content in brief โ silently ignore. Do not log to design.ts.rationale. Do not
stretch list slots beyond their schema cardinality. Landing-page conversion beats content
fidelity (colleague directive: "data overload could create worse results for our customers").
privacy.markdown, terms.markdown (HTML-in-string; each <section><h2>โฆ</h2><p>โฆ</p></section>)
Branding โ accent HEX
branding.accent
Branding โ fonts
branding.fontSans, branding.fontMono
Branding โ radii / border
branding.borderRadius, branding.borderWidth
Text fit โ UI/UX writing rules
UI slots have fixed visual proportions. Text that does not fit the slot's visual role breaks layout
and hurts conversion. When populating any slot from brief.md, apply these rules:
Hero (hero.title, hero.subtitle)
hero.title is a full-width <h1> at ~64 px, centered. It should fit 1โ2 lines max.
If the brief supplies a long headline, rewrite it as a short punchy claim (4โ7 words).
Example: "Confidential stablecoin payment infrastructure for modern B2B" โ "Payments without the paper trail."
hero.subtitle sits below at ~22 px, max-w-2xl. One sentence, two at most.
If the brief has a paragraph here, distill it to the single strongest idea.
Section titles and subtitles (title, subtitle, eyebrow)
eyebrow is a small uppercase badge โ one short noun phrase, no verbs.
title should be a tight claim or question, not a description. Rewrite verbose headlines.
subtitle is one sentence. If you have two ideas, pick the more powerful one.
Cards and list items (items[].title, items[].description)
Cards sit side-by-side in a grid. Their body text must be visually even across all cards โ
if one description is three times longer than the others, shorten it to match.
items[].title is a label, not a sentence โ 2โ4 words.
items[].description is one sentence. Write it as a benefit, not a feature list.
Stats (items[].value, items[].label)
value must be a compact number/symbol: "$1B+", "99.9%", "< 2 s". Never prose.
label is a short noun phrase below the number โ no verbs.
FAQ, pricing, prose
faq[].answer โ 2โ3 sentences max. If longer, cut to the most direct answer.
pricing plan.description โ one sentence, outcome-focused.
prose paragraphs[] โ each paragraph is one idea. Split or trim rather than run on.
General principle: if you find yourself copying text directly from the brief into a UI slot,
stop and ask: does this read as a UI label or as a document? If it reads like a document,
rewrite it shorter and sharper before filling the slot.
If no close match โ leave icon: undefined (renders Circle fallback). Do not add new icon
imports to components.
Favicon
Template ships with generic public/favicon.svg. branding.faviconInitial drives the text-based
Logo component (first letter of brand). If the brief supplies a real logo, drop it into
public/ and update app/layout.tsx metadata.icons.
Dev smoke:pnpm dev and curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
returns 200.
Every route smoke:curl localhost:3000/{,mobile/,business/,pricing/,blog/,contact/,privacy/,terms/}
each returns 200.
Token swap test: temporarily change site.branding.accent to a different hex
(e.g. #2e7d4a), rebuild, confirm accent-colored elements re-color with no layout change.
Common failures
Element type is invalid at prerender โ a server component imported a client-side
Context.Provider. Fix: ensure any Provider use happens inside a 'use client' file.
Phosphor icon crash โ component using an icon without 'use client'. All pages in this
template are already client-marked where they render icons. Do not touch.
Static export fails on [slug] โ generateStaticParams returning an empty array without
dynamicParams = false. The _placeholder fallback in /blog/[slug]/page.tsx covers this โ
don't remove it.
What this skill does NOT do
Add, remove, rename, or reorder pages or components.
Invent new components or sections to accommodate extra brief content.