diff --git a/apps/www/_events/2024-08-21-scale-to-millions-generative-ai-humata.mdx b/apps/www/_events/2024-08-21-scale-to-millions-generative-ai-humata.mdx index 5ea1db8ca0d..2a60abd9270 100644 --- a/apps/www/_events/2024-08-21-scale-to-millions-generative-ai-humata.mdx +++ b/apps/www/_events/2024-08-21-scale-to-millions-generative-ai-humata.mdx @@ -1,6 +1,6 @@ --- -title: 'Scale to Millions: Generative AI/Humata' -meta_title: 'Scale to Millions: Generative AI/Humata' +title: 'Scale to Millions: Generative AI / Humata' +meta_title: 'Scale to Millions: Generative AI / Humata' subtitle: 'Quickly and cost effectively build Generative AI applications that you can use to chat with your company’s documents.' meta_description: 'Quickly and cost effectively build Generative AI applications that you can use to chat with your company’s documents.' type: 'webinar' diff --git a/apps/www/_events/2024-10-23-scale-to-millions-goodtape-auth.mdx b/apps/www/_events/2024-10-23-scale-to-millions-goodtape-auth.mdx new file mode 100644 index 00000000000..5c776e45e17 --- /dev/null +++ b/apps/www/_events/2024-10-23-scale-to-millions-goodtape-auth.mdx @@ -0,0 +1,41 @@ +--- +title: 'Scale to Millions: Migrating to Supabase Auth for Affordable, Scalable Authentication / Good Tape' +meta_title: 'Scale to Millions: Migrating to Supabase Auth / Good Tape' +subtitle: 'Learn how to reduce costs while maintaining top-tier security with Supabase' +meta_description: 'Learn how to reduce costs while maintaining top-tier security with Supabase' +type: 'webinar' +onDemand: true +date: '2024-10-23T10:00:00.000-07:00' +timezone: 'America/Los_Angeles' +duration: '45 mins' +company: + { + name: 'Good Tape', + website_url: 'https://goodtape.io/', + logo: '/images/customers/logos/light/good-tape.png', + logo_light: '/images/customers/logos/good-tape.png', + } +categories: + - webinar +main_cta: + { + url: 'https://zoom.us/webinar/register/WN_26XTfO35SAC81jjS1ulWJw?amp_device_id=1bd3c92f-c97a-45ad-8aab-a508f950b536', + target: '_blank', + label: 'Register', + } +speakers: 'stojan,kevinbrolly,craig_cannon,jstoone' +--- + +## Cutting Costs and Scaling with Confidence + +Managed Auth providers like Auth0 or Firebase Auth can simplify the implementation and management of authentication, but costs can explode once an application’s usage scales up. Join us as we learn about Supabase Auth and Row Level Security from Supabase Auth engineer, Stojan Dimitrovski, about how Supabase can deliver an easy to use, hosted, portable, and affordable Auth solution for your application’s authentication and security. + +Jakob Steinn, Co-founder & Tech Lead at [Good Tape](https://goodtape.io), will discuss how his company evolved from a corporate innovation concept to providing fast, secure, and accurate audio and video transcription for millions of journalists worldwide. Joined by Kevin Brolly, Head of Customer Success at Supabase, they’ll share insights into the challenges of rapid scaling and how their teams worked together to execute a seamless migration from Auth0. + +### Key Takeaways: + +- Learn how Supabase Auth, combined with Row Level Security, delivers an easy to implement, portable, and affordable solution for application authentication and security. +- Hear a testimonial from Good Tape on the factors which led them to migrate as well as the cost and operational benefits after making the switch to Supabase Auth. +- Find out how Supabase’s Customer Success team can facilitate a smooth migration from your existing Auth providers like Auth0 and Firebase Auth. + +Join us live to participate in the Q&A afterwards. Can’t make it to the event? Don’t worry, we'll send you a link to the recording. diff --git a/apps/www/components/Announcement/WebinarAnnouncement.tsx b/apps/www/components/Announcement/WebinarAnnouncement.tsx deleted file mode 100644 index 0483daa1aa3..00000000000 --- a/apps/www/components/Announcement/WebinarAnnouncement.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' -import AnnouncementBadge from './Badge' - -const WebinarAnnouncement = () => { - return ( -
- - Webinar / Aug 21 - - } - announcement={ - <> - Scale to Millions: Generative AI - /Humata - - } - /> -
- ) -} - -export default WebinarAnnouncement diff --git a/apps/www/components/EventCallout.tsx b/apps/www/components/EventCallout.tsx index 7f5687bac3f..8599d596982 100644 --- a/apps/www/components/EventCallout.tsx +++ b/apps/www/components/EventCallout.tsx @@ -9,7 +9,7 @@ interface Props { size?: 'tiny' | 'small' | 'large' } -const EVENT_LINK = '/events/scale-to-millions-generative-ai-humata' +const EVENT_LINK = '/events/scale-to-millions-goodtape-auth' const EventCallout = ({ className, size = 'tiny', ...props }: PropsWithChildren) => { switch (size) { @@ -18,14 +18,15 @@ const EventCallout = ({ className, size = 'tiny', ...props }: PropsWithChildren< - Webinar - 21 Aug - Scale to Millions: Generative AI/Humata + Webinar + {/* 23 Oct */} + Migrating to Supabase Auth / Good Tape + ) case 'small': @@ -39,9 +40,9 @@ const EventCallout = ({ className, size = 'tiny', ...props }: PropsWithChildren< {...props} > - Upcoming Webinar - 21 Aug - Scale to Millions: Generative AI/Humata + Webinar + 23 Oct + Migrating to Supabase Auth / Good Tape ) @@ -65,14 +66,11 @@ const EventCallout = ({ className, size = 'tiny', ...props }: PropsWithChildren<
Webinar - 21 Aug 2024 at 8PM PST + 23 Oct 2024 at 10AM PST
Scale to Millions -

- Quickly and cost effectively build Generative AI applications that you can use to - chat with your company’s documents. -

+

Learn how to reduce costs while maintaining top-tier security with Supabase

diff --git a/apps/www/components/Hero/Hero.tsx b/apps/www/components/Hero/Hero.tsx index 0d6f50a6bd9..440d71b7035 100644 --- a/apps/www/components/Hero/Hero.tsx +++ b/apps/www/components/Hero/Hero.tsx @@ -1,13 +1,16 @@ -import { useTelemetryProps } from 'common/hooks/useTelemetryProps' -import { BookOpen } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' -import { Button } from 'ui' -import SectionContainer from '~/components/Layouts/SectionContainer' +import { useTelemetryProps } from 'common/hooks/useTelemetryProps' import gaEvents from '~/lib/gaEvents' import Telemetry, { TelemetryEvent } from '~/lib/telemetry' +import { Button } from 'ui' +import SectionContainer from '~/components/Layouts/SectionContainer' +import EventCallout from '~/components/EventCallout' +import { useBreakpoint } from 'common' + const Hero = () => { + const isMobile = useBreakpoint(768) const router = useRouter() const telemetryProps = useTelemetryProps() const sendTelemetryEvent = async (event: TelemetryEvent) => { @@ -22,6 +25,7 @@ const Hero = () => {
+

Build in a weekend Scale to millions diff --git a/apps/www/components/Nav/ProductDropdown.tsx b/apps/www/components/Nav/ProductDropdown.tsx index a1bff6e8a9b..ecaca7ca976 100644 --- a/apps/www/components/Nav/ProductDropdown.tsx +++ b/apps/www/components/Nav/ProductDropdown.tsx @@ -9,6 +9,9 @@ import { TextLink } from 'ui' import { NavigationMenuLink } from 'ui/src/components/shadcn/ui/navigation-menu' import MenuItem from './MenuItem' +import EventCallout from '~/components/EventCallout' +import Panel from '~/components/Panel' + import ComparisonsData from 'data/Comparisons' import CustomersData from 'data/CustomerStories' import SolutionsData from 'data/Solutions' @@ -85,6 +88,11 @@ const ProductDropdown = () => { ))}

+
+ + + +
diff --git a/apps/www/lib/authors.json b/apps/www/lib/authors.json index 23d2aaea87e..d54685be57d 100644 --- a/apps/www/lib/authors.json +++ b/apps/www/lib/authors.json @@ -358,6 +358,13 @@ "author_url": "https://github.com/kevcodez", "author_image_url": "https://github.com/kevcodez.png" }, + { + "author_id": "kevinbrolly", + "author": "Kevin Brolly", + "position": "Head of Customer Success", + "author_url": "https://twitter.com/kevinbrolly", + "author_image_url": "https://pbs.twimg.com/profile_images/1292938696912756736/_DO9_Evo_200x200.jpg" + }, { "author_id": "benediktmueller", "author": "Benedikt Müller", @@ -490,7 +497,8 @@ "author_id": "khajvandi", "author": "Cyrus Khajvandi", "username": "khajvandi", - "position": "Co-Founder & CEO, Humata", + "position": "Co-Founder & CEO", + "company": "Humata", "author_url": "https://www.linkedin.com/in/khajvandi/", "author_image_url": "https://media.licdn.com/dms/image/v2/D5603AQGZst2tvV47PA/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1694666298155?e=1728518400&v=beta&t=Jkt6ii4cV8FsvU4qONEGFVUADw-Zc_WI1h-pSrenxGg" }, @@ -534,6 +542,14 @@ "author_url": "https://github.com/nyannyacha", "author_image_url": "https://github.com/nyannyacha.png" }, + { + "author_id": "jstoone", + "author": "Jakob Steinn", + "position": "Co-founder & Tech Lead", + "company": "Good Tape", + "author_url": "https://twitter.com/jstoone", + "author_image_url": "https://pbs.twimg.com/profile_images/1233003191538790400/3OxNooXT_200x200.jpg" + }, { "author_id": "tim_shedor", "author": "Tim Shedor", diff --git a/apps/www/pages/customers.tsx b/apps/www/pages/customers.tsx index 3c4dd6f9608..2055c0f93e3 100644 --- a/apps/www/pages/customers.tsx +++ b/apps/www/pages/customers.tsx @@ -13,7 +13,8 @@ import { motion } from 'framer-motion' import styles from '~/styles/customers.module.css' import Link from 'next/link' import { GlassPanel } from 'ui-patterns/GlassPanel' -import WebinarAnnouncement from '~/components/Announcement/WebinarAnnouncement' +import EventCallout from '../components/EventCallout' +import { useBreakpoint } from 'common' export async function getStaticProps() { const allPostsData = getSortedPosts({ directory: '_customers' }) @@ -32,6 +33,7 @@ export async function getStaticProps() { function CustomerStoriesPage(props: any) { const { basePath } = useRouter() + const isMobile = useBreakpoint(768) const meta = { title: 'Customer Stories | Supabase', @@ -82,11 +84,11 @@ function CustomerStoriesPage(props: any) {
- +

Customer stories

Discover case studies on how Supabase is being used around the world to quickly diff --git a/apps/www/pages/events/[slug].tsx b/apps/www/pages/events/[slug].tsx index 1b860fa78c2..5e2bf7a07b2 100644 --- a/apps/www/pages/events/[slug].tsx +++ b/apps/www/pages/events/[slug].tsx @@ -2,7 +2,6 @@ import React from 'react' import Link from 'next/link' import NextImage from 'next/image' import { useRouter } from 'next/router' -import type { GetStaticProps, InferGetStaticPropsType } from 'next' import { MDXRemote } from 'next-mdx-remote' import { NextSeo } from 'next-seo' import dayjs from 'dayjs' @@ -13,7 +12,8 @@ import { MicrophoneIcon, HandIcon, } from '@heroicons/react/solid' -import { capitalize } from 'lodash' +import capitalize from 'lodash/capitalize' +import { ChevronLeft, X as XIcon } from 'lucide-react' import authors from 'lib/authors.json' import { isNotNullOrUndefined } from '~/lib/helpers' @@ -23,7 +23,6 @@ import { getAllPostSlugs, getPostdata } from '~/lib/posts' import { isBrowser, useTelemetryProps } from 'common' import Telemetry, { TelemetryEvent } from '~/lib/telemetry' import gaEvents from '~/lib/gaEvents' -import { XIcon } from '@heroicons/react/outline' import utc from 'dayjs/plugin/utc' import timezone from 'dayjs/plugin/timezone' @@ -36,7 +35,9 @@ import ShareArticleActions from '~/components/Blog/ShareArticleActions' import * as supabaseLogoWordmarkDark from 'common/assets/images/supabase-logo-wordmark--dark.png' import * as supabaseLogoWordmarkLight from 'common/assets/images/supabase-logo-wordmark--light.png' -import { ChevronLeft } from 'lucide-react' + +import type { GetStaticProps, InferGetStaticPropsType } from 'next' +import type Author from '~/types/author' dayjs.extend(utc) dayjs.extend(timezone) @@ -148,7 +149,7 @@ const EventPage = ({ event }: InferGetStaticPropsType) => ?.map((speakerId: string) => { return authors.find((author) => author.author_id === speakerId) }) - .filter(isNotNullOrUndefined) + .filter(isNotNullOrUndefined) as Author[] const hadEndDate = event.end_date?.length const IS_REGISTRATION_OPEN = @@ -265,7 +266,7 @@ const EventPage = ({ event }: InferGetStaticPropsType) => className=" relative z-10 lg:min-h-[400px] h-full - grid grid-cols-1 lg:grid-cols-2 + grid grid-cols-1 xl:grid-cols-2 gap-8 text-foreground-light !py-10 md:!py-16 @@ -282,7 +283,7 @@ const EventPage = ({ event }: InferGetStaticPropsType) => Duration: {event.duration}

-

{event.title}

+

{event.title}

{event.subtitle}