buildmymcpserver/apps/web/app/(marketing)/page.tsx

654 lines
26 KiB
TypeScript
Raw Normal View History

import {
GitHubIcon,
NotionIcon,
PostgresIcon,
RestIcon,
SalesforceCloudIcon,
StripeIcon,
} from '@/components/brand-icons';
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
import { HeroStepRotator } from '@/components/hero-step-rotator';
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
import { HeroVideo } from '@/components/hero-video';
import { JsonLd } from '@/components/json-ld';
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
import { ParticleHero } from '@/components/particle-hero';
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
import { PulseLink } from '@/components/pulse';
feat(web): restore tall hero + carousel slide + viewport-fixed scroll cue Three coordinated tweaks to the landing-page above-the-fold: 1. **Hero padding restored to py-14/sm:py-20/md:py-28** (was py-12/14/16). Compressing it for the scroll-cue position fight made the hero feel cramped and gave the ParticleHero background less room to breathe. With the cue moved out (see #3), there's no reason to shrink the hero. 2. **Step rotator switches to carousel-style horizontal slide.** The AnimatePresence transition was a fade+y-shift cross-fade — clean but sequential. Now the leaving card slides left out (x:-220) while the entering card slides right in (x:220→0), both coexisting in the same 3D-space and inheriting the same mouse-tilt. The container gets `min-h-[240px]` so the absolutely-positioned cards have layout to anchor to (claude_desktop_config.json is the tallest at 7 lines). Reduced-motion still gets the opacity-only cross-fade — sliding content sideways is exactly the kind of motion that preference is meant to suppress. 3. **`<ScrollCue>` extracted into its own client component**, fixed- positioned at viewport bottom (bottom-5) with a frosted pill style. Fades to opacity:0 once `window.scrollY > 80`, so it doesn't shadow the rest of the page. Lives next to `<section>` in page.tsx rather than inside the hero — that way it anchors to the loadscreen's natural bottom edge whether the hero is short or tall. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:11:42 +02:00
import { ScrollCue } from '@/components/scroll-cue';
import { TIERS } from '@/lib/pricing';
import { FAQ, faqJsonLd } from '@/lib/seo';
import { Activity, ChevronDown, Container, ShieldCheck } from 'lucide-react';
import Link from 'next/link';
import type { ComponentType } from 'react';
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
interface ExampleEntry {
title: string;
desc: string;
/** Brand logo component rendered inside the coloured chip. */
Icon: ComponentType<{ size?: number; className?: string }>;
/** Official brand colour for the chip background. */
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
bg: string;
/** Foreground colour the icon paints in. */
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
fg: string;
}
const EXAMPLES: ExampleEntry[] = [
{
title: 'PostgreSQL',
desc: 'Read-only access to your tables with schema introspection.',
Icon: PostgresIcon,
bg: '#336791',
fg: '#ffffff',
},
{
title: 'Salesforce',
desc: 'Query opportunities, accounts and leads from Claude.',
Icon: SalesforceCloudIcon,
bg: '#00a1e0',
fg: '#ffffff',
},
{
title: 'Notion',
desc: 'Search pages, read content, append blocks.',
Icon: NotionIcon,
bg: '#ffffff',
fg: '#0a0a0b',
},
{
title: 'GitHub',
desc: 'List issues, search code, post comments. Scoped to one repo.',
Icon: GitHubIcon,
bg: '#181717',
fg: '#ffffff',
},
{
title: 'Stripe',
desc: 'Look up charges, customers, refunds (read-only by default).',
Icon: StripeIcon,
bg: '#635bff',
fg: '#ffffff',
},
{
title: 'Custom REST',
desc: 'Wrap any HTTP API behind one prompt-defined tool surface.',
Icon: RestIcon,
bg: '#6366f1',
fg: '#ffffff',
},
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
];
// Honest marketplace preview data: template names + tool counts only. These
// mirror the first-party starter templates; no invented fork counts, no
// "verified" theatre — the frame is labelled as a preview of the card format.
const PREVIEW_TEMPLATES: { name: string; author: string; tools: number }[] = [
{ name: 'notion-search', author: 'core', tools: 2 },
{ name: 'github-issues', author: 'core', tools: 3 },
{ name: 'stripe-readonly', author: 'core', tools: 4 },
{ name: 'postgres-readonly', author: 'core', tools: 3 },
];
const MARKETPLACE_POINTS: { t: string; d: string }[] = [
{
t: 'Fork and own',
d: 'Start from a server someone already shipped. Fork it, paste your own credentials, deploy. No prompt required.',
},
{
t: 'Secrets never travel',
d: "A template carries the spec and generated code, never the author's API keys. You add your own on fork.",
},
{
t: 'Open from day one',
d: 'Publish a server you built and anyone can fork it. The marketplace is young — early templates set the standard.',
},
];
// Proof-by-specificity band: three claims a visitor can verify with one
// click instead of taking our word for it. Substitute for social proof
// until there is social proof.
const PROOF_POINTS: {
t: string;
d: string;
href: string;
linkLabel: string;
Icon: ComponentType<{ size?: number; className?: string }>;
}[] = [
{
t: 'OAuth 2.1 authorization server',
d: 'PKCE, Dynamic Client Registration and Resource Indicators (RFC 8707) in front of every server.',
href: '/docs/oauth',
linkLabel: 'Read the auth docs',
Icon: ShieldCheck,
},
{
t: 'Live system status',
d: 'Uptime and incident history, public. If a build queue slows down, you see it before we tell you.',
href: '/status',
linkLabel: 'Check status now',
Icon: Activity,
},
{
t: 'Per-server container isolation',
d: 'Every generated server runs in its own Docker container. Secrets AES-256-GCM encrypted at rest.',
href: '/security',
linkLabel: 'Security architecture',
Icon: Container,
},
];
const PIPELINE_STEPS: { n: string; t: string; d: string }[] = [
{
n: '01',
t: 'Describe your tool',
d: 'A sentence is enough. List your secrets and which APIs to call.',
},
{
n: '02',
t: 'We generate, check, deploy',
d: 'Claude writes the spec. We render TypeScript, run static checks, build a container, deploy to your subdomain.',
},
{
n: '03',
t: 'Install in your client',
d: 'Copy the snippet into Claude Desktop, Cursor or ChatGPT. OAuth flow on first use.',
},
];
/** Mono shell-comment section kicker: `## how_it_works` */
function Kicker({ children }: { children: string }) {
return <p className="kicker">## {children}</p>;
}
export default function Landing() {
const teaserTiers = TIERS.filter((t) => t.name === 'Hobby' || t.name === 'Pro');
return (
<>
{/* Hero left: copy + CTAs, right: cycling terminal tile. The WebGL
particle field sits behind at z-0 with pointer-events:none so the
CTAs stay interactive. */}
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
<section
className="relative flex items-center overflow-hidden border-b border-[--color-border]"
style={{ minHeight: 'calc(100svh - 3rem)' }}
>
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
<ParticleHero />
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
<div className="relative z-10 mx-auto grid w-full max-w-6xl gap-10 px-6 py-14 sm:py-20 md:grid-cols-[1.05fr_1fr] md:items-center md:gap-12">
<div className="min-w-0">
<h1 className="text-balance text-[36px] font-semibold leading-[1.04] tracking-[-0.03em] sm:text-[44px] md:text-[60px]">
Describe your tool.
<br />
We host the server.
<br />
<span className="text-[--color-fg-muted]">AI uses it.</span>
</h1>
<p className="mt-5 max-w-md text-[15px] leading-relaxed text-[--color-fg-muted] sm:text-[16px]">
From prompt to production MCP server in 60 seconds. OAuth 2.1, Streamable HTTP, ready
for Claude, Cursor and ChatGPT.
</p>
<div className="mt-8 flex flex-wrap items-center gap-3">
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
<PulseLink
href="/login"
className="btn-brand inline-flex h-11 items-center justify-center rounded-md px-5 text-[14px] font-medium"
>
Start building free
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
</PulseLink>
<PulseLink
href="#flow"
className="inline-flex h-11 items-center justify-center rounded-md border border-[--color-border] bg-[--color-bg-elevated] px-5 text-[14px] text-[--color-fg-muted] transition-colors hover:text-[--color-fg]"
>
See a live build
feat(web): glow-pulse on primary CTAs + hero fills full first viewport Two coordinated polish moves: 1. **<PulseLink> / <PulseButton>** — new `apps/web/components/pulse.tsx`. Click anywhere on a wrapped link or button and a small indigo dot detonates from the click point, scaling 1x→80x over 650ms before fading to transparent. Same visual language as the hero load-in glow — the click effectively says "this is the brand reaching back." The dot lives in a `pointer-events: none` overlay, so it never blocks the underlying navigation. `overflow-hidden + relative` are added to the host so the bloom stays inside the rounded shape. `glow-pulse` keyframe sits in globals.css next to the existing `pulse-dot` / `shimmer` / `fade-in` definitions; reduced-motion suppresses the animation to instant-opacity-0 so the click flow is preserved without the bloom. Wired into the highest-conversion CTAs only — the user explicitly asked "wo's Sinn macht": - Hero "Start building free" + "Read the docs" - Marketing header Login / Dashboard button - Dashboard header "+ New server" pill Deliberately NOT applied to dashboard nav links, logout, destructive buttons, form internals, carousel dots — pulse on every click would be noise. 2. **Hero fills 100svh − nav** (`min-height: calc(100svh - 3rem)`). `svh` (small viewport height) instead of `vh` so the hero doesn't jump when the mobile address bar hides/shows. The 3rem subtracts the sticky marketing nav (h-12 = 48px), so the hero ends right at the loadscreen's natural bottom edge. `flex items-center` plus the inner grid's existing `md:items-center` keep the content vertically centred inside the tall section. The ParticleHero background now has cinematic-scale room and the indigo radial-glow + dot-mask read as the dominant background motif — which is the effect the user loved at load-in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:20:25 +02:00
</PulseLink>
</div>
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
<div className="mt-8 flex flex-wrap gap-x-6 gap-y-2 text-[12px] text-[--color-fg-subtle]">
<span className="inline-flex items-center gap-1.5">
<span className="size-1.5 rounded-full bg-emerald-400" /> OAuth 2.1 + PKCE
</span>
<span className="inline-flex items-center gap-1.5">
<span className="size-1.5 rounded-full bg-emerald-400" /> Streamable HTTP
</span>
<span className="inline-flex items-center gap-1.5">
<span className="size-1.5 rounded-full bg-emerald-400" /> AES-256 secrets
</span>
<span className="inline-flex items-center gap-1.5">
<span className="size-1.5 rounded-full bg-emerald-400" /> Per-server isolation
</span>
</div>
</div>
<div className="relative min-w-0">
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
<HeroStepRotator />
</div>
</div>
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
</section>
feat(web): restore tall hero + carousel slide + viewport-fixed scroll cue Three coordinated tweaks to the landing-page above-the-fold: 1. **Hero padding restored to py-14/sm:py-20/md:py-28** (was py-12/14/16). Compressing it for the scroll-cue position fight made the hero feel cramped and gave the ParticleHero background less room to breathe. With the cue moved out (see #3), there's no reason to shrink the hero. 2. **Step rotator switches to carousel-style horizontal slide.** The AnimatePresence transition was a fade+y-shift cross-fade — clean but sequential. Now the leaving card slides left out (x:-220) while the entering card slides right in (x:220→0), both coexisting in the same 3D-space and inheriting the same mouse-tilt. The container gets `min-h-[240px]` so the absolutely-positioned cards have layout to anchor to (claude_desktop_config.json is the tallest at 7 lines). Reduced-motion still gets the opacity-only cross-fade — sliding content sideways is exactly the kind of motion that preference is meant to suppress. 3. **`<ScrollCue>` extracted into its own client component**, fixed- positioned at viewport bottom (bottom-5) with a frosted pill style. Fades to opacity:0 once `window.scrollY > 80`, so it doesn't shadow the rest of the page. Lives next to `<section>` in page.tsx rather than inside the hero — that way it anchors to the loadscreen's natural bottom edge whether the hero is short or tall. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:11:42 +02:00
<ScrollCue targetId="flow" />
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
{/* Flow video full-width edge-to-edge under the hero. Plays when
scrolled into view (see hero-video.tsx); preload=metadata keeps the
2.6 MB mp4 off the critical path on mobile. */}
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
<section
id="flow"
className="relative w-full overflow-hidden border-b border-[--color-border] bg-black"
>
<div className="relative aspect-video w-full">
feat(video): v10 hero video with mute toggle — voice + bg music Ships the long-form (71.5 s) hero video to the marketing /flow section along with the iteration trail of architectural visual fixes the owner worked through over the last sprint. ## Video composition (remotion/) Eight phases driven by the 71.47 s voice-over in `audio.mp3` plus the `Sub-bass Lullaby.wav` background music (ducked to 0.16 with fade in / fade out). Every scene was rebuilt for v10 with concrete fixes: - **HookScene** (12 s) — adds FloatingChaos overlay: a docker-compose excerpt, an oauth_callback.ts snippet, an .env file with a yellow squiggle warning ("in git history since v0.3.1"), and a live-ticking 502 retry toast. Tangle now reads as a developer's desktop right before they give up, not as four icons drifting. - **PromptScene** (12.2 s) — 6.5 s post-typing dead-zone replaced with the parse beat: three sequential highlights on the prompt text (MCP server / searches / Notion workspace), three chips below the input (intent / tool / secret → vault), three-stat summary panel (tools · 2, secrets · 1, targets · 3). At local frame 250 (≈ 21 s global, on the voice line "the prompt path and the secret path never cross") a mini two-rail diagram with an explicit X-marker ring lands, visualising the architectural promise the moment it's spoken. - **SecretsScene** (15.2 s) — kept the arrow-fork + AES-256 stamp + env-var injection beats; added the lock-snap flash at frame 66, pinned the vault at full opacity throughout, and added a dashed vault → container connector so the secret's provenance is visible. The "what the AI sees" panel is now 680 px wide with an eye icon, four corner viewfinder brackets around the prompt text, and three explicit denied lines (no secrets / no environment variables / no tokens). - **BuildScene** (7.2 s) — unchanged beats: streaming log, server card emerges with code + 🔒 NOTION_API_KEY slot pills, isolated- container caption, <60s countdown. - **IsolationScene** (14 s) — completely restructured. Orbit-and-dock chips that collided with the card and with the tokens-only badge are replaced by a clean vertical chip column at x=760: read-only filesystem · dropped capabilities · no new privileges · 512 MB memory cap · 0.5 CPU limit · ✓ your token only (last in green). A vault graphic now sits below the server card with a dashed arrow up into its env slot so the architecture story is complete in one frame. PKCE jargon removed: "OAuth 2.1 · PKCE" → "only your token gets in" with a small "oauth 2.1 · proof-key flow" subtitle for the curious. Handshake stages simplified to your client → verified → scoped token. Final settlement arrow in success-green curves from the scoped-token pill back into the card. - **LibraryScene** (7 s) — cards enlarged from 340×180 to 400×220 with 36 px gaps. The "templates carry code, not credentials" sub-caption was pulled (felt on-the-nose; the detached lock and empty NOTION_API_KEY=? slot carry the story visually). - **DiscoveryScene** (3 s) — the most-iterated scene. Earlier versions had a fake "1,200+ developers building" fork counter (pulled — solo-founder, hadn't earned). Replaced with a two-lane architecture diagram that visualises "no paths cross" literally: top lane prompt → AI → code, bottom lane vault → encrypted → env, both converging at the server box on the right. v10 refinements: all seven boxes visible from frame 0 (no late server arrival), a parallel glow tour walks across both lanes simultaneously, a dashed vertical divider with a "no shared node" chip pinned in the middle, and the closing line "One sentence in. Live server out." slides down from above and lands centred while the diagram fades to 0.12 opacity behind it — no overlap. - **LogoLockup** (1.7 s) — wordmark + fade-to-black for a clean loop seam. The Subtitle / CAPTIONS layer added in v7 was pulled wholesale — owner found the kinetic-typography overlay aggressive and noted that technical terms (PKCE etc.) created friction with no payoff. Scene visuals and voice now carry the whole story; the Subtitle component file is retained for possible future use. Render pipeline (`render:mp4` / `render:webm` / `render:poster` in remotion/package.json) is unchanged. The MP4 is post-processed to H.264 Main / yuv420p / TV-range with faststart + AAC audio. The WebM is re-encoded at VP9 CRF 38 / Opus 64k to stay under the 3 MB budget. Final artefacts in apps/web/public/videos/: 2.59 MB mp4, 2.99 MB webm, 62 KB poster. ## Web integration (apps/web/components/hero-video.tsx) New client component wraps the <video> element and pins a frosted- glass mute toggle bottom-right of the player. Why not native `controls`: the browser chrome fights the section's design vocabulary and we only need one affordance — unmute — so we render exactly that. The toggle's icon flips between VolumeX (currently muted) and Volume2 (currently unmuted), accent colour switches indigo when sound is on. Initial state is muted so autoplay still fires; on unmute we call .play() defensively because mobile Safari pauses on muted-property changes mid-playback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:31:10 +02:00
<HeroVideo />
feat(web): hero redesign — cycling step rotator + full-width video section Restructures the landing page above-the-fold into two distinct sections: 1. **Hero — left copy + cycling tile, no static stack of three blocks** New `<HeroStepRotator>` (Framer Motion client component) shows ONE tile centred in the column, cycling prompt.txt → build.log → claude_desktop_config.json every 3.5s. Auto-advance pauses on hover and exposes a 3-dot tablist so users can jump to any step. The active dot grows wide with an accent glow. Mouse interaction: spring-smoothed 3D tilt on rotateX/rotateY plus a radial glow that translates toward the cursor — both driven by motion values, so the transforms stay on the GPU compositor instead of re-rendering on every mousemove. `useReducedMotion()` strips the tilt + glow translation and collapses the page transition to an instant cross-fade (the rotation itself still advances — it's content, not decoration). Hero padding tightened (py-12/14/16 vs py-14/20/28) so the video section below is teased above the fold. New scroll cue ("see it run" + animated chevron) sits at the bottom of the hero, anchored to #flow. 2. **Flow video — full-width edge-to-edge under the hero (new section)** The hero.mp4 / hero.webm pair moves out of the "How it works" section into its own #flow section. No max-w wrapper — it spans the viewport with `w-full aspect-video`, so on a 1080p monitor the video gets the full 1920px width. Adds a subtle radial vignette so the black edges blend into the page chrome. 3. **"How it works" — now lean** Video removed (it's the flow section now). Just the three textual cards as supporting copy. Adds `framer-motion@11.18.2` to apps/web/package.json. Build passes typecheck + Next.js production build with no new warnings; LCP path is untouched since the rotator is client-hydrated after first paint and Framer Motion is tree-shaken to the components we import. Note: visitors with `prefers-reduced-motion: reduce` will still see the video's poster instead of autoplay — Chrome blocks the network fetch entirely for autoplay media when reduced-motion is set. The flow video remains visible for the rest, and the step rotator continues to cycle its content (with instant cross-fade instead of slide+scale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:05:28 +02:00
<div
aria-hidden
className="pointer-events-none absolute inset-0"
style={{
background:
'radial-gradient(ellipse at center, transparent 60%, rgba(10,10,11,0.55) 100%)',
}}
/>
</div>
</section>
{/* How it works three pipeline nodes joined by a gradient connector.
Desktop: horizontal line behind the numbered nodes. Mobile: the grid
stacks and each card keeps its own node, joined by a left rail. */}
<section id="how" className="border-b border-[--color-border] py-14 sm:py-20">
<div className="mx-auto max-w-6xl px-6">
feat(web): Remotion hero video — Section 2 (prompt → server → connect) New @bmm/video workspace at remotion/. Renders an 8s 1920×1080 H.264 + WebM + JPG poster sequence that visualises the three-step "How it works" pitch literally: - Beat 1 (0-2s): "Search our Notion workspace" word-by-word entrance with spring-in from below + brief indigo under-glow + monospace prompt.txt label. Blinking cursor bridges the loop seam. - Beat 2 (2-5s): each prompt word detonates into ~9 particles per word; particles drift, then magnetically converge onto target slots along a server schematic that strokes itself on. Scan-line sweep + corner labels (mcp-notion, OAuth 2.1, search_pages, get_page_content) sell that this is a real artefact, not a placeholder. - Beat 3 (5-8s): Claude Desktop client panel slides in from the right; a Bézier wire animates between server and client; three data-packet dots travel along the wire; 200-OK tag pops; green live-dot pulses on the server. Last 12 frames fade to black so frame 239 ≈ frame 0 and browser <video loop> has no visible seam. Brand palette is hard-coded in lib/colors.ts to match globals.css — keeps the Remotion bundle self-contained (no Tailwind import needed). springIn / softSpring / clampLerp / rand helpers in lib/easings.ts power the motion vocabulary. Concurrency=1 + yuv420p in the config gives a deterministic render that plays on every <video> tag. File sizes: hero.mp4 449 KB, hero.webm 258 KB, hero-poster.jpg 33 KB — all well under the 3 MB / 250 KB ceilings. Section 2 ("How it works") now opens with the video in a border-bordered aspect-video panel between the heading and the three existing cards. autoPlay+muted+loop+playsInline satisfies every mobile autoplay policy; motion-reduce:hidden swaps in the static poster for prefers-reduced-motion users. Scripts: - pnpm --filter @bmm/video render:all (mp4 + webm + poster) - pnpm --filter @bmm/video to-web (copy to apps/web/public/videos/) - pnpm --filter @bmm/video build (both, end-to-end) `to-web` is the script name because `publish` collides with pnpm's built-in npm-publish command which refused to run with an unclean tree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:57:08 +02:00
<div className="mb-10 max-w-2xl">
<Kicker>how_it_works</Kicker>
<h2 className="mt-3 text-[28px] font-semibold tracking-tight sm:text-[32px]">
Three steps. No JSON to write, no Docker to manage.
</h2>
</div>
feat(web): Remotion hero video — Section 2 (prompt → server → connect) New @bmm/video workspace at remotion/. Renders an 8s 1920×1080 H.264 + WebM + JPG poster sequence that visualises the three-step "How it works" pitch literally: - Beat 1 (0-2s): "Search our Notion workspace" word-by-word entrance with spring-in from below + brief indigo under-glow + monospace prompt.txt label. Blinking cursor bridges the loop seam. - Beat 2 (2-5s): each prompt word detonates into ~9 particles per word; particles drift, then magnetically converge onto target slots along a server schematic that strokes itself on. Scan-line sweep + corner labels (mcp-notion, OAuth 2.1, search_pages, get_page_content) sell that this is a real artefact, not a placeholder. - Beat 3 (5-8s): Claude Desktop client panel slides in from the right; a Bézier wire animates between server and client; three data-packet dots travel along the wire; 200-OK tag pops; green live-dot pulses on the server. Last 12 frames fade to black so frame 239 ≈ frame 0 and browser <video loop> has no visible seam. Brand palette is hard-coded in lib/colors.ts to match globals.css — keeps the Remotion bundle self-contained (no Tailwind import needed). springIn / softSpring / clampLerp / rand helpers in lib/easings.ts power the motion vocabulary. Concurrency=1 + yuv420p in the config gives a deterministic render that plays on every <video> tag. File sizes: hero.mp4 449 KB, hero.webm 258 KB, hero-poster.jpg 33 KB — all well under the 3 MB / 250 KB ceilings. Section 2 ("How it works") now opens with the video in a border-bordered aspect-video panel between the heading and the three existing cards. autoPlay+muted+loop+playsInline satisfies every mobile autoplay policy; motion-reduce:hidden swaps in the static poster for prefers-reduced-motion users. Scripts: - pnpm --filter @bmm/video render:all (mp4 + webm + poster) - pnpm --filter @bmm/video to-web (copy to apps/web/public/videos/) - pnpm --filter @bmm/video build (both, end-to-end) `to-web` is the script name because `publish` collides with pnpm's built-in npm-publish command which refused to run with an unclean tree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:57:08 +02:00
<div className="relative">
{/* Gradient connector — desktop only, sits behind the node row. */}
<div
aria-hidden
className="absolute left-0 right-0 top-[22px] hidden h-px md:block"
style={{ background: 'var(--gradient-brand)', opacity: 0.35 }}
/>
{/* Mobile left rail joining the stacked nodes. */}
<div
aria-hidden
className="absolute bottom-6 left-[22px] top-[22px] w-px md:hidden"
style={{ background: 'var(--gradient-brand)', opacity: 0.35 }}
/>
<div className="grid gap-8 md:grid-cols-3 md:gap-6">
{PIPELINE_STEPS.map((s) => (
<div key={s.n} className="relative flex gap-4 md:block">
<div
className="mono relative z-10 flex size-11 shrink-0 items-center justify-center rounded-full border border-[--color-border-strong] text-[12px] tracking-widest text-[--color-fg]"
style={{
background: 'var(--color-bg)',
boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.05)',
}}
>
{s.n}
</div>
<div className="min-w-0 md:mt-5">
<h3 className="text-[15px] font-semibold tracking-tight">{s.t}</h3>
<p className="mt-2 text-[13px] leading-relaxed text-[--color-fg-muted]">
{s.d}
</p>
</div>
</div>
))}
</div>
</div>
</div>
</section>
{/* Proof by specificity three verifiable claims, each one click from
its evidence. Replaces the old pseudo-logo row: no invented marks,
just a plain-text compatibility line. */}
<section className="border-b border-[--color-border] py-16 sm:py-24">
<div className="mx-auto max-w-6xl px-6">
<Kicker>verify_it_yourself</Kicker>
<h2 className="mt-3 max-w-2xl text-[28px] font-semibold leading-[1.1] tracking-tight sm:text-[32px]">
No testimonials yet we're new.
<br />
<span className="text-[--color-fg-muted]">So check the claims instead.</span>
</h2>
<div className="mt-10 grid gap-4 md:grid-cols-3">
{PROOF_POINTS.map((p) => {
const Icon = p.Icon;
return (
<Link
key={p.t}
href={p.href}
className="panel-raised group flex flex-col p-5 transition-colors hover:border-[--color-border-strong]"
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
>
<Icon size={20} className="text-[--color-accent]" />
<h3 className="mt-4 text-[15px] font-semibold tracking-tight">{p.t}</h3>
<p className="mt-2 flex-1 text-[13px] leading-relaxed text-[--color-fg-muted]">
{p.d}
</p>
<span className="mt-4 text-[13px] font-medium text-[--color-accent] transition-colors group-hover:text-[--color-fg]">
{p.linkLabel}
</span>
</Link>
);
})}
</div>
<p className="mt-10 text-center text-[13px] text-[--color-fg-subtle]">
Works with Claude Desktop, Cursor, ChatGPT, VS Code Copilot and Continue.dev anything
that speaks MCP.
</p>
</div>
</section>
{/* Use cases — brand-coloured integration grid. */}
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<section className="border-b border-[--color-border] py-20 sm:py-28">
<div className="mx-auto max-w-6xl px-6">
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<div className="mb-12 grid gap-6 md:grid-cols-[1fr_auto] md:items-end md:gap-12">
<div>
<Kicker>use_cases</Kicker>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<h2 className="mt-3 text-[32px] font-semibold leading-[1.1] tracking-tight sm:text-[40px]">
Wrap any HTTP API.
<br />
<span className="text-[--color-fg-muted]">In minutes.</span>
</h2>
</div>
<p className="max-w-xs text-[14px] leading-relaxed text-[--color-fg-muted]">
Ship integrations like these from one prompt each.
</p>
</div>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{EXAMPLES.map((e) => {
const Icon = e.Icon;
return (
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<div
key={e.title}
className="panel-raised group flex items-start gap-4 p-5 transition-colors hover:border-[--color-border-strong]"
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
>
<div
aria-hidden
className="flex size-12 shrink-0 items-center justify-center rounded-lg"
style={{
backgroundColor: e.bg,
color: e.fg,
}}
>
<Icon size={24} />
</div>
<div className="min-w-0">
<h3 className="text-[15px] font-semibold tracking-tight">{e.title}</h3>
<p className="mt-1.5 text-[13px] leading-relaxed text-[--color-fg-muted]">
{e.desc}
</p>
</div>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</div>
);
})}
</div>
</div>
</section>
{/* Marketplace split layout: selling points left, honest preview
frame right. */}
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<section className="border-b border-[--color-border] py-20 sm:py-28">
<div className="mx-auto grid max-w-6xl gap-14 px-6 md:grid-cols-[5fr_6fr] md:items-center md:gap-16">
<div>
<Kicker>marketplace</Kicker>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<h2 className="mt-3 text-[32px] font-semibold leading-[1.1] tracking-tight sm:text-[40px]">
Skip the prompt.
<br />
<span className="text-[--color-fg-muted]">Fork what works.</span>
</h2>
<p className="mt-5 max-w-md text-[14px] leading-relaxed text-[--color-fg-muted]">
The marketplace is a library of working MCP servers. Fork one, paste your credentials,
deploy. Or publish yours and let others build on it.
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</p>
<ul className="mt-8 space-y-5">
{MARKETPLACE_POINTS.map((p) => (
<li key={p.t} className="flex items-start gap-3">
<span
aria-hidden
className="mt-[7px] size-1.5 shrink-0 rounded-full bg-[--color-accent]"
/>
<div>
<h3 className="text-[14px] font-semibold tracking-tight">{p.t}</h3>
<p className="mt-1 text-[13px] leading-relaxed text-[--color-fg-muted]">
{p.d}
</p>
</div>
</li>
))}
</ul>
<PulseLink
href="/templates"
className="btn-brand mt-8 inline-flex h-11 items-center gap-2 rounded-md px-5 text-[14px] font-medium"
>
Browse the marketplace
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</PulseLink>
</div>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<MarketplacePreview />
</div>
</section>
{/* Pricing teaser Hobby + Pro only; the full matrix lives on
/pricing. Data is shared via lib/pricing.ts so it can't drift. */}
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<section id="pricing" className="border-b border-[--color-border] py-20 sm:py-28">
<div className="mx-auto max-w-4xl px-6">
<div className="mb-12 text-center">
<Kicker>pricing</Kicker>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<h2 className="mt-3 text-[32px] font-semibold leading-[1.1] tracking-tight sm:text-[40px]">
Pay for tool calls.
<br />
<span className="text-[--color-fg-muted]">Not for boilerplate.</span>
</h2>
</div>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<div className="grid gap-5 sm:grid-cols-2">
{teaserTiers.map((t) => {
const featured = Boolean(t.highlight);
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
return (
<div
key={t.name}
className={`relative flex flex-col gap-6 rounded-xl border p-6 ${
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
featured
? 'border-[--color-accent] bg-[--color-bg-elevated]'
: 'border-[--color-border] bg-[--color-bg-elevated]'
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
}`}
style={
featured
? {
boxShadow:
'0 0 0 4px rgba(99, 102, 241, 0.12), 0 24px 50px rgba(0, 0, 0, 0.35)',
}
: { boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.04)' }
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
}
>
{featured && (
<span
className="absolute -top-3 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full border border-[--color-accent] px-3 py-0.5 text-[10px] font-semibold uppercase tracking-[0.18em] text-[--color-accent]"
style={{ backgroundColor: 'var(--color-bg)' }}
>
Recommended
</span>
)}
<div>
<div className="text-[11px] font-medium uppercase tracking-[0.18em] text-[--color-fg-muted]">
{t.name}
</div>
<div className="mt-3 flex items-baseline gap-2">
<span className="text-[40px] font-semibold leading-none tracking-tight text-[--color-fg]">
{t.price}
</span>
<span className="text-[12px] text-[--color-fg-subtle]">{t.tag}</span>
</div>
<p className="mt-3 text-[13px] leading-relaxed text-[--color-fg-muted]">
{t.description}
</p>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</div>
<ul className="flex flex-1 flex-col gap-2.5 border-t border-[--color-border] pt-5 text-[13px] text-[--color-fg-muted]">
{t.features.map((f) => (
<li key={f} className="flex items-start gap-2.5">
<span
aria-hidden
className={`mt-[7px] size-1 shrink-0 rounded-full ${
featured ? 'bg-[--color-accent]' : 'bg-[--color-fg-subtle]'
}`}
/>
<span>{f}</span>
</li>
))}
</ul>
<Link
href={t.href}
className={`inline-flex h-10 items-center justify-center rounded-md px-4 text-[13px] font-medium transition-colors ${
featured
? 'btn-brand'
: 'border border-[--color-border] bg-[--color-bg-subtle] text-[--color-fg] hover:border-[--color-border-strong]'
}`}
>
{t.cta}
</Link>
</div>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
);
})}
</div>
<div className="mt-8 text-center">
<Link
href="/pricing"
className="text-[14px] font-medium text-[--color-accent] transition-colors hover:text-[--color-fg]"
>
See all plans Team, Enterprise
</Link>
</div>
</div>
</section>
{/* FAQ collapsible accordion using native <details>. Crawlers and
screen readers see the full Q+A in the HTML. */}
<section className="border-b border-[--color-border] py-14 sm:py-20">
<JsonLd data={faqJsonLd()} />
feat(web): mobile-fit hero tiles + voluminous calmer particle field + FAQ accordion Three coordinated polish items requested: 1. **Hero step-rotator tiles fit mobile without horizontal scroll.** The previous snippets contained a 50+ char `Live at https://notion-x9.mcp.buildmymcpserver.com` URL that overflowed the ~295 px text area on a 375 px viewport. Rewrote all three snippets to be naturally short — same product story, no full URLs. The <pre> drops `overflow-x-auto` and gains `whitespace-pre-wrap break-words` so any token that does exceed the column wraps gracefully instead of forcing a scrollbar. 2. **ParticleHero — more volumetric, slower, steadier at load-in.** The "stuttery / too fast" feedback came from two issues compounding: tiny dots (1.8 px on 256-tier, with 0.42 base alpha) gave the eye too few pixels to track between frames, so individual particles read as snapping rather than drifting; and the simplex-noise drift evolved at 0.08 time-scale with 0.045 velocity, fast enough that frame-to-frame deltas exceeded a tracked particle's diameter. Render uniforms tuned: - `uPointSize` 1.8 → 2.8 (256-tier), 2.4 → 3.6 (128-tier) - `uBaseAlpha` 0.42 → 0.60 Simulation shader tuned: - Drift noise time scale 0.08 → 0.045 (the most impactful single change — particles now move at half the previous speed) - Drift velocity magnitude 0.045 → 0.028 - Ring breathing noise time scale 0.35 → 0.22 - Ring polar-wave time scales 1.2 / 0.7 → 0.7 / 0.42 Net effect: same number of particles (65k) but each individually larger, brighter, and moving more slowly. The cumulative additive bloom is denser without the jitter that read as visual stutter. 3. **FAQ collapsed into a native `<details>` accordion.** Crawlers and screen readers still see every Q+A in the SSR'd HTML — `<details><summary>...</summary><p>answer</p></details>` is the standard semantic pattern for disclosure widgets. Users see one question at a time and expand on demand, which keeps the page from feeling like an endless wall of marketing text below the fold. Container narrowed `max-w-6xl` → `max-w-3xl` for accordion typography (long-form prose reads better single-column). The default WebKit disclosure-triangle marker is suppressed with `list-none` + `[&_summary::-webkit-details-marker]:hidden`, and a `lucide-react` `ChevronDown` icon rotates 180° via `group-open:rotate-180` to indicate state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:35:03 +02:00
<div className="mx-auto max-w-3xl px-6">
<Kicker>faq</Kicker>
<h2 className="mt-3 text-[28px] font-semibold tracking-tight">
Questions, answered straight.
</h2>
feat(web): mobile-fit hero tiles + voluminous calmer particle field + FAQ accordion Three coordinated polish items requested: 1. **Hero step-rotator tiles fit mobile without horizontal scroll.** The previous snippets contained a 50+ char `Live at https://notion-x9.mcp.buildmymcpserver.com` URL that overflowed the ~295 px text area on a 375 px viewport. Rewrote all three snippets to be naturally short — same product story, no full URLs. The <pre> drops `overflow-x-auto` and gains `whitespace-pre-wrap break-words` so any token that does exceed the column wraps gracefully instead of forcing a scrollbar. 2. **ParticleHero — more volumetric, slower, steadier at load-in.** The "stuttery / too fast" feedback came from two issues compounding: tiny dots (1.8 px on 256-tier, with 0.42 base alpha) gave the eye too few pixels to track between frames, so individual particles read as snapping rather than drifting; and the simplex-noise drift evolved at 0.08 time-scale with 0.045 velocity, fast enough that frame-to-frame deltas exceeded a tracked particle's diameter. Render uniforms tuned: - `uPointSize` 1.8 → 2.8 (256-tier), 2.4 → 3.6 (128-tier) - `uBaseAlpha` 0.42 → 0.60 Simulation shader tuned: - Drift noise time scale 0.08 → 0.045 (the most impactful single change — particles now move at half the previous speed) - Drift velocity magnitude 0.045 → 0.028 - Ring breathing noise time scale 0.35 → 0.22 - Ring polar-wave time scales 1.2 / 0.7 → 0.7 / 0.42 Net effect: same number of particles (65k) but each individually larger, brighter, and moving more slowly. The cumulative additive bloom is denser without the jitter that read as visual stutter. 3. **FAQ collapsed into a native `<details>` accordion.** Crawlers and screen readers still see every Q+A in the SSR'd HTML — `<details><summary>...</summary><p>answer</p></details>` is the standard semantic pattern for disclosure widgets. Users see one question at a time and expand on demand, which keeps the page from feeling like an endless wall of marketing text below the fold. Container narrowed `max-w-6xl` → `max-w-3xl` for accordion typography (long-form prose reads better single-column). The default WebKit disclosure-triangle marker is suppressed with `list-none` + `[&_summary::-webkit-details-marker]:hidden`, and a `lucide-react` `ChevronDown` icon rotates 180° via `group-open:rotate-180` to indicate state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:35:03 +02:00
<div className="mt-8 border-t border-[--color-border]">
{FAQ.map((f) => (
feat(web): mobile-fit hero tiles + voluminous calmer particle field + FAQ accordion Three coordinated polish items requested: 1. **Hero step-rotator tiles fit mobile without horizontal scroll.** The previous snippets contained a 50+ char `Live at https://notion-x9.mcp.buildmymcpserver.com` URL that overflowed the ~295 px text area on a 375 px viewport. Rewrote all three snippets to be naturally short — same product story, no full URLs. The <pre> drops `overflow-x-auto` and gains `whitespace-pre-wrap break-words` so any token that does exceed the column wraps gracefully instead of forcing a scrollbar. 2. **ParticleHero — more volumetric, slower, steadier at load-in.** The "stuttery / too fast" feedback came from two issues compounding: tiny dots (1.8 px on 256-tier, with 0.42 base alpha) gave the eye too few pixels to track between frames, so individual particles read as snapping rather than drifting; and the simplex-noise drift evolved at 0.08 time-scale with 0.045 velocity, fast enough that frame-to-frame deltas exceeded a tracked particle's diameter. Render uniforms tuned: - `uPointSize` 1.8 → 2.8 (256-tier), 2.4 → 3.6 (128-tier) - `uBaseAlpha` 0.42 → 0.60 Simulation shader tuned: - Drift noise time scale 0.08 → 0.045 (the most impactful single change — particles now move at half the previous speed) - Drift velocity magnitude 0.045 → 0.028 - Ring breathing noise time scale 0.35 → 0.22 - Ring polar-wave time scales 1.2 / 0.7 → 0.7 / 0.42 Net effect: same number of particles (65k) but each individually larger, brighter, and moving more slowly. The cumulative additive bloom is denser without the jitter that read as visual stutter. 3. **FAQ collapsed into a native `<details>` accordion.** Crawlers and screen readers still see every Q+A in the SSR'd HTML — `<details><summary>...</summary><p>answer</p></details>` is the standard semantic pattern for disclosure widgets. Users see one question at a time and expand on demand, which keeps the page from feeling like an endless wall of marketing text below the fold. Container narrowed `max-w-6xl` → `max-w-3xl` for accordion typography (long-form prose reads better single-column). The default WebKit disclosure-triangle marker is suppressed with `list-none` + `[&_summary::-webkit-details-marker]:hidden`, and a `lucide-react` `ChevronDown` icon rotates 180° via `group-open:rotate-180` to indicate state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:35:03 +02:00
<details
key={f.q}
className="group border-b border-[--color-border] [&_summary::-webkit-details-marker]:hidden"
>
<summary className="flex cursor-pointer list-none items-center justify-between gap-4 py-4 text-[14.5px] font-semibold tracking-tight text-[--color-fg] transition-colors hover:text-[--color-accent]">
<span>{f.q}</span>
<ChevronDown
size={16}
className="shrink-0 text-[--color-fg-subtle] transition-transform duration-200 group-open:rotate-180 group-open:text-[--color-accent]"
/>
</summary>
<p className="pb-5 pr-8 text-[13.5px] leading-relaxed text-[--color-fg-muted]">
{f.a}
</p>
</details>
))}
</div>
</div>
</section>
{/* Final CTA the page must not end on FAQ. Gradient top border keeps
the brand mark scarce but present at the exit point. */}
<section className="relative py-20 sm:py-28">
<div
aria-hidden
className="absolute inset-x-0 top-0 h-px"
style={{ background: 'var(--gradient-brand)', opacity: 0.6 }}
/>
<div className="mx-auto max-w-3xl px-6 text-center">
<h2 className="text-balance text-[32px] font-semibold leading-[1.1] tracking-tight sm:text-[44px]">
Your first server is <span className="text-brand-gradient">one prompt away</span>.
</h2>
<p className="mx-auto mt-4 max-w-md text-[14.5px] leading-relaxed text-[--color-fg-muted]">
Free tier, full source export, no lock-in. If it doesn't work for you, take the
TypeScript and leave.
</p>
<div className="mt-8 flex flex-wrap items-center justify-center gap-3">
<PulseLink
href="/login"
className="btn-brand inline-flex h-11 items-center justify-center rounded-md px-6 text-[14px] font-medium"
>
Start building free
</PulseLink>
<PulseLink
href="/docs"
className="inline-flex h-11 items-center justify-center rounded-md border border-[--color-border] bg-[--color-bg-elevated] px-6 text-[14px] text-[--color-fg-muted] transition-colors hover:text-[--color-fg]"
>
Read the docs
</PulseLink>
</div>
</div>
</section>
</>
);
}
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
/**
* Honest marketplace preview.
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
*
* Static, server-rendered browser frame showing what a template card looks
* like. Card data mirrors the first-party starter templates names, author
* and tool counts only. No fork counts, no "verified" badges: the frame is
* explicitly labelled a preview, not live marketplace traffic.
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
*/
function MarketplacePreview() {
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
return (
<div
className="overflow-hidden rounded-xl border border-[--color-border-strong] bg-[--color-bg-elevated]"
style={{
boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.04), 0 24px 60px rgba(0, 0, 0, 0.45)',
}}
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
>
{/* Browser chrome */}
<div className="flex items-center gap-3 border-b border-[--color-border] bg-[--color-bg-subtle] px-4 py-3">
<div className="flex gap-1.5">
<span className="size-2.5 rounded-full bg-zinc-700" />
<span className="size-2.5 rounded-full bg-zinc-700" />
<span className="size-2.5 rounded-full bg-zinc-700" />
</div>
<div className="mono flex-1 truncate rounded-md border border-[--color-border] bg-[--color-bg] px-3 py-1 text-[11px] text-[--color-fg-subtle]">
buildmymcpserver.com/templates
</div>
</div>
{/* Toolbar inside the page chrome */}
<div className="flex items-center justify-between gap-4 border-b border-[--color-border] px-5 py-3">
<span className="text-[13px] font-semibold tracking-tight text-[--color-fg]">
Templates
</span>
<span className="mono text-[10px] uppercase tracking-wider text-[--color-fg-subtle]">
preview
</span>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</div>
{/* Template cards grid */}
<div className="grid gap-3 p-4 sm:grid-cols-2">
{PREVIEW_TEMPLATES.map((t) => (
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<div
key={t.name}
className="rounded-md border border-[--color-border] bg-[--color-bg-subtle] p-4 transition-colors hover:border-[--color-accent]/40"
>
<div className="min-w-0">
<div className="mono truncate text-[13px] font-semibold tracking-tight text-[--color-fg]">
{t.name}
</div>
<div className="mt-1 flex items-center gap-1.5">
<span className="mono text-[10px] uppercase tracking-wider text-[--color-fg-subtle]">
{t.author}
</span>
<span className="inline-flex items-center rounded-full border border-[--color-border-strong] px-1.5 py-px text-[9.5px] font-medium uppercase tracking-wider text-[--color-fg-subtle]">
template
</span>
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
</div>
</div>
<div className="mt-4 text-[11px] text-[--color-fg-subtle]">
feat(marketing): give each below-the-fold section its own visual archetype Owner: "die sektionen unter dem video sehen viel zu ähnlich aus — das kannst du besser." Correct — every section was the same `panel + 3-col grid` pattern, no page rhythm. Each section now reads as its own type of moment: - **Clients** ("Connects everywhere your AI lives"): typographic logo row, no panels. Each client carries a small mono mark in a 7×7 box (C, ⌘, ✦, <>, →) plus a 17px tracking-tight wordmark. Group hover flips the mark and label to the accent colour so the row reads as interactive trust signal, not a wall of text. Generous py-20/24 spacing — this is a beat between sections, not a feature card. - **Examples** ("Wrap any HTTP API. In minutes."): asymmetric 2-col header (h2 left, supporting copy right) over a 3-col card grid where each integration carries a coloured 48×48 brand mark — Postgres `#336791`, Salesforce `#00a1e0`, Notion black-on-white, GitHub `#181717`, Stripe `#635bff`, Custom REST `#6366f1`. The marks give each card its own visual identity, breaking the uniform-card pattern. h2 sized 32/40 px (was a flat 28 px). - **Marketplace** ("Skip the prompt. Fork what works."): split layout. Left column: eyebrow + headline + supporting paragraph + bullet list of the three selling points (no longer equal-weight cards) + PulseLink CTA. Right column: new `MarketplaceMock` — a faux-browser frame containing four realistic template cards (notion-search / github-issues / stripe-readonly / linear-tasks) with author chips, ✓ verified badges, tool counts, and a fork glyph. Visitor SEES the marketplace instead of reading copy about it. - **Pricing** ("Pay for tool calls. Not for boilerplate."): 4-card row but Pro is featured — indigo border, indigo glow shadow `0 0 0 4px rgba(99,102,241,0.12)`, "RECOMMENDED" pill floating at -top-3, and accent-coloured feature bullets. Other tiers stay calm so the eye lands on Pro first. Price typography enlarged from 26 px to 40 px so prices read as the headline of each card. Spacing rhythm: every section is now py-20/28 sm:py-24/28 (was py-12-14 sm:py-16-20) — gives the below-the-fold the breathing room it needed; the page no longer feels like a stack of crammed cards. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:36:06 +02:00
<span className="mono">{t.tools} tools</span>
</div>
</div>
))}
</div>
</div>
);
}