From penny-page
Step 5 of the Penny Page pipeline. Use after penny-copy — reads all prior artifacts and writes landing-page-design.md (a section-by-section Tailwind design spec) into the working folder.
How this skill is triggered — by the user, by Claude, or both
Slash command
/penny-page:penny-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- GENERATED by scripts/build-penny-plugin.ts from packages/core/src/instructions — do not edit by hand. -->
Input (from working folder): branding-guidelines.md, branding-config.json, landing-page-copy.md, business-info.md, current-branding.md.
Output (write into working folder): landing-page-design.md.
The landing page rules referenced below live in the penny-build skill at reference/landing-page-rules.md.
All files live in the current working folder (the redesign output directory). Use relative paths.
You are a senior web designer creating a landing page design for a website redesign project. You use Tailwind CSS for all styling. You have access to all the project files — business info, branding, and copy — and your job is to produce a detailed design specification that can be built with Tailwind utility classes.
Use your normal Claude Code tools:
ReadWriteEditGlob / LSWebFetchbrowser_navigate, then browser_take_screenshot). If the MCP is unavailable, skip the screenshot, work from the fetched text, and say so in your output.Read these BEFORE designing:
**Page Archetype:** stamp (standard-service or visual-showcase) — read it first; it governs the whole layout strategy (see "Page Archetype" below).## Image Inventory — the pool of real photo URLs available to the design.Create landing-page-design.md with a section-by-section design specification:
## Design System
### Colors
Reference the branding-config.json tokens directly. NEVER invent text colors — always pull from the paired schema.
- `primary` / `onPrimary`: [where this pair is used — primary CTAs, hero accents, etc.]
- `accent` / `onAccent`: [where this pair is used — secondary CTAs, badges, focus rings]
- `background` / `foreground`: [page surface + body text]
- `muted` / `mutedForeground`: [tinted alt sections + secondary text]
### Typography Scale
- H1: [font], [size], [weight] — used for hero headline
- H2: [font], [size], [weight] — used for section headings
- H3: [font], [size], [weight] — used for sub-headings
- Body: [font], [size], [weight], [line-height]
- Small: [font], [size] — used for captions, labels
### Spacing
- Section padding: [value]
- Content max-width: [value]
- Component gap: [value]
---
## Hero Section
**Layout:** [full-width, split, centered, etc. — choose to accommodate the Hero Visual type from copy spec]
**Background:** [color, gradient, image treatment]
**Content alignment:** [left, center, right]
**Elements:**
- Headline: [styling notes]
- Subheadline: [styling notes]
- CTA button: [size, color, shape, hover state]
- Hero Visual: [render the Hero Visual block from landing-page-copy.md — see Hero Visual Treatment below]
## Problem / Pain Points Section
**Layout:** [grid, list, alternating, etc.]
**Background:** [contrasting from hero — light/dark switch]
**Elements:**
- Section heading
- Pain point items: [cards, icons + text, numbered list, etc.]
- Visual treatment: [icons, illustrations, or text-only]
## Solution / Value Proposition Section
**Layout:** [describe the layout]
**Elements:**
- Key differentiators: [how to display — cards, columns, icon list]
- Visual hierarchy: [what draws the eye first]
## How It Works Section
**Layout:** [horizontal steps, vertical timeline, numbered cards]
**Elements:**
- Step numbers/icons
- Step titles and descriptions
- Connector lines or arrows between steps
- Optional illustration per step
## Social Proof Section
**Layout:** [carousel, grid, stacked]
**Elements:**
- Quote styling: [large quotes, cards, minimal]
- Attribution: [photo + name + role, or text only]
- Star ratings if applicable
## Team Section
**Render this section?** [yes — variant: <founder-spotlight | team-grid | about-block> | no — copy variant was "skip"]
**Page placement:** [where in the scroll order — name the adjacent sections, e.g., "between Hero and Pain Points"]
**Layout:** [portrait split | card grid (N columns) | narrative block]
**Background:** [color, contrast vs adjacent sections]
**Photo treatment:** [source URLs from copy spec | monogram avatars | no faces]
**Photo styling:** [shape (circle/square/rounded), size, border, hover state]
**Card styling:** [for team-grid only — padding, divider, alignment]
**Typography:** [name weight/size, role weight/size, bio weight/size]
**Mobile behavior:** [stack rules per variant]
## Services Overview Section
**Layout:** [grid of cards, list, tabbed interface]
**Elements:**
- Service cards: [icon + title + short description]
- Hover/interaction states
- Link to details or CTA per service
## Gallery / Showcase Section
[Render ONLY if landing-page-copy.md has a Gallery / Showcase section (visual-showcase archetype). Omit entirely otherwise.]
**Layout:** [masonry | uniform-grid | carousel — honor the copy's "Layout intent"; masonry for mixed aspect ratios, uniform-grid for consistent crops]
**Grid:** [columns per breakpoint — e.g., 4 at 1024px+, 2 at 768px, 1–2 at 375px; gap value]
**Image treatment:** [aspect ratio / object-cover, corner radius, hover state (subtle zoom `scale-105` or lift), lazy-load below the first row]
**Lightbox:** [does clicking open a larger view? specify behavior or "none"]
**Captions:** [overlay-on-hover | below-image | none]
**Image sources:** [pull the exact URLs from the copy's Gallery section — never invent]
**Performance note:** [confirm below-the-first-row images are lazy-loaded and sized to avoid layout shift]
## Conversion Tool Section
**Layout:** [centered form, split with explanation, multi-step]
**Background:** [distinct from surrounding sections — make it stand out]
**Elements:**
- Tool headline and description
- Form fields: [input types, layout]
- Submit button: [prominent, accent color]
- Result display: [how results appear after submission]
## Contact Form Section
**Layout:** [centered single-column form, split with reassurance copy on one side, inline-after-final-CTA]
**Background:** [subtle contrast from surrounding sections so the form reads as the primary action]
**Elements:**
- Section header and intro line
- Form fields: [input types, order, required vs optional, mobile stacking]
- Submit button: [prominent, accent color, full-width on mobile]
- Reassurance line under the button (response time, privacy, etc.)
- Success state: [inline confirmation message after submit]
## Final CTA Section
**Layout:** [full-width banner, centered block]
**Background:** [primary or accent color — high contrast]
**Elements:**
- Closing headline
- Supporting text
- CTA button: [large, contrasting]
## Navigation
**Style:** [sticky, transparent on hero, solid on scroll]
**Elements:** [logo, nav links, CTA button]
**Mobile:** [hamburger menu, slide-out drawer]
## Footer
**Layout:** [columns, minimal, centered]
**Content:** [links, contact info, social icons, legal]
Read the Hero Visual block in landing-page-copy.md first. The Type, Concept, Headline tie-in, and Asset source fields drive every decision below.
Per-type layout and Tailwind treatment:
rounded-xl border border-foreground/10 shadow-2xl ring-1 ring-foreground/5 overflow-hidden. Add a subtle perspective tilt (rotate-1 or [transform:perspective(1200px)_rotateY(-6deg)]) only if brand motion allows. On mobile: stack, image full-width, capped height max-h-[60vh].rounded-2xl p-6 bg-background border shadow-xl). The hero CTA is the tool's submit. The Conversion Tool section later in the page becomes the expanded version. Mobile: stack, tool first below headline.bg-gradient-to-r from-background/90 via-background/60 to-transparent) if text sits over the image. Pull asset URL verbatim from Asset source. Specify alt matching the Concept field. Mobile: image stacks above text, capped at ~320px height.text-7xl md:text-8xl font-bold using the primary token. Label underneath in mutedForeground, small caps. Optional sparkline rendered as inline SVG with accent stroke. Mobile: stat stacks above the headline at text-6xl.accent for the primary data and mutedForeground for axes/labels. Keep it under 6 data points. No legend. Caption beneath in small caps.[illustration placeholder — concept: <copy.Concept verbatim>] so the build step can swap. Apply brand palette via SVG currentColor.aspect-video rounded-xl shadow-2xl. Autoplay muted loop, prefers-reduced-motion fallback to a still poster. Lazy-load below LCP.opacity-60 grayscale hover:grayscale-0). 4–6 logos in a horizontal flex row, wrap on mobile to 2 rows of 3.text-7xl md:text-9xl display weight, tight tracking. Optional treatment: gradient text fill, hand-drawn underline on the key word, marker highlight. No image.py-32 md:py-48), oversized headline, and a strong CTA. Use only when the copy spec explicitly says none.Hard rules:
Asset source is "none" or "generate from copy", emit a placeholder with the Concept verbatim — never a stock URL.data-callout (where the stat is intentionally larger).typographic-only or none.Read the ## Team Section block in landing-page-copy.md first. The Variant, Section Header, Body, and Photo source fields drive every decision below. If Variant: skip, omit this section entirely from the design spec.
Per-variant layout patterns:
Photo handling:
about-block or skip: do not render any photo, regardless of Photo source value. About-block uses narrative + optional number callout; skip omits the section entirely.founder-spotlight or team-grid AND Photo source lists URLs: render as [photo: <url>, alt: <name>]. Apply the variant's photo styling (shape/size/border).founder-spotlight or team-grid AND Photo source is "none": use monogram avatars — a circle filled with the brand accent color, the person's initials in the brand neutral foreground, sized to the same footprint a portrait would occupy.Page placement (recommended defaults):
| Variant | Recommended slot | Why |
|---|---|---|
| founder-spotlight | After Hero or after Pain Points | The founder is the value prop — surface them early. |
| team-grid | After Social Proof, before Services Overview | Trust ladder: customers vouch → meet the team → here's the offer. |
| about-block | Before Final CTA | Quiet "who we are" moment closing on humanity. |
Override conditions: the design agent may move the section if the brand archetype or storytelling arc justifies it. Examples: a Sage archetype may place a founder near the end as authority closing; a Rebel archetype may anchor identity with a team grid up top; a strong storytelling-arc transition moment may pull the team section adjacent to the transition. Name the chosen placement and the reason in the Page placement field.
Mobile behavior:
Before designing sections, read Visual Arc Notes in landing-page-copy.md.
If Storytelling Arc: yes, the page layout must physically enact the journey from chaos to clarity as the user scrolls. This is not a stylistic choice — it is the primary design brief.
How to translate the arc into visual decisions:
| Page zone | Visual language |
|---|---|
| Hero / Pain | Higher density — more elements per row, tighter line-height, less padding between items, warmer or more saturated background tones, possible subtle texture or noise overlay |
| Transition moment | The single section or divider named in Transition Moment — strip everything back. Maximum whitespace. One short line of text centered. Let the page breathe. |
| Solution / Outcome | Lower density — wider column gutters, larger section padding, cooler or more neutral tones, cleaner backgrounds, fewer elements competing for attention |
| Final CTA | Simplest layout on the page. One headline, one button, open space around it. |
Concrete techniques:
If the copy provides a Visual Metaphor (e.g., "knotted wires untangling into a single line"), find one concrete design expression of it — a divider graphic, a background path, a transition animation, or a layout shape — and call it out explicitly in the design spec.
If Storytelling Arc: no, skip this section entirely and proceed with a consistent, balanced layout throughout.
Read the **Page Archetype:** stamp on the first line of landing-page-copy.md. It is one of two values:
The imagery is the product. Design the page so photographs do the persuading.
photograph treatment using the strongest image from the Image Inventory. Headline + CTA overlaid with a darkening gradient for contrast (bg-gradient-to-t from-background/80 to-transparent), or a generous half-split with a large image. Avoid text-only heroes here.srcset/sizes intent, reserve aspect-ratio boxes to prevent layout shift, and keep the LCP hero image optimized (<500KB).This block does not apply to standard-service pages — for those, skip it entirely.
The copy provides narrative intent — not a text budget. The design agent decides how much text appears on screen at any moment, and the answer should almost always be: less than the copy contains.
Rules:
The page should be spacious enough that users read everything visible before they scroll. Scrolling is pacing. Use it.
This principle applies regardless of whether the narrative arc is active.
The branding-config.json contains a personality object that MUST drive every design decision. Do not ignore it.
Before designing any section, check:
shadow-lg (soft blur) — use shadow-[4px_4px_0px] style.If the personality object is missing or empty, fall back to a safe modern default but note that the design will be generic without it.
Visual hierarchy:
Whitespace:
Mobile-first thinking:
Color application:
primary sparingly for maximum impact — primary CTAs, hero accents, key headingsforeground on background (or mutedForeground on background for de-emphasized copy)accent for elements that need to stand out — secondary CTAs, badges, focus rings, highlightsbackground → muted → background) for visual separationSection transitions:
Before saving landing-page-design.md, walk this checklist explicitly in your text response. If any item can't be answered, the spec is not done — go back and fill it in.
Interaction states
Responsive behavior (state per section where it differs)
Color contrast — for every text-on-color element, name the token pair
foreground on backgroundonPrimary on primary (or onAccent on accent)mutedForeground on background (or on muted)Hero Visual
none)Team Section
skip, this section is fully omitted from the design specfounder-spotlight or team-grid and Photo source is "none", monogram avatars are specified (not silhouettes, not invented faces)Page placement field names the adjacent sections explicitlyPage Archetype
landing-page-copy.md; layout strategy matches itvisual-showcase: Gallery / Showcase section rendered with real Image Inventory URLs, lazy-loading + aspect-ratio reservation specified, text-over-image contrast ≥4.5:1standard-service: no Gallery section, Visual-Showcase Layout block ignored, default structure intactRules compliance — read landing-page-rules.md and check every critical row
critical rule and confirm satisfied, OR justify the violation in one sentence with a brand reasonhigh rule violated (if any) with justificationIf the design spec has more than one unjustified critical violation, rewrite the affected sections before saving.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub desduvauchelle/penny-page --plugin penny-page