import { NextSeo } from 'next-seo' import { useTheme } from 'next-themes' import dynamic from 'next/dynamic' import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import React from 'react' import ReactMarkdown from 'react-markdown' import { ExpandableVideo } from 'ui-patterns/ExpandableVideo' import DefaultLayout from '~/components/Layouts/Default' import ImageGrid from '../components/ImageGrid' import SectionContainer from '../components/Layouts/SectionContainer' import { data as pageData } from '../data/ga' const ParagraphSection = dynamic(() => import('~/components/Sections/ParagraphSection')) const CTABanner = dynamic(() => import('~/components/CTABanner')) export default function IndexPage() { const router = useRouter() const { resolvedTheme } = useTheme() const isDark = resolvedTheme?.includes('dark') const data = pageData(isDark!) const meta_title = 'General Availability | Supabase' const meta_description = 'Supabase is officially launching into General Availability.' const meta_image = '/images/ga/ga-og-alt.png' return (
GA logo GA logo

We are moving to
General Availability

{data.hero?.publishedAt && ( {data.hero.publishedAt} )}
{data.highlightsSection.highlights && (
{data.highlightsSection.highlights.map( (highlight: { number: string; text: string }, i: number) => { return (

{highlight.number}

{highlight.text}
) } )}
)}
    {data.hero.sections.map((section, i) => (
  1. {i < 9 && '0'} {i + 1} {section.title}
  2. ))}
{data.communityStats.highlights && (
{data.communityStats.highlights.map( ( highlight: { number: string; text: string; url: string; icon: React.ReactNode }, i: number ) => { return (
{highlight.icon}

{highlight.number}

{highlight.text}
) } )}
)}
{data.enterpriseSection.highlights && (
{data.enterpriseSection.highlights.map( (highlight: { number?: string; text: string; icon: React.ReactNode }, i: number) => { return (
{highlight.icon}
{highlight.number && (

{highlight.number}

)} {highlight.text}
) } )}
)}
) }