mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
Added go pages for several ancillary events at Supabase Select (#46879)
## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Added landing pages for some events <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Launched three Supabase Select 2026 event pages (Partner Day, VIP Dinner, VIP Experience) with RSVP flows, agendas, host details, and thank-you confirmations. * **Updates** * RSVP forms now support per-form CRM mapping and explicit field exclusions for HubSpot. * Site index updated to include the new event pages. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: shaziya <99940835+shaziyabandukia@users.noreply.github.com>
This commit is contained in:
1 parent
e26dc700e4
commit
68a7e45aca
11 files changed
+773
No files matched your search
@@ -0,0 +1,34 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Link from 'next/link'
|
||||
import { Button } from 'ui'
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'thank-you',
|
||||
slug: 'select-2026/partner-day/thank-you',
|
||||
metadata: {
|
||||
title: "You're confirmed | Supabase Partner Day",
|
||||
description:
|
||||
'Your RSVP for Supabase Partner Day in San Francisco on October 1, 2026 has been confirmed. We look forward to seeing you.',
|
||||
},
|
||||
hero: {
|
||||
title: "You're confirmed",
|
||||
description:
|
||||
"We'll see you at Supabase Partner Day in San Francisco on October 1, 2026. We're looking forward to it.",
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'In the meantime',
|
||||
description: 'Learn more about what we are building at Supabase.',
|
||||
children: (
|
||||
<div className="flex items-center justify-center gap-4">
|
||||
<Button asChild type="default" size="small">
|
||||
<Link href="https://supabase.com">Visit supabase.com</Link>
|
||||
</Button>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -0,0 +1,241 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
|
||||
const agenda: { time: string; session: string; notes?: string }[] = [
|
||||
{
|
||||
time: '2:00 - 2:30pm',
|
||||
session: 'Arrival + light snacks',
|
||||
notes: 'Casual opportunity to meet your fellow partners',
|
||||
},
|
||||
{
|
||||
time: '2:30 - 2:45pm',
|
||||
session: 'Welcome',
|
||||
notes: 'Ecosystem momentum and why partners are so critical to the success of Supabase.',
|
||||
},
|
||||
{
|
||||
time: '2:45 - 3:15pm',
|
||||
session: 'Business update + Roadmap preview',
|
||||
notes: 'An early look at what\u2019s coming at Select',
|
||||
},
|
||||
{
|
||||
time: '3:15 - 3:45pm',
|
||||
session: 'Partner demos / \u201cwins\u201d',
|
||||
notes: 'Demos by some partners on what they\u2019ve built / building.',
|
||||
},
|
||||
{
|
||||
time: '3:45 - 4:15pm',
|
||||
session: 'Partner panel',
|
||||
notes: 'Challenges and opportunities for partners in the Supabase ecosystem.',
|
||||
},
|
||||
{
|
||||
time: '4:15 - 4:30pm',
|
||||
session: 'Ecosystem announcements roundup + partner awards',
|
||||
notes: 'Celebrate the organizations that have delivered innovative results through the year.',
|
||||
},
|
||||
{
|
||||
time: '4:30pm and beyond',
|
||||
session: 'Happy hour',
|
||||
},
|
||||
]
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'lead-gen',
|
||||
slug: 'select-2026/partner-day',
|
||||
metadata: {
|
||||
title: 'Partner Day | Supabase Select 2026',
|
||||
description:
|
||||
'Join the Supabase partner community for an afternoon of business updates, partner demos, panels, and ecosystem announcements, followed by a happy hour.',
|
||||
},
|
||||
hero: {
|
||||
title: 'Supabase Partner Day',
|
||||
subtitle: 'Celebrating the Supabase ecosystem',
|
||||
description:
|
||||
'Spend the afternoon with the Supabase team and fellow partners. Hear a business update and roadmap preview, watch lightning demos of what partners are building, join a partner panel, and celebrate the latest ecosystem announcements and partner awards -- capped off with a happy hour.',
|
||||
ctas: [
|
||||
{
|
||||
label: 'Reserve your spot',
|
||||
href: '#rsvp',
|
||||
variant: 'primary',
|
||||
},
|
||||
],
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Details',
|
||||
children: (
|
||||
<div className="flex flex-col items-center gap-2 text-foreground-light">
|
||||
<p className="text-lg font-medium text-foreground">Date</p>
|
||||
<p>October 1, 2026</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Location</p>
|
||||
<p>San Francisco, CA</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Schedule</p>
|
||||
<p>2:00 PM — Arrival and light snacks</p>
|
||||
<p>4:30 PM — Happy hour</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Agenda',
|
||||
children: (
|
||||
<div className="border border-muted rounded-xl overflow-hidden text-left">
|
||||
<table className="w-full border-collapse text-sm">
|
||||
<thead>
|
||||
<tr className="bg-surface-100 text-foreground">
|
||||
<th className="w-40 align-top p-4 font-medium border-b border-muted">Time</th>
|
||||
<th className="align-top p-4 font-medium border-b border-muted">Session</th>
|
||||
<th className="align-top p-4 font-medium border-b border-muted">Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{agenda.map((item, index) => (
|
||||
<tr key={item.time} className={index > 0 ? 'border-t border-muted' : undefined}>
|
||||
<td className="w-40 align-top p-4 font-medium text-foreground whitespace-nowrap">
|
||||
{item.time}
|
||||
</td>
|
||||
<td className="align-top p-4 text-foreground">{item.session}</td>
|
||||
<td className="align-top p-4 text-foreground-light">{item.notes ?? ''}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'feature-grid',
|
||||
title: "What you'll gain",
|
||||
columns: 3,
|
||||
items: [
|
||||
{
|
||||
title: 'Strengthen key relationships',
|
||||
description:
|
||||
"Join Supabase's inaugural Partner Summit and build deeper connections with the Supabase team and the wider partner community in one room.",
|
||||
},
|
||||
{
|
||||
title: 'Get recognized for your work',
|
||||
description:
|
||||
'Top-performing partners are celebrated with Partner Awards, recognizing your impact across product integrations and go-to-market.',
|
||||
},
|
||||
{
|
||||
title: 'See where Supabase is heading',
|
||||
description:
|
||||
'Get a business update and an early look at the product roadmap, giving you forward-looking context to plan your own bets.',
|
||||
},
|
||||
{
|
||||
title: 'Unlock new opportunities',
|
||||
description:
|
||||
'Be first to hear about new partner programs, partner benefits, and product integration opportunities you can take advantage of.',
|
||||
},
|
||||
{
|
||||
title: 'Shape the partnership',
|
||||
description:
|
||||
"Meet the team in person to share what's working, surface points of friction, and give feedback that directly informs how we collaborate.",
|
||||
},
|
||||
{
|
||||
title: 'Grow your visibility',
|
||||
description:
|
||||
"Be part of the partner ecosystem spotlight and get featured across Supabase's social channels.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'rsvp',
|
||||
title: 'Reserve your spot',
|
||||
description: "Space is limited. Let us know you're coming.",
|
||||
fields: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'first_name',
|
||||
label: 'First Name',
|
||||
placeholder: 'First Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'last_name',
|
||||
label: 'Last Name',
|
||||
placeholder: 'Last Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
name: 'email_address',
|
||||
label: 'Email',
|
||||
placeholder: 'Work email',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'company_name',
|
||||
label: 'Company',
|
||||
placeholder: 'ACME, Inc.',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'job_title',
|
||||
label: 'Job Title',
|
||||
placeholder: 'Head of Partnerships',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'phone_number',
|
||||
label: 'Phone Number',
|
||||
placeholder: '+1 212 555 1212',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'attending',
|
||||
label: 'Are you attending Select 2026?',
|
||||
placeholder: 'Select an option',
|
||||
required: true,
|
||||
options: [
|
||||
{ label: 'Yes', value: 'Yes' },
|
||||
{ label: 'No', value: 'No' },
|
||||
],
|
||||
},
|
||||
],
|
||||
submitLabel: 'Confirm RSVP',
|
||||
successRedirect: '/go/select-2026/partner-day/thank-you',
|
||||
disclaimer:
|
||||
'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
|
||||
crm: {
|
||||
hubspot: {
|
||||
formGuid: 'a6e8cf87-5fd0-4ed0-acce-60e37447fb23',
|
||||
fieldMap: {
|
||||
first_name: 'firstname',
|
||||
last_name: 'lastname',
|
||||
email_address: 'email',
|
||||
company_name: 'company',
|
||||
job_title: 'jobtitle',
|
||||
phone_number: 'phone',
|
||||
},
|
||||
// `attending` is a Notion-only field — keep it out of the HubSpot payload.
|
||||
excludeFields: ['attending'],
|
||||
consent:
|
||||
'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
|
||||
},
|
||||
notion: {
|
||||
database_id: '37d5004b775f80e48618c7ac1013c889',
|
||||
columnMap: {
|
||||
first_name: 'First Name',
|
||||
last_name: 'Last Name',
|
||||
email_address: 'Email',
|
||||
company_name: 'Company',
|
||||
job_title: 'Job Title',
|
||||
phone_number: 'Phone Number',
|
||||
attending: 'Attending',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Link from 'next/link'
|
||||
import { Button } from 'ui'
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'thank-you',
|
||||
slug: 'select-2026/vip-dinner/thank-you',
|
||||
metadata: {
|
||||
title: "You're confirmed | Supabase VIP Dinner",
|
||||
description:
|
||||
'Your RSVP for the Supabase VIP dinner at Flour + Water in San Francisco on October 1, 2026 has been confirmed. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM.',
|
||||
},
|
||||
hero: {
|
||||
title: "You're confirmed",
|
||||
description:
|
||||
"We'll see you at Flour + Water in San Francisco on October 1, 2026. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM. We look forward to seeing you.",
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'In the meantime',
|
||||
description: 'Learn more about what we are building at Supabase.',
|
||||
children: (
|
||||
<div className="flex items-center justify-center gap-4">
|
||||
<Button asChild type="default" size="small">
|
||||
<Link href="https://supabase.com">Visit supabase.com</Link>
|
||||
</Button>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -0,0 +1,194 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Image from 'next/image'
|
||||
import { cn } from 'ui'
|
||||
|
||||
import authors from '@/lib/authors.json'
|
||||
|
||||
const sugu = authors.find((a) => a.author_id === 'sugu_sougoumarane')
|
||||
const paul = authors.find((a) => a.author_id === 'paul_copplestone')
|
||||
const ant = authors.find((a) => a.author_id === 'ant_wilson')
|
||||
const deepthi = authors.find((a) => a.author_id === 'deepthi_sigireddi')
|
||||
|
||||
const hosts = [paul, ant, sugu, deepthi]
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'lead-gen',
|
||||
slug: 'select-2026/vip-dinner',
|
||||
metadata: {
|
||||
title: 'VIP Dinner | Supabase Select 2026',
|
||||
description:
|
||||
'Join Supabase leaders for an intimate dinner at Flour + Water in San Francisco on October 1, 2026. Cocktails at 7:00 PM, dinner at 7:30 PM.',
|
||||
},
|
||||
hero: {
|
||||
title: 'The future of scalable databases',
|
||||
subtitle: 'An intimate VIP dinner hosted by Supabase',
|
||||
description:
|
||||
'Join Supabase product and engineering leaders for a dinner conversation about where Postgres is headed -- from scaling beyond single-node limits to managing globally distributed workloads. Expect sharp perspectives, good food, and the opportunity to connect with other engineering leaders.',
|
||||
image: {
|
||||
src: '/images/landing-pages/select-2026/flourwater.jpg',
|
||||
alt: 'Private dining room at Flour + Water, San Francisco',
|
||||
width: 600,
|
||||
height: 450,
|
||||
},
|
||||
ctas: [
|
||||
{
|
||||
label: 'Reserve your seat',
|
||||
href: '#rsvp',
|
||||
variant: 'primary',
|
||||
},
|
||||
],
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Details',
|
||||
children: (
|
||||
<div className="flex flex-col items-center gap-2 text-foreground-light">
|
||||
<p className="text-lg font-medium text-foreground">Date</p>
|
||||
<p>October 1, 2026</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Location</p>
|
||||
<p>Flour + Water</p>
|
||||
<p>San Francisco, CA</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Schedule</p>
|
||||
<p>7:00 PM — Cocktails and introductions</p>
|
||||
<p>7:30 PM — Dinner and discussion</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Your hosts',
|
||||
children: (
|
||||
<div className="border border-muted rounded-xl overflow-hidden">
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2">
|
||||
{hosts.map((host, i) => (
|
||||
<div
|
||||
key={host?.author_id ?? i}
|
||||
className={cn(
|
||||
'flex flex-col items-center gap-4 p-6 sm:p-8 text-center',
|
||||
i % 2 === 0 && 'sm:border-r border-muted',
|
||||
i < 2 && 'sm:border-b border-muted',
|
||||
i < hosts.length - 1 && 'max-sm:border-b max-sm:border-muted'
|
||||
)}
|
||||
>
|
||||
{host?.author_image_url && (
|
||||
<Image
|
||||
src={host.author_image_url}
|
||||
alt={host.author}
|
||||
width={192}
|
||||
height={192}
|
||||
className="rounded-full object-cover aspect-square w-48 h-48"
|
||||
/>
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
<p className="text-foreground font-medium text-base">{host?.author}</p>
|
||||
<p className="text-foreground-lighter text-sm mt-2 leading-relaxed">
|
||||
{host?.position && `${host.position}, `}Supabase
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'rsvp',
|
||||
title: 'Reserve your seat',
|
||||
description: "Space is limited. Let us know you're coming.",
|
||||
fields: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'first_name',
|
||||
label: 'First Name',
|
||||
placeholder: 'First Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'last_name',
|
||||
label: 'Last Name',
|
||||
placeholder: 'Last Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
name: 'email_address',
|
||||
label: 'Email',
|
||||
placeholder: 'Work email',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'company_name',
|
||||
label: 'Company',
|
||||
placeholder: 'ACME, Inc.',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'job_title',
|
||||
label: 'Job Title',
|
||||
placeholder: 'VP of Engineering',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'phone_number',
|
||||
label: 'Phone Number',
|
||||
placeholder: '+1 212 555 1212',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'attending',
|
||||
label: 'Are you attending Select 2026?',
|
||||
placeholder: 'Select an option',
|
||||
required: true,
|
||||
options: [
|
||||
{ label: 'Yes', value: 'Yes' },
|
||||
{ label: 'No', value: 'No' },
|
||||
],
|
||||
},
|
||||
],
|
||||
submitLabel: 'Confirm RSVP',
|
||||
successRedirect: '/go/select-2026/vip-dinner/thank-you',
|
||||
disclaimer:
|
||||
'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
|
||||
crm: {
|
||||
hubspot: {
|
||||
formGuid: 'd0699f2e-225a-4224-91b5-341fb5336613',
|
||||
fieldMap: {
|
||||
first_name: 'firstname',
|
||||
last_name: 'lastname',
|
||||
email_address: 'email',
|
||||
company_name: 'company',
|
||||
job_title: 'jobtitle',
|
||||
phone_number: 'phone',
|
||||
},
|
||||
// `attending` is a Notion-only field — keep it out of the HubSpot payload.
|
||||
excludeFields: ['attending'],
|
||||
consent:
|
||||
'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
|
||||
},
|
||||
notion: {
|
||||
database_id: '37d5004b775f809e8cc4e29fdec302aa',
|
||||
columnMap: {
|
||||
first_name: 'First Name',
|
||||
last_name: 'Last Name',
|
||||
email_address: 'Email',
|
||||
company_name: 'Company',
|
||||
job_title: 'Job Title',
|
||||
phone_number: 'Phone Number',
|
||||
attending: 'Attending',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Link from 'next/link'
|
||||
import { Button } from 'ui'
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'thank-you',
|
||||
slug: 'select-2026/vip-experience/thank-you',
|
||||
metadata: {
|
||||
title: "You're confirmed | Supabase VIP Experience",
|
||||
description:
|
||||
'Your RSVP for the Supabase VIP dinner at Penny Roma in San Francisco on October 1, 2026 has been confirmed. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM.',
|
||||
},
|
||||
hero: {
|
||||
title: "You're confirmed",
|
||||
description:
|
||||
"We'll see you at Penny Roma in San Francisco on October 1, 2026. Cocktails begin at 7:00 PM and dinner starts at 7:30 PM. We look forward to seeing you.",
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'In the meantime',
|
||||
description: 'Learn more about what we are building at Supabase.',
|
||||
children: (
|
||||
<div className="flex items-center justify-center gap-4">
|
||||
<Button asChild type="default" size="small">
|
||||
<Link href="https://supabase.com">Visit supabase.com</Link>
|
||||
</Button>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -0,0 +1,214 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Image from 'next/image'
|
||||
|
||||
import authors from '@/lib/authors.json'
|
||||
|
||||
const sugu = authors.find((a) => a.author_id === 'sugu_sougoumarane')
|
||||
const paul = authors.find((a) => a.author_id === 'paul_copplestone')
|
||||
const ant = authors.find((a) => a.author_id === 'ant_wilson')
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'lead-gen',
|
||||
slug: 'select-2026/vip-experience',
|
||||
metadata: {
|
||||
title: 'VIP Experience | Supabase Select 2026',
|
||||
description:
|
||||
'Join Supabase leaders for an intimate VIP dinner at Penny Roma in San Francisco on October 1, 2026. Cocktails at 7:00 PM, dinner at 7:30 PM.',
|
||||
},
|
||||
hero: {
|
||||
title: 'The future of scalable databases',
|
||||
subtitle: 'An intimate VIP experience hosted by Supabase',
|
||||
description:
|
||||
'Join Supabase product and engineering leaders for a dinner conversation about where Postgres is headed -- from scaling beyond single-node limits to managing globally distributed workloads. Expect sharp perspectives, good food, and the opportunity to connect with other engineering leaders.',
|
||||
image: {
|
||||
src: '/images/landing-pages/select-2026/pennyroma.jpg',
|
||||
alt: 'Private dining room at Penny Roma, San Francisco',
|
||||
width: 600,
|
||||
height: 450,
|
||||
},
|
||||
ctas: [
|
||||
{
|
||||
label: 'Reserve your seat',
|
||||
href: '#rsvp',
|
||||
variant: 'primary',
|
||||
},
|
||||
],
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Details',
|
||||
children: (
|
||||
<div className="flex flex-col items-center gap-2 text-foreground-light">
|
||||
<p className="text-lg font-medium text-foreground">Date</p>
|
||||
<p>October 1, 2026</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Location</p>
|
||||
<p>Penny Roma</p>
|
||||
<p>San Francisco, CA</p>
|
||||
<p className="mt-4 text-lg font-medium text-foreground">Schedule</p>
|
||||
<p>7:00 PM — Cocktails and introductions</p>
|
||||
<p>7:30 PM — Dinner and discussion</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'Your hosts',
|
||||
children: (
|
||||
<div className="border border-muted rounded-xl overflow-hidden">
|
||||
<div className="grid grid-cols-1 md:grid-cols-3">
|
||||
<div className="flex flex-col items-center gap-4 p-6 sm:p-8 md:border-r border-muted max-md:border-b text-center">
|
||||
{sugu?.author_image_url && (
|
||||
<Image
|
||||
src={sugu.author_image_url}
|
||||
alt={sugu.author}
|
||||
width={192}
|
||||
height={192}
|
||||
className="rounded-full object-cover aspect-square w-48 h-48"
|
||||
/>
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
<p className="text-foreground font-medium text-base">{sugu?.author}</p>
|
||||
<p className="text-foreground-lighter text-sm mt-2 leading-relaxed">
|
||||
{sugu?.position && `${sugu.position}, `}Supabase
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col items-center gap-4 p-6 sm:p-8 md:border-r border-muted max-md:border-b text-center">
|
||||
{paul?.author_image_url && (
|
||||
<Image
|
||||
src={paul.author_image_url}
|
||||
alt={paul.author}
|
||||
width={192}
|
||||
height={192}
|
||||
className="rounded-full object-cover aspect-square w-48 h-48"
|
||||
/>
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
<p className="text-foreground font-medium text-base">{paul?.author}</p>
|
||||
<p className="text-foreground-lighter text-sm mt-2 leading-relaxed">
|
||||
{paul?.position && `${paul.position}, `}Supabase
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col items-center gap-4 p-6 sm:p-8 text-center">
|
||||
{ant?.author_image_url && (
|
||||
<Image
|
||||
src={ant.author_image_url}
|
||||
alt={ant.author}
|
||||
width={192}
|
||||
height={192}
|
||||
className="rounded-full object-cover aspect-square w-48 h-48"
|
||||
/>
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
<p className="text-foreground font-medium text-base">{ant?.author}</p>
|
||||
<p className="text-foreground-lighter text-sm mt-2 leading-relaxed">
|
||||
{ant?.position && `${ant.position}, `}Supabase
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'form',
|
||||
id: 'rsvp',
|
||||
title: 'Reserve your seat',
|
||||
description: "Space is limited. Let us know you're coming.",
|
||||
fields: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'first_name',
|
||||
label: 'First Name',
|
||||
placeholder: 'First Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'last_name',
|
||||
label: 'Last Name',
|
||||
placeholder: 'Last Name',
|
||||
required: true,
|
||||
half: true,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
name: 'email_address',
|
||||
label: 'Email',
|
||||
placeholder: 'Work email',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'company_name',
|
||||
label: 'Company',
|
||||
placeholder: 'ACME, Inc.',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'job_title',
|
||||
label: 'Job Title',
|
||||
placeholder: 'VP of Engineering',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'phone_number',
|
||||
label: 'Phone Number',
|
||||
placeholder: '+1 212 555 1212',
|
||||
required: false,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'attending',
|
||||
label: 'Are you attending Select 2026?',
|
||||
placeholder: 'Select an option',
|
||||
required: true,
|
||||
options: [
|
||||
{ label: 'Yes', value: 'Yes' },
|
||||
{ label: 'No', value: 'No' },
|
||||
],
|
||||
},
|
||||
],
|
||||
submitLabel: 'Confirm RSVP',
|
||||
successRedirect: '/go/select-2026/vip-experience/thank-you',
|
||||
disclaimer:
|
||||
'By submitting this form, I confirm that I have read and understood the [Privacy Policy](https://supabase.com/privacy).',
|
||||
crm: {
|
||||
hubspot: {
|
||||
formGuid: '3803133e-fbc9-4850-80b5-987b57cf0e8a',
|
||||
fieldMap: {
|
||||
first_name: 'firstname',
|
||||
last_name: 'lastname',
|
||||
email_address: 'email',
|
||||
company_name: 'company',
|
||||
job_title: 'jobtitle',
|
||||
phone_number: 'phone',
|
||||
},
|
||||
// `attending` is a Notion-only field — keep it out of the HubSpot payload.
|
||||
excludeFields: ['attending'],
|
||||
consent:
|
||||
'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
|
||||
},
|
||||
notion: {
|
||||
database_id: '37d5004b775f80f4b050fd6385736010',
|
||||
columnMap: {
|
||||
first_name: 'First Name',
|
||||
last_name: 'Last Name',
|
||||
email_address: 'Email',
|
||||
company_name: 'Company',
|
||||
job_title: 'Job Title',
|
||||
phone_number: 'Phone Number',
|
||||
attending: 'Attending',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -10,6 +10,12 @@ import pgconfDev2026Contest from './events/pgconf-dev-2026/contest'
|
||||
import pgconfDev2026ContestThankYou from './events/pgconf-dev-2026/contest-thank-you'
|
||||
import postgresconfContest from './events/postgresconf-sjc-2026/contest'
|
||||
import postgresconfContestThankYou from './events/postgresconf-sjc-2026/contest-thank-you'
|
||||
import selectPartnerDay from './events/select-2026/partner-day'
|
||||
import selectPartnerDayThankYou from './events/select-2026/partner-day-thank-you'
|
||||
import selectVipDinner from './events/select-2026/vip-dinner'
|
||||
import selectVipDinnerThankYou from './events/select-2026/vip-dinner-thank-you'
|
||||
import selectVipExperience from './events/select-2026/vip-experience'
|
||||
import selectVipExperienceThankYou from './events/select-2026/vip-experience-thank-you'
|
||||
import startupGrindContest from './events/startup-grind-2026/contest'
|
||||
import stripeSessionsContest from './events/stripe-sessions-2026/contest'
|
||||
import stripeExecDinner from './events/stripe-sessions-2026/exec-dinner'
|
||||
@@ -46,6 +52,12 @@ const pages: GoPageInput[] = [
|
||||
datadogDinner, // remove after June 30, 2026
|
||||
aiEngineerEuropeContest,
|
||||
aiEngineerEuropeContestThankYou,
|
||||
selectVipDinner, // remove after Select 2026
|
||||
selectVipDinnerThankYou, // remove after Select 2026
|
||||
selectVipExperience, // remove after Select 2026
|
||||
selectVipExperienceThankYou, // remove after Select 2026
|
||||
selectPartnerDay, // remove after Select 2026
|
||||
selectPartnerDayThankYou, // remove after Select 2026
|
||||
startupGrindContest, // remove after May 31, 2026
|
||||
supabaseStripeProjects,
|
||||
]
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 228 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
@@ -217,8 +217,10 @@ export async function submitFormAction(
|
||||
let consent: string | undefined
|
||||
if (crm.hubspot) {
|
||||
const fieldMap = crm.hubspot.fieldMap ?? {}
|
||||
const excludeFields = new Set(crm.hubspot.excludeFields ?? [])
|
||||
hubspotFields = {}
|
||||
for (const [formField, value] of Object.entries(payloadValues)) {
|
||||
if (excludeFields.has(formField)) continue
|
||||
const hsField = fieldMap[formField] ?? formField
|
||||
hubspotFields[hsField] = value
|
||||
}
|
||||
|
||||
@@ -201,6 +201,14 @@ export const hubspotFormConfigSchema = z.object({
|
||||
* Example: { workEmail: 'email', companyName: 'company' }
|
||||
*/
|
||||
fieldMap: z.record(z.string(), z.string()).optional(),
|
||||
/**
|
||||
* Form field `name`s to NOT forward to HubSpot. Use this for fields that
|
||||
* should only reach another provider (e.g. Notion-only fields). By default
|
||||
* every submitted field is sent to HubSpot, so an unmapped field a HubSpot
|
||||
* form doesn't define would otherwise cause the whole submission to fail.
|
||||
* Example: ['attending']
|
||||
*/
|
||||
excludeFields: z.array(z.string()).optional(),
|
||||
/** Legal consent text for GDPR. */
|
||||
consent: z.string().optional(),
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user