Skip to content

Improve landing page copy and design for better conversion#112

Draft
waldekmastykarz wants to merge 12 commits into
mainfrom
wmastyka-microsoft-improve-landing-page-copy
Draft

Improve landing page copy and design for better conversion#112
waldekmastykarz wants to merge 12 commits into
mainfrom
wmastyka-microsoft-improve-landing-page-copy

Conversation

@waldekmastykarz

Copy link
Copy Markdown
Member

Summary

Rewrites the landing page copy and structure to sell the problem Dev Proxy solves rather than listing features. Adds a heading font (Sora) and restructures the page flow for better conversion.

Key changes

Copy

  • Hero headline rewritten to loss-aversion framing: "Your app works fine. Until the API doesn't."
  • All section headlines rewritten to lead with benefits, not features
  • Removed repetitive uppercase eyebrow labels from every section
  • Added positioning copy ("Not mocks. Not stubs. Not a test harness.")
  • CTAs made specific ("See the quickstart", "Browse 60+ samples")
  • Added trust signals (no telemetry, runs on your machine, open source)

Structure

  • Quick-start section moved higher in the page (reduce time to first action)
  • Use cases consolidated into a compact grid instead of repetitive card layout
  • New differentiator section to position against alternatives

Design

  • Added Sora as heading font via Google Fonts
  • Removed gradient text (replaced with solid purple-400)
  • Accessible scroll-triggered reveals (content visible by default, JS enhances)
  • Wider terminal demo in hero showing 3 request types (200, 429, 504)

Files changed

File What
src/pages/index.astro Full page rewrite (copy + structure)
src/styles/global.css Added --font-heading variable
src/layouts/Layout.astro Added Google Fonts preconnect + Sora stylesheet
PRODUCT.md Design context doc (brand register, principles)

Screenshot

TODO: Add screenshot of the landing page at desktop and mobile widths

waldekmastykarz and others added 12 commits June 25, 2026 09:15
- Rewrite hero subhead to lead with outcome, not product description
- Make primary CTA specific: 'Simulate your first API error' vs generic 'Get Started'
- Strengthen problem statement with visceral consequences (paged at 2AM, retry spirals)
- Rewrite all 6 use case headlines to sell benefits/outcomes, not features
- Remove repetitive uppercase tracked eyebrow labels from every section
- Improve 'Works with everything' to emphasize the differentiator (test your real app)
- Add trust signal: 'runs entirely on your machine, no telemetry required'
- Rewrite quick-start card titles as user-intent phrases
- Replace gradient text with solid purple-400 for hero and final CTA
- Reorder quick-start cards to lead with most compelling use case (error testing)
- Make final CTA match hero CTA for consistent conversion path

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Typography:
- Add Sora as heading font for distinctive, confident voice
- Apply font-heading class to all h1-h3 headings

Page structure (reordered for conversion):
- Hero → Problem → Quick Starts → Primary use case → Secondary use cases
  → Differentiator → Compact capabilities → Video → VS Code → Trust → CTA
- Move quick-start cards directly after problem statement (path to value)
- Promote resilience testing to full-width primary use case (h2)
- Consolidate rate-limiting, CI/CD, MCP into compact 3-column grid
- Reduce from 6 identical alternating sections to varied layouts

Visual hierarchy:
- Primary use case gets full-width h2 treatment (biggest impact)
- Secondary use cases (mocking, AI) get medium h3 with code demos
- Tertiary capabilities get text-only compact cards (no code blocks)
- Differentiator section gets ambient glow + positioning copy

Motion:
- Sections render visible by default (accessible baseline)
- JS adds .will-reveal class only when motion is allowed
- Proper prefers-reduced-motion: all animations disabled
- Easing changed to cubic-bezier(0.16, 1, 0.3, 1) (expo-out)
- Removed hero tagline animation step (tighter sequence)

Copy additions:
- Differentiator section: 'Not mocks. Not stubs. Not a test harness.'
- Quick-starts subhead: 'Pick a scenario. You'll be running in minutes.'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
'Your app works fine. Until the API doesn't.' — names the tension
immediately, triggers loss aversion, and creates an open loop that
pulls the reader into the subhead.

Also rework the problem statement section into a problem→solution
bridge: 'You test the happy path. Dev Proxy tests everything else.'
This avoids repeating the same emotional beat twice and moves the
narrative forward.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Load Sora via Google Fonts <link> for reliable weight delivery
  (self-hosted woff2 wasn't rendering bold weights)
- Use font-extrabold (800) + fluid clamp sizing for commanding presence
- Cap heading at 5.5rem to prevent awkward line wrapping
- Trim subhead to one focused sentence (less competition with headline)
- Remove broken self-hosted @font-face declaration

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The headline has emotional contrast (calm setup → sharp twist),
so the typography should perform that rhythm:

- Setup line ('Your app works fine.'): medium weight, smaller size,
  muted color — understated, confident, calm
- Punchline ('Until the API doesn't.'): extrabold, 2x size, purple —
  the twist hits hard

Each line has its own size constraint so neither wraps awkwardly.
Wider max-w-5xl container gives breathing room.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The typographic weight contrast made the setup line look like a
caption. The original worked because both lines were equally
commanding — differentiated only by color. Apply the same principle:
both extrabold, same responsive scale (stepped down one size to
accommodate longer text without wrapping).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace with periods or restructured sentences. Em-dashes read as
LLM-generated text.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Left side: headline + subhead + CTAs, left-aligned (no more wrapping)
- Right side: terminal demo, large and prominent with subtle shadow
- Terminal now shows 3 requests (200, 429, 504) for richer demonstration
- Grid layout at lg breakpoint, stacked on mobile
- Left-aligned text eliminates centering-related orphan/wrapping issues
- Terminal has more generous padding and spacing for readability
- Ambient glow repositioned to right side behind terminal
- max-w-7xl for wider composition that uses the viewport

The product is the hero. Show the terminal, not the brochure.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Split layout now activates at md (768px) instead of lg (1024px)
- Full-height hero only applied at lg+ (no dead space on tablets)
- Natural padding (py-16) on smaller viewports keeps content tight
- Remove unnecessary top padding from text column

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Center text + CTAs below md, left-align when split is active
- Bigger heading on mobile (text-5xl/text-6xl vs previous text-4xl)
- Subhead max-w-lg centered on mobile, left-aligned on desktop
- Terminal constrained to max-w-xl and centered when stacked
- No viewport requires special treatment to look correct

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
md:grid-cols-[1fr,1.2fr] is invalid Tailwind syntax — arbitrary
values use underscores for spaces. Fixed to md:grid-cols-[1fr_1.2fr].
This was preventing the two-column layout from ever activating.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The split layout was a failed experiment — it broke at common
viewport widths and added complexity without visual improvement.

Back to centered: headline, subhead, CTAs, terminal demo. Same
composition as the original that worked, with the improved copy
and a wider terminal showing 3 request types (200, 429, 504).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant