Add /go/ask-supabase-select Select 2026 recap page (#50889)

## Problem

Attendees at Supabase Select 2026 need a quick, linkable page that
recaps what shipped and points them to the right next step, whether
that's a theme blog post, a solution page, or the full features
directory.

## Solution

Added `/go/ask-supabase-select` using the go-page system (`GoPageInput`
config, no bespoke React):

- **Hero**: "Build in an instant. Scale to infinity." with a "Read the
Recap" CTA
- **Our announcements**: three theme cards (Build anything, Scale
without limits, Operate with confidence), each with a blurb sourced from
the drafted Select 2026 theme blog posts and a CTA to that post
- **Explore Supabase for your team**: a 2x2 grid of solution cards (AI
Builders, Startups, Developers, Enterprise), each fully clickable to its
solutions page
- **Supabase features**: closing CTA out to `/features`

Also adds `whitespace-pre-line` support to the shared go-page
`HeroSection` component so a hero description can wrap onto a second
line when the config string includes `\n`. This is additive and doesn't
change rendering for existing `/go` pages that don't use a line break.

Note: the "Read the Build/Scale/Operate Blog" and "Read the Recap" CTAs
currently point to `/docs` as a placeholder — the real blog posts are
still in progress and will be swapped in once published.

## Review instructions

1. Run `pnpm --filter www dev` and visit
`http://localhost:3000/go/ask-supabase-select`.
2. Confirm the three announcement cards, the four solution cards
(hover/click highlight, no button chrome), and the closing features CTA
all render and link correctly.

## Checklist

- [x] I have read CONTRIBUTING.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added the “Ask Supabase” landing page, with product resources,
documentation links, team-solution cards, and a blog post marked as
coming soon.
* **Improvements**
* Hero descriptions now preserve line breaks for clearer text
presentation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Wendie Cheung <wendie.cheung@supabase.io>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
authored and GitHub committed 2026-09-28 16:53:30 +10:00
1 parent b10511052d
commit c75d87d5ef
3 files changed
+156 -1

No files matched your search

+2
View File
@@ -29,6 +29,7 @@ import stripeMeetingScheduler from './events/stripe-sessions-2026/meeting-schedu
import stripeParty from './events/stripe-sessions-2026/party'
import vercelShipSydneyContest from './events/vercel-ship-sydney-2026/contest'
import vercelShipSydneyContestThankYou from './events/vercel-ship-sydney-2026/contest-thank-you'
import askSupabaseSelect from './lead-gen/ask-supabase-select'
import awsActivateOffer from './lead-gen/aws-activate-offer'
import exampleLeadGen from './lead-gen/example-lead-gen'
import amoe from './legal/amoe'
@@ -40,6 +41,7 @@ import supabasePipelinesNewDestinationsThankYou from './pre-release/supabase-pip
import supabaseStripeProjects from './stripe-projects/supabase-stripe-projects'
const pages: GoPageInput[] = [
askSupabaseSelect, // maintain forever
awsActivateOffer, // maintain forever
exampleLeadGen, // sample lead gen page
byocEarlyAccess, // maintain until PM says to remove
@@ -0,0 +1,153 @@
import {
BotIcon,
Building2Icon,
Code2Icon,
Hammer,
Maximize2,
ShieldCheck,
TrendingUpIcon,
} from 'lucide-react'
import type { GoPageInput } from 'marketing'
import Link from 'next/link'
import { Button } from 'ui'
type Theme = {
name: string
description: string
cta: { label: string; href: string }
icon: typeof Hammer
}
const themes: Theme[] = [
{
name: 'Build anything',
description:
"Your agent sets up the backend from code, your users' agents work with your app through its own MCP server, and long-running tasks run in Supabase Compute.",
cta: { label: 'Read the Build Blog', href: '/docs' },
icon: Hammer,
},
{
name: 'Scale without limits',
description:
'The app your agent built in minutes stays on the same Postgres, from prototype to petabyte.',
cta: { label: 'Read the Scale Blog', href: '/docs' },
icon: Maximize2,
},
{
name: 'Operate with confidence',
description:
'Your agent finds the problem, tests the fix, and reports what it found. You decide what ships.',
cta: { label: 'Read the Operate Blog', href: '/docs' },
icon: ShieldCheck,
},
]
const solutions = [
{
name: 'AI Builders',
description:
'Ship AI-powered apps with a Postgres backend built for agents. Your users get one integrated backend, so you spend time building instead of managing infrastructure.',
href: '/solutions/ai-builders',
icon: BotIcon,
},
{
name: 'Startups',
description:
'Move fast on a backend that scales with you. Spend your time on the product, not on managing infrastructure.',
href: '/solutions/startups',
icon: TrendingUpIcon,
},
{
name: 'Developers',
description:
'Get everything you need to build a backend, in one place. Database, Auth, Storage, and Realtime all run on the same Postgres platform, so you write less glue code.',
href: '/solutions/developers',
icon: Code2Icon,
},
{
name: 'Enterprise',
description:
'Run Supabase at scale with the security and support your team needs. Teams like GitHub and PwC trust Supabase to run their most important workloads.',
href: '/solutions/enterprise',
icon: Building2Icon,
},
]
const page: GoPageInput = {
template: 'lead-gen',
slug: 'ask-supabase-select',
metadata: {
title: 'Ask Supabase: Select 2026 announcements',
description:
'Catch up on the product announcements from Supabase Select 2026, plus where to go next for your team.',
},
hero: {
title: 'Build in an instant. Scale to infinity.',
subtitle: 'Ask Supabase',
description: 'Questions about what shipped?\nFind the Ask Supabase team on the show floor.',
ctas: [
{
label: 'Read the Recap',
href: '/docs',
variant: 'secondary',
},
],
},
sections: [
{
type: 'three-column',
title: 'Our announcements',
description: '20+ announcements, catch up on every single one.',
children: (
<>
{themes.map((theme) => (
<div
key={theme.name}
className="flex flex-col gap-6 rounded-lg border border-muted p-8"
>
<theme.icon className="h-6 w-6 stroke-brand-default" strokeWidth={1.5} />
<h3 className="text-lg text-foreground">{theme.name}</h3>
<p className="text-sm text-foreground-light">{theme.description}</p>
<Button asChild size="small" variant="primary" className="self-center mt-auto">
<Link href={theme.cta.href}>{theme.cta.label}</Link>
</Button>
</div>
))}
</>
),
},
{
type: 'two-column',
title: 'Explore Supabase for your team',
children: (
<>
{solutions.map((solution) => (
<Link
key={solution.name}
href={solution.href}
className="flex flex-col gap-2 rounded-lg border border-muted p-4 transition-colors hover:border-foreground-muted hover:bg-surface-100 active:bg-surface-200"
>
<solution.icon className="h-5 w-5 stroke-brand-default" strokeWidth={1.5} />
<h3 className="text-base text-foreground">{solution.name}</h3>
<p className="text-sm text-foreground-lighter">{solution.description}</p>
</Link>
))}
</>
),
},
{
type: 'single-column',
title: 'Supabase features',
description: 'Everything you need to build and ship your next project.',
children: (
<div className="flex justify-center">
<Button asChild size="medium" variant="primary">
<Link href="/features">Explore all the latest features</Link>
</Button>
</div>
),
},
],
}
export default page
@@ -43,7 +43,7 @@ export default function HeroSection({
{section.description && (
<p
className={cn(
'text-lg leading-relaxed text-foreground-light text-pretty',
'text-lg leading-relaxed text-foreground-light text-pretty whitespace-pre-line',
!hasMedia && 'md:text-xl md:text-foreground max-w-2xl'
)}
>