All posts
TemplatesAI toolsUI design

How to Build a Landing Page with Cursor in 2026

Step-by-step guide to building a landing page with Cursor in 2026 — DESIGN.md, section scoping, @-references, and agent prompts that ship conversion-ready UI without slop.

AD
Agent's Design

To build a landing page with Cursor in 2026, start from a Next.js repo with DESIGN.md at the root, scope Composer to one section per session, and @-reference your spec and components/ui/ in every message. Cursor has full repo context — taste comes from what you attach, not from asking for a "modern landing page."

This guide is the landing-page-specific workflow. For general Cursor UI craft, see how to design beautiful UI with Cursor.

What you need before opening Cursor

PrerequisiteWhy
Next.js App Router projectcreate-next-app or a starter template
Component libraryshadcn/ui or HeroUI installed
DESIGN.mdTokens, layout, anti-patterns — spec guide
Section outlineHero, proof, features, pricing, FAQ, footer — in order
Real copy draftHeadlines and CTAs; agents invent weak copy

Optional but high leverage: a gallery template with prompt + DESIGN.md export.

Step 1: Scaffold the page structure

Create empty section components before generating UI:

app/
  page.tsx
components/
  landing/
    hero.tsx
    logos.tsx
    features.tsx
    pricing.tsx
    faq.tsx
    footer.tsx
  ui/
    ...
DESIGN.md

In Cursor Composer:

Create landing page shell in app/page.tsx importing empty section components from components/landing/.
No styling yet — structure only. Do not implement section content.

Structure first prevents one giant page.tsx agents cannot maintain.

Step 2: Load DESIGN.md and project rules

Commit DESIGN.md to repo root. Add standing rules to .cursor/rules or AGENTS.md:

  • Use only colors from DESIGN.md
  • No font families not listed in spec
  • One primary CTA per viewport
  • Mobile-first: 390px and 768px breakpoints
  • No purple gradients or default AI hero patterns

These persist across Composer sessions.

Step 3: Build the hero (first real section)

Message template:

@DESIGN.md @components/ui/button.tsx @components/landing/hero.tsx

Implement hero only per DESIGN.md:
- Headline: [your outcome for audience]
- Subhead: [one sentence proof, max 2 lines]
- Primary CTA: [verb + object]
- Layout: [split 55/45 | centered | etc.]
- Product visual: placeholder screenshot frame on right (desktop), below copy (mobile)

Do not edit files outside hero.tsx and page.tsx import.
No gradients. Use existing Button component.

Review in browser before continuing.

Step 4: Add social proof and features

Logo strip:

@DESIGN.md @components/landing/logos.tsx

Horizontal logo strip below hero. Grayscale logos, max height 32px, 5 slots with placeholder SVG text "[Client]".
If we have no logos yet, use "Trusted by teams like" with empty slots — do not invent company names.

Features (bento, not three cards):

@DESIGN.md @components/landing/features.tsx

Bento grid: 5 cells, varied sizes. Title max 6 words, one sentence each.
Follow DESIGN.md spacing. No icon-in-circle trio. No equal three-column row.

Step 5: Pricing and FAQ

@DESIGN.md @components/landing/pricing.tsx

Three tiers: [Starter / Pro / Team]. Middle tier emphasized.
Real feature bullets from our product. Monthly/annual toggle UI only.
@DESIGN.md @components/landing/faq.tsx

Accordion FAQ, 4 questions from [paste support doc or sales objections].
Typography-led — no decorative icons per question.

Step 6: Footer and metadata

@DESIGN.md @components/landing/footer.tsx

Footer: product links, legal (privacy, terms), social only for accounts that exist.
No newsletter unless backend is wired.

Add SEO in app/page.tsx or layout:

export const metadata = {
  title: "[Product] — [outcome]",
  description: "[Answer-first, 150 chars]",
};

Tell the agent to use your strings — do not let it invent "Welcome to the future."

Step 7: Anti-slop review pass

Run the anti-slop checklist. Common Cursor landing failures:

IssueFix in Cursor
Gradient heroInline edit: solid surface + border
Three identical cardsRegenerate features as bento
Weak headlinePaste your copy; reject agent rewrites
Wide Composer diffReject; restate file scope
Missing mobile layoutScreenshot at 390px, paste into chat

Landing page build order (reference)

OrderSectionWhy this order
1Shell + importsStable file map
2HeroSets type and color rhythm
3Logos / proofEstablishes credibility band
4FeaturesMain argument
5Pricing or CTAConversion
6FAQObjection handling
7Footer + metadataShip-ready

When to use a gallery template

Skip blank-page hero prompting when:

  • You are on a deadline
  • This is your first vibe-coded landing
  • Previous attempt produced slop you cannot salvage

Copy prompt + DESIGN.md from Agent's Design, @-reference in step 3, customize tokens and copy.

See also 12 Best SaaS Landing Page Templates.

FAQ

How long does a Cursor landing take?

With DESIGN.md and section scoping: 2–4 hours for a credible first draft. Blank-prompt one-shots often take longer due to slop rework.

Can I use v0 for the hero and Cursor for the rest?

Yes. Export v0 components into components/landing/, then continue in Cursor with DESIGN.md as source of truth. See ship tasteful UI with v0.

One page.tsx or many components?

Many components. Agents and humans both maintain smaller files better.

Ship the landing

Building a landing page with Cursor is repeatable: spec in repo, structure before polish, one section per Composer turn, browser review between diffs.

Copy a starting brief from Agent's Design, build hero first, and stop accepting full-page rewrites. Cursor already knows your codebase — give it taste and scope.

Ship the next screen with taste

Browse agent-ready templates, DESIGN.md specs, and prompts in the gallery — then paste into Cursor, Claude Code, or v0.

Keep reading