diff --git a/apps/www/app/(home)/_components/BuiltWithSupabaseSection.tsx b/apps/www/app/(home)/_components/BuiltWithSupabaseSection.tsx index ca02350e0e3..2daddccf7c7 100644 --- a/apps/www/app/(home)/_components/BuiltWithSupabaseSection.tsx +++ b/apps/www/app/(home)/_components/BuiltWithSupabaseSection.tsx @@ -118,80 +118,80 @@ export function BuiltWithSupabaseSection() {
{/* Featured row - 2 large cells */} -
- {featuredExamples.map((example) => { - const logo = EXAMPLE_LOGO[example.title] - const Skeleton = SKELETON_CONTENT[example.title] - return ( - -
- {logo && ( - - )} -
-

{example.title}

-

- {example.description} -

+
+ {featuredExamples.map((example) => { + const logo = EXAMPLE_LOGO[example.title] + const Skeleton = SKELETON_CONTENT[example.title] + return ( + +
+ {logo && ( + + )} +
+

{example.title}

+

+ {example.description} +

+
+
+
+ {/* Browser frame */} +
+ {/* Title bar */} +
+ + + +
+ {/* Skeleton content */} +
+ {Skeleton ? : null}
-
- {/* Browser frame */} -
- {/* Title bar */} -
- - - -
- {/* Skeleton content */} -
- {Skeleton ? : null} -
-
-
- - ) - })} -
+
+ + ) + })} +
{/* Grid row - 4 smaller cells */} -
- {gridExamples.map((example) => { - const logo = EXAMPLE_LOGO[example.title] - return ( - -
- {logo && ( - - )} -
-

{example.title}

-

- {example.description} -

- - ) - })} -
+
+ {gridExamples.map((example) => { + const logo = EXAMPLE_LOGO[example.title] + return ( + +
+ {logo && ( + + )} +
+

{example.title}

+

+ {example.description} +

+ + ) + })} +
) diff --git a/apps/www/app/(home)/_components/CustomerStoriesSection.tsx b/apps/www/app/(home)/_components/CustomerStoriesSection.tsx index 475de434158..0fa89bf22b5 100644 --- a/apps/www/app/(home)/_components/CustomerStoriesSection.tsx +++ b/apps/www/app/(home)/_components/CustomerStoriesSection.tsx @@ -6,21 +6,6 @@ import { useState } from 'react' import { Button, cn } from 'ui' const customerStories = [ - { - name: 'Resend', - logo: '/images/customers/logos/resend.png', - icon: '/images/customers/logos/resend-icon.svg', - tagline: 'Scaling seamlessly to 5,000+ paying customers and millions of emails sent daily.', - quote: - "The Supabase YC Program made it a no-brainer for us. We didn't have to worry about backend costs in the early days, which gave us more runway to focus on product-market fit.", - author: 'Zeno Rocha, CEO, Resend', - authorImg: '/images/blog/avatars/zeno-rocha.png', - slug: 'resend', - bgColor: '#000000', - bgGradient: 'linear-gradient(to bottom left, #0a0a0a 0%, #000000 100%)', - dimBgColor: '#080808', - textColor: 'light' as 'light' | 'dark', - }, { name: 'Firecrawl', logo: '/images/customers/logos/firecrawl.png', @@ -32,9 +17,28 @@ const customerStories = [ authorImg: '/images/blog/avatars/caleb-peffer.jpg', slug: 'firecrawl', rawIcon: true, - bgColor: '#7a3818', - bgGradient: 'linear-gradient(to bottom left, #7a3818 0%, #4a1e08 100%)', - dimBgColor: '#5a2a10', + iconFilter: 'brightness(0) invert(1)', + bgColor: 'color(display-p3 0.980392 0.364706 0.098039)', + bgGradient: + 'linear-gradient(to bottom left, color(display-p3 0.980392 0.364706 0.098039 / 1) 0%, color(display-p3 0.980392 0.364706 0.098039 / 0.9) 100%)', + dimBgColor: 'color(display-p3 0.980392 0.364706 0.098039 / 0.9)', + textColor: 'light' as 'light' | 'dark', + }, + { + name: 'Rally', + logo: '/images/customers/logos/rally.png', + icon: '/images/customers/logos/rally-icon.svg', + rawIcon: true, + tagline: 'From first line of code to fully licensed fintech in three months.', + quote: + "We could not have built this company without Supabase. If I had to go and build all these components myself, we wouldn't even have launched.", + author: 'Thiago Peres, Founder & CTO, Rally', + authorImg: 'https://avatars.githubusercontent.com/u/914007?v=4', + slug: 'rally', + bgColor: 'color(display-p3 0.275 0.306 0.8)', + bgGradient: + 'linear-gradient(to bottom left, color(display-p3 0.275 0.306 0.8 / 1) 0%, color(display-p3 0.118 0.176 0.769 / 1) 100%)', + dimBgColor: 'color(display-p3 0.118 0.176 0.769 / 1)', textColor: 'light' as 'light' | 'dark', }, { @@ -63,9 +67,11 @@ const customerStories = [ authorImg: '/images/blog/avatars/vasek-mlejnsky.jpg', slug: 'e2b', rawIcon: true, - bgColor: '#7a4400', - bgGradient: 'linear-gradient(to bottom left, #7a4400 0%, #4a2800 100%)', - dimBgColor: '#5a3200', + iconFilter: 'brightness(0) invert(1)', + bgColor: 'color(display-p3 1 0.533 0)', + bgGradient: + 'linear-gradient(to bottom left, color(display-p3 1 0.533 0 / 1) 0%, color(display-p3 0.7 0.373 0 / 1) 100%)', + dimBgColor: 'color(display-p3 0.7 0.373 0 / 1)', textColor: 'light' as 'light' | 'dark', }, { @@ -89,8 +95,7 @@ const aiBuilderStories = [ { name: 'Lovable', logo: '/images/logos/publicity/lovable.svg', - description: - 'We store embeddings in a PostgreSQL database. Supabase is a great partner for us as we scale.', + description: 'We store embeddings in a PostgreSQL database.', slug: 'lovable', photo: '/images/logos/publicity/lovable-team.png', }, @@ -125,7 +130,8 @@ function IconChip({ }) { const isLight = story.textColor === 'light' const s = story as any - const filter = s.iconFilter ?? (s.rawIcon ? undefined : isLight ? 'brightness(0) invert(1)' : 'brightness(0)') + const filter = + s.iconFilter ?? (s.rawIcon ? undefined : isLight ? 'brightness(0) invert(1)' : 'brightness(0)') return ( +
{/* Header row */}
@@ -184,10 +190,16 @@ export function CustomerStoriesSection() { {isActive && (
-

+

{story.name}

-

+

{story.tagline}

@@ -198,8 +210,15 @@ export function CustomerStoriesSection() { "{story.quote}"

- {story.author} -

+ {story.author} +

{story.author}

@@ -234,9 +253,9 @@ export function CustomerStoriesSection() { layout key={story.slug} onClick={() => setActiveIdx(index)} - className="text-left flex flex-col items-start gap-8 overflow-hidden transition-opacity hover:opacity-90" + className="text-left flex flex-col items-start gap-8 overflow-hidden" style={{ - background: isActive ? story.bgGradient : story.dimBgColor, + background: story.bgGradient, borderRadius: 8, padding: isActive ? ACTIVE_PAD : `${ACTIVE_PAD}px ${INACTIVE_PAD}px`, boxShadow: isDark @@ -250,7 +269,8 @@ export function CustomerStoriesSection() { {/* Top: company name + tagline */} -
-

+ + {story.name} -

-

+ {story.tagline} -

-
+ +
{/* Bottom: quote + author */} -
-

+ "{story.quote}" -

-
+ + {story.author} -

{story.author} -

-
+ + Read the story → -
+ ) @@ -314,7 +341,7 @@ export function CustomerStoriesSection() { {/* AI Builder stories */}
-
+

Powering the next wave @@ -336,7 +363,7 @@ export function CustomerStoriesSection() { {/* Photo background */} {/* Dark gradient overlay — heavier at bottom */} -
+
+
{/* Logo + description at bottom */}
@@ -362,27 +390,6 @@ export function CustomerStoriesSection() { ))}
- - {/* Builder logo strip — full width below */} -
- {[ - { name: 'Lovable', logo: '/images/logos/publicity/lovable.svg' }, - { name: 'Figma', logo: '/images/logos/publicity/figma.svg' }, - { name: 'v0', logo: '/images/logos/publicity/v0.svg' }, - { name: 'Bolt', logo: '/images/logos/publicity/bolt.svg' }, - { name: 'Tempo', logo: '/images/logos/publicity/tempo.svg' }, - { name: 'Gumloop', logo: '/images/logos/publicity/gumloop.svg' }, - { name: 'Pika', logo: '/images/logos/publicity/pika.svg' }, - { name: 'Udio', logo: '/images/logos/publicity/udio.svg' }, - ].map((b) => ( - {b.name} - ))} -

diff --git a/apps/www/public/images/customers/logos/rally-icon.svg b/apps/www/public/images/customers/logos/rally-icon.svg new file mode 100644 index 00000000000..3d1da318649 --- /dev/null +++ b/apps/www/public/images/customers/logos/rally-icon.svg @@ -0,0 +1,3 @@ + + +