* lw11 ga ticketing

* add @types/animejs

* build new game word

* og ticket layout

* ticket og layout

* lw11 ticketing flow

* remove unused assets

* clean up old LW code

* smol cleanup

* update lw11 og function

* update lw11 og function

* prepare

* main layout

* layout

* update naming

* fix lw11 canvas resize

* lw announcement countdown banner

* hp badge

* update lw page

* cleanup

* update banners

* update ticket shape

* update share string

* update launch time

* avatar in ticket

* update lw11-og handler

* mask ticket glow

* update game with input-otp

* clean up game

* update ticketing page title

* update

* update awards

* special event

* update constants

* fix mobile inputs bug

* update announcements

* dots grid

* remove 2024

* gst

* fix ticket user page

* less stacked layout

* lw

* update secret ticket

* update sharing layout

* max width to ticket container

* update tweet text

* clean up merge

* npm i

* update hero announcement

* update footer

* update types

* fix types

* Update apps/www/lib/constants.ts

* Update apps/www/lib/constants.ts

* Update apps/www/lib/constants.ts

* Apply suggestions from code review

* update og

* og

* special announcement

* special announcement

* fix favicon

* url timestamp for cache

* cache

* favicon

* remove file

* fix title

* game only when signed in

* user ticket nme

* day

* switch to /special-announcent

* update /special-announcement

* update /special-announcement

* skip build

* redirect

* fix theme in /special-announcement

* fix mobile ticket form

* image not draggable

* cleanup

* restore latest manifest

* update secret ticket tweet

* secret share

* update text

* fix secret share

* typo

* remove comment

* update deprecated icon

* restore input.stories

---------

Co-authored-by: Ant Wilson <awalias@users.noreply.github.com>
This commit is contained in:
Francesco SansalvadoreandAnt Wilson authored and GitHub committed 2024-04-04 13:09:21 +00:00
1 parent 78c93f2d52
commit accf7618eb
193 files changed
+5352 -7718

No files matched your search

+2 -1
View File
@@ -11,7 +11,7 @@ import { AuthProvider, ThemeProvider, useTelemetryProps, useThemeSandbox } from
import Head from 'next/head'
import { useRouter } from 'next/router'
import { useCallback, useEffect, useState, type PropsWithChildren } from 'react'
import { PortalToast, TabsProvider } from 'ui'
import { PortalToast, PromoToast, TabsProvider } from 'ui'
import { CommandMenuProvider } from 'ui-patterns/Cmdk'
import { useConsent } from 'ui-patterns/ConsentToast'
@@ -229,6 +229,7 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) {
<div className="h-screen flex flex-col">
<SiteLayout>
<PortalToast />
<PromoToast />
<Component {...pageProps} />
</SiteLayout>
</div>
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
<browserconfig><msapplication><tile><square70x70logo src="/favicon/ms-icon-70x70.png"/><square150x150logo src="/favicon/ms-icon-150x150.png"/><square310x310logo src="/favicon/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
<browserconfig><msapplication><tile><square70x70logo src="/favicon/ms-icon-70x70.png"/><square150x150logo src="/favicon/ms-icon-150x150.png"/><square310x310logo src="/favicon/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
+1 -1
View File
@@ -20,7 +20,7 @@ const Footer = (props: Props) => {
const { resolvedTheme } = useTheme()
const { pathname } = useRouter()
const isLaunchWeek = pathname.includes('launch-week')
const isLaunchWeek = pathname.includes('launch-week') || pathname.includes('special-announcement')
const forceDark = isLaunchWeek || pathname === '/'
if (props.hideFooter) {
+6 -5
View File
@@ -6,6 +6,7 @@ import gaEvents from '~/lib/gaEvents'
import { Button, IconBookOpen } from 'ui'
import SectionContainer from '~/components/Layouts/SectionContainer'
import HeroFrameworks from './HeroFrameworks'
import AnnouncementBadge from '../Announcement/Badge'
const Hero = () => {
const router = useRouter()
@@ -22,13 +23,13 @@ const Hero = () => {
<div className="mx-auto max-w-2xl lg:col-span-6 lg:flex lg:items-center justify-center text-center">
<div className="relative z-10 lg:h-auto pt-[90px] lg:pt-[90px] lg:min-h-[300px] flex flex-col items-center justify-center sm:mx-auto md:w-3/4 lg:mx-0 lg:w-full gap-4 lg:gap-8">
<div className="flex flex-col items-center">
{/* <div className="z-40 w-full flex justify-center mb-8 lg:mb-8">
<div className="z-40 w-full flex justify-center mb-8 lg:mb-8">
<AnnouncementBadge
url=""
badge=""
announcement=""
url="/special-announcement"
badge="Special Announcement"
announcement="Claim your ticket"
/>
</div> */}
</div>
<h1 className="text-foreground text-4xl sm:text-5xl sm:leading-none lg:text-7xl">
<span className="block text-[#F4FFFA00] bg-clip-text bg-gradient-to-b from-foreground to-foreground-light">
Build in a weekend
@@ -0,0 +1,41 @@
import React from 'react'
import Countdown from 'react-countdown'
import { CountdownWidget } from 'ui-patterns/CountdownWidget'
const CountdownComponent = ({
date,
showCard = true,
className,
size = 'small',
}: {
date: string | number | Date
showCard?: boolean
className?: string
size?: 'small' | 'large'
}) => {
if (!date) return null
const renderer = ({ days, hours, minutes, seconds, completed }: any) => {
if (completed) {
// Render a completed state
return null
} else {
// Render countdown
return (
<CountdownWidget
days={days}
hours={hours}
minutes={minutes}
seconds={seconds}
showCard={showCard}
className={className}
size={size}
/>
)
}
}
return <Countdown date={new Date(date)} renderer={renderer} />
}
export default CountdownComponent
@@ -0,0 +1,35 @@
import React from 'react'
import { cn } from 'ui'
interface Props {
className?: string
}
const GALogo = ({ className }: Props) => {
return (
<svg
width="100%"
height="100%"
viewBox="0 0 146 80"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={cn(className)}
>
<path
d="M9.90872 39.7865C9.90872 23.108 23.4293 9.58743 40.1078 9.58743C49.7794 9.58743 58.3878 14.1286 63.9227 21.2142L71.3958 15.3765C64.1412 6.0894 52.8222 0.104492 40.1078 0.104492C18.192 0.104492 0.425781 17.8707 0.425781 39.7865C0.425781 61.7023 18.192 79.4685 40.1078 79.4685C44.6069 79.4685 48.9307 78.72 52.9616 77.3408V67.121C49.0611 68.9584 44.7039 69.9856 40.1078 69.9856C23.4293 69.9856 9.90872 56.465 9.90872 39.7865Z"
fill="#EDEDED"
/>
<path
d="M62.4117 47.9878H62.4446L62.3638 77.9288L71.6541 77.9286L71.7349 38.0012L38.6667 38.0011L38.6667 47.4841L62.4117 47.4841L62.4117 47.9878Z"
fill="#EDEDED"
/>
<path
d="M103.571 14.5169L81.2178 58.7897V37.9204L99.3558 1.83807L107.825 1.85127L145.5 77.8259H135.221L103.571 14.5169Z"
fill="#EDEDED"
/>
<path d="M98.6779 68.3335H108.182V77.8377H98.6779V68.3335Z" fill="#EDEDED" />
</svg>
)
}
export default GALogo
@@ -0,0 +1,28 @@
import React from 'react'
import { TextLink, cn } from 'ui'
const HackathonCallout = ({ className }: { className?: string }) => {
return (
<div
className={cn(
'font-mono uppercase tracking-[1px] py-8 border-t border-[#111718] text-[#575E61] scroll-mt-16 flex flex-col md:flex-row justify-between gap-2',
className
)}
>
<div className="!text-foreground [&_*]:text-foreground text-sm flex flex-col sm:flex-row sm:items-center sm:gap-3">
Join the Hackathon
</div>
<div className="!m-0 flex items-center">
<TextLink
label="Learn more"
url="/blog/supabase-hackathon-lw11"
target="_blank"
hasChevron
className="m-0"
/>
</div>
</div>
)
}
export default HackathonCallout
@@ -0,0 +1,20 @@
export function Dot(x, y, w, h, opacity, animationConfig, color = '255,255,255') {
this.x = x
this.y = y
this.w = w
this.h = h
this.opacity = opacity
this.anim = animationConfig
this.isVert = this.anim?.direction === 'vertical'
this.draw = function (c) {
c.fillRect(this.x, this.y, this.w, this.h)
c.fillStyle = `rgba(${color},${this.opacity})`
c.fill()
}
this.update = function (c, clock) {
this.draw(c, clock)
}
}
@@ -0,0 +1,178 @@
import React, { useEffect, useState } from 'react'
import anime from 'animejs'
import { useWindowSize } from 'react-use'
import { isBrowser } from 'common'
import { Dot } from './Dot'
import { cn } from 'ui'
const defaultConfig = {
dotGrid: 40,
percentageLarge: 0.98,
percentageAnimated: 0.6,
randomizeLargeDots: 3,
randomizeSmallDots: 0.5,
minSpeed: 1,
maxSpeed: 2,
minOscillation: 1,
maxOscillation: 12,
minDelay: -3000,
maxDelay: 15000,
minDuration: 200,
maxDuration: 10000,
}
const LW11Background = ({ className }: { className?: string }) => {
const canvasRef = React.useRef<HTMLCanvasElement>(null)
const [size, setSize] = useState({ w: 1200, h: 800 })
const [config] = useState(defaultConfig)
const [hasInitialized, setHasInitialized] = useState(false)
const Window = useWindowSize()
const DOT_AREA = config.dotGrid
let c = canvasRef.current?.getContext('2d')
let dotsArray: any[] = []
function init() {
if (!c) return
setHasInitialized(true)
c = canvasRef.current?.getContext('2d')!
c.clearRect(0, 0, size.w, size.h)
dotsArray = []
const GRID_COLS = Math.floor(size.w / DOT_AREA)
const GRID_ROWS = Math.floor(size.h / DOT_AREA)
for (let i = 0; i < GRID_COLS; i++) {
for (let j = 0; j < GRID_ROWS; j++) {
const isLarge = Math.random() > config.percentageLarge
const isAnimated = isLarge || Math.random() > config.percentageAnimated
const direction = isAnimated ? (Math.random() > 0.5 ? 'vertical' : 'horizontal') : undefined
const speed = isAnimated ? anime.random(config.minSpeed, config.maxSpeed) : undefined
const opacity = isLarge ? 1 : anime.random(0.4, 1)
const isReverse = isAnimated ? Math.random() > 0.5 : undefined
const oscillation = isAnimated
? anime.random(config.minOscillation, config.maxOscillation).toFixed()
: undefined
const dotSize = isLarge
? Math.random() * config.randomizeLargeDots
: Math.random() * config.randomizeSmallDots
const endPos = {
x: anime
.random(
DOT_AREA * 1 - DOT_AREA / 2 + dotSize / 2,
DOT_AREA * 10 - DOT_AREA / 2 + dotSize / 2
)
.toFixed(),
y: anime
.random(
DOT_AREA * 1 - DOT_AREA / 2 + dotSize / 2,
DOT_AREA * 10 - DOT_AREA / 2 + dotSize / 2
)
.toFixed(),
}
const delay = anime.random(config.minDelay, config.maxDelay)
const duration = anime.random(config.minDuration, config.maxDuration)
const animationConfig: any = isAnimated
? {
direction,
speed,
isReverse,
oscillation,
endPos,
delay,
duration,
}
: undefined
const x = (size.w / GRID_COLS) * i + DOT_AREA / 2 - dotSize / 2
const y = (size.h / GRID_ROWS) * j + DOT_AREA / 2 - dotSize / 2
const w = dotSize
const h = dotSize
dotsArray.push(new Dot(x, y, w, h, opacity, animationConfig))
}
}
animate(0)
}
function animate(clock?: number) {
if (!isBrowser) return
for (let i = 0; i < dotsArray.length; i++) {
dotsArray[i].update(c, clock)
}
const tl = anime
.timeline({
targets: dotsArray.filter((dot) => dot.anim),
loop: true,
direction: 'alternate',
autoplay: true,
update: renderParticule,
})
.add(
{
x: (p: any) =>
!p.isVert ? `${p.anim?.isReverse ? '+' : '-'}=${DOT_AREA * p.anim.oscillation}` : p.x,
y: (p: any) =>
p.isVert ? `${p.anim?.isReverse ? '+' : '-'}=${DOT_AREA * p.anim.oscillation}` : p.y,
duration: (p: any) => p.anim?.duration,
delay: (p: any) => p.anim?.delay - 1000,
easing: 'easeInOutExpo',
},
'-=1000'
)
tl.play()
}
function renderParticule(anim: any) {
if (!isBrowser) return
c?.clearRect(0, 0, size.w, size.h)
for (let i = 0; i < dotsArray.length; i++) {
dotsArray[i].update(c, 0)
}
for (var i = 0; i < anim.animatables.length; i++) {
anim.animatables[i].target.update(c, 0)
}
}
function resize() {
setSize({ w: Window.width, h: Window.height })
init()
}
useEffect(() => {
if (!isBrowser) return
resize()
}, [Window])
useEffect(() => {
resize()
init()
}, [])
!hasInitialized && init()
useEffect(() => {
document.body.classList.add('bg-[#060809]')
return () => {
if (document.body.classList.contains('bg-[#060809]')) {
document.body.classList.remove('bg-[#060809]')
}
}
}, [])
return (
<canvas
ref={canvasRef}
className={cn('opacity-0 animate-fade-in duration-1000 w-full h-full', className)}
width={size.w}
height={size.h}
/>
)
}
export default LW11Background
@@ -0,0 +1,79 @@
import React from 'react'
import Link from 'next/link'
import { ArrowRightIcon } from '@heroicons/react/outline'
import { cn } from 'ui'
import { Edit } from 'lucide-react'
import { WeekDayProps } from './Releases/data'
import { DayLink } from './Releases/components'
const LW11Day1 = ({ day, className }: { day: WeekDayProps; className?: string }) => {
return (
<div
id={day.id}
className={cn(
`group relative overflow-hidden flex-1 flex flex-col justify-end scroll-mt-16
bg-[#0e1010] border border-[#14191B] text-[#8B9092]
rounded-xl p-4 gap-4 md:gap-6 text-2xl shadow-lg`,
className
)}
>
<div className="relative flex flex-col sm:flex-row sm:items-center justify-between gap-4 w-full py-2">
<div
className={cn(
'text-sm uppercase font-mono text-foreground-muted tracking-[0.1rem] flex-1',
day.shipped && 'text-foreground'
)}
>
{day.dd} {day.date}
</div>
<Link
href={day.blog}
className="relative group/link flex items-center gap-2 text-sm translate-x-0 !ease-[.24,0,.22,.99] duration-200 hover:-translate-x-6 transition-transform hover:cursor-pointer"
>
<Edit className="w-4 min-w-4 group-hover/link:opacity-0 transition-opacity" />
<span>Blog post</span>
<ArrowRightIcon className="w-4 opacity-0 group-hover/link:opacity-100 transition-opacity" />
</Link>
</div>
<div className="text-lg leading-7 [&_strong]:font-normal [&_strong]:text-foreground md:mt-2 max-w-xl">
{day.description}
</div>
<div className="relative text-sm w-full gap-2 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-6">
{day.steps?.map((step, i) => (
<div
key={step.title}
className="flex flex-col gap-2 p-4 rounded-xl bg-surface-75 transition-colors border hover:border-strong overflow-hidden"
>
<div className="flex items-center gap-1 mb-4 text-foreground-light">
<svg
className="h-4 w-4 group-hover/menu-item:text-foreground group-focus-visible/menu-item:text-foreground"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 16 16"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="1"
d={step.icon}
stroke="currentColor"
/>
</svg>
<span>{step.title}</span>
</div>
<p className="text-foreground">{step.description}</p>
<ul>
{step.links?.map((link) => (
<li key={`${step.title}-${link.href}`}>
<DayLink {...link} />
</li>
))}
</ul>
</div>
))}
</div>
</div>
)
}
export default LW11Day1
@@ -0,0 +1,94 @@
import React from 'react'
import { cn } from 'ui'
import { ExpandableVideo } from 'ui-patterns'
import { WeekDayProps } from './Releases/data'
import { DayLink } from './Releases/components'
const LW11Day1 = ({ day, className }: { day: WeekDayProps; className?: string }) => {
const cssGroup = 'group/d' + day.d
return (
<section
id={day.id}
className="lwx-nav-anchor border-b py-8 first:border-t border-[#111718] text-[#575E61] scroll-mt-16 grid grid-cols-1 gap-4 md:grid-cols-3"
>
{/* Day title and links */}
<div
id={day.isToday ? 'today' : undefined}
className="flex h-full scroll-mt-10 flex-col gap-4 items-between"
>
<div
className={cn(
'text-sm inline uppercase font-mono text-foreground-muted tracking-[0.1rem]',
day.shipped && 'text-foreground'
)}
>
{day.dd}, {day.date}
</div>
<div className="md:max-w-sm flex flex-col gap-4">
<ExpandableVideo
videoId=""
imgUrl={day.videoThumbnail}
imgOverlayText="Watch announcement"
/>
<p className="text-sm text-foreground">Supabase is ready for production use.</p>
</div>
{!!day.links && (
<ul className="flex-1 h-full w-full justify-end xs:grid grid-cols-2 lg:grid-cols-3 flex flex-col gap-1">
{day.links?.map((link) => (
<li key={link.href}>
<DayLink {...link} />
</li>
))}
</ul>
)}
</div>
{/* Card */}
<div
className={cn(
`group relative overflow-hidden flex-1 flex col-span-2
md:px-4 text-[#8B9092] text-2xl`,
// cssGroup,
className
)}
>
<div className="relative text-sm w-full grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 rounded-xl border gap-px bg-border overflow-hidden">
{day.steps?.map((step, i) => (
<div
key={step.title}
className="flex flex-col gap-2 p-4 transition-colors bg-surface-75 hover:bg-surface-100 overflow-hidden border-0"
>
<div className="flex items-center gap-1 mb-4 text-foreground-light">
<svg
className="h-4 w-4 group-hover/menu-item:text-foreground group-focus-visible/menu-item:text-foreground"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 16 16"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="1"
d={step.icon}
stroke="currentColor"
/>
</svg>
<span>{step.title}</span>
</div>
<p className="text-foreground">{step.description}</p>
<ul>
{step.links?.map((link) => (
<li key={`${step.title}-${link.href}`}>
<DayLink {...link} />
</li>
))}
</ul>
</div>
))}
</div>
</div>
</section>
)
}
export default LW11Day1
@@ -0,0 +1,138 @@
import Link from 'next/link'
import React, { useEffect, useState } from 'react'
import { TextLink, cn } from 'ui'
import useConfData from '../hooks/use-conf-data'
import { SupabaseClient } from '@supabase/supabase-js'
export interface Meetup {
id?: any
title: string
isLive: boolean
link: string
display_info: string
start_at: string
}
function addHours(date: Date, hours: number) {
const dateCopy = new Date(date)
dateCopy.setHours(dateCopy.getHours() + hours)
return dateCopy
}
const LW11Meetups = ({ meetups }: { meetups?: Meetup[] }) => {
const { supabase } = useConfData()
const now = new Date(Date.now())
const [meets, setMeets] = useState<Meetup[]>(meetups ?? [])
const [realtimeChannel, setRealtimeChannel] = useState<ReturnType<
SupabaseClient['channel']
> | null>(null)
const [activeMeetup, setActiveMeetup] = useState<Meetup>(meets[0])
const [isMounted, setIsMounted] = useState(false)
useEffect(() => {
setIsMounted(true)
}, [])
useEffect(() => {
// Listen to realtime changes
if (supabase && !realtimeChannel) {
const channel = supabase
.channel('lw11_meetups')
.on(
'postgres_changes',
{
event: '*',
schema: 'public',
table: 'lw11_meetups',
filter: undefined,
},
async () => {
const { data: newMeets } = await supabase
.from('lw11_meetups')
.select('*')
.neq('isPublished', false)
console.log('newMeets', newMeets)
setMeets(
newMeets?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1))!
)
}
)
.subscribe(async (status) => {
if (status !== 'SUBSCRIBED') {
return null
}
})
setRealtimeChannel(channel)
}
return () => {
// Cleanup realtime subscription on unmount
realtimeChannel?.unsubscribe()
}
}, [])
function handleSelectMeetup(meetup: Meetup) {
setActiveMeetup(meetup)
}
if (!isMounted) return null
return (
<div className="max-w-7xl mx-auto grid grid-cols-1 xl:grid-cols-12 gap-8 text-[#EDEDED]">
<div className="mb-4 col-span-1 xl:col-span-4 flex flex-col max-w-lg text-[#575E61]">
<h2 className="text-sm font-mono uppercase tracking-[1px] mb-4">Community meetups</h2>
<p className="text-base xl:max-w-md mb-2">
Celebrate{' '}
<strong className="font-normal text-foreground-light">
Supabase Special Announcement
</strong>{' '}
at our live community-driven meetups. Network with the community, listen to tech talks and
grab some swag.
</p>
<TextLink label="Read more about meetups" hasChevron url="/blog/community-meetups-lw11" />
</div>
<div className="col-span-1 xl:col-span-6 xl:col-start-7 w-full max-w-4xl flex flex-wrap gap-x-3 gap-y-1">
{meets &&
meets
?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1))
.map((meetup: Meetup, i: number) => {
const startAt = new Date(meetup.start_at)
const endAt = addHours(new Date(meetup.start_at), 3)
const after = now > startAt
const before3H = now < endAt
const liveNow = after && before3H
return (
<Link
key={meetup.id}
href={meetup.link ?? ''}
target="_blank"
onClick={() => handleSelectMeetup(meetup)}
onMouseOver={() => handleSelectMeetup(meetup)}
title={liveNow ? 'Live now' : undefined}
className={cn(
'h-10 group inline-flex items-center flex-wrap text-4xl',
'hover:text-[#EDEDED] !leading-none transition-colors',
meetup.id === activeMeetup.id ? 'text-[#EDEDED]' : 'text-[#575E61]',
liveNow && 'text-[#B0B0B0]'
)}
>
{liveNow && (
<div className="w-2 h-2 rounded-full bg-brand mr-2 mb-4 animate-pulse" />
)}
<span>{meetup.title}</span>
{i !== meets.length - 1 && ', '}
</Link>
)
})}
</div>
<div className="col-span-1 xl:col-span-6 xl:col-start-7 w-full max-w-4xl text-sm flex-1">
{activeMeetup?.display_info}
</div>
</div>
)
}
export default LW11Meetups
@@ -0,0 +1,93 @@
import React from 'react'
import Image from 'next/image'
import Link from 'next/link'
import { buildDays, mainDays } from './Releases/data'
const LWXSummary = () => {
return (
<div className="w-full border bg-alternative-200 flex flex-col rounded-lg text-foreground-lighter mt-12">
<div className="w-full p-4 flex justify-between items-center">
<Link
href="/launch-week"
className="flex items-center gap-1.5 leading-none uppercase text-xs"
>
<span className="text-foreground tracking-[1px]">Launch Week</span>{' '}
<Image
src="/images/launchweek/lwx/logos/lwx_logo.svg"
alt="Supabase Launch Week X icon"
width={16}
height={16}
className="w-3 h-3"
/>
</Link>
<div className="font-mono uppercase tracking-wide text-xs">11-15 Dec</div>
</div>
<div className="pb-4 border-t p-4">
<div className="font-mono uppercase text-xs text-foreground tracking-wide mb-3">
Main Stage
</div>
<ul className="flex flex-col gap-2">
{mainDays.map(
(day, i: number) =>
day.shipped && (
<ol key={day.id}>
<Link href={day.blog} className="group flex py-1 gap-2 hover:text-foreground">
<span className="shrink-0 text-sm font-mono uppercase leading-6">
Day {i + 1} -
</span>
<span className="leading-6">{day.description}</span>
</Link>
</ol>
)
)}
</ul>
</div>
<div className="w-[calc(100%+2px)] bg-surface-100 flex flex-col gap-2 -m-px border rounded-lg">
<div className="p-4">
<div className="font-mono uppercase text-xs text-foreground tracking-wide">
Build Stage
</div>
<ul className="flex flex-col gap-2 mt-4">
{buildDays.map(
(day, i: number) =>
day.is_shipped && (
<ol key={day.id}>
<Link
href={day.links[0].url}
className="relative flex items-center justify-between group w-full py-1 hover:text-foreground"
>
<span className="relative">
<span className="font-mono uppercase mr-2">
{i + 1 < 10 ? '0' : ''}
{i + 1} -
</span>
{day.title}
</span>
</Link>
</ol>
)
)}
<ol className="border-t pt-4 mt-2">
<Link
href="/blog/supabase-hackathon-lwx"
className="relative flex items-center justify-between group w-full py-1 hover:text-foreground"
>
Supabase Launch Week X Hackathon
</Link>
</ol>
<ol>
<Link
href="/blog/community-meetups-lwx"
className="relative flex items-center justify-between group w-full py-1 hover:text-foreground"
>
Supabase Launch Week X Community Meetups
</Link>
</ol>
</ul>
</div>
</div>
</div>
)
}
export default LWXSummary
@@ -0,0 +1,14 @@
import React from 'react'
interface Props {
text: string
className?: string
}
export default function LabelBadge({ text, className }: Props) {
return (
<span className={['text-sm', className].join(' ')}>
<span className="text-foreground-lighter">{text}</span>
</span>
)
}
@@ -0,0 +1,16 @@
export function LaunchWeekLogoHeader() {
return (
<div className="flex flex-col gap-1 md:gap-2 items-center justify-end">
<div className="opacity-0 !animate-[fadeIn_0.5s_cubic-bezier(0.25,0.25,0,1)_0.5s_both] px-2 flex flex-col items-center text-center gap-3">
<h1 className="sr-only font-normal uppercase text-[28px] sm:text-[32px]">Launch week 8</h1>
<p className="text-white radial-gradient-text-600 text-lg sm:text-2xl">
<span className="block">August 7th–11th, 2023</span>
</p>
<div className="text-[#9296AA]">
<p>A week of announcing new features has come to an end.</p>
<p>Thanks to everyone who participated.</p>
</div>
</div>
</div>
)
}
@@ -0,0 +1,28 @@
import React from 'react'
import { cn } from 'ui'
import Panel from '~/components/Panel'
export default function LaunchWeekPrizeCard({
content,
className,
contentClassName,
}: {
content: any
className?: string
contentClassName?: string
}) {
return (
<Panel
hasShimmer
outerClassName={cn('relative rounded-lg overflow-hidden shadow-lg', className)}
innerClassName={cn(
'relative h-full flex flex-col bg-[#121516] rounded-lg overflow-hidden text-[#EDEDED]',
contentClassName
)}
shimmerToColor="hsl(var(--background-alternative-default))"
shimmerFromColor="hsl(var(--border-default))"
>
{content}
</Panel>
)
}
@@ -0,0 +1,78 @@
import React from 'react'
import { cn } from 'ui'
import LabelBadge from './LabelBadge'
import LaunchWeekPrizeCard from './LaunchWeekPrizeCard'
import Image from 'next/image'
import PrizeActions from './Releases/PrizeActions'
export default function LaunchWeekPrizeSection({ className }: { className?: string }) {
return (
<div
id="prizes"
className={cn(
'relative text-left flex flex-col max-w-7xl mx-auto gap-2 scroll-mt-[66px] text-[#575E61]',
className
)}
>
<h2 className="w-full text-sm font-mono uppercase tracking-[1px]">Awards</h2>
<p className="text-2xl text-foreground-lighter">Generate your ticket for a chance to win.</p>
<div className="w-full pt-4">
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mx-auto h-auto text-[#EDEDED]">
<LaunchWeekPrizeCard
className="col-span-full md:col-span-2"
contentClassName="flex flex-col justify-between"
content={
<div className="w-full h-auto lg:min-h-[400px] flex flex-col lg:flex-row items-stretch rounded-lg overflow-hidden">
<div className="relative w-full pl-4 xl:px-4 pt-4 lg:w-2/3 border-b lg:border-none border-muted aspect-[3/1] top-0 -bottom-8 overflow-hidden">
<Image
src="/images/launchweek/11/airpods-max-alpha.png"
alt="Supabase AirPod Max prize"
draggable={false}
width={300}
height={300}
className="absolute p-2 object-cover scale-50 lg:scale-100 lg:object-top w-[90%] h-full overflow-visible opacity-50 pointer-events-none"
/>
</div>
<div className="flex flex-col lg:w-1/2 gap-1 p-4 md:p-8 lg:pl-0 lg:h-full">
<div className="flex flex-col gap-2 flex-grow">
<LabelBadge text="5 sets" />
<p className="xl:mt-4">Win AirPods Max</p>
<p className="text-foreground-lighter text-sm">
Secure your ticket to enter our random prize pool, and amplify your odds by
sharing. Or if you don't leave anything up for chance - join our Hackathon and
showcase your creations. With luck or skill, you could snag these top-tier
headphones!
</p>
</div>
<div className="w-full mt-3 md:mt-6">
<PrizeActions />
</div>
</div>
</div>
}
/>
<div className="w-full flex flex-col gap-4 items-stretch">
<LaunchWeekPrizeCard
className="flex-grow"
content={
<div className="p-4 md:p-6 flex flex-col gap-2 text-sm items-start justify-between h-full">
<LabelBadge text="30 t-shirts" />
<p>Supabase T-shirts</p>
</div>
}
/>
<LaunchWeekPrizeCard
className="flex-grow"
content={
<div className="p-4 md:p-6 flex flex-col gap-2 text-sm items-start justify-between h-full">
<LabelBadge text="25 pins" />
<p>Supabase Pins</p>
</div>
}
/>
</div>
</div>
</div>
</div>
)
}
@@ -0,0 +1,75 @@
import React, { FC } from 'react'
import { buildDays as days } from '~/components/LaunchWeek/X/Releases/data'
import SectionContainer from '~/components/Layouts/SectionContainer'
import AdventCard from './components/AdventCard'
import { motion, useInView } from 'framer-motion'
import { cn } from 'ui'
const BuildStage: FC = () => {
const ref = React.useRef(null)
const isInView = useInView(ref, { margin: '-25%', once: true })
const variants = {
reveal: {
transition: {
type: 'spring',
damping: 10,
mass: 0.75,
stiffness: 100,
staggerChildren: 0.08,
},
},
}
return (
<>
<SectionContainer className="!max-w-none lg:!container lwx-nav-anchor" id="build-stage">
<h3 className="text-foreground uppercase font-mono pb-4 md:pb-8 text-sm tracking-[0.1rem]">
Build Stage
</h3>
<motion.ul
ref={ref}
variants={variants}
animate={isInView ? 'reveal' : 'initial'}
className="w-full grid gap-2 sm:gap-3 xl:gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
>
{days.map((day, i) => (
<li
key={`${day.id}-${i}`}
className={cn(
'relative flex flex-col w-full aspect-square rounded-xl border border-dashed border-muted/50 bg-surface-100/10 col-span-1',
day.className
)}
data-delay={i}
>
<AdventCard day={day} index={i} />
{!day.is_shipped && (
<div className="absolute m-4 md:m-6 lg:m-8">
<svg
width="16"
height="17"
viewBox="0 0 16 17"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g opacity="0.5">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.9999 7.55557V5.95557C3.9999 3.74643 5.79076 1.95557 7.9999 1.95557C10.209 1.95557 11.9999 3.74643 11.9999 5.95557V7.55557C12.8836 7.55557 13.5999 8.27191 13.5999 9.15557V13.1556C13.5999 14.0392 12.8836 14.7556 11.9999 14.7556H3.9999C3.11625 14.7556 2.3999 14.0392 2.3999 13.1556V9.15557C2.3999 8.27191 3.11625 7.55557 3.9999 7.55557ZM10.3999 5.95557V7.55557H5.5999V5.95557C5.5999 4.63008 6.67442 3.55557 7.9999 3.55557C9.32539 3.55557 10.3999 4.63008 10.3999 5.95557Z"
fill="#8B9092"
/>
</g>
</svg>
</div>
)}
</li>
))}
</motion.ul>
</SectionContainer>
</>
)
}
export default BuildStage
@@ -0,0 +1,21 @@
import React from 'react'
import { cn } from 'ui'
import GALogo from '../GALogo'
import SectionContainer from '~/components/Layouts/SectionContainer'
import LW11Background from '../LW11Background'
const LW11Header = ({ className }: { className?: string }) => {
return (
<div className={cn('relative w-full overflow-visible', className)}>
<SectionContainer className="h-full flex flex-col gap-4 !max-w-none lg:!container">
<GALogo className="w-20 md:w-24 aspect-[1.83/1] h-auto min-h-20 md:min-h-24" />
<p className="text-foreground-lighter text-xl md:text-2xl">
Join us in this major milestone and explore all the features that come with it.
</p>
</SectionContainer>
<LW11Background className="absolute z-0 inset-0 w-full flex items-center justify-center opacity-100 transition-opacity aspect-video pointer-events-none" />
</div>
)
}
export default LW11Header
@@ -0,0 +1,87 @@
import React, { FC, useEffect, useRef } from 'react'
import Link from 'next/link'
import { WeekDayProps, mainDays as days } from './data'
import { cn } from 'ui'
import { isBrowser } from 'common'
import SectionContainer from '~/components/Layouts/SectionContainer'
const LWXStickyNav: FC = () => {
const OFFSET = 66
const anchors = useRef<NodeListOf<HTMLHeadingElement> | null>(null)
const links = useRef<NodeListOf<HTMLHeadingElement> | null>(null)
const handleScroll = () => {
let newActiveAnchor: string = ''
anchors.current?.forEach((anchor) => {
const { y: offsetFromTop } = anchor.getBoundingClientRect()
if (offsetFromTop - OFFSET < 0) {
newActiveAnchor = anchor.id
}
})
links.current?.forEach((link) => {
link.classList.remove('!text-foreground')
const sanitizedHref = decodeURI(link.getAttribute('href') ?? '')
.split('#')
.splice(-1)
.join('')
const isMatch = sanitizedHref === newActiveAnchor
if (isMatch) {
link.classList.add('!text-foreground')
}
})
}
useEffect(() => {
if (!isBrowser) return
anchors.current = document.querySelectorAll('.lwx-nav-anchor')
links.current = document.querySelectorAll('.lwx-sticky-nav li a')
window.addEventListener('scroll', handleScroll)
return () => {
window.removeEventListener('scroll', handleScroll)
}
}, [])
return (
<div className="absolute inset-0 pointer-events-none w-full h-full">
<nav className="sticky z-30 top-[64px] bg-[#06080999] backdrop-blur-sm pointer-events-auto w-full border-t border-b border-[#111718] h-[60px] flex items-center">
<SectionContainer className="!max-w-none !py-0 lg:!container flex items-center justify-between font-mono gap-4 md:gap-8 text-sm">
<div className="flex items-center gap-4 md:gap-8">
<ul className="lwx-sticky-nav hidden md:flex items-center gap-2 md:gap-4 text-foreground-muted">
{days.map((day: WeekDayProps) => (
<li key={day.id}>
<Link
href={`#${day.id}`}
className={cn('p-1 transition-colors hover:text-foreground flex items-center')}
>
{day.dd}{' '}
{day.isToday && (
<span
title="Live"
className="w-1 h-1 ml-1 animate-pulse rounded-full bg-brand mb-2 block"
/>
)}
</Link>
</li>
))}
<li>
<Link href="#build-stage" className="p-1 transition-colors hover:text-foreground">
Build Stage
</Link>
</li>
</ul>
</div>
<div></div>
</SectionContainer>
</nav>
</div>
)
}
export default LWXStickyNav
@@ -0,0 +1,29 @@
import React from 'react'
import { mainDays } from './data'
import SectionContainer from '~/components/Layouts/SectionContainer'
import DaySection from './components/DaySection'
import LW11Day1 from '../LW11Day1'
import HackathonCallout from '../HackathonCallout'
import { cn } from 'ui'
const MainStage = ({ className }: { className?: string }) => {
const [day1, ...days] = mainDays
return (
<SectionContainer
className={cn('relative !max-w-none !py-0 lg:!container', className)}
id="main-stage"
>
<LW11Day1 day={day1} className="mb-4 md:mb-8 md:-mx-4" />
<HackathonCallout />
<div>
{days.map((day) => (
<DaySection day={day} key={day.dd} />
))}
</div>
</SectionContainer>
)
}
export default MainStage
@@ -0,0 +1,15 @@
import Link from 'next/link'
import { Button } from 'ui'
export default function PrizeActions() {
return (
<div className="w-full gap-2 flex items-center">
<Button onClick={() => null} type="secondary" size="tiny" asChild>
<Link href="/special-announcement">Claim your ticket</Link>
</Button>
<Button onClick={() => null} type="default" size="tiny" disabled>
Hackathon coming soon
</Button>
</div>
)
}
@@ -0,0 +1,119 @@
import React, { useEffect, useRef, useState } from 'react'
import Link from 'next/link'
import { motion } from 'framer-motion'
import Tilt from 'vanilla-tilt'
import { useWindowSize } from 'react-use'
import { cn } from 'ui'
import { useBreakpoint } from 'common'
import { AdventDay } from '../data'
import { AdventLink } from '../data/lw11_build_stage'
const AdventCard = ({ day, index }: { day: AdventDay; index: number }) => {
const isTablet = useBreakpoint(1024)
const tiltRef = useRef<HTMLDivElement>(null)
const hiddenRef = useRef<HTMLDivElement>(null)
const { width } = useWindowSize()
const [hiddenHeight, setHiddenHeight] = useState(0)
const transition = { type: 'spring', damping: 10, mass: 0.75, stiffness: 100, delay: index / 15 }
const variants = {
initial: {
rotateY: -90,
opacity: 0,
},
...(day.is_shipped && {
reveal: {
rotateY: 0,
opacity: 1,
transition,
},
}),
}
const isClientLibsCard = day.type === 'clientLibs'
useEffect(() => {
if (tiltRef.current) {
Tilt.init(tiltRef.current, {
glare: false,
max: isClientLibsCard ? 1 : 4,
gyroscope: false,
'full-page-listening': false,
})
}
}, [tiltRef])
useEffect(() => {
if (hiddenRef?.current) {
const { height } = hiddenRef.current.getBoundingClientRect()
setHiddenHeight(height)
}
}, [hiddenRef, width])
return (
<div id={day.id} ref={tiltRef} className="absolute -inset-px group will-change">
<motion.div
className={cn(
'opacity-0 flex flex-col justify-between w-full h-full p-6 rounded-xl bg-[#121516] transition-colors text-[#575E61] border hover:border-strong overflow-hidden',
isClientLibsCard && 'xl:flex-row'
)}
variants={variants}
>
<div className="relative w-full h-full flex flex-col flex-1">
<div className="flex-1 opacity-30 group-hover:opacity-100 transition-opacity">
{day.icon}
</div>
<div
className={cn(
'relative group-hover:!bottom-0 !ease-[.25,.25,0,1] duration-300 transition-all flex flex-col gap-1'
)}
style={{
bottom: isTablet ? 0 : -hiddenHeight + 'px',
}}
>
<h4 className="text-foreground text-lg leading-6">{day.title}</h4>
<div
ref={hiddenRef}
className="relative z-10 !ease-[.25,.25,0,1] duration-300 transition-opacity opacity-100 lg:opacity-0 group-hover:opacity-100"
style={{
backfaceVisibility: 'hidden',
transform: 'translateZ(0)',
WebkitFontSmoothing: 'subpixel-antialiased',
}}
>
<p className="text-[#575E61] text-sm">{day.description}</p>
<div className="flex gap-1 mt-3 flex-wrap">
{day.links?.map((link: AdventLink) => (
<Link
key={link.url}
href={link.url}
target={link.target ?? '_self'}
className="px-2 py-1 pointer-events-auto border border-muted transition-colors text-foreground-light bg-[#191D1E] hover:bg-[#22272A] rounded text-xs"
>
{link.label}
</Link>
))}
</div>
</div>
</div>
</div>
{isClientLibsCard && (
<div className="flex xl:h-full order-first xl:order-last items-end justify-start xl:justify-end xl:w-2/3 gap-4 xl:gap-6 pb-4 mb-4 xl:pb-0 flex-wrap">
{day.icons?.map((link: AdventLink) => (
<Link
key={link.url}
href={link.url}
title={link.label}
target={link.target ?? '_self'}
className="w-8 h-8 md:w-6 md:h-6 xl:w-14 xl:h-14 xl:p-1 inline-flex items-center justify-center pointer-events-auto transition-colors text-foreground-light hover:text-foreground"
>
{link.icon}
</Link>
))}
</div>
)}
</motion.div>
</div>
)
}
export default AdventCard
@@ -0,0 +1,129 @@
import React from 'react'
import Link from 'next/link'
import Image from 'next/image'
import { ArrowRightIcon } from '@heroicons/react/outline'
import { IconEdit2, cn } from 'ui'
import { useBreakpoint } from 'common'
import { WeekDayProps } from '../data'
import CountdownComponent from '../../Countdown'
import { DayLink } from '.'
const DaySection = ({ day }: { day: WeekDayProps }) => {
const isMobile = useBreakpoint(639)
const cssGroup = 'group/d' + day.d
return (
<section
id={day.id}
className="lwx-nav-anchor border-b py-8 first:border-t border-[#111718] text-[#575E61] scroll-mt-16 grid grid-cols-1 gap-4 md:grid-cols-3"
>
{/* Day title and links */}
<div
id={day.isToday ? 'today' : undefined}
className="flex h-full scroll-mt-10 flex-col gap-4 items-between"
>
<div
className={cn(
'text-sm inline uppercase font-mono text-foreground-muted tracking-[0.1rem]',
day.shipped && 'text-foreground'
)}
>
{day.dd}, {day.date}
</div>
{!!day.links && (
<ul className="flex-1 h-full w-full justify-end grid grid-cols-2 md:flex flex-col gap-1">
{day.links?.map((link) => (
<li key={link.href}>
<DayLink {...link} />
</li>
))}
</ul>
)}
</div>
{/* Day card */}
<div className="flex col-span-2">
{day.shipped && day.steps.length > 0 ? (
<Link
href={day.blog!}
className={cn(
`
bg-[#111415] hover:bg-[#121516] sm:!bg-transparent
min-h-[210px] group sm:aspect-[3.67/1] relative overflow-hidden flex-1 flex flex-col justify-between
hover:border-strong transition-colors border border-muted
rounded-xl text-2xl bg-contain shadow-lg`,
cssGroup
)}
>
<div className="relative p-4 sm:p-6 md:p-8 z-20 flex-grow flex flex-col items-start justify-between gap-2 w-full lg:w-3/5 text-left">
<div className="relative w-full flex items-center gap-2 text-sm translate-x-0 !ease-[.24,0,.22,.99] duration-200 group-hover:-translate-x-6 transition-transform">
<IconEdit2 className="w-4 min-w-4 group-hover:opacity-0 transition-opacity" />
<span>Blog post</span>
<ArrowRightIcon className="w-4 opacity-0 group-hover:opacity-100 transition-opacity" />
</div>
<h2 className="text-lg leading-7 [&_strong]:font-normal [&_strong]:text-foreground">
{day.description}
</h2>
</div>
<div className="relative z-10 border-b border-muted/40 sm:border-none w-full order-first aspect-[2/1] sm:aspect-auto sm:absolute sm:inset-0">
{day.steps[0]?.bg_layers &&
day.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div
key={`${day.title}-image-${i}`}
className="absolute sm:opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100 shadow-[inset_0_-40px_40px_-40px_rgba(0,0,0,0.6)] sm:shadow-none"
>
<Image
src={!!layer.mobileImg && isMobile ? (layer.mobileImg as any) : layer.img}
className={`
absolute opacity-50 lg:opacity-100 object-cover
w-full h-full z-0 transition-all duration-300
object-center sm:object-right
`}
fill
quality={100}
alt={day.title}
/>
</div>
)
)}
</div>
</Link>
) : (
<div
className={cn(
`min-h-[210px] group aspect-[3.67/1] relative overflow-hidden flex-1 flex flex-col justify-end
bg-surface-100/10 border border-dashed border-[#14191B] text-[#8B9092]
rounded-xl p-4 sm:p-6 md:p-8 text-2xl bg-contain shadow-lg`,
cssGroup
)}
>
<div className="flex items-center gap-2 h-5">
<svg
width="17"
height="17"
viewBox="0 0 17 17"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g opacity="0.5">
<path
fillRule="evenodd"
clipRule="evenodd"
d="M4.32656 7.58047V5.98047C4.32656 3.77133 6.11742 1.98047 8.32656 1.98047C10.5357 1.98047 12.3266 3.77133 12.3266 5.98047V7.58047C13.2102 7.58047 13.9266 8.29681 13.9266 9.18047V13.1805C13.9266 14.0641 13.2102 14.7805 12.3266 14.7805H4.32656C3.44291 14.7805 2.72656 14.0641 2.72656 13.1805V9.18047C2.72656 8.29681 3.44291 7.58047 4.32656 7.58047ZM10.7266 5.98047V7.58047H5.92656V5.98047C5.92656 4.65499 7.00108 3.58047 8.32656 3.58047C9.65205 3.58047 10.7266 4.65499 10.7266 5.98047Z"
fill="currentColor"
/>
</g>
</svg>
{day.hasCountdown && <CountdownComponent date={day.published_at} showCard={false} />}
</div>
</div>
)}
</div>
</section>
)
}
export default DaySection
@@ -0,0 +1,90 @@
import { useEffect, useState } from 'react'
import {
IconDocumentation,
IconMicSolid,
IconMusic,
IconProductHunt,
IconYoutubeSolid,
cn,
} from 'ui'
import Link from 'next/link'
import { StepLink } from '../data/lw11_data'
import { ExpandableVideo } from 'ui-patterns/ExpandableVideo'
interface DayLink extends StepLink {
className?: string
}
export const DayLink = ({ type, icon, text, href = '', className }: DayLink) => {
const [isMounted, setIsMounted] = useState(false)
useEffect(() => {
setIsMounted(true)
}, [])
if (!isMounted) return null
const linkTypes = {
blog: {
icon: IconDocumentation,
text: 'Blog Post',
},
docs: {
icon: IconDocumentation,
text: 'Docs',
},
productHunt: {
icon: IconProductHunt,
text: 'Product Hunt',
},
video: {
icon: IconYoutubeSolid,
text: 'Watch video',
},
podcast: {
icon: IconMusic,
text: 'Podcast',
},
xSpace: {
icon: IconMicSolid,
text: 'X Space',
},
}
const isTargetBlank = () => {
switch (type) {
case 'productHunt':
case 'xSpace':
case 'docs':
return true
}
}
const Icon = icon ?? linkTypes[type].icon
const Text = () => <>{text ?? linkTypes[type]?.text}</>
const Component = type === 'video' ? 'div' : Link
const Asd = ({ component: Comp, ...props }: any) => (
<Comp
className={cn(
'py-1 flex gap-2 items-center hover:text-foreground transition-colors text-sm',
className
)}
{...props}
>
<span className="w-4 h-4 flex items-center justify-center">
<Icon />
</span>
<Text />
</Comp>
)
if (type === 'video')
return <ExpandableVideo videoId={href} trigger={<Asd component={Component} />} />
return <Asd href={href} target={isTargetBlank() ? '_blank' : '_self'} component={Component} />
}
export default {
DayLink,
}
@@ -0,0 +1,4 @@
export { default as mainDays } from './lw11_data'
export type { StepProps, StepLink, WeekDayProps } from './lw11_data'
export { days as buildDays } from './lw11_build_stage'
export type { AdventDay } from './lw11_build_stage'
@@ -0,0 +1,471 @@
export interface AdventDay {
icon?: any
className?: string
id: string
title: string
description?: string
is_shipped: boolean
links: AdventLink[]
icons?: AdventLink[]
type?: string
}
export interface AdventLink {
url: string
label?: string
icon?: any
target?: '_blank'
}
export const days: AdventDay[] = [
{
title: 'Supabase Album',
description: 'The best soundtrack to build your app in a weekend',
icon: (
<svg
width="28"
height="27"
viewBox="0 0 28 27"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M26.7005 0.762595C26.924 0.952594 27.0528 1.23111 27.0528 1.52442V18.7135C27.0528 19.2658 26.605 19.7135 26.0528 19.7135C25.5005 19.7135 25.0528 19.2658 25.0528 18.7135V2.70048L10.8169 5.0192V21.358C10.8169 21.9103 10.3692 22.358 9.81689 22.358C9.26461 22.358 8.81689 21.9103 8.81689 21.358V4.1689C8.81689 3.67866 9.17228 3.26072 9.65613 3.18191L25.892 0.537428C26.1815 0.490276 26.4771 0.572595 26.7005 0.762595Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.75794 18.3916C4.04672 18.3916 2.69897 19.7414 2.69897 21.3583C2.69897 22.9752 4.04672 24.325 5.75794 24.325C7.46916 24.325 8.8169 22.9752 8.8169 21.3583C8.8169 19.7414 7.46916 18.3916 5.75794 18.3916ZM0.698975 21.3583C0.698975 18.5937 2.98575 16.3916 5.75794 16.3916C8.53013 16.3916 10.8169 18.5937 10.8169 21.3583C10.8169 24.1229 8.53013 26.325 5.75794 26.325C2.98575 26.325 0.698975 24.1229 0.698975 21.3583Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M21.9935 15.7466C20.2823 15.7466 18.9346 17.0964 18.9346 18.7133C18.9346 20.3302 20.2823 21.68 21.9935 21.68C23.7048 21.68 25.0525 20.3302 25.0525 18.7133C25.0525 17.0964 23.7048 15.7466 21.9935 15.7466ZM16.9346 18.7133C16.9346 15.9487 19.2213 13.7466 21.9935 13.7466C24.7657 13.7466 27.0525 15.9487 27.0525 18.7133C27.0525 21.4779 24.7657 23.68 21.9935 23.68C19.2213 23.68 16.9346 21.4779 16.9346 18.7133Z"
fill="#EDEDED"
/>
</svg>
),
id: 'supabase-album',
is_shipped: true,
links: [
{
url: 'https://supabase.productions/',
label: 'Listen now',
target: '_blank',
},
],
},
{
title: 'Postgres Language Server',
description: 'Implementing the Parser',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.43881 3.75378C4.10721 1.93324 5.84055 0.723145 7.77992 0.723145H15.6033V0.734736H17.0394C23.8756 0.734736 29.4173 6.27652 29.4173 13.1127V20.1749C29.4173 20.7272 28.9696 21.1749 28.4173 21.1749C27.8651 21.1749 27.4173 20.7272 27.4173 20.1749V13.1127C27.4173 7.38109 22.771 2.73474 17.0394 2.73474H15.4396C15.3877 2.73474 15.3366 2.73078 15.2868 2.72314H7.77992C6.6793 2.72314 5.6956 3.40989 5.31627 4.44308L2.7812 11.3479C2.37375 12.4577 2.69516 13.7038 3.58855 14.4781L5.32807 15.9856C6.12772 16.6786 6.58711 17.6847 6.58709 18.7428L6.58706 21.5134C6.58702 23.8192 8.45627 25.6885 10.7621 25.6885C11.4007 25.6885 11.9184 25.1708 11.9184 24.5322L11.9185 12.1874C11.9185 9.59233 12.955 7.10481 14.7977 5.27761C15.1899 4.88873 15.823 4.8914 16.2119 5.28357C16.6008 5.67574 16.5981 6.3089 16.2059 6.69777C14.742 8.14943 13.9185 10.1257 13.9185 12.1874L13.9184 24.5323C13.9184 26.2754 12.5053 27.6885 10.7621 27.6885C7.35169 27.6885 4.58701 24.9238 4.58706 21.5134L4.58709 18.7428C4.5871 18.2647 4.37953 17.8101 4.01822 17.497L2.27871 15.9894C0.757203 14.6708 0.209829 12.5486 0.90374 10.6586L3.43881 3.75378ZM16.539 18.5225C17.0348 18.2791 17.634 18.4838 17.8773 18.9796C19.1969 21.6686 21.9313 23.3727 24.9267 23.3726L32.8043 23.3726C33.3566 23.3725 33.8043 23.8203 33.8043 24.3725C33.8044 24.9248 33.3566 25.3725 32.8044 25.3726L29.4081 25.3726C29.4142 25.4172 29.4173 25.4628 29.4173 25.5091C29.4173 29.0627 26.1868 31.4165 22.6091 31.4165C19.2966 31.4165 16.5385 29.0518 15.9271 25.9188C15.8213 25.3767 16.175 24.8516 16.717 24.7458C17.2591 24.64 17.7843 24.9936 17.89 25.5357C18.3217 27.7475 20.2716 29.4165 22.6091 29.4165C25.447 29.4165 27.4173 27.6256 27.4173 25.5091C27.4173 25.4628 27.4205 25.4172 27.4266 25.3726L24.9267 25.3726C21.1684 25.3727 17.7375 23.2346 16.0818 19.8607C15.8385 19.3649 16.0432 18.7658 16.539 18.5225Z"
fill="#EDEDED"
/>
<path
d="M21.7224 13.0006C21.7224 13.6338 22.2358 14.1472 22.869 14.1472C23.5022 14.1472 24.0156 13.6338 24.0156 13.0006C24.0156 12.3674 23.5022 11.854 22.869 11.854C22.2358 11.854 21.7224 12.3674 21.7224 13.0006Z"
fill="#EDEDED"
/>
</svg>
),
id: 'postgres-language-server-implementing-parser',
is_shipped: true,
links: [
{
url: '/blog/postgres-language-server-implementing-parser',
label: 'Read blog post',
},
],
},
{
title: 'Design at Supabase',
description: "The transformative journey of Supabase's Design team",
icon: (
<svg
width="40"
height="40"
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M20.2446 8.70155C20.2295 7.69665 18.9596 7.26538 18.3333 8.05247L8.88245 19.9299C7.76695 21.3318 8.76744 23.3993 10.5614 23.3993H20.3351L20.45 31.0533C20.4651 32.0582 21.7349 32.4894 22.3612 31.7024L31.8121 19.825C32.9275 18.4231 31.927 16.3556 30.1332 16.3556H20.2949L20.2446 8.70155Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M9.39209 1.42236C9.22689 1.42236 9.06302 1.4277 8.90061 1.43819L8.40165 1.47044L8.33716 0.472517L8.83612 0.440273C9.01998 0.428392 9.20537 0.422363 9.39209 0.422363H10.3485V1.42236H9.39209ZM13.9131 0.422363H15.826V1.42236H13.9131V0.422363ZM19.3905 0.422363H21.3034V1.42236H19.3905V0.422363ZM24.8679 0.422363H26.7808V1.42236H24.8679V0.422363ZM30.3453 0.422363H31.3018C31.4885 0.422363 31.6739 0.428392 31.8577 0.440273L32.3567 0.472517L32.2922 1.47044L31.7932 1.43819C31.6308 1.4277 31.467 1.42236 31.3018 1.42236H30.3453V0.422363ZM4.8229 2.95351L4.44711 3.28333C4.20097 3.49936 3.96908 3.73124 3.75306 3.97738L3.42324 4.35317L2.67165 3.69353L3.00147 3.31774C3.24612 3.03899 3.50872 2.7764 3.78747 2.53175L4.16326 2.20193L4.8229 2.95351ZM36.5306 2.20193L36.9064 2.53175C37.1851 2.7764 37.4477 3.03899 37.6924 3.31774L38.0222 3.69353L37.2706 4.35317L36.9408 3.97738C36.7248 3.73124 36.4929 3.49936 36.2467 3.28333L35.871 2.95351L36.5306 2.20193ZM1.94016 7.93192L1.90792 8.43088C1.89742 8.59329 1.89209 8.75717 1.89209 8.92236V9.87881H0.89209V8.92236C0.89209 8.73564 0.898118 8.55025 0.91 8.36639L0.942244 7.86743L1.94016 7.93192ZM39.7516 7.86744L39.7838 8.36639C39.7957 8.55025 39.8018 8.73564 39.8018 8.92236V9.87881H38.8018V8.92236C38.8018 8.75717 38.7964 8.59329 38.7859 8.43088L38.7537 7.93192L39.7516 7.86744ZM39.8018 13.4433V15.3562H38.8018V13.4433H39.8018ZM1.89209 13.4433V15.3562H0.89209V13.4433H1.89209ZM1.89209 18.9207V20.8336H0.89209V18.9207H1.89209ZM39.8018 18.9207V20.8336H38.8018V18.9207H39.8018ZM1.89209 24.3982V26.3111H0.89209V24.3982H1.89209ZM39.8018 24.3982V26.3111H38.8018V24.3982H39.8018ZM1.89209 29.8756V30.832C1.89209 30.9972 1.89742 31.1611 1.90792 31.3235L1.94016 31.8225L0.942244 31.887L0.91 31.388C0.898118 31.2041 0.89209 31.0188 0.89209 30.832V29.8756H1.89209ZM39.8018 29.8756V30.832C39.8018 31.0188 39.7957 31.2041 39.7838 31.388L39.7516 31.887L38.7537 31.8225L38.7859 31.3235C38.7964 31.1611 38.8018 30.9972 38.8018 30.832V29.8756H39.8018ZM3.42324 35.4012L3.75306 35.777C3.96908 36.0232 4.20097 36.255 4.4471 36.4711L4.8229 36.8009L4.16326 37.5525L3.78746 37.2226C3.50872 36.978 3.24612 36.7154 3.00147 36.4367L2.67165 36.0609L3.42324 35.4012ZM38.0222 36.0609L37.6924 36.4367C37.4477 36.7154 37.1851 36.978 36.9064 37.2226L36.5306 37.5525L35.871 36.8009L36.2467 36.4711C36.4929 36.255 36.7248 36.0232 36.9408 35.777L37.2706 35.4012L38.0222 36.0609ZM8.40165 38.284L8.90061 38.3162C9.06302 38.3267 9.2269 38.332 9.39209 38.332H10.3485V39.332H9.39209C9.20537 39.332 9.01998 39.326 8.83612 39.3141L8.33716 39.2819L8.40165 38.284ZM32.3567 39.2819L31.8577 39.3141C31.6739 39.326 31.4885 39.332 31.3018 39.332H30.3453V38.332H31.3018C31.467 38.332 31.6308 38.3267 31.7932 38.3162L32.2922 38.284L32.3567 39.2819ZM13.9131 38.332H15.826V39.332H13.9131V38.332ZM19.3905 38.332H21.3034V39.332H19.3905V38.332ZM24.8679 38.332H26.7808V39.332H24.8679V38.332Z"
fill="#EDEDED"
/>
</svg>
),
id: 'design-at-supabase',
is_shipped: true,
links: [
{
url: '/blog/how-design-works-at-supabase',
label: 'Read blog post',
},
],
},
{
title: 'Supabase Grafana',
description: 'Observability for your Supabase project',
is_shipped: true,
icon: (
<svg
width="34"
height="36"
viewBox="0 0 34 36"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M33.4652 15.7973C33.4026 15.2339 33.34 14.5452 33.0896 13.794C32.9017 13.0427 32.5887 12.2288 32.1505 11.3523C31.7122 10.4759 31.1488 9.59936 30.4601 8.72288C30.2097 8.40986 29.8967 8.03422 29.5211 7.7212C30.0219 5.71781 28.895 4.02746 28.895 4.02746C27.0168 3.90224 25.7647 4.5909 25.3264 4.96654C25.2639 4.96654 25.2012 4.90394 25.076 4.84132C24.763 4.71612 24.45 4.5909 24.0743 4.4657C23.6987 4.34048 23.3857 4.27788 23.01 4.15266C22.6344 4.09006 22.2587 4.02746 21.9457 3.96484C21.8831 3.96484 21.8205 3.96484 21.7579 3.96484C20.944 1.3354 18.565 0.208496 18.565 0.208496C15.9356 1.89886 15.4347 4.21527 15.4347 4.21527C15.4347 4.21527 15.4347 4.27788 15.4347 4.34048C15.3095 4.40308 15.1217 4.40308 14.9965 4.4657C14.8086 4.5283 14.6208 4.5909 14.3704 4.65352C14.1826 4.71612 13.9948 4.77872 13.7443 4.90394C13.3687 5.09176 12.9305 5.27956 12.5548 5.46738C12.1792 5.6552 11.8036 5.90562 11.4279 6.15606C11.3653 6.15606 11.3653 6.09344 11.3653 6.09344C7.67159 4.71612 4.41608 6.40648 4.41608 6.40648C4.10306 10.288 5.85602 12.7923 6.23166 13.2305C6.16904 13.4809 6.04384 13.7314 5.98123 13.9818C5.73081 14.8583 5.48038 15.7973 5.35518 16.7365C5.35518 16.8617 5.29256 16.9869 5.29256 17.1121C1.91185 18.8024 0.910156 22.2457 0.910156 22.2457C3.72742 25.5013 7.04553 25.689 7.04553 25.689C7.48378 26.4404 7.92202 27.1289 8.48546 27.8176C8.73588 28.068 8.98631 28.3811 9.17413 28.6315C8.17244 31.574 9.29934 34.0157 9.29934 34.0157C12.4296 34.1409 14.4956 32.6383 14.9339 32.2627C15.2469 32.3879 15.5599 32.4504 15.8729 32.5758C16.812 32.8262 17.8138 32.9514 18.8154 33.0139C19.0658 33.0139 19.3163 33.0139 19.5667 33.0139H19.6919H19.7545H19.8797H20.0049C21.5075 35.1425 24.0743 35.4556 24.0743 35.4556C25.9525 33.5147 26.0151 31.574 26.0151 31.1357V31.0732V31.0105C26.3907 30.7601 26.7663 30.4472 27.142 30.1341C27.8933 29.4454 28.5193 28.6942 29.0828 27.8803C29.1454 27.8176 29.208 27.7551 29.208 27.6299C31.3366 27.7551 32.7765 26.3152 32.7765 26.3152C32.4009 24.1239 31.1487 23.0596 30.8983 22.8719H30.8358C30.8358 22.7465 30.8358 22.6213 30.8358 22.4961C30.8358 22.2457 30.8358 21.9953 30.8358 21.8076V21.4945V21.4318V21.3693V21.3066V21.1814V20.9937C30.8358 20.931 30.8358 20.8685 30.8358 20.8058C30.8358 20.7433 30.8358 20.6806 30.8358 20.6179V20.4302V20.2423C30.7731 19.9919 30.7731 19.7415 30.7106 19.5536C30.4601 18.6147 30.1471 17.7381 29.6463 16.9242C29.1454 16.1104 28.582 15.4217 27.8933 14.7957C27.2046 14.1696 26.4534 13.7314 25.6395 13.3557C24.8256 12.9801 24.0117 12.7923 23.1353 12.6671C22.697 12.6044 22.3214 12.6044 21.8831 12.6044H21.7579H21.6953H21.6327H21.5701H21.4449C21.3823 12.6044 21.3196 12.6044 21.2571 12.6044C21.0692 12.6044 20.8188 12.6671 20.631 12.6671C19.8171 12.7923 19.0033 13.1053 18.3146 13.5435C17.6259 13.9818 16.9999 14.4826 16.499 15.0461C15.9982 15.6095 15.6225 16.2982 15.3721 16.9869C15.1217 17.6756 14.9965 18.3641 14.9339 19.0528C14.9339 19.2407 14.9339 19.3659 14.9339 19.5536C14.9339 19.6163 14.9339 19.6163 14.9339 19.679V19.8042C14.9339 19.8667 14.9339 19.9919 14.9339 20.0546C14.9965 20.3675 15.0591 20.7433 15.1217 21.0562C15.3095 21.6822 15.6225 22.2457 15.9356 22.7465C16.3112 23.2475 16.7494 23.6231 17.1877 23.936C17.6259 24.2491 18.1268 24.4995 18.6276 24.6247C19.1285 24.7499 19.5667 24.8126 20.0676 24.8126C20.1301 24.8126 20.1928 24.8126 20.2553 24.8126H20.318H20.3806C20.4432 24.8126 20.5058 24.8126 20.5058 24.8126C20.5058 24.8126 20.5058 24.8126 20.5684 24.8126H20.631H20.6936C20.7562 24.8126 20.8188 24.8126 20.8814 24.8126C20.944 24.8126 21.0067 24.8126 21.0692 24.7499C21.1944 24.7499 21.2571 24.6874 21.3823 24.6874C21.5701 24.6247 21.7579 24.5622 21.9457 24.437C22.1335 24.3743 22.2587 24.2491 22.4466 24.1239C22.5091 24.1239 22.5092 24.0614 22.5718 23.9987C22.7596 23.8735 22.7596 23.6231 22.6344 23.4979C22.5092 23.3727 22.3214 23.31 22.1962 23.4352C22.1335 23.4352 22.1335 23.4979 22.071 23.4979C21.9457 23.5604 21.8205 23.6231 21.6327 23.6856C21.5075 23.7483 21.3196 23.7483 21.1944 23.8108C21.1319 23.8108 21.0067 23.8108 20.944 23.8108C20.8814 23.8108 20.8814 23.8108 20.8188 23.8108C20.7562 23.8108 20.7562 23.8108 20.6936 23.8108C20.631 23.8108 20.631 23.8108 20.5684 23.8108C20.5058 23.8108 20.4432 23.8108 20.4432 23.8108H20.3806H20.318C20.2553 23.8108 20.2554 23.8108 20.1928 23.8108C19.8171 23.7483 19.5041 23.6856 19.1285 23.4979C18.7528 23.3727 18.4398 23.1223 18.1267 22.8719C17.8138 22.6213 17.5633 22.2457 17.3755 21.9328C17.1877 21.6197 16.9999 21.1814 16.9372 20.7433C16.8746 20.5554 16.8746 20.305 16.8746 20.1171C16.8746 20.0546 16.8746 19.9919 16.8746 19.9294V19.8667V19.8042C16.8746 19.679 16.8746 19.5536 16.9372 19.4284C17.1251 18.4893 17.5633 17.6129 18.3146 16.8617C18.5024 16.6738 18.6902 16.5486 18.8781 16.3607C19.0658 16.2355 19.3163 16.1104 19.5041 15.9852C19.7545 15.86 20.0049 15.7973 20.1928 15.7347C20.4432 15.6721 20.6936 15.6095 20.944 15.6095C21.0692 15.6095 21.1944 15.6095 21.3196 15.6095H21.3823H21.5075H21.5701H21.6953C21.9457 15.6095 22.2587 15.6721 22.5091 15.7347C23.07Line truncated
fill="#EDEDED"
/>
</svg>
),
id: 'supabase-grafana',
links: [
{
url: 'https://github.com/supabase/supabase-grafana',
label: 'View on GitHub',
target: '_blank',
},
],
},
{
title: 'pg_graphql: Postgres functions',
description: 'pg_graphql now supports User Defined Functions (UDFs)',
is_shipped: true,
icon: (
<svg
width="32"
height="36"
viewBox="0 0 32 36"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M12.662 31.8127L5.49355 27.6737C4.92892 28.2646 4.13313 28.6326 3.25138 28.6326C1.53875 28.6326 0.150391 27.2442 0.150391 25.5314C0.150391 24.0709 1.16004 22.8461 2.51943 22.5172V14.2427C1.16004 13.9137 0.150391 12.689 0.150391 11.2284C0.150391 9.51568 1.53875 8.12724 3.25138 8.12724C4.13313 8.12724 4.92893 8.49528 5.49355 9.08614L12.662 4.94716C12.5815 4.67102 12.5382 4.37893 12.5382 4.07676C12.5382 2.36403 13.9266 0.975586 15.6392 0.975586C17.3519 0.975586 18.7402 2.36403 18.7402 4.07676C18.7402 4.37806 18.6972 4.66932 18.6171 4.94475L25.7866 9.08429C26.3511 8.49446 27.1462 8.12715 28.0271 8.12715C29.7397 8.12715 31.1281 9.51559 31.1281 11.2283C31.1281 12.6871 30.1208 13.9107 28.7639 14.2414V22.5183C30.1208 22.8491 31.1281 24.0726 31.1281 25.5314C31.1281 27.2442 29.7397 28.6326 28.0271 28.6326C27.1462 28.6326 26.3511 28.2653 25.7866 27.6755L18.6171 31.8151C18.6973 32.0905 18.7402 32.3817 18.7402 32.683C18.7402 34.3957 17.3519 35.7842 15.6392 35.7842C13.9266 35.7842 12.5382 34.3957 12.5382 32.683C12.5382 32.3809 12.5814 32.0888 12.662 31.8127ZM15.6392 7.17793C15.9416 7.17793 16.2339 7.13464 16.5103 7.05391L25.8838 23.2902C25.4635 23.6923 25.1561 24.2114 25.014 24.7953H6.26446C6.12268 24.2129 5.81648 23.6949 5.39782 23.2932L14.7723 7.05513C15.0474 7.13507 15.3383 7.17793 15.6392 7.17793ZM6.26444 26.2677C6.25374 26.3117 6.24209 26.3553 6.22954 26.3985L13.3994 30.5382C13.9639 29.9488 14.7587 29.5818 15.6392 29.5818C16.5206 29.5818 17.3162 29.9496 17.8808 30.5401L25.0496 26.4009C25.0368 26.3569 25.0249 26.3125 25.014 26.2677H6.26444ZM3.99177 14.2406C5.34689 13.9086 6.35236 12.686 6.35236 11.2284C6.35236 10.9275 6.3095 10.6365 6.22954 10.3614L13.3995 6.22159C13.4313 6.25482 13.4639 6.28734 13.4971 6.31912L4.12403 22.5548C4.08034 22.542 4.03624 22.5301 3.99177 22.5192V14.2406ZM27.1586 22.5535C27.2025 22.5407 27.2468 22.5289 27.2916 22.518V14.2417C25.934 13.9115 24.9261 12.6876 24.9261 11.2283C24.9261 10.9265 24.9692 10.6348 25.0496 10.359L17.8807 6.21978C17.8493 6.25259 17.8172 6.28471 17.7845 6.31612L27.1586 22.5535Z"
fill="#EDEDED"
/>
</svg>
),
id: 'pg-graphql-postgres-functions',
links: [
{
url: '/blog/pg-graphql-postgres-functions',
label: 'Read blog post',
},
],
},
{
title: 'PostgREST 12',
description: 'PostgREST 12 is out: take a look at some of the major new features',
is_shipped: true,
className: 'xl:col-span-2 xl:h-auto xl:aspect-auto',
icon: (
<svg
width="27"
height="40"
viewBox="0 0 27 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M15.0322 36.3902L14.3034 37.2516C11.7407 35.013 7.01284 29.8864 8.60341 27.2884C10.194 24.6905 13.3899 25.1014 14.789 25.6316L7.74209 18.2973L11.8373 13.1528C13.3448 11.2589 13.3997 8.5907 11.9712 6.63648L9.15036 2.77743C8.9936 2.56299 9.03699 2.26258 9.24801 2.10126C9.45574 1.94245 9.7517 1.97543 9.91937 2.17607L18.8316 12.8409C17.6386 13.8717 15.1335 16.8169 14.6563 20.3515C14.1791 23.8861 18.1983 27.8627 20.2675 29.4092L19.5164 30.3589C16.4015 28.7684 12.9333 29.5417 11.9833 31.552C11.2234 33.1603 13.6993 35.4476 15.0322 36.3902Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M8.19759 0.72708C9.14118 0.00571147 10.4855 0.155532 11.2472 1.06693L19.3767 10.7951L26.0245 10.7951L26.0244 11.6733L20.1105 11.6733L21.2505 13.0375L19.963 14.1501C19.4762 14.5707 18.6221 15.6091 17.8598 16.8512C17.6227 17.2375 17.3991 17.6362 17.2004 18.035H26.0239V18.9131H16.8061C16.5747 19.4971 16.4176 20.0613 16.3731 20.5649C16.2712 21.718 16.778 23.0811 17.8987 24.5981C18.0694 24.8291 18.2477 25.055 18.4306 25.2745H26.024V26.1526H19.2161C19.968 26.9389 20.7262 27.5922 21.3035 28.0236L22.7276 29.088L20.2085 32.2733H26.0243V33.1515H14.0831L14.0904 33.1609C14.6453 33.8766 15.456 34.571 16.0314 34.978L17.5719 36.0674L14.4036 39.5637L13.9864 39.2718L13.1656 38.5547C11.8166 37.3764 9.88352 35.4297 8.47296 33.3885C8.41881 33.3101 8.36506 33.2311 8.31182 33.1515H0.193359V32.2733H7.76359C7.35983 31.575 7.01869 30.8459 6.80346 30.1156C6.47287 28.9938 6.37285 27.6191 7.12826 26.3853C7.17696 26.3057 7.22678 26.2282 7.27763 26.1526H0.193359V25.2745H7.99604C8.77306 24.4921 9.68669 24.0215 10.597 23.7655L5.93479 18.9131H0.193359V18.035H5.7401L10.484 12.0755C10.5868 11.9464 10.6796 11.812 10.7625 11.6733H0.193359V10.7951H11.1403C11.4367 9.74213 11.2506 8.58204 10.5748 7.6576L7.75399 3.79855C7.04195 2.82446 7.23903 1.45989 8.19759 0.72708ZM18.7299 31.8999L19.4613 32.2733H13.5844C13.5737 32.2303 13.5685 32.1938 13.5665 32.1666L13.5658 32.1543C13.7319 31.8503 14.2141 31.4922 15.2427 31.3084C16.2341 31.1312 17.4976 31.2706 18.7299 31.8999ZM10.6345 1.57894C10.147 0.99558 9.2865 0.899685 8.68253 1.36141C8.06899 1.83046 7.94285 2.70388 8.3986 3.32736L11.2194 7.1864C12.4002 8.80178 12.3549 11.0073 11.1087 12.5728L6.50588 18.3551L12.1887 24.2697L11.442 24.3942C10.1196 24.6147 8.73644 25.2878 7.80923 26.8022C7.21941 27.7656 7.27116 28.878 7.56936 29.8899C7.86856 30.9052 8.45125 31.9526 9.12984 32.9346C10.491 34.9042 12.3731 36.8023 13.6908 37.9534L14.4036 38.5759L16.3999 36.2165L15.5703 35.6299C14.9529 35.1932 14.0769 34.4466 13.4594 33.6501C13.1504 33.2516 12.9395 32.8829 12.839 32.5695C12.7985 32.4432 12.7775 32.3253 12.7702 32.2245C12.7639 32.1379 12.7645 32.0243 12.7975 31.9239L12.7981 31.9221L12.8159 31.8696L12.8256 31.8489C13.1406 31.1825 13.9487 30.7285 15.1022 30.5224C16.2707 30.3135 17.7106 30.4829 19.093 31.1888L19.7734 31.5362L21.5923 29.2363L20.8255 28.6632C19.8489 27.9334 18.3962 26.6151 17.2565 25.0725C16.0848 23.4867 15.451 21.9285 15.5777 20.4946C15.6911 19.2121 16.3986 17.7055 17.1793 16.4335C17.9625 15.1575 18.8667 14.0421 19.4409 13.5459L20.1342 12.9469L10.6345 1.57894Z"
fill="#EDEDED"
/>
</svg>
),
id: 'postgrest-12',
links: [
{
url: '/blog/postgrest-12',
label: 'Read blog post',
},
],
},
{
title: 'Supavisor 1.0',
description: 'A scalable connection pooler for Postgres',
is_shipped: true,
icon: (
<svg
width="33"
height="33"
viewBox="0 0 33 33"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M6.26747 1.22998C6.26747 0.677696 6.72413 0.22998 7.28747 0.22998H26.4058C26.9691 0.22998 27.4258 0.677696 27.4258 1.22998V7.96132C27.4258 8.5136 26.9691 8.96132 26.4058 8.96132H22.6745L25.7709 12.2508H31.671C32.2343 12.2508 32.691 12.6986 32.691 13.2508V19.9822C32.691 20.5345 32.2343 20.9822 31.671 20.9822H24.805C24.2417 20.9822 23.785 20.5345 23.785 19.9822V13.2508C23.785 13.2003 23.7889 13.1506 23.7962 13.1021L19.8986 8.96132H17.8671L17.889 12.251H20.2796C20.8429 12.251 21.2996 12.6987 21.2996 13.251V19.5681L26.5941 24.7588C26.8782 24.6939 27.1743 24.6596 27.4786 24.6596C29.6219 24.6596 31.3594 26.363 31.3594 28.4643C31.3594 30.5656 29.6219 32.269 27.4786 32.269C25.3353 32.269 23.5978 30.5656 23.5978 28.4643C23.5978 27.4111 24.0342 26.4579 24.7395 25.769L19.8571 20.9823H17.8666V24.7924C19.5151 25.2315 20.7274 26.7091 20.7274 28.4643C20.7274 30.5656 18.9899 32.269 16.8466 32.269C14.7033 32.269 12.9658 30.5656 12.9658 28.4643C12.9658 26.7091 14.1781 25.2315 15.8266 24.7924V20.9823H13.8361L8.98258 25.7407C9.70503 26.4317 10.1536 27.3967 10.1536 28.4643C10.1536 30.5656 8.41609 32.269 6.27277 32.269C4.12945 32.269 2.39195 30.5656 2.39195 28.4643C2.39195 26.363 4.12945 24.6596 6.27277 24.6596C6.56016 24.6596 6.84025 24.6902 7.10983 24.7483L12.3936 19.5681V13.251C12.3936 12.6987 12.8503 12.251 13.4136 12.251H15.849L15.827 8.96132H13.9686L9.83174 13.3563V19.9822C9.83174 20.5345 9.37508 20.9822 8.81174 20.9822H1.94578C1.38245 20.9822 0.925781 20.5345 0.925781 19.9822V13.2508C0.925781 12.6986 1.38245 12.2508 1.94578 12.2508H8.09635L11.1927 8.96132H7.28747C6.72413 8.96132 6.26747 8.5136 6.26747 7.96132V1.22998ZM7.79174 14.2508H2.96578V18.9822H7.79174V14.2508ZM14.4336 18.9823H19.2596V14.251H14.4336V18.9823ZM6.991 26.8021C6.77031 26.7104 6.52759 26.6596 6.27277 26.6596C5.25611 26.6596 4.43195 27.4676 4.43195 28.4643C4.43195 29.461 5.25611 30.269 6.27277 30.269C7.28942 30.269 8.11359 29.461 8.11359 28.4643C8.11359 27.7198 7.65369 27.0805 6.99721 26.8047C6.99514 26.8039 6.99307 26.803 6.991 26.8021ZM16.7407 26.6625C15.7733 26.7163 15.0058 27.5025 15.0058 28.4643C15.0058 29.461 15.83 30.269 16.8466 30.269C17.8633 30.269 18.6874 29.461 18.6874 28.4643C18.6874 27.5025 17.9199 26.7163 16.9525 26.6625C16.9177 26.6661 16.8824 26.6679 16.8466 26.6679C16.8109 26.6679 16.7755 26.6661 16.7407 26.6625ZM26.7264 26.8167C26.0847 27.0986 25.6378 27.7303 25.6378 28.4643C25.6378 29.461 26.4619 30.269 27.4786 30.269C28.4952 30.269 29.3194 29.461 29.3194 28.4643C29.3194 27.4676 28.4952 26.6596 27.4786 26.6596C27.2144 26.6596 26.9631 26.7142 26.736 26.8125C26.7328 26.8139 26.7296 26.8153 26.7264 26.8167ZM25.825 14.2508V18.9822H30.651V14.2508H25.825ZM8.30747 2.22998V6.96132H25.3858V2.22998H8.30747Z"
fill="#EDEDED"
/>
</svg>
),
id: 'supavisor',
links: [
{
url: '/blog/supavisor-postgres-connection-pooler',
label: 'Read blog post',
},
],
},
{
title: 'Supabase Wrappers v0.2',
description: 'Query Pushdown & Remote Subqueries',
is_shipped: true,
icon: (
<svg
width="33"
height="33"
viewBox="0 0 33 33"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M26.4285 6.34281C26.3059 6.22029 26.1817 6.10048 26.0559 5.98337C27.9262 9.90843 27.2364 14.7489 23.9866 17.9987C22.4166 19.5687 20.4735 20.5418 18.4428 20.9167L18.4034 30.395C19.012 30.3209 19.6166 30.2074 20.2132 30.0542C22.4894 29.4202 24.6385 28.2082 26.4285 26.4182C31.9721 20.8745 31.9721 11.8865 26.4285 6.34281ZM28.0859 27.7778C25.9818 29.8819 23.4395 31.2829 20.753 31.9804C15.3067 33.498 9.22176 32.1153 4.93885 27.8324C-1.38587 21.5077 -1.38587 11.2533 4.93885 4.9286C9.21486 0.652586 15.2871 -0.732503 20.7267 0.773332C23.4231 1.46852 25.9752 2.87204 28.0859 4.98272C34.3806 11.2774 34.3806 21.4831 28.0859 27.7778ZM6.35306 26.4182C9.12791 29.1931 12.7657 30.579 16.4026 30.576L16.422 25.9151C14.1845 25.8349 11.9682 24.9406 10.2592 23.2316C6.67332 19.6457 6.67332 13.8319 10.2592 10.246C13.845 6.66018 19.6589 6.66018 23.2447 10.246C23.9077 10.909 24.4484 11.6489 24.8666 12.437C25.4979 9.66225 24.7332 6.63404 22.5724 4.47324C21.7373 3.63814 20.7746 3.01281 19.7482 2.59531C19.3128 2.49914 18.8738 2.42376 18.4326 2.36917C18.3357 2.35718 18.2438 2.33172 18.1585 2.2949C13.9616 1.77114 9.57543 3.12045 6.35306 6.34281C0.809395 11.8865 0.809396 20.8745 6.35306 26.4182ZM23.7498 15.1174C23.4579 13.851 22.819 12.6488 21.8305 11.6603C19.0257 8.85544 14.4782 8.85544 11.6734 11.6603C8.86859 14.4651 8.86859 19.0126 11.6734 21.8174C12.994 23.138 14.6997 23.8369 16.4303 23.9138L16.4465 20.0436C16.4486 19.5304 16.839 19.1021 17.3498 19.0525C19.2568 18.8673 21.1115 18.0454 22.5724 16.5845C23.0265 16.1303 23.419 15.6378 23.7498 15.1174Z"
fill="#EDEDED"
/>
</svg>
),
id: 'supabase-wrappers-v0.2',
links: [
{
url: '/blog/supabase-wrappers-v02',
label: 'Read blog post',
},
],
},
{
title: 'Supabase Libraries V2',
description: 'Swift, Kotlin, C#, and Python are now stable and moving to the v2 API',
type: 'clientLibs',
is_shipped: true,
className: 'xl:col-span-2 xl:aspect-auto xl:col-span-3 xl:aspect-auto xl:h-full',
id: 'supabase-libraries-v2',
links: [
{
url: '/blog/client-libraries-v2',
label: 'Read blog post',
},
],
icons: [
{
url: '/blog/client-libraries-v2#supabase-python-v2',
label: 'Python',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 45 45"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16.9371 1.08262C18.4527 0.81443 20.1752 0.660598 21.9789 0.652217C23.7827 0.643836 25.6633 0.780906 27.4758 1.08262C30.3391 1.55984 32.7514 3.70781 32.7514 6.56721V16.6141C32.7514 19.5603 30.4094 21.9757 27.4758 21.9757H16.9371C13.3589 21.9757 10.3457 25.0476 10.3457 28.5302V33.3507H6.71801C3.65157 33.3507 1.86045 31.125 1.11045 28.0014C0.0987175 23.805 0.141687 21.2971 1.11045 17.2782C1.9503 13.7719 4.63536 11.9288 7.70179 11.9288H22.2126V10.5884H11.6615V6.56721C11.6615 3.52244 12.4722 1.87142 16.9371 1.08262ZM18.2529 5.90316C18.2529 4.79095 17.3629 3.8864 16.273 3.8864C15.1792 3.8864 14.2931 4.79095 14.2931 5.90316C14.2931 7.01142 15.1792 7.90762 16.273 7.90762C17.3629 7.90762 18.2529 7.01143 18.2529 5.90316Z"
fill="currentColor"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M34.0671 16.6143V11.929H38.0269C41.0972 11.929 42.5446 14.2257 43.3024 17.2783C44.3571 21.5181 44.404 24.6965 43.3024 28.0016C42.236 31.212 41.0933 33.3509 38.0269 33.3509H22.2125V34.6913H32.7513V38.7125C32.7513 41.7573 30.1321 43.3051 27.4758 44.0741C23.4797 45.2337 20.2769 45.0562 16.937 44.0741C14.1479 43.2538 11.6615 41.5719 11.6615 38.7125V28.6656C11.6615 25.7747 14.0503 23.304 16.937 23.304H27.4758C30.9875 23.304 34.0671 20.2467 34.0671 16.6143ZM30.1197 39.3766C30.1197 38.2683 29.2336 37.3721 28.1398 37.3721C27.05 37.3721 26.16 38.2683 26.16 39.3766C26.16 40.4888 27.05 41.3933 28.1398 41.3933C29.2336 41.3933 30.1197 40.4888 30.1197 39.3766Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#supabase-swift-v2',
label: 'Swift',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 45 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.7763 11.4367V34.0513C44.7763 35.0639 44.6919 36.0342 44.5231 37.0046C44.3544 37.975 44.059 38.9032 43.5949 39.7893C43.1308 40.6331 42.5823 41.4347 41.8651 42.152C41.19 42.8692 40.3884 43.4177 39.5024 43.8818C38.6163 44.3459 37.6881 44.6413 36.7177 44.81C35.7611 44.9764 34.7634 45.0198 33.8055 45.0614L33.7643 45.0632H11.1076C10.095 45.0632 9.12464 44.9788 8.15424 44.81C7.18384 44.6413 6.25563 44.3459 5.36961 43.8818C4.52579 43.4177 3.72416 42.8692 3.00691 42.152C2.28965 41.4769 1.74116 40.6753 1.27706 39.7893C0.812956 38.9032 0.517618 37.975 0.348853 37.0046C0.182461 36.0479 0.139106 35.0501 0.0974827 34.0922L0.0957031 34.0513V11.3945C0.137894 10.3819 0.180088 9.41155 0.348853 8.44115C0.517618 7.47075 0.812956 6.54254 1.27706 5.65652C1.74116 4.8127 2.28965 4.01106 3.00691 3.29381C3.09129 3.20942 3.18622 3.12504 3.28115 3.04066C3.37607 2.95628 3.471 2.8719 3.55539 2.78752C4.14606 2.32341 4.73675 1.9015 5.41181 1.56397C5.51729 1.52178 5.63331 1.46904 5.74934 1.4163C5.86536 1.36356 5.98139 1.31082 6.08686 1.26863C6.76192 1.01548 7.47917 0.804529 8.19643 0.677955C8.89378 0.554892 9.63103 0.511595 10.3306 0.470511C10.3506 0.469339 10.3705 0.468169 10.3904 0.466999C10.6013 0.424807 10.8545 0.424805 11.1076 0.424805H33.7643C34.7769 0.424805 35.7473 0.50919 36.7177 0.677955C37.6881 0.84672 38.6163 1.14205 39.5024 1.60616C40.3462 2.07026 41.1478 2.61875 41.8651 3.336C42.5823 4.01106 43.1308 4.8127 43.5949 5.69871C44.059 6.58473 44.3544 7.51294 44.5231 8.48334C44.6895 9.44008 44.7329 10.4378 44.7745 11.3957L44.7763 11.4367ZM35.5786 27.5116L35.452 28.0179C39.3336 32.7433 38.2788 37.8063 37.6882 36.9203C35.663 33.0387 31.9501 34.0091 30.0515 34.9795C29.9672 35.0217 29.8828 35.0744 29.7984 35.1271C29.714 35.1799 29.6296 35.2326 29.5452 35.2748C29.5452 35.317 29.503 35.317 29.503 35.317C25.5793 37.4266 20.2632 37.5531 14.9471 35.2748C10.4748 33.334 6.80414 30.0431 4.44143 26.2459C5.66498 27.1319 6.97291 27.9335 8.36522 28.5664C13.9767 31.2244 19.6303 31.0135 23.6385 28.5664C17.9426 24.1785 13.175 18.4827 9.54658 13.8416C8.87152 13.04 8.23864 12.154 7.69016 11.268C12.0781 15.234 18.9552 20.2547 21.4445 21.647C16.2128 16.12 11.5718 9.28498 11.7827 9.49593C20.0522 17.8076 27.6888 22.533 27.6888 22.533C27.9842 22.6596 28.1951 22.7862 28.3639 22.9128C28.5326 22.4908 28.6592 22.0689 28.7858 21.647C30.0937 16.8372 28.617 11.3102 25.2417 6.7535C32.9205 11.3523 37.435 20.1281 35.5786 27.5116Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#supabase-kotlin-v2',
label: 'Kotlin',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M39.5927 39.2524H0.618164V0.277832H39.5927L19.7021 19.4825L39.5927 39.2524Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#typescript-v2-updates',
label: 'Typescript',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 44 43"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M2.1342 0.725586H41.4989C42.3803 0.725586 43.0948 1.43205 43.0948 2.30352V41.2259C43.0948 42.0974 42.3803 42.8038 41.4989 42.8038H2.1342C1.25282 42.8038 0.53833 42.0974 0.53833 41.2259V2.30352C0.53833 1.43205 1.25282 0.725586 2.1342 0.725586ZM24.1952 23.1119V19.6608H9.04961V23.1119H14.4568V38.4778H18.7614V23.1119H24.1952ZM25.9113 38.0721C26.6055 38.422 27.4265 38.6845 28.3742 38.8595C29.3221 39.0344 30.321 39.122 31.3712 39.122C32.3946 39.122 33.3668 39.0257 34.288 38.8332C35.209 38.6408 36.0166 38.3236 36.7107 37.8818C37.4048 37.44 37.9545 36.8627 38.3594 36.1496C38.7643 35.4366 38.9668 34.5552 38.9668 33.5053C38.9668 32.7442 38.851 32.0773 38.6196 31.5042C38.3883 30.9311 38.0546 30.4215 37.6185 29.9753C37.1825 29.5291 36.6596 29.1289 36.0499 28.7746C35.4403 28.4203 34.7529 28.0857 33.9876 27.7707C33.4268 27.5432 32.924 27.3223 32.4791 27.108C32.034 26.8937 31.6558 26.6749 31.3444 26.4519C31.0329 26.2287 30.7927 25.9926 30.6236 25.7432C30.4545 25.494 30.37 25.2117 30.37 24.8968C30.37 24.6081 30.4456 24.3478 30.5969 24.1161C30.7482 23.8841 30.9617 23.6851 31.2376 23.5189C31.5136 23.3527 31.8517 23.2237 32.2522 23.1318C32.6526 23.04 33.0977 22.994 33.5871 22.994C33.9431 22.994 34.3191 23.0202 34.7151 23.0727C35.1111 23.1253 35.5094 23.2062 35.9098 23.3154C36.3103 23.4248 36.6997 23.5626 37.0779 23.7289C37.4561 23.8952 37.8054 24.0876 38.1258 24.3062V20.3826C37.4761 20.1376 36.7664 19.956 35.9965 19.838C35.2268 19.7199 34.3435 19.6608 33.3467 19.6608C32.3323 19.6608 31.3712 19.7679 30.4634 19.9824C29.5556 20.1966 28.757 20.5313 28.0672 20.9863C27.3774 21.4412 26.8324 22.0207 26.432 22.7249C26.0314 23.4292 25.8312 24.2713 25.8312 25.251C25.8312 26.5022 26.1983 27.5696 26.9325 28.453C27.6668 29.3367 28.7814 30.0847 30.2765 30.6971C30.8639 30.9334 31.4111 31.1651 31.9185 31.3927C32.4257 31.6201 32.864 31.8564 33.2333 32.1012C33.6026 32.3462 33.8941 32.613 34.1077 32.9017C34.3213 33.1904 34.4281 33.5184 34.4281 33.886C34.4281 34.1572 34.3613 34.4087 34.2278 34.6405C34.0943 34.8724 33.8918 35.0736 33.6204 35.2441C33.349 35.4147 33.0109 35.5482 32.606 35.6444C32.2011 35.7407 31.727 35.7887 31.1842 35.7887C30.2587 35.7887 29.342 35.6292 28.4343 35.3098C27.5267 34.9905 26.6856 34.5115 25.9113 33.8729V38.0721Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#flutter-v2-updates',
label: 'Flutter',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 35 42"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M34.8363 0.230957L21.8372 0.24498L0.876465 20.7638L7.34342 27.1022L13.0273 21.5694L34.8363 0.230957Z"
fill="currentColor"
/>
<path
d="M22.2101 19.1603C22.0257 19.152 21.8355 19.1434 21.7162 19.2976L10.5389 30.2377L16.9592 36.4842L16.9518 36.4914L21.5464 40.9929C21.5766 41.0191 21.6065 41.0484 21.637 41.0782C21.7627 41.2012 21.8977 41.3332 22.0924 41.2905C24.2148 41.2859 26.3373 41.2866 28.46 41.2874C30.5827 41.2882 32.7056 41.289 34.8289 41.2843L23.5293 30.2129L34.8252 19.1621L22.4309 19.159C22.3619 19.1672 22.2865 19.1638 22.2101 19.1603Z"
fill="currentColor"
/>
</svg>
),
},
],
},
{
title: 'Supabase x Fly.io',
description:
"We're launching a managed Postgres offering jointly developed by Supabase and Fly.io",
is_shipped: true,
className: 'xl:col-span-2 xl:aspect-auto h-full',
icon: (
<svg
width="43"
height="37"
viewBox="0 0 43 37"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M23.5592 31.9455L18.5586 36.1655C18.2529 36.4172 17.8695 36.5545 17.4734 36.5545H30.3779C29.9803 36.554 29.5944 36.4166 29.2861 36.1655L24.2131 31.9445C24.1212 31.8681 24.0054 31.8263 23.8859 31.8265C23.7664 31.8267 23.6508 31.8688 23.5592 31.9455Z"
fill="#EDEDED"
/>
<path
d="M21.7205 21.1154L21.6715 21.1012H21.6199L21.6185 21.1016C21.5709 21.1155 21.57 21.1157 21.5275 21.1435L21.4657 21.1992C21.379 21.2793 21.2958 21.3625 21.2146 21.4483C21.0885 21.5805 20.9706 21.7204 20.8619 21.8674C20.7965 21.9582 20.7378 22.0537 20.6863 22.1527C20.6464 22.2318 20.6148 22.315 20.5928 22.4008C20.5842 22.4401 20.578 22.4794 20.5755 22.5192L20.5801 22.6662C20.5837 22.6988 20.5887 22.7311 20.5949 22.7632C20.632 22.9542 20.7328 23.127 20.8807 23.2533L21.0063 23.3452C21.0723 23.3854 21.1425 23.4183 21.2156 23.4432C21.2875 23.4679 21.3615 23.4858 21.4366 23.4968L21.5974 23.5111L21.7878 23.5054C21.9674 23.4889 22.1409 23.4319 22.2952 23.3385C22.4141 23.2654 22.5138 23.1652 22.5863 23.046C22.6589 22.9268 22.702 22.7921 22.7123 22.653L22.7138 22.4988C22.7067 22.4166 22.6837 22.336 22.6531 22.2594C22.6357 22.2155 22.6158 22.1721 22.5939 22.1303C22.5683 22.0818 22.5413 22.0353 22.5122 21.9894C22.4448 21.8852 22.3708 21.7852 22.2917 21.6897C22.2294 21.6142 22.1646 21.5412 22.0982 21.4702C22.0038 21.3702 21.9058 21.2727 21.8047 21.1798L21.7638 21.1435C21.7601 21.141 21.7564 21.1383 21.7527 21.1357C21.7424 21.1284 21.7321 21.1211 21.7205 21.1154Z"
fill="#EDEDED"
/>
<path
d="M21.3754 0.605469L21.3555 0.607C20.9007 0.652801 20.4634 0.806831 20.0803 1.05621C19.4907 1.43446 19.0405 2.00057 18.7087 2.61517C18.6536 2.71777 18.601 2.82242 18.552 2.92757C18.4183 3.21956 18.3034 3.51869 18.2074 3.82497C18.1411 4.03682 18.0829 4.25223 18.0329 4.46918C17.9701 4.74228 17.919 5.01844 17.8777 5.29562C17.8256 5.64784 17.7894 6.00262 17.7669 6.3579C17.7526 6.58404 17.7434 6.81017 17.7393 7.03682C17.7325 7.29691 17.7375 7.55717 17.7541 7.81681C17.797 8.42529 17.9012 9.02763 18.0364 9.6213C18.2117 10.3685 18.4272 11.1057 18.6822 11.8296C19.0015 12.7384 19.359 13.6333 19.7536 14.5121C20.2401 15.5976 20.7668 16.6647 21.3325 17.7112L21.3754 17.7903V0.605469Z"
fill="#EDEDED"
/>
<path
d="M24.7399 0.98015L23.5837 0.65039L23.7981 0.807102C24.4372 1.30991 24.9093 1.99853 25.2478 2.73564C25.3904 3.04921 25.5121 3.37184 25.6122 3.70144C25.8767 4.57076 26.0145 5.47429 26.0686 6.38036C26.0818 6.60561 26.0901 6.83112 26.0936 7.05673C26.1028 7.42528 26.089 7.79486 26.0512 8.1624C26.0063 8.60293 25.9338 9.04091 25.8414 9.47429C25.7337 9.97965 25.6031 10.4794 25.455 10.974C25.2559 11.6341 25.0313 12.2859 24.7827 12.9291C24.5566 13.5146 24.3162 14.0945 24.0609 14.6683C23.6022 15.6977 23.1073 16.7106 22.577 17.705C23.3585 16.8995 24.1106 16.0658 24.8317 15.2058C25.4959 14.4175 26.1233 13.5988 26.7118 12.7525C27.1865 12.0639 27.6301 11.3518 28.015 10.608C28.1891 10.2732 28.3478 9.93014 28.4908 9.58047C28.6056 9.29936 28.7056 9.01242 28.7904 8.72084C28.8961 8.36454 28.9655 7.99854 28.9982 7.62845C29.0114 7.46306 29.0125 7.29716 29.0084 7.13177C29.0048 6.95361 28.9961 6.77546 28.9808 6.59782C28.9282 5.91992 28.7792 5.25274 28.5387 4.61619C28.3728 4.18587 28.1605 3.77393 27.9042 3.3921C27.4668 2.7475 26.9103 2.19238 26.2646 1.75657C25.7909 1.43497 25.2753 1.1777 24.7399 0.98015Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M34.8247 4.03417H29.9987L30.0901 4.26184L30.16 4.46756L30.3632 5.20773C30.3673 5.22101 30.3698 5.23428 30.3724 5.24755L30.5306 6.24857L30.5623 6.59569L30.5878 7.04286L30.5904 7.13576L30.5807 7.635L30.5725 7.76721L30.5454 7.98313L30.4061 8.78048L30.3724 8.92647L30.0513 9.92801C30.0484 9.93772 30.045 9.94726 30.0411 9.95659L29.743 10.6784L29.7318 10.7024L29.3423 11.4803L28.6613 12.6661L28.2999 13.219L27.866 13.8678L27.5602 14.2869L26.9543 15.097L26.5419 15.6156L25.9324 16.3578L25.5051 16.8576L24.8481 17.5967L24.4255 18.0607L23.2034 19.3369L22.9191 19.6177L23.087 19.7606C23.3245 19.979 23.5475 20.2126 23.7547 20.4599C23.817 20.5354 23.8772 20.6125 23.9354 20.6912C24.0626 20.863 24.177 21.044 24.2774 21.2328C24.3316 21.3352 24.3802 21.4405 24.4229 21.5482C24.5216 21.7955 24.5849 22.0556 24.6108 22.3206L24.622 22.5212C24.6281 22.905 24.5582 23.2864 24.4153 23.6432C24.2325 24.1007 23.9312 24.5014 23.5424 24.804C23.4066 24.9102 23.2616 25.0036 23.1095 25.0842C22.7568 25.268 22.3721 25.3822 21.9763 25.4206H21.9737C21.5098 25.4674 21.0412 25.4141 20.5995 25.2644C20.3964 25.194 20.2009 25.1016 20.0176 24.9893C19.8022 24.8576 19.6057 24.6973 19.4331 24.5135C19.1957 24.2609 19.0077 23.966 18.8788 23.6442C18.7515 23.3267 18.6819 22.9892 18.673 22.6473L18.6766 22.4048C18.695 22.124 18.7558 21.8476 18.8568 21.585C18.896 21.4822 18.9405 21.3815 18.99 21.2833C19.0871 21.0942 19.1982 20.9126 19.3224 20.7402C19.4038 20.6273 19.4896 20.5176 19.5796 20.4114C19.767 20.1919 19.9671 19.9831 20.1779 19.7866L20.2555 19.7167L20.38 19.6125L19.7593 18.9959L19.3836 18.6069L18.4352 17.5865L18.1988 17.3277L17.0482 15.9826L16.7226 15.5789L15.7149 14.2675L15.6031 14.1164L14.8287 12.976L14.6164 12.6324L14.0615 11.6799L13.892 11.3685L13.4122 10.3548L13.3213 10.122L13.0457 9.34608L12.9395 8.97956L12.8578 8.64112L12.7889 8.27359L12.7348 7.86522L12.7129 7.60437L12.7037 7.15924L12.7057 7.06583L12.7185 6.79936L12.8144 5.82846L12.8446 5.65847L13.063 4.6891L13.1136 4.52677L13.2759 4.05357L13.2846 4.03417H8.46936C4.17635 4.03417 0.691406 7.51912 0.691406 11.8116V28.781C0.691406 31.2037 1.80167 33.3691 3.54082 34.7963C3.58742 34.8015 3.63578 34.8074 3.68593 34.8135C4.3604 34.8958 5.36106 35.0178 6.82209 33.8295L14.6215 26.9684C14.775 26.8438 14.9667 26.7758 15.1644 26.7758C15.3621 26.7758 15.5537 26.8438 15.7072 26.9684L21.3213 31.5845L23.3147 29.9454C23.4684 29.8211 23.6601 29.7532 23.8578 29.7532C24.0555 29.7532 24.2473 29.8211 24.401 29.9454L30.5368 34.9903C31.2769 35.5503 32.2351 36.2129 34.4444 36.5585H34.8247C39.1172 36.5585 42.6021 33.0735 42.6021 28.781V11.8116C42.6021 7.51912 39.1172 4.03417 34.8247 4.03417ZM30.9973 25.7428C31.3414 25.3987 31.8062 25.2024 32.2928 25.1955C32.7794 25.2024 33.2442 25.3987 33.5884 25.7428C33.9326 26.0869 34.1291 26.5516 34.1361 27.0383C34.1287 27.5248 33.9321 27.9892 33.5879 28.3332C33.2438 28.6771 32.7792 28.8734 32.2928 28.8806C31.8063 28.8736 31.3417 28.6772 30.9976 28.3333C30.6536 27.9893 30.4571 27.5248 30.45 27.0383C30.4569 26.5517 30.6532 26.0869 30.9973 25.7428Z"
fill="#EDEDED"
/>
</svg>
),
id: 'fly-postgres',
links: [
{
url: '/blog/postgres-on-fly-by-supabase',
label: 'Read blog post',
},
],
},
{
title: 'Top 10 Launches of LWX',
description: 'Our CEO takes a look at his favorite ships from LWX',
className: 'sm:aspect-[2/1] sm:col-span-1 sm:col-span-2 sm:aspect-[2/1] h-full',
is_shipped: true,
icon: (
<svg
width="43"
height="43"
viewBox="0 0 97 96"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M45.1845 28.8958C46.1844 27.6366 48.2117 28.3265 48.2358 29.9343L48.3161 42.1777H64.0052C66.8691 42.1777 68.4663 45.4854 66.6855 47.7284L51.5973 66.731C50.5975 67.9901 48.5702 67.3003 48.5461 65.6926L48.3627 53.4492H32.7766C29.9127 53.4492 28.3154 50.1414 30.0963 47.8985L45.1845 28.8958Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M55.6755 2.97563C51.6248 -0.991875 45.1451 -0.991877 41.0944 2.97563L34.7454 9.19414C33.669 10.2485 32.2267 10.8459 30.72 10.8615L21.8335 10.9537C16.1638 11.0126 11.5819 15.5944 11.5231 21.2642L11.4309 30.1507C11.4152 31.6574 10.8178 33.0997 9.76348 34.1761L3.54496 40.525C-0.422539 44.5758 -0.422541 51.0555 3.54496 55.1062L9.76348 61.4551C10.8178 62.5316 11.4152 63.9739 11.4309 65.4805L11.5231 74.3671C11.5819 80.0368 16.1638 84.6187 21.8335 84.6775L30.72 84.7697C32.2267 84.7854 33.669 85.3828 34.7454 86.4371L41.0944 92.6556C45.1451 96.6231 51.6248 96.6231 55.6755 92.6556L62.0245 86.4371C63.1009 85.3828 64.5432 84.7854 66.0499 84.7697L74.9364 84.6775C80.6061 84.6187 85.188 80.0368 85.2468 74.3671L85.3391 65.4805C85.3547 63.9739 85.9521 62.5316 87.0064 61.4551L93.2249 55.1062C97.1924 51.0555 97.1925 44.5758 93.2249 40.525L87.0064 34.1761C85.9521 33.0997 85.3547 31.6574 85.3391 30.1507L85.2468 21.2642C85.188 15.5944 80.6061 11.0126 74.9364 10.9537L66.0499 10.8615C64.5432 10.8459 63.1009 10.2485 62.0245 9.19414L55.6755 2.97563ZM44.299 6.24742C46.5692 4.02384 50.2007 4.02384 52.4709 6.24742L58.8199 12.4659C60.7405 14.3471 63.314 15.4131 66.0023 15.441L74.8889 15.5332C78.0665 15.5662 80.6344 18.1341 80.6673 21.3117L80.7596 30.1982C80.7875 32.8866 81.8534 35.46 83.7346 37.3807L89.9532 43.7296C92.1767 45.9998 92.1767 49.6314 89.9531 51.9016L83.7346 58.2506C81.8534 60.1712 80.7875 62.7447 80.7596 65.433L80.6673 74.3195C80.6344 77.4971 78.0665 80.065 74.8889 80.098L66.0023 80.1902C63.314 80.2181 60.7405 81.2841 58.8199 83.1653L52.4709 89.3838C50.2007 91.6074 46.5692 91.6074 44.299 89.3838L37.95 83.1653C36.0294 81.2841 33.4559 80.2181 30.7676 80.1902L21.881 80.098C18.7034 80.065 16.1355 77.4971 16.1026 74.3195L16.0103 65.433C15.9824 62.7447 14.9165 60.1712 13.0353 58.2505L6.81676 51.9016C4.59317 49.6314 4.59317 45.9998 6.81676 43.7296L13.0353 37.3807C14.9165 35.46 15.9824 32.8865 16.0103 30.1982L16.1026 21.3117C16.1355 18.1341 18.7034 15.5662 21.881 15.5332L30.7676 15.441C33.4559 15.4131 36.0294 14.3471 37.95 12.4659L44.299 6.24742Z"
fill="#EDEDED"
/>
</svg>
),
id: 'launch-week-x-best-launches',
links: [
{
url: '/blog/launch-week-x-best-launches',
label: 'Read blog post',
},
],
},
]
@@ -0,0 +1,305 @@
import { ReactNode } from 'react'
import { products } from 'shared-data/products'
type StepLinkType = 'productHunt' | 'video' | 'docs' | 'xSpace' | 'blog' | 'podcast'
export interface StepLink {
type: StepLinkType
text?: string
icon?: any
href: string
}
export interface StepProps {
title: string
icon?: string
badge?: string
blog?: string
docs?: string
description?: string
github?: string
hackernews?: string
product_hunt?: string
thumb?: string
url?: string
video?: string
twitter_spaces?: string
className?: string
hideInBlog?: boolean
bg_layers?: {
img?: string
mobileImg?: string
className?: string
}[]
steps?: StepProps[] | []
links?: StepLink[]
}
export interface WeekDayProps {
id: string
title: string
shipped: boolean
date: string
published_at: string
isToday?: boolean
hasCountdown?: boolean
description: string | ReactNode
d: number
dd: string
links?: StepLink[]
videoId?: string
videoThumbnail?: string
blog: string
steps: StepProps[] | []
}
export const endOfLWXHackathon = '2024-04-17T23:59:59.999-08:00'
const days: WeekDayProps[] = [
{
id: 'day-1',
d: 1,
dd: 'Mon',
title: 'Lorem ipsum',
shipped: true,
isToday: false,
blog: '#',
hasCountdown: true,
date: '15 April',
published_at: '2024-04-15T08:00:00.000-08:00',
videoThumbnail: '/images/launchweek/copple-placeholder.jpg',
links: [
{
type: 'blog',
href: '#',
},
{
type: 'xSpace',
href: '',
},
],
description: (
<>
<p className="text-foreground">Our products are now ready for production use.</p>{' '}
<p className="text-foreground-lighter">
Confidently leverage the full power of Supabase to build scalable, high-performance
applications with ease.
</p>
</>
),
steps: [
{
icon: products.database.icon[16],
title: 'Database',
description: 'Fully portable Postgres Database',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/database/overview',
},
],
},
{
icon: products.authentication.icon[16],
title: 'Auth',
description: 'User management out of the box',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/auth',
},
],
},
{
icon: products.storage.icon[16],
title: 'Storage',
description: 'Serverless storage for any media',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/storage',
},
],
},
{
icon: products.functions.icon[16],
title: 'Edge Functions',
description: 'Deploy code globally on the edge',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/functions',
},
],
},
{
icon: products.realtime.icon[16],
title: 'Realtime',
description: 'Syncronize and broadcast events',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/realtime',
},
],
},
{
icon: products.vector.icon[16],
title: 'Vector',
description: 'AI toolkit to manage embeddings',
links: [
// {
// type: 'podcast',
// href: '#',
// },
{
type: 'docs',
href: 'https://supabase.com/docs/guides/ai',
},
],
},
],
},
{
id: 'day-2',
d: 2,
dd: 'Tue',
title: '',
shipped: false,
hasCountdown: false,
blog: '#',
date: '16 April',
published_at: '2024-04-16T08:00:00.000-08:00',
description: <>TBD</>,
links: [
// {
// type: 'blog',
// href: '#',
// },
// {
// type: 'video',
// href: 'eCbiywoDORw',
// },
// {
// type: 'xSpace',
// href: '#',
// },
],
steps: [
{
title: '',
blog: '#',
bg_layers: [
{
img: '/images/launchweek/lwx/day2/d2_edge.svg',
mobileImg: '/images/launchweek/lwx/day2/d2_edge_mobile.svg',
},
],
steps: [],
},
],
},
{
id: 'day-3',
d: 3,
dd: 'Wed',
title: '',
shipped: false,
hasCountdown: false,
blog: '#',
date: '17 April',
published_at: '2024-04-17T08:00:00.000-08:00',
description: <>TBD</>,
links: [
// {
// type: 'blog',
// href: '#',
// },
// {
// type: 'video',
// href: '',
// },
// {
// type: 'xSpace',
// href: '#',
// },
],
steps: [],
},
{
id: 'day-4',
d: 4,
dd: 'Thu',
title: '',
shipped: false,
hasCountdown: false,
blog: '#',
date: '18 April',
published_at: '2024-04-18T08:00:00.000-08:00',
description: <>TBD</>,
links: [
// {
// type: 'blog',
// href: '#',
// },
// {
// type: 'video',
// href: '',
// },
// {
// type: 'xSpace',
// href: '#',
// },
],
steps: [],
},
{
id: 'day-5',
d: 5,
dd: 'Fri',
title: '',
shipped: false,
hasCountdown: false,
blog: '#',
date: '19 April',
published_at: '2024-04-19T08:00:00.000-08:00',
description: <>TBD</>,
links: [
// {
// type: 'blog',
// href: '#',
// },
// {
// type: 'video',
// href: '',
// },
// {
// type: 'xSpace',
// href: '#',
// },
],
steps: [],
},
]
export default days
@@ -0,0 +1,240 @@
import { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from 'react'
import { Button, cn } from 'ui'
import { SITE_ORIGIN } from '~/lib/constants'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import { VALID_KEYS } from '~/components/LaunchWeek/hooks/useLwGame'
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from 'ui'
const REGEXP_ONLY_CHARS = '^[a-zA-Z]+$'
const COMPLIMENTS = [
'Congratulations!',
'You won!',
'Hurray!',
'Great job!',
'Nice job!',
"That's right!",
]
interface Props {
setIsGameMode: Dispatch<SetStateAction<boolean>>
}
const LWXGame = ({ setIsGameMode }: Props) => {
const { supabase, userData: user } = useConfData()
const phrase = process.env.NEXT_PUBLIC_LWX_GAME_WORD ?? 'its_just_postgres'
const inputRef = useRef(null)
const winningPhrase = phrase?.split('_').map((word) => word.split(''))
const phraseLength = phrase?.replaceAll('_', '').split('').length
const [gameState, setGameState] = useState<'playing' | 'winner' | 'loading'>('playing')
const [hasKeyDown, setHasKeyDown] = useState(false)
const [value, setValue] = useState('')
const hasWon = gameState === 'winner'
const winningCompliment = useMemo(
() => COMPLIMENTS[Math.floor(Math.random() * COMPLIMENTS.length)],
[]
)
function onKeyDown(event: KeyboardEvent) {
const newKey = event.key.toLocaleLowerCase()
if (!(event.metaKey || event.ctrlKey) && VALID_KEYS.includes(newKey)) {
setHasKeyDown(true)
}
setTimeout(() => {
setHasKeyDown(false)
}, 100)
}
useEffect(() => {
window.addEventListener('keydown', onKeyDown)
return () => window.removeEventListener('keydown', onKeyDown)
}, [onKeyDown])
async function handleGithubSignIn() {
const redirectTo = `${SITE_ORIGIN}/launch-week/${
user.username ? '?referral=' + user.username : ''
}`
supabase?.auth.signInWithOAuth({
provider: 'github',
options: {
redirectTo,
},
})
}
const handleClaimTicket = async (e: any) => {
e.preventDefault()
setGameState('loading')
if (supabase) {
if (user.id) {
await supabase
.from('lw11_tickets')
.update({ gameWonAt: new Date() })
.eq('username', user.username)
.then((res) => {
if (res.error) return console.log('error', res.error)
setIsGameMode(false)
})
} else {
localStorage.setItem('lw11_secret', 'true')
handleGithubSignIn()
}
}
}
function handleIndexCount(word_idx: number, char_idx: number) {
let index = -1
for (let i = 0; i < word_idx + 1; i++) {
const word = winningPhrase[i]
for (let j = 0; j < word.length; j++) {
if (i < word_idx || j <= char_idx) index++
}
}
return index
}
if (gameState === 'loading')
return (
<div className="relative w-full mt-[100px] md:mt-44 lg:mt-32 xl:mt-32 2xl:mt-[120px] flex flex-col items-center gap-6 text-foreground">
<svg
className="animate-spinner opacity-50 w-5 h-5 md:w-6 md:h-6"
width="100%"
height="100%"
viewBox="0 0 62 61"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M61 31C61 14.4315 47.5685 1 31 1C14.4315 1 1 14.4315 1 31"
stroke="white"
strokeWidth="2"
/>
</svg>
</div>
)
return (
<form
onSubmit={handleClaimTicket}
className="flex flex-col items-center text-center gap-12 md:gap-16 max-w-6xl"
>
<div className="flex flex-col items-center h-10 text-foreground-light">
<div
className={cn(
'absolute flex flex-col gap-2 opacity-0 translate-y-2 transition-all',
hasWon && 'opacity-100 translate-y-0'
)}
>
<p className="tracking-wider text-foreground text-lg font-mono uppercase">
{winningCompliment}
</p>
<p className="text-foreground-lighter font-san text-sm">
Claim and share the secret ticket to boost your chances of winning swag.
</p>
</div>
<div
className={cn(
'absolute flex justify-center opacity-0 translate-y-2 transition-all',
!hasWon && 'opacity-100 translate-y-0'
)}
>
Guess the word
</div>
</div>
<div className="flex items-center justify-center gap-2 flex-wrap font-mono min-h-[100px]">
<InputOTP
ref={inputRef}
maxLength={phraseLength}
pattern={REGEXP_ONLY_CHARS}
autoFocus
containerClassName="flex-wrap justify-center gap-y-4 max-w-screen"
inputMode="text"
value={value}
spellCheck={false}
onChange={(e) => {
// @ts-ignore
const index = inputRef.current?.dataset.inputOtpMss
const valueAtPhraseIndex = phrase?.replaceAll('_', '').split('')[index]
const currentVal = e.split('')[e.length - 1]
const isMatch = valueAtPhraseIndex === currentVal
if (isMatch) {
setValue(e)
}
}}
onComplete={() => setGameState('winner')}
>
{winningPhrase.map((word, w_idx) => (
<>
<InputOTPGroup key={`${word.join('')}-${w_idx}`}>
{word.map((_, c_idx) => {
// index is sum of every letter of every previous word + index of current wo
const currentIndex = handleIndexCount(w_idx, c_idx)
return (
<InputOTPSlot
className={cn(
// 'h-6 w-6 sm:h-10 sm:w-10',
hasWon && 'border-foreground-light animate-pulse',
hasKeyDown && 'border-strong'
)}
key={`otp-${currentIndex}`}
index={currentIndex}
/>
)
})}
</InputOTPGroup>
{w_idx !== winningPhrase.length - 1 && <InputOTPSeparator className="mx-1" />}
</>
))}
</InputOTP>
</div>
<div className="flex flex-col items-center h-10">
<Button
type="secondary"
onClick={() => null}
htmlType="submit"
className={cn(
'absolute opacity-0 translate-y-2 transition-all',
hasWon && 'opacity-100 translate-y-0'
)}
>
Claim secret ticket
</Button>
</div>
<div className="flex gap-4 md:gap-10 items-center h-10 text-xs text-foreground-lighter">
<div className="flex items-center gap-2">
<Button
type="outline"
onClick={() => null}
disabled
className="pointer-events-none"
size="tiny"
>
A-Z
</Button>
<span>Play</span>
</div>
<div className="flex items-center gap-2 text-foreground-muted">
<Button
type="outline"
onClick={() => setIsGameMode(false)}
className="opacity-50"
size="tiny"
>
Esc
</Button>
<span>Exit</span>
</div>
</div>
</form>
)
}
export default LWXGame
@@ -0,0 +1,114 @@
import { useEffect, useRef, useState } from 'react'
import Image from 'next/image'
import { IconEdit2, IconX, cn } from 'ui'
import Tilt from 'vanilla-tilt'
import { useBreakpoint, useParams } from 'common'
import Panel from '~/components/Panel'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import TicketProfile from './TicketProfile'
import TicketCustomizationForm from './TicketCustomizationForm'
import TicketNumber from './TicketNumber'
export default function Ticket() {
const ticketRef = useRef<HTMLDivElement>(null)
const { userData: user, showCustomizationForm, setShowCustomizationForm } = useConfData()
const isMobile = useBreakpoint()
const {
platinum = false,
bg_image_id: bgImageId = '1',
secret: hasSecretTicket,
ticketNumber,
} = user
const [imageHasLoaded, setImageHasLoaded] = useState(false)
const params = useParams()
const sharePage = !!params.username
const ticketType = hasSecretTicket ? 'secret' : platinum ? 'platinum' : 'regular'
const fallbackImg = `/images/launchweek/11/tickets/shape/lw11_ticket_${ticketType}.png`
const ticketBg = {
regular: {
background: `/images/launchweek/11/tickets/shape/lw11_ticket_regular.png`,
},
platinum: {
background: `/images/launchweek/11/tickets/shape/lw11_ticket_platinum.png`,
},
secret: {
background: `/images/launchweek/11/tickets/shape/lw11_ticket_purple.png`,
},
}
function handleCustomizeTicket() {
setShowCustomizationForm && setShowCustomizationForm(!showCustomizationForm)
}
useEffect(() => {
if (ticketRef.current && !window.matchMedia('(pointer: coarse)').matches) {
Tilt.init(ticketRef.current, {
glare: true,
max: 3,
gyroscope: true,
'max-glare': 0.2,
'full-page-listening': true,
})
}
}, [ticketRef])
return (
<div
ref={ticketRef}
className="relative w-auto h-auto flex justify-center rounded-xl overflow-hidden will-change-transform"
style={{ transformStyle: 'preserve-3d', transform: 'perspective(1000px)' }}
>
<Panel
hasShimmer
outerClassName="flex relative flex-col w-[360px] h-auto max-h-[680px] rounded-3xl !shadow-xl !p-0"
innerClassName="flex relative flex-col justify-between w-full transition-colors aspect-[396/613] rounded-xl bg-[#020405] text-left text-sm group/ticket"
shimmerFromColor="hsl(var(--border-strong))"
shimmerToColor="hsl(var(--background-default))"
style={{ transform: 'translateZ(-10px)' }}
>
<TicketNumber
number={ticketNumber}
platinum={platinum}
secret={hasSecretTicket}
className="absolute z-20 top-6 left-6"
/>
<TicketProfile className="absolute inset-0 h-full p-6 top-20 bottom-20 z-30 flex flex-col justify-between w-full flex-1 overflow-hidden" />
<Image
src={ticketBg[ticketType].background}
alt={`Launch Week X ticket background #${bgImageId}`}
placeholder="blur"
blurDataURL={fallbackImg}
onLoad={() => setImageHasLoaded(true)}
loading="eager"
fill
className={cn(
'absolute inset-0 object-cover object-right opacity-0 transition-opacity duration-1000',
imageHasLoaded && 'opacity-100',
isMobile && 'object-left-top'
)}
priority
quality={100}
/>
{/* Edit hover button */}
{!sharePage && (
<>
<button
className="absolute z-40 inset-0 w-full h-full outline-none"
onClick={handleCustomizeTicket}
/>
<div className="flex md:translate-y-3 opacity-100 md:opacity-0 group-hover/ticket:opacity-100 group-hover/ticket:md:translate-y-0 transition-all absolute z-30 right-4 top-4 md:inset-0 m-auto w-10 h-10 rounded-full items-center justify-center bg-[#020405] border shadow-lg text-foreground">
{!showCustomizationForm ? <IconEdit2 className="w-4" /> : <IconX className="w-4" />}
</div>
</>
)}
</Panel>
<div className="absolute top-0 left-auto right-auto mx-auto w-[20%] aspect-square -translate-y-[65%] bg-[#060809] z-40 rounded-b-[100px]" />
{!sharePage && (
<TicketCustomizationForm className="absolute inset-0 top-auto z-40 order-last md:order-first" />
)}
</div>
)
}
@@ -0,0 +1,114 @@
import { useEffect, useRef, useState } from 'react'
import Link from 'next/link'
import {
SPECIAL_ANNOUNCEMENT_URL,
TWEET_TEXT,
TWEET_TEXT_PLATINUM,
TWEET_TEXT_SECRET,
} from '~/lib/constants'
import { Button, IconLinkedinSolid, IconTwitterX, cn } from 'ui'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import { useParams } from '~/hooks/useParams'
import { useBreakpoint } from 'common'
import dayjs from 'dayjs'
export default function TicketActions() {
const { userData, supabase } = useConfData()
const { platinum, username, metadata, secret: hasSecretTicket } = userData
const [_imgReady, setImgReady] = useState(false)
const [_loading, setLoading] = useState(false)
const isTablet = useBreakpoint(1280)
const downloadLink = useRef<HTMLAnchorElement>()
const link = `${SPECIAL_ANNOUNCEMENT_URL}/tickets/${username}?lw=11${
hasSecretTicket ? '&secret=true' : platinum ? `&platinum=true` : ''
}&t=${dayjs(new Date()).format('DHHmmss')}`
const permalink = encodeURIComponent(link)
const text = hasSecretTicket ? TWEET_TEXT_SECRET : platinum ? TWEET_TEXT_PLATINUM : TWEET_TEXT
const encodedText = encodeURIComponent(text)
const tweetUrl = `https://twitter.com/intent/tweet?url=${permalink}&text=${encodedText}`
const linkedInUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${permalink}`
const downloadUrl = `https://obuldanrptloktxcffvn.supabase.co/functions/v1/lw11-og?username=${encodeURIComponent(
username ?? ''
)}`
const params = useParams()
const sharePage = !!params.username
const LW_TABLE = 'lw11_tickets'
useEffect(() => {
setImgReady(false)
const img = new Image()
img.src = downloadUrl
img.onload = () => {
setImgReady(true)
setLoading(false)
if (downloadLink.current) {
downloadLink.current.click()
downloadLink.current = undefined
}
}
}, [downloadUrl])
const handleShare = async (social: 'twitter' | 'linkedin') => {
if (!supabase) return
setTimeout(async () => {
if (social === 'twitter') {
await supabase
.from(LW_TABLE)
.update({
sharedOnTwitter: 'now',
metadata: { ...metadata, hasSharedSecret: hasSecretTicket },
})
.eq('username', username)
// window.open(tweetUrl, '_blank')
} else if (social === 'linkedin') {
await supabase
.from(LW_TABLE)
.update({
sharedOnLinkedIn: 'now',
metadata: { ...metadata, hasSharedSecret: hasSecretTicket },
})
.eq('username', username)
// window.open(linkedInUrl, '_blank')
}
})
}
return (
<div
className={cn(
'w-full gap-3 flex flex-col md:flex-row items-center',
sharePage ? 'justify-center' : 'justify-between'
)}
>
<div className="flex w-full gap-2">
<Button
onClick={() => handleShare('twitter')}
type={userData.sharedOnTwitter ? 'secondary' : 'default'}
icon={<IconTwitterX className="text-light w-3 h-3" />}
size={isTablet ? 'tiny' : 'tiny'}
block
asChild
>
<Link href={tweetUrl} target="_blank">
Share on X
</Link>
</Button>
<Button
onClick={() => handleShare('linkedin')}
type={userData.sharedOnLinkedIn ? 'secondary' : 'default'}
icon={<IconLinkedinSolid className="text-light w-3 h-3" />}
size={isTablet ? 'tiny' : 'tiny'}
block
asChild
>
<Link href={linkedInUrl} target="_blank">
Share on Linkedin
</Link>
</Button>
</div>
</div>
)
}
@@ -0,0 +1,17 @@
import { useParams } from 'common'
import Ticket from './Ticket'
import TicketCopy from './TicketCopy'
export default function TicketContainer() {
const params = useParams()
const sharePage = !!params.username
return (
<div className="flex flex-col w-full items-center mx-auto max-w-xl gap-3 group group-hover">
<Ticket />
<div className="flex flex-col md:flex-row gap-2 items-center justify-center mx-auto max-w-full">
<TicketCopy sharePage={sharePage} />
</div>
</div>
)
}
@@ -0,0 +1,45 @@
import { useState, useRef } from 'react'
import { SPECIAL_ANNOUNCEMENT_URL } from '~/lib/constants'
import { IconCheck, IconCopy, cn } from 'ui'
import useConfData from '../../hooks/use-conf-data'
export default function TicketCopy({ sharePage }: { sharePage: boolean }) {
const { userData } = useConfData()
const { username, platinum, secret } = userData
const [copied, setCopied] = useState(false)
const buttonRef = useRef<HTMLButtonElement>(null)
const hasSecretTicket = secret
const url = `${SPECIAL_ANNOUNCEMENT_URL}/tickets/${username}?lw=11${
hasSecretTicket ? '&secret=true' : platinum ? `&platinum=true` : ''
}`
return (
<div
className={cn('h-full w-full overflow-hidden max-w-full', sharePage ? 'w-auto' : 'w-full')}
>
<button
type="button"
name="Copy"
ref={buttonRef}
onClick={() => {
navigator.clipboard.writeText(url).then(() => {
setCopied(true)
setTimeout(() => {
setCopied(false)
}, 2000)
})
}}
className="w-full h-full flex justify-center md:justify-start items-center gap-2 relative text-foreground-light hover:text-foreground text-xs"
>
<div className="w-4 min-w-4 flex-shrink-0">
{copied ? (
<IconCheck size={14} strokeWidth={1.5} />
) : (
<IconCopy size={14} strokeWidth={1.5} />
)}
</div>
<span className="truncate">{url}</span>
</button>
</div>
)
}
@@ -0,0 +1,162 @@
import React, { useEffect, useState } from 'react'
import { Button, Checkbox, IconCheck, Input, cn } from 'ui'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import { useBreakpoint, useDebounce } from 'common'
import { useKey } from 'react-use'
const TicketCustomizationForm = ({ className }: { className?: string }) => {
const isMobile = useBreakpoint()
const {
supabase,
userData: user,
showCustomizationForm,
setShowCustomizationForm,
} = useConfData()
const defaultFormValues = {
role: user.metadata?.role,
company: user.metadata?.company,
hideAvatar: !!user.metadata?.hideAvatar,
}
const [formData, setFormData] = useState(defaultFormValues)
const [formState, setFormState] = useState<'idle' | 'saved' | 'saving' | 'error'>('idle')
const IS_SAVING = formState === 'saving'
const IS_SAVED = formState === 'saved'
const HAS_ERROR = formState === 'error'
useKey('Escape', () => setShowCustomizationForm && setShowCustomizationForm(false))
const handleInputChange = (name: string, value: string | boolean) => {
console.log('name', name, 'value', value)
setFormData((prev) => ({ ...prev, [name]: value }))
console.log('formData', formData)
}
const handleFormSubmit = async () => {
setFormState('saving')
const payload = {
metadata: {
...user.metadata,
...formData,
},
}
if (supabase) {
await supabase
.from('lw11_tickets')
.update(payload)
.eq('username', user.username)
.then((res) => {
if (res.error) return setFormState('error')
setFormState('saved')
setTimeout(() => {
setFormState('idle')
}, 1200)
})
}
}
const debouncedChangeHandler = useDebounce(handleFormSubmit, 1200)
useEffect(() => {
return () => setShowCustomizationForm && setShowCustomizationForm(false)
}, [])
return (
<form
className={cn(
'w-full rounded-t-2xl bg-alternative border p-4 flex flex-col gap-2 mx-auto transition-all opacity-0 translate-y-full text-foreground-light',
showCustomizationForm && 'opacity-100 translate-y-0 duration-300',
isMobile && 'mt-2',
className
)}
onChange={() => debouncedChangeHandler()}
onSubmit={(e) => e.preventDefault()}
>
<Input
// className="[&_input]:border-background"
size="small"
type="text"
placeholder="role (optional)"
value={formData.role}
onChange={(event) => {
handleInputChange('role', event.target.value)
}}
onFocus={() =>
!showCustomizationForm && setShowCustomizationForm && setShowCustomizationForm(true)
}
disabled={IS_SAVING}
maxLength={25}
icon={
<IconCheck
strokeWidth={2}
className={cn(
'w-3',
IS_SAVING && 'text-background-surface-300',
!!formData.role ? 'text-brand' : 'text-foreground-lighter'
)}
/>
}
/>
<Input
// className="[&_input]:border-background"
size="small"
type="text"
placeholder="company (optional)"
value={formData.company}
maxLength={25}
onChange={(event) => {
handleInputChange('company', event.target.value)
}}
onFocus={() =>
!showCustomizationForm && setShowCustomizationForm && setShowCustomizationForm(true)
}
disabled={IS_SAVING}
icon={
<IconCheck
strokeWidth={2}
className={cn(
'w-3',
IS_SAVING && 'text-background-surface-300',
!!formData.company ? 'text-brand' : 'text-foreground-lighter'
)}
/>
}
/>
<Checkbox
name="hideAVatar"
label="Hide avatar"
checked={formData.hideAvatar}
onChange={(event) => {
console.log(event)
handleInputChange('hideAvatar', event.target.checked)
}}
/>
<div className="flex items-center justify-center md:justify-between gap-2 mt-2">
<div className="hidden md:inline opacity-0 animate-fade-in text-xs text-foreground-light">
{IS_SAVED && (
<span className="hidden md:inline opacity-0 animate-fade-in text-xs text-foreground-light">
Saved
</span>
)}
{HAS_ERROR && (
<span className="hidden md:inline opacity-0 animate-fade-in text-xs text-foreground-light">
Something went wrong
</span>
)}
</div>
<Button
type="outline"
size="tiny"
htmlType="submit"
block={isMobile}
onClick={() => setShowCustomizationForm && setShowCustomizationForm(false)}
>
Done
</Button>
</div>
</form>
)
}
export default TicketCustomizationForm
@@ -0,0 +1,38 @@
import React from 'react'
import { LWX_DATE } from '~/lib/constants'
import TicketNumber from './TicketNumber'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import Image from 'next/image'
import { cn } from 'ui'
export default function TicketFooter() {
const { userData: user } = useConfData()
const { ticketNumber, golden, metadata } = user
const hasLightTicket = golden || metadata?.hasSecretTicket
const SupabaseLogo = hasLightTicket
? '/images/launchweek/lwx/logos/supabase_lwx_logo_light.png'
: '/images/launchweek/lwx/logos/supabase_lwx_logo_dark.png'
return (
<div
className={cn(
'relative z-10 w-full flex flex-col gap-2 font-mono text-foreground leading-none uppercase tracking-[3px]',
hasLightTicket ? 'text-[#11181C]' : 'text-white'
)}
>
{/* <Image
src={SupabaseLogo}
alt="Supabase Logo for Launch Week X"
width="30"
height="30"
className="mb-1 hidden md:block"
priority
quality={100}
/> */}
<TicketNumber number={ticketNumber} />
{/* <span>Launch Week X</span>
<span>{LWX_DATE}</span> */}
</div>
)
}
@@ -0,0 +1,147 @@
import { useState, useEffect } from 'react'
import { SupabaseClient } from '@supabase/supabase-js'
import { useRouter } from 'next/router'
import { SITE_ORIGIN } from '~/lib/constants'
import { Button, IconCheckCircle } from 'ui'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
type FormState = 'default' | 'loading' | 'error'
export default function TicketForm() {
const [formState, setFormState] = useState<FormState>('default')
const [realtimeChannel, setRealtimeChannel] = useState<ReturnType<
SupabaseClient['channel']
> | null>(null)
const [errorMsg] = useState('')
const { supabase, session, setUserData, setTicketState, userData } = useConfData()
const router = useRouter()
// Triggered on session
async function fetchUser() {
if (supabase && session?.user && !userData.id) {
const username = session.user.user_metadata.user_name
const name = session.user.user_metadata.full_name
const email = session.user.email
await supabase
.from('lw11_tickets')
.insert({
email,
name,
username,
referred_by: router.query?.referral ?? null,
})
.eq('email', email)
.select()
.single()
.then(async ({ error }: any) => {
// If error because of duplicate email, ignore and proceed, otherwise sign out.
if (error && error?.code !== '23505') {
setFormState('error')
return supabase.auth.signOut()
}
const { data } = await supabase
.from('lw11_tickets_platinum')
.select('*')
.eq('username', username)
.single()
if (data) {
setUserData(data)
}
setFormState('default')
// Prefetch GitHub avatar
new Image().src = `https://github.com/${username}.png`
// Prefetch the twitter share URL to eagerly generate the page
fetch(`/launch-week/tickets/${username}`).catch((_) => {})
if (!realtimeChannel) {
const channel = supabase
.channel('changes')
.on(
'postgres_changes',
{
event: 'UPDATE',
schema: 'public',
table: 'lw11_tickets',
filter: `username=eq.${username}`,
},
(payload: any) => {
const platinum = !!payload.new.sharedOnTwitter && !!payload.new.sharedOnLinkedIn
const secret = !!payload.new.gameWonAt
setUserData({
...payload.new,
platinum,
secret,
})
}
)
.subscribe()
setRealtimeChannel(channel)
}
})
}
}
useEffect(() => {
fetchUser()
return () => {
// Cleanup realtime subscription on unmount
realtimeChannel?.unsubscribe()
}
}, [session])
async function handleGithubSignIn() {
if (formState !== 'default') {
setFormState('default')
return
}
setFormState('loading')
setTicketState('loading')
const redirectTo = `${SITE_ORIGIN}/launch-week/${
userData.username ? '?referral=' + userData.username : ''
}`
supabase?.auth.signInWithOAuth({
provider: 'github',
options: {
redirectTo,
},
})
}
return formState === 'error' ? (
<div className="">
<div>{errorMsg}</div>
<Button
type="secondary"
onClick={() => {
setFormState('default')
setTicketState('registration')
}}
>
Try Again
</Button>
</div>
) : (
<div className="flex flex-col gap-10 items-start justify-center relative z-20">
<Button
size="tiny"
type="alternative"
disabled={formState === 'loading' || Boolean(session)}
onClick={handleGithubSignIn}
iconLeft={session && <IconCheckCircle />}
loading={formState === 'loading'}
className="px-4 h-auto !py-1.5"
>
Claim your ticket
</Button>
</div>
)
}
@@ -0,0 +1,13 @@
import React from 'react'
interface Props {
golden?: boolean
}
export default function TicketHeader({ golden = false }: Props) {
return (
<div className="relative z-10 w-full inline-flex mt-4 md:mt-6 h-10 font-mono uppercase">
Launch Week X
</div>
)
}
@@ -0,0 +1,31 @@
import { cn } from 'ui'
type Props = {
number: number | undefined
secret?: boolean
platinum?: boolean
className?: string
}
export default function TicketNumber({
number,
platinum = false,
secret = false,
className,
}: Props) {
const numDigits = `${number}`.length
const prefix = `0000000`.slice(numDigits)
const ticketNumberText = `NO ${prefix}${number}`
return (
<span
className={cn(
'w-[max-content] leading-[1] font-mono tracking-[.15rem] text-sm',
secret ? 'text-[#8b818c]' : platinum ? 'text-[#999a9b]' : 'text-[#616464]',
className
)}
>
{ticketNumberText}
</span>
)
}
@@ -0,0 +1,80 @@
import React, { useEffect, useState } from 'react'
import { SupabaseClient } from '@supabase/supabase-js'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import solutions from '~/data/Solutions'
import { cn } from 'ui'
const TicketPresence = (props: { className?: string }) => {
const { supabase, ticketState } = useConfData()
const hasTicket = ticketState === 'ticket'
const [realtimeChannel, setRealtimeChannel] = useState<ReturnType<
SupabaseClient['channel']
> | null>(null)
const [onlineUsers, setOnlineUsers] = useState<any[]>([])
const isSingular = onlineUsers.length === 1
const lowTraffic = onlineUsers.length < 5
useEffect(() => {
// Listen to realtime presence
if (!realtimeChannel && supabase) {
const lwxRoom = supabase?.channel('lwx_online', {
config: { broadcast: { self: true, ack: true } },
})
setRealtimeChannel(lwxRoom)
const userStatus = {}
lwxRoom
?.on('presence', { event: 'sync' }, () => {
const newState = lwxRoom.presenceState()
const users = [...Object.entries(newState).map(([_, value]) => value[0])]
const uniqueUsrs = users.filter(onlyUnique)
setOnlineUsers(uniqueUsrs)
})
.subscribe(async (status) => {
if (status !== 'SUBSCRIBED') {
return null
}
await lwxRoom.track(userStatus)
})
}
return () => {
realtimeChannel?.unsubscribe()
}
}, [])
return (
<div
className={cn(
'text-foreground-muted text-xs flex items-center transition-opacity',
hasTicket && 'text-sm opacity-80',
props.className
)}
>
<svg
className="h-5 w-5 stroke-foreground-lighter animate-pulse mr-2"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
aria-hidden="true"
>
<path
stroke="text-foreground"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="1.5"
d={solutions.realtime.icon}
/>
</svg>
{onlineUsers.length} {isSingular ? 'person is' : 'people are'}{' '}
{hasTicket ? 'customizing' : 'generating'} their ticket right now
</div>
)
}
function onlyUnique(value: any, index: number, array: any[]) {
return array.indexOf(value) === index
}
export default TicketPresence
@@ -0,0 +1,52 @@
import Image from 'next/image'
import { cn } from 'ui'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
export default function TicketProfile({ className }: { className?: string }) {
const { userData: user } = useConfData()
const { username, name, metadata, platinum, secret: hasSecretTicket } = user
const hasLightTicket = platinum
const profileImg = `https://github.com/${username}.png?size=60`
const hideAvatar = !!metadata?.hideAvatar
const HAS_ROLE = !!metadata?.role
const HAS_COMPANY = !!metadata?.company
const HAS_NO_META = !HAS_ROLE && !HAS_COMPANY
return (
<div className={cn('relative z-10 flex gap-4', className)}>
<div
className={cn(
'text-foreground-light flex flex-col gap-1 text-left text-xl md:max-w-[300px] mb-8',
hasLightTicket ? 'text-[#1c1c1c]' : 'text-white',
hasSecretTicket && '!text-white'
)}
>
{!hideAvatar && profileImg && (
<Image
src={profileImg}
alt={`${username} github image`}
width={60}
height={60}
className="min-w-14 w-14 h-14 rounded-full overflow-hidden border border-muted/40 mb-3"
/>
)}
<p className={cn('text-4xl leading-[105%]')}>{name || username || 'Your Name'}</p>
{HAS_NO_META && username && (
<p className={cn('text-foreground-lighter', hasSecretTicket && '!text-white')}>
@{username}
</p>
)}
<div className={cn('text-foreground-lighter', hasSecretTicket && '!text-white')}>
{HAS_ROLE && <span>{metadata?.role}</span>}
{HAS_COMPANY && (
<span>
{HAS_ROLE && <span> at </span>}
{metadata?.company}
</span>
)}
</div>
</div>
</div>
)
}
@@ -0,0 +1,213 @@
import React from 'react'
import dynamic from 'next/dynamic'
import Image from 'next/image'
import { AnimatePresence, m, LazyMotion, domAnimation } from 'framer-motion'
import { Badge, cn } from 'ui'
import { DEFAULT_TRANSITION, INITIAL_BOTTOM, getAnimation } from '~/lib/animations'
import { LW11_DATE, LW11_LAUNCH_DATE } from '~/lib/constants'
import useWinningChances from '../../hooks/useWinningChances'
import useLwGame from '../../hooks/useLwGame'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import SectionContainer from '~/components/Layouts/SectionContainer'
import TicketContainer from '~/components/LaunchWeek/11/Ticket/TicketContainer'
import LW11Background from '../LW11Background'
import TicketForm from './TicketForm'
import CountdownComponent from '../Countdown'
import TicketPresence from './TicketPresence'
import TicketActions from './TicketActions'
const LWGame = dynamic(() => import('./LW11Game'))
const TicketingFlow = () => {
const { ticketState, userData, showCustomizationForm } = useConfData()
const { isGameMode, setIsGameMode } = useLwGame(ticketState !== 'ticket' || showCustomizationForm)
const isLoading = !isGameMode && ticketState === 'loading'
const isRegistering = !isGameMode && ticketState === 'registration'
const hasTicket = !isGameMode && ticketState === 'ticket'
const hasPlatinumTicket = userData.platinum
const hasSecretTicket = userData.secret
const metadata = userData?.metadata
const transition = DEFAULT_TRANSITION
const initial = INITIAL_BOTTOM
const animate = getAnimation({ duration: 1 })
const exit = { opacity: 0, transition: { ...transition, duration: 0.2 } }
const winningChances = useWinningChances()
return (
<>
<SectionContainer className="relative !pt-8 lg:!pt-20 gap-5 h-full flex-1">
<div className="relative z-10 flex flex-col h-full">
<h1 className="sr-only">Supabase Special Announcement | {LW11_DATE}</h1>
<div className="relative z-10 w-full h-full flex flex-col justify-center gap-5 md:gap-10">
<LazyMotion features={domAnimation}>
<AnimatePresence mode="wait" key={ticketState}>
{isLoading && (
<m.div
key="loading"
initial={exit}
animate={animate}
exit={exit}
className="relative w-full min-h-[400px] mx-auto py-16 md:py-24 flex flex-col items-center gap-6 text-foreground"
>
<div className="hidden">
<TicketForm />
</div>
<svg
className="animate-spinner opacity-50 w-5 h-5 md:w-6 md:h-6"
width="100%"
height="100%"
viewBox="0 0 62 61"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M61 31C61 14.4315 47.5685 1 31 1C14.4315 1 1 14.4315 1 31"
stroke="white"
strokeWidth="2"
/>
</svg>
</m.div>
)}
{isRegistering && (
<m.div
key="registration"
initial={initial}
animate={animate}
exit={exit}
className={cn(
'w-full min-h-[400px] max-w-md mx-auto flex flex-col justify-center gap-8 lg:gap-12 opacity-0 invisible',
!isGameMode && !hasTicket && 'opacity-100 visible'
)}
>
<div className="flex flex-col gap-2">
<h2 className="text-foreground text-2xl">
Join us for a Special Announcement
</h2>
<p className="text-foreground-lighter text-lg">
Celebrate a major milestone with us and explore all the features that come
with it.
</p>
</div>
<div className="flex flex-col gap-1 font-mono uppercase text-sm">
<p className="-mb-1">{LW11_DATE}</p>
<CountdownComponent
date={LW11_LAUNCH_DATE}
showCard={false}
className="[&_*]:leading-4"
size="large"
/>
</div>
<TicketForm />
</m.div>
)}
{hasTicket && (
<m.div
key="ticket"
initial={initial}
animate={animate}
exit={exit}
className="w-full flex-1 min-h-[400px] flex flex-col xl:flex-row items-center xl:justify-center xl:items-center gap-8 md:gap-10 xl:gap-20 text-foreground text-center md:text-left"
>
<div className="w-full lg:w-auto h-full mt-3 md:mt-6 xl:mt-0 max-w-lg flex flex-col items-center">
<TicketContainer />
</div>
<div className="order-first xl:h-full w-full max-w-lg gap-3 flex flex-col items-center justify-center xl:items-start xl:justify-start text-center xl:text-left">
{hasSecretTicket && <Badge variant="outline">Secret ticket</Badge>}
{hasPlatinumTicket ? (
<div>
{hasSecretTicket && !metadata?.hasSharedSecret ? (
<p className="text-2xl mb-1">
Share again to boost your chance of winning!
</p>
) : (
<p className="text-2xl mb-1">Thanks for sharing!</p>
)}
<p className="text-[#8B9092]">
Join on April 15-19 to celebrate a major milestone with us and explore
all the features that come with it.
</p>
</div>
) : winningChances !== 2 ? (
<div>
{!hasSecretTicket && (
<p className="text-2xl mb-1">@{userData.username}, you're in!</p>
)}
<p className="text-[#8B9092]">
Now share your ticket to have a chance of winning AirPods Max and other
limited swag.
</p>
</div>
) : (
<div>
<p className="text-2xl mb-1">@{userData.username}, almost there!</p>
<p className="text-[#8B9092]">
Keep sharing to max out your chances of winning AirPods Max and other
limited swag.
</p>
</div>
)}
<div className="w-full my-3">
<TicketActions />
</div>
<div className="flex flex-col">
<span className="font-mono text-foreground-lighter text-xs leading-3">
Starts in:
</span>
<CountdownComponent date={LW11_LAUNCH_DATE} showCard={false} />
</div>
<div className="w-full h-auto text-center md:text-left border border-muted flex flex-col md:flex-row items-stretch rounded-lg bg-surface-100 my-2 md:mb-8 overflow-hidden">
<div className="hidden md:block relative h-full w-full min-h-[140px] md:w-1/3 top-0 -bottom-8 overflow-visible">
<Image
src="/images/launchweek/11/airpods-max-alpha.png"
alt="Supabase AirPod Max prize"
width={300}
height={300}
draggable={false}
className="absolute p-2 object-cover object-left-top w-full h-[200px] overflow-visible opacity-50 pointer-events-none"
/>
</div>
<div className="flex flex-col justify-center md:w-2/3 gap-1 p-3">
<p className="text-sm text-foreground-lighter">5 sets</p>
<p className="">Win AirPods Max</p>
<p className="text-foreground-light text-sm">
Grow your chances of winning limited edition swag by sharing on{' '}
<span className="text-foreground">X</span> and{' '}
<span className="text-foreground">Linkedin</span>.
</p>
</div>
</div>
{!hasPlatinumTicket && <TicketPresence />}
</div>
</m.div>
)}
{!showCustomizationForm && isGameMode && (
<m.div
key="ticket"
initial={initial}
animate={animate}
exit={exit}
className="w-full flex justify-center text-foreground !h-[500px]"
>
<LWGame setIsGameMode={setIsGameMode} />
</m.div>
)}
</AnimatePresence>
</LazyMotion>
</div>
</div>
</SectionContainer>
<LW11Background
className={cn(
'absolute z-0 inset-0 w-full h-full flex items-center justify-center opacity-100 transition-opacity',
hasTicket && 'opacity-20'
)}
/>
</>
)
}
export default TicketingFlow
@@ -0,0 +1,99 @@
import { motion } from 'framer-motion'
import Image from 'next/image'
import Link from 'next/link'
import { useBreakpoint } from 'common/hooks/useBreakpoint'
import { UserData } from '../hooks/use-conf-data'
interface Props {
loadedUsers: UserData[]
isLoading: boolean
pageCount: number
offset: number
}
export default function TicketsGrid({ loadedUsers, isLoading, pageCount, offset }: Props) {
const STORAGE_URL = 'https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/lwx'
const getTicketImageUrl = (username: string, isGold: boolean) =>
`${STORAGE_URL}/tickets/${isGold ? 'platinum' : 'regular'}/${username}.png`
const isMobile = useBreakpoint(1024)
const isTablet = useBreakpoint(1280)
const horizontalOffset = isMobile ? 8 : 20
return (
<div
className={['grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3 py-12 relative'].join(' ')}
>
{loadedUsers?.map((user, i) => {
const rowTickets = isMobile ? 2 : isTablet ? 3 : 4
const divider = Math.floor(i / rowTickets)
const isOddRow = divider % 2 === 0
// Delay should be no more than pageCount for new loaded users
const recalculatedDelay = i >= pageCount * 2 ? (i - pageCount * (offset - 1)) / 15 : i / 15
const imgUrl =
getTicketImageUrl(user.username!, !!user.golden) ??
'/images/launchweek/lwx/tickets/placeholder.png'
return (
<Link
href={`/launch-week/tickets/${user.username}`}
key={`${user.username}-000${i}`}
onClick={() => window.scrollTo(0, 0)}
legacyBehavior
passHref
>
<motion.a
className="relative w-full p-[1px] rounded-lg sm:rounded-xl overflow-hidden hover:cursor-pointer bg-gradient-to-b from-[#58585860] to-[#ffffff10]"
initial={{
opacity: 0,
y: 20,
x: isOddRow ? horizontalOffset : -horizontalOffset,
}}
animate={{
opacity: 1,
y: 0,
x: isOddRow ? horizontalOffset : -horizontalOffset,
transition: {
duration: 0.4,
ease: [0.24, 0.25, 0.05, 1],
delay: recalculatedDelay,
},
}}
>
<div className="relative inset-0 w-full pt-[50%] bg-[#2f2e2e] overflow-hidden rounded-lg sm:rounded-xl">
<Image
src={imgUrl}
alt={user.username ?? ''}
fill
sizes="100%"
className="object-cover object-center"
placeholder="blur"
blurDataURL="/images/launchweek/lwx/tickets/placeholder.png"
/>
</div>
</motion.a>
</Link>
)
})}
{isLoading &&
Array.from({ length: pageCount }, (_, i) => (
<motion.div
className="relative rounded-lg sm:rounded-xl overflow-hidden h-0 w-full pt-[50%]"
initial={{ opacity: 0, y: 20 }}
animate={{
opacity: 1,
y: 0,
transition: {
duration: 0.4,
ease: [0.24, 0.25, 0.05, 1],
delay: i / 15,
},
}}
>
<div className="absolute inset-0 rounded-lg sm:rounded-xl bg-gradient-to-b from-[#1c1c1c] to-[#121212] p-[1px] overflow-hidden">
<div className="absolute inset-[1px] rounded-lg sm:rounded-xl bg-gradient-to-b from-[#1c1c1c] to-[#121212]" />
</div>
</motion.div>
))}
</div>
)
}
@@ -17,7 +17,7 @@ const ParticlesCanvas = () => {
// to stop unnecessary computations
const handleScroll = () => {
if (canvasRef.current && typeof window !== 'undefined') {
const rect = (canvasRef.current as HTMLDivElement)?.getBoundingClientRect()
const rect = (canvasRef.current as HTMLCanvasElement)?.getBoundingClientRect()
const isInView = rect.bottom > 0
setAnimate(isInView)
@@ -24,8 +24,9 @@ const LW8CalloutsSection = () => {
<Image
src="/images/launchweek/8/twitter-spaces-thumb.svg"
alt="twitter spaces thumbnail"
layout="fill"
objectFit="cover"
fill
sizes="100%"
className="object-cover"
/>
</div>
</Link>
@@ -47,8 +48,9 @@ const LW8CalloutsSection = () => {
<Image
src="/images/launchweek/8/lw8-hackathon-thumb.svg"
alt="hackathon thumbnail"
layout="fill"
objectFit="cover"
fill
sizes="100%"
className="object-cover"
/>
</div>
</Link>
@@ -61,6 +61,7 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => {
?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1))
.map(({ display_info, link, isLive, title }: Meetup) => (
<Link
key={title}
href={link ?? '#'}
target="_blank"
className={[
@@ -24,8 +24,9 @@ const LWArchive = () => {
<Image
src="/images/launchweek/archive/lw6.jpg"
alt="Launch Week 6"
layout="fill"
objectFit="cover"
fill
sizes="100%"
className="object-cover"
/>
</div>
</a>
@@ -40,8 +41,9 @@ const LWArchive = () => {
<Image
src="/images/launchweek/archive/lw7.jpg"
alt="Launch Week 7"
layout="fill"
objectFit="cover"
fill
sizes="100%"
className="object-cover"
/>
</div>
</a>
@@ -1,6 +1,7 @@
import Image from 'next/image'
import React from 'react'
import { motion } from 'framer-motion'
import { cn } from 'ui'
type animateFromType = 'left' | 'right' | 'up' | 'down' | 'opacityOnly'
@@ -56,10 +57,13 @@ export default function LaunchWeekPrizeCard({
>
<Image
src={imageUrl}
layout="fill"
objectFit="cover"
fill
sizes="100%"
className={cn(
'object-cover',
imgObjectPosition === 'right' ? 'object-right' : 'object-center'
)}
quality={100}
objectPosition={imgObjectPosition}
alt=""
/>
</div>
@@ -18,9 +18,9 @@ export default function LaunchWeekPrizeSection({
<Image
src="/images/launchweek/8/swag-bg.png"
alt="prizes background"
layout="fill"
objectFit="cover"
objectPosition="top"
fill
sizes="100%"
className="object-cover object-top"
quality={100}
/>
</div>
@@ -32,8 +32,9 @@ export default function LaunchWeekPrizeSection({
<Image
src="/images/launchweek/8/swag-illustration.png"
alt="prizes"
layout="fill"
objectFit="contain"
fill
sizes="100%"
className="object-contain"
quality={100}
/>
</div>
@@ -47,7 +48,6 @@ export default function LaunchWeekPrizeSection({
className="col-span-full"
imageUrl="/images/launchweek/8/swag/deskmat-lg.jpg"
imageWrapperClassName="w-full aspect-[1.9/1] md:h-[300px]"
imgObjectPosition="center"
content={
<h3 className="w-full text-sm md:text-center flex md:justify-center items-center gap-4">
Supabase Desk Mat <LabelBadge text="10 mats" />
@@ -85,8 +85,8 @@ export const HackernewsSvg = () => (
export const TwitterSpacesSvg = () => (
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
clip-rule="evenodd"
fillRule="evenodd"
clipRule="evenodd"
d="M4.46228 5.78799C4.46228 3.4802 6.3331 1.60938 8.64089 1.60938C10.9487 1.60938 12.8195 3.4802 12.8195 5.78799V8.17578C12.8195 10.4836 10.9487 12.3544 8.64089 12.3544C6.3331 12.3544 4.46228 10.4836 4.46228 8.17578V5.78799ZM6.85006 8.17578C7.09719 8.17578 7.29777 7.9752 7.29777 7.72807V6.2357C7.29777 5.98857 7.09719 5.78799 6.85006 5.78799C6.60292 5.78799 6.40235 5.98857 6.40235 6.2357V7.72807C6.40235 7.9752 6.60292 8.17578 6.85006 8.17578ZM8.64089 8.77272C8.88803 8.77272 9.0886 8.57215 9.0886 8.32501V5.63876C9.0886 5.39162 8.88803 5.19105 8.64089 5.19105C8.39376 5.19105 8.19319 5.39162 8.19319 5.63876V8.32501C8.19319 8.57215 8.39376 8.77272 8.64089 8.77272ZM10.4317 8.17578C10.6789 8.17578 10.8794 7.9752 10.8794 7.72807V6.2357C10.8794 5.98857 10.6789 5.78799 10.4317 5.78799C10.1846 5.78799 9.98402 5.98857 9.98402 6.2357V7.72807C9.98402 7.9752 10.1846 8.17578 10.4317 8.17578Z"
fill="#8F8F8F"
/>
@@ -101,8 +101,8 @@ export const ProductHuntSvg = () => (
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clipPath="url(#clip0_3061_22934)">
<path
fill-rule="evenodd"
clip-rule="evenodd"
fillRule="evenodd"
clipRule="evenodd"
d="M8.00078 15.5094C12.0787 15.5094 15.3844 12.2037 15.3844 8.12578C15.3844 4.04782 12.0787 0.742188 8.00078 0.742188C3.92282 0.742188 0.617188 4.04782 0.617188 8.12578C0.617188 12.2037 3.92282 15.5094 8.00078 15.5094ZM6.89312 8.12578H8.98527C9.279 8.12578 9.56071 8.00909 9.76841 7.80139C9.97612 7.59369 10.0928 7.31198 10.0928 7.01824C10.0928 6.7245 9.97612 6.4428 9.76841 6.23509C9.56071 6.02739 9.279 5.9107 8.98527 5.9107H6.89312V8.12578ZM5.41641 4.43398H8.98527C9.67065 4.43398 10.328 4.70625 10.8126 5.1909C11.2973 5.67554 11.5695 6.33285 11.5695 7.01824C11.5695 7.70363 11.2973 8.36095 10.8126 8.84559C10.328 9.33023 9.67065 9.6025 8.98527 9.6025H6.89312V11.8176H5.41641V4.43398Z"
fill="#8F8F8F"
/>
@@ -118,8 +118,8 @@ export const ProductHuntSvg = () => (
export const CheckCircleSolidIcon = () => (
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
clip-rule="evenodd"
fillRule="evenodd"
clipRule="evenodd"
d="M8.00156 14.7805C11.5362 14.7805 14.4016 11.9151 14.4016 8.38047C14.4016 4.84585 11.5362 1.98047 8.00156 1.98047C4.46694 1.98047 1.60156 4.84585 1.60156 8.38047C1.60156 11.9151 4.46694 14.7805 8.00156 14.7805ZM10.9672 7.34615C11.2797 7.03373 11.2797 6.5272 10.9672 6.21478C10.6548 5.90236 10.1483 5.90236 9.83588 6.21478L7.20156 8.8491L6.16725 7.81478C5.85483 7.50236 5.3483 7.50236 5.03588 7.81478C4.72346 8.1272 4.72346 8.63373 5.03588 8.94615L6.63588 10.5462C6.9483 10.8586 7.45483 10.8586 7.76725 10.5462L10.9672 7.34615Z"
fill="currentColor"
/>
@@ -259,7 +259,7 @@ export const VideoPreviewTrigger = ({
/>
</svg>
</div>
<Image src={thumbnail} alt="Video thumbnail" layout="fill" objectFit="cover" />
<Image src={thumbnail} alt="Video thumbnail" fill sizes="100%" className="object-cover" />
</div>
{title && <span>{title}</span>}
</div>
@@ -1,6 +1,6 @@
import Image from 'next/image'
import Link from 'next/link'
import { Accordion } from 'ui'
import { Accordion, cn } from 'ui'
import { useBreakpoint } from 'common/hooks/useBreakpoint'
import {
@@ -77,7 +77,10 @@ export default function LW8Releases() {
preRelease.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet
@@ -86,11 +89,10 @@ export default function LW8Releases() {
}
className={`
absolute opacity-90
w-full h-full -z-10 transition-all duration-300
w-full h-full -z-10 transition-all duration-300 object-[100%] object-cover
`}
layout="fill"
objectPosition="100%"
objectFit="cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -121,7 +123,10 @@ export default function LW8Releases() {
preRelease.steps[1]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet
@@ -130,11 +135,10 @@ export default function LW8Releases() {
}
className={`
absolute opacity-90
w-full h-full -z-10 transition-all duration-300
w-full h-full -z-10 transition-all duration-300 object-[20%_50%] object-cover
`}
layout="fill"
objectPosition="20% 50%"
objectFit="cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -163,18 +167,25 @@ export default function LW8Releases() {
preRelease.steps[2]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={layer.img}
className={`
className={cn(
`
absolute opacity-90
w-full h-full -z-10 transition-all duration-300
`}
layout="fill"
objectPosition={
isTablet ? '50%' : isDesktop ? '100% 50%' : '30% 50%'
}
objectFit="contain"
w-full h-full -z-10 transition-all duration-300 object-contain
`,
isTablet
? 'object-[50%]'
: isDesktop
? 'object-[100%_50%]'
: 'object-[30%_50%]'
)}
fill
sizes="100%"
alt=""
/>
</div>
@@ -222,18 +233,23 @@ export default function LW8Releases() {
day1.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className={`
className={cn(
`
absolute opacity-90
w-full h-full -z-10 transition-all duration-300
`}
layout="fill"
objectPosition={isTablet ? '50%' : '90% 50%'}
objectFit="contain"
w-full h-full -z-10 transition-all duration-300 object-contain
`,
isTablet ? 'object-[50%]' : 'object-[90%_50%]'
)}
fill
sizes="100%"
alt=""
/>
</div>
@@ -280,17 +296,20 @@ export default function LW8Releases() {
day2.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className={`
absolute opacity-90
w-full h-full -z-10 transition-all duration-300
w-full h-full -z-10 transition-all duration-300 object-cover
`}
layout="fill"
objectFit="cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -351,15 +370,21 @@ export default function LW8Releases() {
day3.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectPosition={isTablet ? '50%' : '100% 50%'}
objectFit={i == 1 && isTablet ? 'contain' : 'cover'}
className={cn(
'absolute opacity-90 w-full h-full -z-10 transition-all duration-300',
isTablet ? 'object-[50%]' : 'object-[100%_50%]',
i == 1 && isTablet ? 'object-contain' : 'object-cover'
)}
fill
sizes="100%"
alt=""
/>
</div>
@@ -406,15 +431,21 @@ export default function LW8Releases() {
day4.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectPosition={isTablet ? '50%' : '100% 50%'}
objectFit={i == 1 && isTablet ? 'contain' : 'cover'}
className={cn(
'absolute opacity-90 w-full h-full -z-10 transition-all duration-300',
isTablet ? 'object-[50%]' : 'object-[100%_50%]',
i == 1 && isTablet ? 'object-contain' : 'object-cover'
)}
fill
sizes="100%"
alt=""
/>
</div>
@@ -444,14 +475,17 @@ export default function LW8Releases() {
day4.steps[1]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectFit="cover"
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300 object-cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -498,14 +532,17 @@ export default function LW8Releases() {
day5.steps[0]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectFit="cover"
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300 object-cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -536,14 +573,17 @@ export default function LW8Releases() {
day5.steps[1]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectFit="cover"
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300 object-cover"
fill
sizes="100%"
alt=""
/>
</div>
@@ -574,15 +614,20 @@ export default function LW8Releases() {
day5.steps[2]?.bg_layers?.map(
(layer, i) =>
!!layer.img && (
<div className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100">
<div
key={layer.img}
className="absolute opacity-90 transition-opacity inset-0 w-full h-full -z-10 group-hover/d1:opacity-100"
>
<Image
src={
!!layer.mobileImg && isTablet ? (layer.mobileImg as any) : layer.img
}
className="absolute opacity-90 w-full h-full -z-10 transition-all duration-300"
layout="fill"
objectFit="cover"
objectPosition={isTablet ? '50%' : '100% 50%'}
className={cn(
'absolute opacity-90 w-full h-full -z-10 transition-all duration-300 object-cover',
isTablet ? 'object-[50%]' : 'object-[100%_50%]'
)}
fill
sizes="100%"
alt=""
/>
</div>
@@ -5,6 +5,7 @@ import { UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
import { Swiper, SwiperSlide } from 'swiper/react'
import 'swiper/swiper.min.css'
import { cn } from 'ui'
interface Props {
users: UserData[]
@@ -24,10 +25,10 @@ export function TicketBrickWallSlider({ users, reverse, speed = 50000, animate }
return (
<div className="relative h-auto w-full m-0 overflow-hidden mb-2.5">
<div
className={[
className={cn(
'flex swiper-transition-linear ticket-brick-swiper',
reverse && '-translate-x-20 w-[calc(100vw+400px)]',
].join(' ')}
reverse && '-translate-x-20 w-[calc(100vw+400px)]'
)}
>
<Swiper
centeredSlides={true}
@@ -64,12 +65,11 @@ export function TicketBrickWallSlider({ users, reverse, speed = 50000, animate }
'/images/launchweek/8/lw8-ticket-empty.jpg'
}
alt={user.username ?? ''}
layout="fill"
objectFit="cover"
objectPosition="center"
fill
sizes="100%"
placeholder="blur"
blurDataURL="/images/launchweek/8/lw8-ticket-empty.jpg"
className="absolute inset-[1px] rounded-md md:rounded-lg"
className="absolute inset-[1px] rounded-md md:rounded-lg object-cover object-center"
/>
</div>
</div>
@@ -0,0 +1,93 @@
import Head from 'next/head'
import { useRouter } from 'next/router'
function FaviconImports() {
const { basePath } = useRouter()
return (
<Head>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<link
rel="apple-touch-icon"
sizes="57x57"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-57x57.png`}
/>
<link
rel="apple-touch-icon"
sizes="60x60"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-60x60.png`}
/>
<link
rel="apple-touch-icon"
sizes="72x72"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-72x72.png`}
/>
<link
rel="apple-touch-icon"
sizes="76x76"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-76x76.png`}
/>
<link
rel="apple-touch-icon"
sizes="114x114"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-114x114.png`}
/>
<link
rel="apple-touch-icon"
sizes="120x120"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-120x120.png`}
/>
<link
rel="apple-touch-icon"
sizes="144x144"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-144x144.png`}
/>
<link
rel="apple-touch-icon"
sizes="152x152"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-152x152.png`}
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href={`${basePath}/images/launchweek/lwx/favicon/apple-icon-180x180.png`}
/>
<link
rel="icon"
type="image/png"
sizes="192x192"
href={`${basePath}/images/launchweek/lwx/favicon/android-icon-192x192.png`}
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href={`${basePath}/images/launchweek/lwx/favicon/favicon-32x32.png`}
/>
<link
rel="icon"
type="image/png"
sizes="96x96"
href={`${basePath}/images/launchweek/lwx/favicon/favicon-96x96.png`}
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href={`${basePath}/images/launchweek/lwx/favicon/favicon-16x16.png`}
/>
<link rel="manifest" href={`${basePath}/images/launchweek/lwx/favicon/manifest.json" /`} />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta
name="msapplication-TileImage"
content="/images/launchweek/lwx/favicon/ms-icon-144x144.png"
/>
<meta name="theme-color" content="#ffffff" />
</Head>
)
}
export default FaviconImports
@@ -14,7 +14,6 @@ export default function LaunchWeekPrizeSection({ className }: { className?: stri
)}
>
<h2 className="w-full text-sm font-mono uppercase tracking-[1px]">Awards</h2>
<p>Stay tuned on Launch Week X's final day to find out if you're one of the lucky winners.</p>
<div className="w-full pt-4">
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mx-auto h-auto text-[#EDEDED]">
<LaunchWeekPrizeCard
@@ -34,6 +33,7 @@ export default function LaunchWeekPrizeSection({ className }: { className?: stri
<Image
src="/images/launchweek/lwx/swag/lwx_keyboard.png"
fill
sizes="100%"
quality={100}
alt="/images/launchweek/lwx/swag/lwx_keyboard.png"
className="h-full w-full block"
@@ -56,13 +56,17 @@ const LWXStickyNav: FC = () => {
<SectionContainer className="!max-w-none !py-0 lg:!container flex items-center justify-between font-mono gap-4 md:gap-8 text-sm">
<div className="flex items-center gap-4 md:gap-8">
<div className="flex items-center gap-3 leading-none uppercase">
<span className="text-foreground tracking-[1px]">Launch Week</span>{' '}
<Image
src="/images/launchweek/lwx/logos/lwx_logo.svg"
alt="Supabase Launch Week X icon"
width={16}
height={16}
/>
<Link href="/launch-week" className="text-foreground tracking-[1px]">
Launch Week
</Link>{' '}
<Link href="/launch-week/x">
<Image
src="/images/launchweek/lwx/logos/lwx_logo.svg"
alt="Supabase Launch Week X icon"
width={16}
height={16}
/>
</Link>
</div>
{/* Nav items */}
@@ -12,11 +12,11 @@ const MainStage: FC = () => (
</h3>
<div className="font-mono uppercase tracking-[1px] py-8 border-t border-[#111718] text-[#575E61] scroll-mt-16 flex flex-col md:flex-row justify-between gap-2">
<div className="!text-foreground [&_*]:text-foreground text-sm flex flex-col sm:flex-row sm:items-center sm:gap-3">
Hackathon concluded
Hackathon finished
</div>
<div className="!m-0 flex items-center">
<TextLink
label="Learn more"
label="See the winners"
url="/blog/supabase-hackathon-lwx"
target="_blank"
hasChevron
@@ -19,49 +19,8 @@ export interface AdventLink {
export const days: AdventDay[] = [
{
title: 'Supabase Album',
description: 'The best soundtrack to build your app in a weekend',
icon: (
<svg
width="28"
height="27"
viewBox="0 0 28 27"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M26.7005 0.762595C26.924 0.952594 27.0528 1.23111 27.0528 1.52442V18.7135C27.0528 19.2658 26.605 19.7135 26.0528 19.7135C25.5005 19.7135 25.0528 19.2658 25.0528 18.7135V2.70048L10.8169 5.0192V21.358C10.8169 21.9103 10.3692 22.358 9.81689 22.358C9.26461 22.358 8.81689 21.9103 8.81689 21.358V4.1689C8.81689 3.67866 9.17228 3.26072 9.65613 3.18191L25.892 0.537428C26.1815 0.490276 26.4771 0.572595 26.7005 0.762595Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.75794 18.3916C4.04672 18.3916 2.69897 19.7414 2.69897 21.3583C2.69897 22.9752 4.04672 24.325 5.75794 24.325C7.46916 24.325 8.8169 22.9752 8.8169 21.3583C8.8169 19.7414 7.46916 18.3916 5.75794 18.3916ZM0.698975 21.3583C0.698975 18.5937 2.98575 16.3916 5.75794 16.3916C8.53013 16.3916 10.8169 18.5937 10.8169 21.3583C10.8169 24.1229 8.53013 26.325 5.75794 26.325C2.98575 26.325 0.698975 24.1229 0.698975 21.3583Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M21.9935 15.7466C20.2823 15.7466 18.9346 17.0964 18.9346 18.7133C18.9346 20.3302 20.2823 21.68 21.9935 21.68C23.7048 21.68 25.0525 20.3302 25.0525 18.7133C25.0525 17.0964 23.7048 15.7466 21.9935 15.7466ZM16.9346 18.7133C16.9346 15.9487 19.2213 13.7466 21.9935 13.7466C24.7657 13.7466 27.0525 15.9487 27.0525 18.7133C27.0525 21.4779 24.7657 23.68 21.9935 23.68C19.2213 23.68 16.9346 21.4779 16.9346 18.7133Z"
fill="#EDEDED"
/>
</svg>
),
id: 'supabase-album',
is_shipped: true,
links: [
{
url: 'https://supabase.productions/',
label: 'Listen now',
target: '_blank',
},
],
},
{
title: 'Postgres Language Server',
description: 'Implementing the Parser',
title: 'TBD',
description: '',
icon: (
<svg
width="34"
@@ -73,398 +32,517 @@ export const days: AdventDay[] = [
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.43881 3.75378C4.10721 1.93324 5.84055 0.723145 7.77992 0.723145H15.6033V0.734736H17.0394C23.8756 0.734736 29.4173 6.27652 29.4173 13.1127V20.1749C29.4173 20.7272 28.9696 21.1749 28.4173 21.1749C27.8651 21.1749 27.4173 20.7272 27.4173 20.1749V13.1127C27.4173 7.38109 22.771 2.73474 17.0394 2.73474H15.4396C15.3877 2.73474 15.3366 2.73078 15.2868 2.72314H7.77992C6.6793 2.72314 5.6956 3.40989 5.31627 4.44308L2.7812 11.3479C2.37375 12.4577 2.69516 13.7038 3.58855 14.4781L5.32807 15.9856C6.12772 16.6786 6.58711 17.6847 6.58709 18.7428L6.58706 21.5134C6.58702 23.8192 8.45627 25.6885 10.7621 25.6885C11.4007 25.6885 11.9184 25.1708 11.9184 24.5322L11.9185 12.1874C11.9185 9.59233 12.955 7.10481 14.7977 5.27761C15.1899 4.88873 15.823 4.8914 16.2119 5.28357C16.6008 5.67574 16.5981 6.3089 16.2059 6.69777C14.742 8.14943 13.9185 10.1257 13.9185 12.1874L13.9184 24.5323C13.9184 26.2754 12.5053 27.6885 10.7621 27.6885C7.35169 27.6885 4.58701 24.9238 4.58706 21.5134L4.58709 18.7428C4.5871 18.2647 4.37953 17.8101 4.01822 17.497L2.27871 15.9894C0.757203 14.6708 0.209829 12.5486 0.90374 10.6586L3.43881 3.75378ZM16.539 18.5225C17.0348 18.2791 17.634 18.4838 17.8773 18.9796C19.1969 21.6686 21.9313 23.3727 24.9267 23.3726L32.8043 23.3726C33.3566 23.3725 33.8043 23.8203 33.8043 24.3725C33.8044 24.9248 33.3566 25.3725 32.8044 25.3726L29.4081 25.3726C29.4142 25.4172 29.4173 25.4628 29.4173 25.5091C29.4173 29.0627 26.1868 31.4165 22.6091 31.4165C19.2966 31.4165 16.5385 29.0518 15.9271 25.9188C15.8213 25.3767 16.175 24.8516 16.717 24.7458C17.2591 24.64 17.7843 24.9936 17.89 25.5357C18.3217 27.7475 20.2716 29.4165 22.6091 29.4165C25.447 29.4165 27.4173 27.6256 27.4173 25.5091C27.4173 25.4628 27.4205 25.4172 27.4266 25.3726L24.9267 25.3726C21.1684 25.3727 17.7375 23.2346 16.0818 19.8607C15.8385 19.3649 16.0432 18.7658 16.539 18.5225Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.7224 13.0006C21.7224 13.6338 22.2358 14.1472 22.869 14.1472C23.5022 14.1472 24.0156 13.6338 24.0156 13.0006C24.0156 12.3674 23.5022 11.854 22.869 11.854C22.2358 11.854 21.7224 12.3674 21.7224 13.0006Z"
fill="#EDEDED"
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'postgres-language-server-implementing-parser',
id: '',
is_shipped: true,
links: [
{
url: '/blog/postgres-language-server-implementing-parser',
url: '#',
label: 'Read blog post',
},
],
},
{
title: 'Design at Supabase',
description: "The transformative journey of Supabase's Design team",
icon: (
<svg
width="40"
height="40"
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M20.2446 8.70155C20.2295 7.69665 18.9596 7.26538 18.3333 8.05247L8.88245 19.9299C7.76695 21.3318 8.76744 23.3993 10.5614 23.3993H20.3351L20.45 31.0533C20.4651 32.0582 21.7349 32.4894 22.3612 31.7024L31.8121 19.825C32.9275 18.4231 31.927 16.3556 30.1332 16.3556H20.2949L20.2446 8.70155Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M9.39209 1.42236C9.22689 1.42236 9.06302 1.4277 8.90061 1.43819L8.40165 1.47044L8.33716 0.472517L8.83612 0.440273C9.01998 0.428392 9.20537 0.422363 9.39209 0.422363H10.3485V1.42236H9.39209ZM13.9131 0.422363H15.826V1.42236H13.9131V0.422363ZM19.3905 0.422363H21.3034V1.42236H19.3905V0.422363ZM24.8679 0.422363H26.7808V1.42236H24.8679V0.422363ZM30.3453 0.422363H31.3018C31.4885 0.422363 31.6739 0.428392 31.8577 0.440273L32.3567 0.472517L32.2922 1.47044L31.7932 1.43819C31.6308 1.4277 31.467 1.42236 31.3018 1.42236H30.3453V0.422363ZM4.8229 2.95351L4.44711 3.28333C4.20097 3.49936 3.96908 3.73124 3.75306 3.97738L3.42324 4.35317L2.67165 3.69353L3.00147 3.31774C3.24612 3.03899 3.50872 2.7764 3.78747 2.53175L4.16326 2.20193L4.8229 2.95351ZM36.5306 2.20193L36.9064 2.53175C37.1851 2.7764 37.4477 3.03899 37.6924 3.31774L38.0222 3.69353L37.2706 4.35317L36.9408 3.97738C36.7248 3.73124 36.4929 3.49936 36.2467 3.28333L35.871 2.95351L36.5306 2.20193ZM1.94016 7.93192L1.90792 8.43088C1.89742 8.59329 1.89209 8.75717 1.89209 8.92236V9.87881H0.89209V8.92236C0.89209 8.73564 0.898118 8.55025 0.91 8.36639L0.942244 7.86743L1.94016 7.93192ZM39.7516 7.86744L39.7838 8.36639C39.7957 8.55025 39.8018 8.73564 39.8018 8.92236V9.87881H38.8018V8.92236C38.8018 8.75717 38.7964 8.59329 38.7859 8.43088L38.7537 7.93192L39.7516 7.86744ZM39.8018 13.4433V15.3562H38.8018V13.4433H39.8018ZM1.89209 13.4433V15.3562H0.89209V13.4433H1.89209ZM1.89209 18.9207V20.8336H0.89209V18.9207H1.89209ZM39.8018 18.9207V20.8336H38.8018V18.9207H39.8018ZM1.89209 24.3982V26.3111H0.89209V24.3982H1.89209ZM39.8018 24.3982V26.3111H38.8018V24.3982H39.8018ZM1.89209 29.8756V30.832C1.89209 30.9972 1.89742 31.1611 1.90792 31.3235L1.94016 31.8225L0.942244 31.887L0.91 31.388C0.898118 31.2041 0.89209 31.0188 0.89209 30.832V29.8756H1.89209ZM39.8018 29.8756V30.832C39.8018 31.0188 39.7957 31.2041 39.7838 31.388L39.7516 31.887L38.7537 31.8225L38.7859 31.3235C38.7964 31.1611 38.8018 30.9972 38.8018 30.832V29.8756H39.8018ZM3.42324 35.4012L3.75306 35.777C3.96908 36.0232 4.20097 36.255 4.4471 36.4711L4.8229 36.8009L4.16326 37.5525L3.78746 37.2226C3.50872 36.978 3.24612 36.7154 3.00147 36.4367L2.67165 36.0609L3.42324 35.4012ZM38.0222 36.0609L37.6924 36.4367C37.4477 36.7154 37.1851 36.978 36.9064 37.2226L36.5306 37.5525L35.871 36.8009L36.2467 36.4711C36.4929 36.255 36.7248 36.0232 36.9408 35.777L37.2706 35.4012L38.0222 36.0609ZM8.40165 38.284L8.90061 38.3162C9.06302 38.3267 9.2269 38.332 9.39209 38.332H10.3485V39.332H9.39209C9.20537 39.332 9.01998 39.326 8.83612 39.3141L8.33716 39.2819L8.40165 38.284ZM32.3567 39.2819L31.8577 39.3141C31.6739 39.326 31.4885 39.332 31.3018 39.332H30.3453V38.332H31.3018C31.467 38.332 31.6308 38.3267 31.7932 38.3162L32.2922 38.284L32.3567 39.2819ZM13.9131 38.332H15.826V39.332H13.9131V38.332ZM19.3905 38.332H21.3034V39.332H19.3905V38.332ZM24.8679 38.332H26.7808V39.332H24.8679V38.332Z"
fill="#EDEDED"
/>
</svg>
),
id: 'design-at-supabase',
is_shipped: true,
links: [
{
url: '/blog/how-design-works-at-supabase',
label: 'Read blog post',
},
],
},
{
title: 'Supabase Grafana',
description: 'Observability for your Supabase project',
is_shipped: true,
icon: (
<svg
width="34"
height="36"
viewBox="0 0 34 36"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M33.4652 15.7973C33.4026 15.2339 33.34 14.5452 33.0896 13.794C32.9017 13.0427 32.5887 12.2288 32.1505 11.3523C31.7122 10.4759 31.1488 9.59936 30.4601 8.72288C30.2097 8.40986 29.8967 8.03422 29.5211 7.7212C30.0219 5.71781 28.895 4.02746 28.895 4.02746C27.0168 3.90224 25.7647 4.5909 25.3264 4.96654C25.2639 4.96654 25.2012 4.90394 25.076 4.84132C24.763 4.71612 24.45 4.5909 24.0743 4.4657C23.6987 4.34048 23.3857 4.27788 23.01 4.15266C22.6344 4.09006 22.2587 4.02746 21.9457 3.96484C21.8831 3.96484 21.8205 3.96484 21.7579 3.96484C20.944 1.3354 18.565 0.208496 18.565 0.208496C15.9356 1.89886 15.4347 4.21527 15.4347 4.21527C15.4347 4.21527 15.4347 4.27788 15.4347 4.34048C15.3095 4.40308 15.1217 4.40308 14.9965 4.4657C14.8086 4.5283 14.6208 4.5909 14.3704 4.65352C14.1826 4.71612 13.9948 4.77872 13.7443 4.90394C13.3687 5.09176 12.9305 5.27956 12.5548 5.46738C12.1792 5.6552 11.8036 5.90562 11.4279 6.15606C11.3653 6.15606 11.3653 6.09344 11.3653 6.09344C7.67159 4.71612 4.41608 6.40648 4.41608 6.40648C4.10306 10.288 5.85602 12.7923 6.23166 13.2305C6.16904 13.4809 6.04384 13.7314 5.98123 13.9818C5.73081 14.8583 5.48038 15.7973 5.35518 16.7365C5.35518 16.8617 5.29256 16.9869 5.29256 17.1121C1.91185 18.8024 0.910156 22.2457 0.910156 22.2457C3.72742 25.5013 7.04553 25.689 7.04553 25.689C7.48378 26.4404 7.92202 27.1289 8.48546 27.8176C8.73588 28.068 8.98631 28.3811 9.17413 28.6315C8.17244 31.574 9.29934 34.0157 9.29934 34.0157C12.4296 34.1409 14.4956 32.6383 14.9339 32.2627C15.2469 32.3879 15.5599 32.4504 15.8729 32.5758C16.812 32.8262 17.8138 32.9514 18.8154 33.0139C19.0658 33.0139 19.3163 33.0139 19.5667 33.0139H19.6919H19.7545H19.8797H20.0049C21.5075 35.1425 24.0743 35.4556 24.0743 35.4556C25.9525 33.5147 26.0151 31.574 26.0151 31.1357V31.0732V31.0105C26.3907 30.7601 26.7663 30.4472 27.142 30.1341C27.8933 29.4454 28.5193 28.6942 29.0828 27.8803C29.1454 27.8176 29.208 27.7551 29.208 27.6299C31.3366 27.7551 32.7765 26.3152 32.7765 26.3152C32.4009 24.1239 31.1487 23.0596 30.8983 22.8719H30.8358C30.8358 22.7465 30.8358 22.6213 30.8358 22.4961C30.8358 22.2457 30.8358 21.9953 30.8358 21.8076V21.4945V21.4318V21.3693V21.3066V21.1814V20.9937C30.8358 20.931 30.8358 20.8685 30.8358 20.8058C30.8358 20.7433 30.8358 20.6806 30.8358 20.6179V20.4302V20.2423C30.7731 19.9919 30.7731 19.7415 30.7106 19.5536C30.4601 18.6147 30.1471 17.7381 29.6463 16.9242C29.1454 16.1104 28.582 15.4217 27.8933 14.7957C27.2046 14.1696 26.4534 13.7314 25.6395 13.3557C24.8256 12.9801 24.0117 12.7923 23.1353 12.6671C22.697 12.6044 22.3214 12.6044 21.8831 12.6044H21.7579H21.6953H21.6327H21.5701H21.4449C21.3823 12.6044 21.3196 12.6044 21.2571 12.6044C21.0692 12.6044 20.8188 12.6671 20.631 12.6671C19.8171 12.7923 19.0033 13.1053 18.3146 13.5435C17.6259 13.9818 16.9999 14.4826 16.499 15.0461C15.9982 15.6095 15.6225 16.2982 15.3721 16.9869C15.1217 17.6756 14.9965 18.3641 14.9339 19.0528C14.9339 19.2407 14.9339 19.3659 14.9339 19.5536C14.9339 19.6163 14.9339 19.6163 14.9339 19.679V19.8042C14.9339 19.8667 14.9339 19.9919 14.9339 20.0546C14.9965 20.3675 15.0591 20.7433 15.1217 21.0562C15.3095 21.6822 15.6225 22.2457 15.9356 22.7465C16.3112 23.2475 16.7494 23.6231 17.1877 23.936C17.6259 24.2491 18.1268 24.4995 18.6276 24.6247C19.1285 24.7499 19.5667 24.8126 20.0676 24.8126C20.1301 24.8126 20.1928 24.8126 20.2553 24.8126H20.318H20.3806C20.4432 24.8126 20.5058 24.8126 20.5058 24.8126C20.5058 24.8126 20.5058 24.8126 20.5684 24.8126H20.631H20.6936C20.7562 24.8126 20.8188 24.8126 20.8814 24.8126C20.944 24.8126 21.0067 24.8126 21.0692 24.7499C21.1944 24.7499 21.2571 24.6874 21.3823 24.6874C21.5701 24.6247 21.7579 24.5622 21.9457 24.437C22.1335 24.3743 22.2587 24.2491 22.4466 24.1239C22.5091 24.1239 22.5092 24.0614 22.5718 23.9987C22.7596 23.8735 22.7596 23.6231 22.6344 23.4979C22.5092 23.3727 22.3214 23.31 22.1962 23.4352C22.1335 23.4352 22.1335 23.4979 22.071 23.4979C21.9457 23.5604 21.8205 23.6231 21.6327 23.6856C21.5075 23.7483 21.3196 23.7483 21.1944 23.8108C21.1319 23.8108 21.0067 23.8108 20.944 23.8108C20.8814 23.8108 20.8814 23.8108 20.8188 23.8108C20.7562 23.8108 20.7562 23.8108 20.6936 23.8108C20.631 23.8108 20.631 23.8108 20.5684 23.8108C20.5058 23.8108 20.4432 23.8108 20.4432 23.8108H20.3806H20.318C20.2553 23.8108 20.2554 23.8108 20.1928 23.8108C19.8171 23.7483 19.5041 23.6856 19.1285 23.4979C18.7528 23.3727 18.4398 23.1223 18.1267 22.8719C17.8138 22.6213 17.5633 22.2457 17.3755 21.9328C17.1877 21.6197 16.9999 21.1814 16.9372 20.7433C16.8746 20.5554 16.8746 20.305 16.8746 20.1171C16.8746 20.0546 16.8746 19.9919 16.8746 19.9294V19.8667V19.8042C16.8746 19.679 16.8746 19.5536 16.9372 19.4284C17.1251 18.4893 17.5633 17.6129 18.3146 16.8617C18.5024 16.6738 18.6902 16.5486 18.8781 16.3607C19.0658 16.2355 19.3163 16.1104 19.5041 15.9852C19.7545 15.86 20.0049 15.7973 20.1928 15.7347C20.4432 15.6721 20.6936 15.6095 20.944 15.6095C21.0692 15.6095 21.1944 15.6095 21.3196 15.6095H21.3823H21.5075H21.5701H21.6953C21.9457 15.6095 22.2587 15.6721 22.5091 15.7347C23.07Line truncated
fill="#EDEDED"
/>
</svg>
),
id: 'supabase-grafana',
links: [
{
url: 'https://github.com/supabase/supabase-grafana',
label: 'View on GitHub',
target: '_blank',
},
],
},
{
title: 'pg_graphql: Postgres functions',
description: 'pg_graphql now supports User Defined Functions (UDFs)',
is_shipped: true,
title: 'TBD',
description: '',
icon: (
<svg
width="32"
height="36"
viewBox="0 0 32 36"
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M12.662 31.8127L5.49355 27.6737C4.92892 28.2646 4.13313 28.6326 3.25138 28.6326C1.53875 28.6326 0.150391 27.2442 0.150391 25.5314C0.150391 24.0709 1.16004 22.8461 2.51943 22.5172V14.2427C1.16004 13.9137 0.150391 12.689 0.150391 11.2284C0.150391 9.51568 1.53875 8.12724 3.25138 8.12724C4.13313 8.12724 4.92893 8.49528 5.49355 9.08614L12.662 4.94716C12.5815 4.67102 12.5382 4.37893 12.5382 4.07676C12.5382 2.36403 13.9266 0.975586 15.6392 0.975586C17.3519 0.975586 18.7402 2.36403 18.7402 4.07676C18.7402 4.37806 18.6972 4.66932 18.6171 4.94475L25.7866 9.08429C26.3511 8.49446 27.1462 8.12715 28.0271 8.12715C29.7397 8.12715 31.1281 9.51559 31.1281 11.2283C31.1281 12.6871 30.1208 13.9107 28.7639 14.2414V22.5183C30.1208 22.8491 31.1281 24.0726 31.1281 25.5314C31.1281 27.2442 29.7397 28.6326 28.0271 28.6326C27.1462 28.6326 26.3511 28.2653 25.7866 27.6755L18.6171 31.8151C18.6973 32.0905 18.7402 32.3817 18.7402 32.683C18.7402 34.3957 17.3519 35.7842 15.6392 35.7842C13.9266 35.7842 12.5382 34.3957 12.5382 32.683C12.5382 32.3809 12.5814 32.0888 12.662 31.8127ZM15.6392 7.17793C15.9416 7.17793 16.2339 7.13464 16.5103 7.05391L25.8838 23.2902C25.4635 23.6923 25.1561 24.2114 25.014 24.7953H6.26446C6.12268 24.2129 5.81648 23.6949 5.39782 23.2932L14.7723 7.05513C15.0474 7.13507 15.3383 7.17793 15.6392 7.17793ZM6.26444 26.2677C6.25374 26.3117 6.24209 26.3553 6.22954 26.3985L13.3994 30.5382C13.9639 29.9488 14.7587 29.5818 15.6392 29.5818C16.5206 29.5818 17.3162 29.9496 17.8808 30.5401L25.0496 26.4009C25.0368 26.3569 25.0249 26.3125 25.014 26.2677H6.26444ZM3.99177 14.2406C5.34689 13.9086 6.35236 12.686 6.35236 11.2284C6.35236 10.9275 6.3095 10.6365 6.22954 10.3614L13.3995 6.22159C13.4313 6.25482 13.4639 6.28734 13.4971 6.31912L4.12403 22.5548C4.08034 22.542 4.03624 22.5301 3.99177 22.5192V14.2406ZM27.1586 22.5535C27.2025 22.5407 27.2468 22.5289 27.2916 22.518V14.2417C25.934 13.9115 24.9261 12.6876 24.9261 11.2283C24.9261 10.9265 24.9692 10.6348 25.0496 10.359L17.8807 6.21978C17.8493 6.25259 17.8172 6.28471 17.7845 6.31612L27.1586 22.5535Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'pg-graphql-postgres-functions',
id: '',
is_shipped: true,
links: [
{
url: '/blog/pg-graphql-postgres-functions',
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'PostgREST 12',
description: 'PostgREST 12 is out: take a look at some of the major new features',
is_shipped: true,
className: 'xl:col-span-2 xl:h-auto xl:aspect-auto',
title: 'TBD',
description: '',
icon: (
<svg
width="27"
height="40"
viewBox="0 0 27 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M15.0322 36.3902L14.3034 37.2516C11.7407 35.013 7.01284 29.8864 8.60341 27.2884C10.194 24.6905 13.3899 25.1014 14.789 25.6316L7.74209 18.2973L11.8373 13.1528C13.3448 11.2589 13.3997 8.5907 11.9712 6.63648L9.15036 2.77743C8.9936 2.56299 9.03699 2.26258 9.24801 2.10126C9.45574 1.94245 9.7517 1.97543 9.91937 2.17607L18.8316 12.8409C17.6386 13.8717 15.1335 16.8169 14.6563 20.3515C14.1791 23.8861 18.1983 27.8627 20.2675 29.4092L19.5164 30.3589C16.4015 28.7684 12.9333 29.5417 11.9833 31.552C11.2234 33.1603 13.6993 35.4476 15.0322 36.3902Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M8.19759 0.72708C9.14118 0.00571147 10.4855 0.155532 11.2472 1.06693L19.3767 10.7951L26.0245 10.7951L26.0244 11.6733L20.1105 11.6733L21.2505 13.0375L19.963 14.1501C19.4762 14.5707 18.6221 15.6091 17.8598 16.8512C17.6227 17.2375 17.3991 17.6362 17.2004 18.035H26.0239V18.9131H16.8061C16.5747 19.4971 16.4176 20.0613 16.3731 20.5649C16.2712 21.718 16.778 23.0811 17.8987 24.5981C18.0694 24.8291 18.2477 25.055 18.4306 25.2745H26.024V26.1526H19.2161C19.968 26.9389 20.7262 27.5922 21.3035 28.0236L22.7276 29.088L20.2085 32.2733H26.0243V33.1515H14.0831L14.0904 33.1609C14.6453 33.8766 15.456 34.571 16.0314 34.978L17.5719 36.0674L14.4036 39.5637L13.9864 39.2718L13.1656 38.5547C11.8166 37.3764 9.88352 35.4297 8.47296 33.3885C8.41881 33.3101 8.36506 33.2311 8.31182 33.1515H0.193359V32.2733H7.76359C7.35983 31.575 7.01869 30.8459 6.80346 30.1156C6.47287 28.9938 6.37285 27.6191 7.12826 26.3853C7.17696 26.3057 7.22678 26.2282 7.27763 26.1526H0.193359V25.2745H7.99604C8.77306 24.4921 9.68669 24.0215 10.597 23.7655L5.93479 18.9131H0.193359V18.035H5.7401L10.484 12.0755C10.5868 11.9464 10.6796 11.812 10.7625 11.6733H0.193359V10.7951H11.1403C11.4367 9.74213 11.2506 8.58204 10.5748 7.6576L7.75399 3.79855C7.04195 2.82446 7.23903 1.45989 8.19759 0.72708ZM18.7299 31.8999L19.4613 32.2733H13.5844C13.5737 32.2303 13.5685 32.1938 13.5665 32.1666L13.5658 32.1543C13.7319 31.8503 14.2141 31.4922 15.2427 31.3084C16.2341 31.1312 17.4976 31.2706 18.7299 31.8999ZM10.6345 1.57894C10.147 0.99558 9.2865 0.899685 8.68253 1.36141C8.06899 1.83046 7.94285 2.70388 8.3986 3.32736L11.2194 7.1864C12.4002 8.80178 12.3549 11.0073 11.1087 12.5728L6.50588 18.3551L12.1887 24.2697L11.442 24.3942C10.1196 24.6147 8.73644 25.2878 7.80923 26.8022C7.21941 27.7656 7.27116 28.878 7.56936 29.8899C7.86856 30.9052 8.45125 31.9526 9.12984 32.9346C10.491 34.9042 12.3731 36.8023 13.6908 37.9534L14.4036 38.5759L16.3999 36.2165L15.5703 35.6299C14.9529 35.1932 14.0769 34.4466 13.4594 33.6501C13.1504 33.2516 12.9395 32.8829 12.839 32.5695C12.7985 32.4432 12.7775 32.3253 12.7702 32.2245C12.7639 32.1379 12.7645 32.0243 12.7975 31.9239L12.7981 31.9221L12.8159 31.8696L12.8256 31.8489C13.1406 31.1825 13.9487 30.7285 15.1022 30.5224C16.2707 30.3135 17.7106 30.4829 19.093 31.1888L19.7734 31.5362L21.5923 29.2363L20.8255 28.6632C19.8489 27.9334 18.3962 26.6151 17.2565 25.0725C16.0848 23.4867 15.451 21.9285 15.5777 20.4946C15.6911 19.2121 16.3986 17.7055 17.1793 16.4335C17.9625 15.1575 18.8667 14.0421 19.4409 13.5459L20.1342 12.9469L10.6345 1.57894Z"
fill="#EDEDED"
/>
</svg>
),
id: 'postgrest-12',
links: [
{
url: '/blog/postgrest-12',
label: 'Read blog post',
},
],
},
{
title: 'Supavisor 1.0',
description: 'A scalable connection pooler for Postgres',
is_shipped: true,
icon: (
<svg
width="33"
height="33"
viewBox="0 0 33 33"
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M6.26747 1.22998C6.26747 0.677696 6.72413 0.22998 7.28747 0.22998H26.4058C26.9691 0.22998 27.4258 0.677696 27.4258 1.22998V7.96132C27.4258 8.5136 26.9691 8.96132 26.4058 8.96132H22.6745L25.7709 12.2508H31.671C32.2343 12.2508 32.691 12.6986 32.691 13.2508V19.9822C32.691 20.5345 32.2343 20.9822 31.671 20.9822H24.805C24.2417 20.9822 23.785 20.5345 23.785 19.9822V13.2508C23.785 13.2003 23.7889 13.1506 23.7962 13.1021L19.8986 8.96132H17.8671L17.889 12.251H20.2796C20.8429 12.251 21.2996 12.6987 21.2996 13.251V19.5681L26.5941 24.7588C26.8782 24.6939 27.1743 24.6596 27.4786 24.6596C29.6219 24.6596 31.3594 26.363 31.3594 28.4643C31.3594 30.5656 29.6219 32.269 27.4786 32.269C25.3353 32.269 23.5978 30.5656 23.5978 28.4643C23.5978 27.4111 24.0342 26.4579 24.7395 25.769L19.8571 20.9823H17.8666V24.7924C19.5151 25.2315 20.7274 26.7091 20.7274 28.4643C20.7274 30.5656 18.9899 32.269 16.8466 32.269C14.7033 32.269 12.9658 30.5656 12.9658 28.4643C12.9658 26.7091 14.1781 25.2315 15.8266 24.7924V20.9823H13.8361L8.98258 25.7407C9.70503 26.4317 10.1536 27.3967 10.1536 28.4643C10.1536 30.5656 8.41609 32.269 6.27277 32.269C4.12945 32.269 2.39195 30.5656 2.39195 28.4643C2.39195 26.363 4.12945 24.6596 6.27277 24.6596C6.56016 24.6596 6.84025 24.6902 7.10983 24.7483L12.3936 19.5681V13.251C12.3936 12.6987 12.8503 12.251 13.4136 12.251H15.849L15.827 8.96132H13.9686L9.83174 13.3563V19.9822C9.83174 20.5345 9.37508 20.9822 8.81174 20.9822H1.94578C1.38245 20.9822 0.925781 20.5345 0.925781 19.9822V13.2508C0.925781 12.6986 1.38245 12.2508 1.94578 12.2508H8.09635L11.1927 8.96132H7.28747C6.72413 8.96132 6.26747 8.5136 6.26747 7.96132V1.22998ZM7.79174 14.2508H2.96578V18.9822H7.79174V14.2508ZM14.4336 18.9823H19.2596V14.251H14.4336V18.9823ZM6.991 26.8021C6.77031 26.7104 6.52759 26.6596 6.27277 26.6596C5.25611 26.6596 4.43195 27.4676 4.43195 28.4643C4.43195 29.461 5.25611 30.269 6.27277 30.269C7.28942 30.269 8.11359 29.461 8.11359 28.4643C8.11359 27.7198 7.65369 27.0805 6.99721 26.8047C6.99514 26.8039 6.99307 26.803 6.991 26.8021ZM16.7407 26.6625C15.7733 26.7163 15.0058 27.5025 15.0058 28.4643C15.0058 29.461 15.83 30.269 16.8466 30.269C17.8633 30.269 18.6874 29.461 18.6874 28.4643C18.6874 27.5025 17.9199 26.7163 16.9525 26.6625C16.9177 26.6661 16.8824 26.6679 16.8466 26.6679C16.8109 26.6679 16.7755 26.6661 16.7407 26.6625ZM26.7264 26.8167C26.0847 27.0986 25.6378 27.7303 25.6378 28.4643C25.6378 29.461 26.4619 30.269 27.4786 30.269C28.4952 30.269 29.3194 29.461 29.3194 28.4643C29.3194 27.4676 28.4952 26.6596 27.4786 26.6596C27.2144 26.6596 26.9631 26.7142 26.736 26.8125C26.7328 26.8139 26.7296 26.8153 26.7264 26.8167ZM25.825 14.2508V18.9822H30.651V14.2508H25.825ZM8.30747 2.22998V6.96132H25.3858V2.22998H8.30747Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'supavisor',
id: '',
is_shipped: true,
links: [
{
url: '/blog/supavisor-postgres-connection-pooler',
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'Supabase Wrappers v0.2',
description: 'Query Pushdown & Remote Subqueries',
is_shipped: true,
title: 'TBD',
description: '',
icon: (
<svg
width="33"
height="33"
viewBox="0 0 33 33"
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M26.4285 6.34281C26.3059 6.22029 26.1817 6.10048 26.0559 5.98337C27.9262 9.90843 27.2364 14.7489 23.9866 17.9987C22.4166 19.5687 20.4735 20.5418 18.4428 20.9167L18.4034 30.395C19.012 30.3209 19.6166 30.2074 20.2132 30.0542C22.4894 29.4202 24.6385 28.2082 26.4285 26.4182C31.9721 20.8745 31.9721 11.8865 26.4285 6.34281ZM28.0859 27.7778C25.9818 29.8819 23.4395 31.2829 20.753 31.9804C15.3067 33.498 9.22176 32.1153 4.93885 27.8324C-1.38587 21.5077 -1.38587 11.2533 4.93885 4.9286C9.21486 0.652586 15.2871 -0.732503 20.7267 0.773332C23.4231 1.46852 25.9752 2.87204 28.0859 4.98272C34.3806 11.2774 34.3806 21.4831 28.0859 27.7778ZM6.35306 26.4182C9.12791 29.1931 12.7657 30.579 16.4026 30.576L16.422 25.9151C14.1845 25.8349 11.9682 24.9406 10.2592 23.2316C6.67332 19.6457 6.67332 13.8319 10.2592 10.246C13.845 6.66018 19.6589 6.66018 23.2447 10.246C23.9077 10.909 24.4484 11.6489 24.8666 12.437C25.4979 9.66225 24.7332 6.63404 22.5724 4.47324C21.7373 3.63814 20.7746 3.01281 19.7482 2.59531C19.3128 2.49914 18.8738 2.42376 18.4326 2.36917C18.3357 2.35718 18.2438 2.33172 18.1585 2.2949C13.9616 1.77114 9.57543 3.12045 6.35306 6.34281C0.809395 11.8865 0.809396 20.8745 6.35306 26.4182ZM23.7498 15.1174C23.4579 13.851 22.819 12.6488 21.8305 11.6603C19.0257 8.85544 14.4782 8.85544 11.6734 11.6603C8.86859 14.4651 8.86859 19.0126 11.6734 21.8174C12.994 23.138 14.6997 23.8369 16.4303 23.9138L16.4465 20.0436C16.4486 19.5304 16.839 19.1021 17.3498 19.0525C19.2568 18.8673 21.1115 18.0454 22.5724 16.5845C23.0265 16.1303 23.419 15.6378 23.7498 15.1174Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'supabase-wrappers-v0.2',
id: '',
is_shipped: true,
links: [
{
url: '/blog/supabase-wrappers-v02',
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'Supabase Libraries V2',
description: 'Swift, Kotlin, C#, and Python are now stable and moving to the v2 API',
type: 'clientLibs',
is_shipped: true,
className: 'xl:col-span-2 xl:aspect-auto xl:col-span-3 xl:aspect-auto xl:h-full',
id: 'supabase-libraries-v2',
links: [
{
url: '/blog/client-libraries-v2',
label: 'Read blog post',
},
],
icons: [
{
url: '/blog/client-libraries-v2#supabase-python-v2',
label: 'Python',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 45 45"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16.9371 1.08262C18.4527 0.81443 20.1752 0.660598 21.9789 0.652217C23.7827 0.643836 25.6633 0.780906 27.4758 1.08262C30.3391 1.55984 32.7514 3.70781 32.7514 6.56721V16.6141C32.7514 19.5603 30.4094 21.9757 27.4758 21.9757H16.9371C13.3589 21.9757 10.3457 25.0476 10.3457 28.5302V33.3507H6.71801C3.65157 33.3507 1.86045 31.125 1.11045 28.0014C0.0987175 23.805 0.141687 21.2971 1.11045 17.2782C1.9503 13.7719 4.63536 11.9288 7.70179 11.9288H22.2126V10.5884H11.6615V6.56721C11.6615 3.52244 12.4722 1.87142 16.9371 1.08262ZM18.2529 5.90316C18.2529 4.79095 17.3629 3.8864 16.273 3.8864C15.1792 3.8864 14.2931 4.79095 14.2931 5.90316C14.2931 7.01142 15.1792 7.90762 16.273 7.90762C17.3629 7.90762 18.2529 7.01143 18.2529 5.90316Z"
fill="currentColor"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M34.0671 16.6143V11.929H38.0269C41.0972 11.929 42.5446 14.2257 43.3024 17.2783C44.3571 21.5181 44.404 24.6965 43.3024 28.0016C42.236 31.212 41.0933 33.3509 38.0269 33.3509H22.2125V34.6913H32.7513V38.7125C32.7513 41.7573 30.1321 43.3051 27.4758 44.0741C23.4797 45.2337 20.2769 45.0562 16.937 44.0741C14.1479 43.2538 11.6615 41.5719 11.6615 38.7125V28.6656C11.6615 25.7747 14.0503 23.304 16.937 23.304H27.4758C30.9875 23.304 34.0671 20.2467 34.0671 16.6143ZM30.1197 39.3766C30.1197 38.2683 29.2336 37.3721 28.1398 37.3721C27.05 37.3721 26.16 38.2683 26.16 39.3766C26.16 40.4888 27.05 41.3933 28.1398 41.3933C29.2336 41.3933 30.1197 40.4888 30.1197 39.3766Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#supabase-swift-v2',
label: 'Swift',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 45 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M44.7763 11.4367V34.0513C44.7763 35.0639 44.6919 36.0342 44.5231 37.0046C44.3544 37.975 44.059 38.9032 43.5949 39.7893C43.1308 40.6331 42.5823 41.4347 41.8651 42.152C41.19 42.8692 40.3884 43.4177 39.5024 43.8818C38.6163 44.3459 37.6881 44.6413 36.7177 44.81C35.7611 44.9764 34.7634 45.0198 33.8055 45.0614L33.7643 45.0632H11.1076C10.095 45.0632 9.12464 44.9788 8.15424 44.81C7.18384 44.6413 6.25563 44.3459 5.36961 43.8818C4.52579 43.4177 3.72416 42.8692 3.00691 42.152C2.28965 41.4769 1.74116 40.6753 1.27706 39.7893C0.812956 38.9032 0.517618 37.975 0.348853 37.0046C0.182461 36.0479 0.139106 35.0501 0.0974827 34.0922L0.0957031 34.0513V11.3945C0.137894 10.3819 0.180088 9.41155 0.348853 8.44115C0.517618 7.47075 0.812956 6.54254 1.27706 5.65652C1.74116 4.8127 2.28965 4.01106 3.00691 3.29381C3.09129 3.20942 3.18622 3.12504 3.28115 3.04066C3.37607 2.95628 3.471 2.8719 3.55539 2.78752C4.14606 2.32341 4.73675 1.9015 5.41181 1.56397C5.51729 1.52178 5.63331 1.46904 5.74934 1.4163C5.86536 1.36356 5.98139 1.31082 6.08686 1.26863C6.76192 1.01548 7.47917 0.804529 8.19643 0.677955C8.89378 0.554892 9.63103 0.511595 10.3306 0.470511C10.3506 0.469339 10.3705 0.468169 10.3904 0.466999C10.6013 0.424807 10.8545 0.424805 11.1076 0.424805H33.7643C34.7769 0.424805 35.7473 0.50919 36.7177 0.677955C37.6881 0.84672 38.6163 1.14205 39.5024 1.60616C40.3462 2.07026 41.1478 2.61875 41.8651 3.336C42.5823 4.01106 43.1308 4.8127 43.5949 5.69871C44.059 6.58473 44.3544 7.51294 44.5231 8.48334C44.6895 9.44008 44.7329 10.4378 44.7745 11.3957L44.7763 11.4367ZM35.5786 27.5116L35.452 28.0179C39.3336 32.7433 38.2788 37.8063 37.6882 36.9203C35.663 33.0387 31.9501 34.0091 30.0515 34.9795C29.9672 35.0217 29.8828 35.0744 29.7984 35.1271C29.714 35.1799 29.6296 35.2326 29.5452 35.2748C29.5452 35.317 29.503 35.317 29.503 35.317C25.5793 37.4266 20.2632 37.5531 14.9471 35.2748C10.4748 33.334 6.80414 30.0431 4.44143 26.2459C5.66498 27.1319 6.97291 27.9335 8.36522 28.5664C13.9767 31.2244 19.6303 31.0135 23.6385 28.5664C17.9426 24.1785 13.175 18.4827 9.54658 13.8416C8.87152 13.04 8.23864 12.154 7.69016 11.268C12.0781 15.234 18.9552 20.2547 21.4445 21.647C16.2128 16.12 11.5718 9.28498 11.7827 9.49593C20.0522 17.8076 27.6888 22.533 27.6888 22.533C27.9842 22.6596 28.1951 22.7862 28.3639 22.9128C28.5326 22.4908 28.6592 22.0689 28.7858 21.647C30.0937 16.8372 28.617 11.3102 25.2417 6.7535C32.9205 11.3523 37.435 20.1281 35.5786 27.5116Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#supabase-kotlin-v2',
label: 'Kotlin',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M39.5927 39.2524H0.618164V0.277832H39.5927L19.7021 19.4825L39.5927 39.2524Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#typescript-v2-updates',
label: 'Typescript',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 44 43"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M2.1342 0.725586H41.4989C42.3803 0.725586 43.0948 1.43205 43.0948 2.30352V41.2259C43.0948 42.0974 42.3803 42.8038 41.4989 42.8038H2.1342C1.25282 42.8038 0.53833 42.0974 0.53833 41.2259V2.30352C0.53833 1.43205 1.25282 0.725586 2.1342 0.725586ZM24.1952 23.1119V19.6608H9.04961V23.1119H14.4568V38.4778H18.7614V23.1119H24.1952ZM25.9113 38.0721C26.6055 38.422 27.4265 38.6845 28.3742 38.8595C29.3221 39.0344 30.321 39.122 31.3712 39.122C32.3946 39.122 33.3668 39.0257 34.288 38.8332C35.209 38.6408 36.0166 38.3236 36.7107 37.8818C37.4048 37.44 37.9545 36.8627 38.3594 36.1496C38.7643 35.4366 38.9668 34.5552 38.9668 33.5053C38.9668 32.7442 38.851 32.0773 38.6196 31.5042C38.3883 30.9311 38.0546 30.4215 37.6185 29.9753C37.1825 29.5291 36.6596 29.1289 36.0499 28.7746C35.4403 28.4203 34.7529 28.0857 33.9876 27.7707C33.4268 27.5432 32.924 27.3223 32.4791 27.108C32.034 26.8937 31.6558 26.6749 31.3444 26.4519C31.0329 26.2287 30.7927 25.9926 30.6236 25.7432C30.4545 25.494 30.37 25.2117 30.37 24.8968C30.37 24.6081 30.4456 24.3478 30.5969 24.1161C30.7482 23.8841 30.9617 23.6851 31.2376 23.5189C31.5136 23.3527 31.8517 23.2237 32.2522 23.1318C32.6526 23.04 33.0977 22.994 33.5871 22.994C33.9431 22.994 34.3191 23.0202 34.7151 23.0727C35.1111 23.1253 35.5094 23.2062 35.9098 23.3154C36.3103 23.4248 36.6997 23.5626 37.0779 23.7289C37.4561 23.8952 37.8054 24.0876 38.1258 24.3062V20.3826C37.4761 20.1376 36.7664 19.956 35.9965 19.838C35.2268 19.7199 34.3435 19.6608 33.3467 19.6608C32.3323 19.6608 31.3712 19.7679 30.4634 19.9824C29.5556 20.1966 28.757 20.5313 28.0672 20.9863C27.3774 21.4412 26.8324 22.0207 26.432 22.7249C26.0314 23.4292 25.8312 24.2713 25.8312 25.251C25.8312 26.5022 26.1983 27.5696 26.9325 28.453C27.6668 29.3367 28.7814 30.0847 30.2765 30.6971C30.8639 30.9334 31.4111 31.1651 31.9185 31.3927C32.4257 31.6201 32.864 31.8564 33.2333 32.1012C33.6026 32.3462 33.8941 32.613 34.1077 32.9017C34.3213 33.1904 34.4281 33.5184 34.4281 33.886C34.4281 34.1572 34.3613 34.4087 34.2278 34.6405C34.0943 34.8724 33.8918 35.0736 33.6204 35.2441C33.349 35.4147 33.0109 35.5482 32.606 35.6444C32.2011 35.7407 31.727 35.7887 31.1842 35.7887C30.2587 35.7887 29.342 35.6292 28.4343 35.3098C27.5267 34.9905 26.6856 34.5115 25.9113 33.8729V38.0721Z"
fill="currentColor"
/>
</svg>
),
},
{
url: '/blog/client-libraries-v2#flutter-v2-updates',
label: 'Flutter',
icon: (
<svg
width="100%"
height="100%"
viewBox="0 0 35 42"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M34.8363 0.230957L21.8372 0.24498L0.876465 20.7638L7.34342 27.1022L13.0273 21.5694L34.8363 0.230957Z"
fill="currentColor"
/>
<path
d="M22.2101 19.1603C22.0257 19.152 21.8355 19.1434 21.7162 19.2976L10.5389 30.2377L16.9592 36.4842L16.9518 36.4914L21.5464 40.9929C21.5766 41.0191 21.6065 41.0484 21.637 41.0782C21.7627 41.2012 21.8977 41.3332 22.0924 41.2905C24.2148 41.2859 26.3373 41.2866 28.46 41.2874C30.5827 41.2882 32.7056 41.289 34.8289 41.2843L23.5293 30.2129L34.8252 19.1621L22.4309 19.159C22.3619 19.1672 22.2865 19.1638 22.2101 19.1603Z"
fill="currentColor"
/>
</svg>
),
},
],
},
{
title: 'Supabase x Fly.io',
description:
"We're launching a managed Postgres offering jointly developed by Supabase and Fly.io",
is_shipped: true,
className: 'xl:col-span-2 xl:aspect-auto h-full',
title: 'TBD',
description: '',
icon: (
<svg
width="43"
height="37"
viewBox="0 0 43 37"
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M23.5592 31.9455L18.5586 36.1655C18.2529 36.4172 17.8695 36.5545 17.4734 36.5545H30.3779C29.9803 36.554 29.5944 36.4166 29.2861 36.1655L24.2131 31.9445C24.1212 31.8681 24.0054 31.8263 23.8859 31.8265C23.7664 31.8267 23.6508 31.8688 23.5592 31.9455Z"
fill="#EDEDED"
/>
<path
d="M21.7205 21.1154L21.6715 21.1012H21.6199L21.6185 21.1016C21.5709 21.1155 21.57 21.1157 21.5275 21.1435L21.4657 21.1992C21.379 21.2793 21.2958 21.3625 21.2146 21.4483C21.0885 21.5805 20.9706 21.7204 20.8619 21.8674C20.7965 21.9582 20.7378 22.0537 20.6863 22.1527C20.6464 22.2318 20.6148 22.315 20.5928 22.4008C20.5842 22.4401 20.578 22.4794 20.5755 22.5192L20.5801 22.6662C20.5837 22.6988 20.5887 22.7311 20.5949 22.7632C20.632 22.9542 20.7328 23.127 20.8807 23.2533L21.0063 23.3452C21.0723 23.3854 21.1425 23.4183 21.2156 23.4432C21.2875 23.4679 21.3615 23.4858 21.4366 23.4968L21.5974 23.5111L21.7878 23.5054C21.9674 23.4889 22.1409 23.4319 22.2952 23.3385C22.4141 23.2654 22.5138 23.1652 22.5863 23.046C22.6589 22.9268 22.702 22.7921 22.7123 22.653L22.7138 22.4988C22.7067 22.4166 22.6837 22.336 22.6531 22.2594C22.6357 22.2155 22.6158 22.1721 22.5939 22.1303C22.5683 22.0818 22.5413 22.0353 22.5122 21.9894C22.4448 21.8852 22.3708 21.7852 22.2917 21.6897C22.2294 21.6142 22.1646 21.5412 22.0982 21.4702C22.0038 21.3702 21.9058 21.2727 21.8047 21.1798L21.7638 21.1435C21.7601 21.141 21.7564 21.1383 21.7527 21.1357C21.7424 21.1284 21.7321 21.1211 21.7205 21.1154Z"
fill="#EDEDED"
/>
<path
d="M21.3754 0.605469L21.3555 0.607C20.9007 0.652801 20.4634 0.806831 20.0803 1.05621C19.4907 1.43446 19.0405 2.00057 18.7087 2.61517C18.6536 2.71777 18.601 2.82242 18.552 2.92757C18.4183 3.21956 18.3034 3.51869 18.2074 3.82497C18.1411 4.03682 18.0829 4.25223 18.0329 4.46918C17.9701 4.74228 17.919 5.01844 17.8777 5.29562C17.8256 5.64784 17.7894 6.00262 17.7669 6.3579C17.7526 6.58404 17.7434 6.81017 17.7393 7.03682C17.7325 7.29691 17.7375 7.55717 17.7541 7.81681C17.797 8.42529 17.9012 9.02763 18.0364 9.6213C18.2117 10.3685 18.4272 11.1057 18.6822 11.8296C19.0015 12.7384 19.359 13.6333 19.7536 14.5121C20.2401 15.5976 20.7668 16.6647 21.3325 17.7112L21.3754 17.7903V0.605469Z"
fill="#EDEDED"
/>
<path
d="M24.7399 0.98015L23.5837 0.65039L23.7981 0.807102C24.4372 1.30991 24.9093 1.99853 25.2478 2.73564C25.3904 3.04921 25.5121 3.37184 25.6122 3.70144C25.8767 4.57076 26.0145 5.47429 26.0686 6.38036C26.0818 6.60561 26.0901 6.83112 26.0936 7.05673C26.1028 7.42528 26.089 7.79486 26.0512 8.1624C26.0063 8.60293 25.9338 9.04091 25.8414 9.47429C25.7337 9.97965 25.6031 10.4794 25.455 10.974C25.2559 11.6341 25.0313 12.2859 24.7827 12.9291C24.5566 13.5146 24.3162 14.0945 24.0609 14.6683C23.6022 15.6977 23.1073 16.7106 22.577 17.705C23.3585 16.8995 24.1106 16.0658 24.8317 15.2058C25.4959 14.4175 26.1233 13.5988 26.7118 12.7525C27.1865 12.0639 27.6301 11.3518 28.015 10.608C28.1891 10.2732 28.3478 9.93014 28.4908 9.58047C28.6056 9.29936 28.7056 9.01242 28.7904 8.72084C28.8961 8.36454 28.9655 7.99854 28.9982 7.62845C29.0114 7.46306 29.0125 7.29716 29.0084 7.13177C29.0048 6.95361 28.9961 6.77546 28.9808 6.59782C28.9282 5.91992 28.7792 5.25274 28.5387 4.61619C28.3728 4.18587 28.1605 3.77393 27.9042 3.3921C27.4668 2.7475 26.9103 2.19238 26.2646 1.75657C25.7909 1.43497 25.2753 1.1777 24.7399 0.98015Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M34.8247 4.03417H29.9987L30.0901 4.26184L30.16 4.46756L30.3632 5.20773C30.3673 5.22101 30.3698 5.23428 30.3724 5.24755L30.5306 6.24857L30.5623 6.59569L30.5878 7.04286L30.5904 7.13576L30.5807 7.635L30.5725 7.76721L30.5454 7.98313L30.4061 8.78048L30.3724 8.92647L30.0513 9.92801C30.0484 9.93772 30.045 9.94726 30.0411 9.95659L29.743 10.6784L29.7318 10.7024L29.3423 11.4803L28.6613 12.6661L28.2999 13.219L27.866 13.8678L27.5602 14.2869L26.9543 15.097L26.5419 15.6156L25.9324 16.3578L25.5051 16.8576L24.8481 17.5967L24.4255 18.0607L23.2034 19.3369L22.9191 19.6177L23.087 19.7606C23.3245 19.979 23.5475 20.2126 23.7547 20.4599C23.817 20.5354 23.8772 20.6125 23.9354 20.6912C24.0626 20.863 24.177 21.044 24.2774 21.2328C24.3316 21.3352 24.3802 21.4405 24.4229 21.5482C24.5216 21.7955 24.5849 22.0556 24.6108 22.3206L24.622 22.5212C24.6281 22.905 24.5582 23.2864 24.4153 23.6432C24.2325 24.1007 23.9312 24.5014 23.5424 24.804C23.4066 24.9102 23.2616 25.0036 23.1095 25.0842C22.7568 25.268 22.3721 25.3822 21.9763 25.4206H21.9737C21.5098 25.4674 21.0412 25.4141 20.5995 25.2644C20.3964 25.194 20.2009 25.1016 20.0176 24.9893C19.8022 24.8576 19.6057 24.6973 19.4331 24.5135C19.1957 24.2609 19.0077 23.966 18.8788 23.6442C18.7515 23.3267 18.6819 22.9892 18.673 22.6473L18.6766 22.4048C18.695 22.124 18.7558 21.8476 18.8568 21.585C18.896 21.4822 18.9405 21.3815 18.99 21.2833C19.0871 21.0942 19.1982 20.9126 19.3224 20.7402C19.4038 20.6273 19.4896 20.5176 19.5796 20.4114C19.767 20.1919 19.9671 19.9831 20.1779 19.7866L20.2555 19.7167L20.38 19.6125L19.7593 18.9959L19.3836 18.6069L18.4352 17.5865L18.1988 17.3277L17.0482 15.9826L16.7226 15.5789L15.7149 14.2675L15.6031 14.1164L14.8287 12.976L14.6164 12.6324L14.0615 11.6799L13.892 11.3685L13.4122 10.3548L13.3213 10.122L13.0457 9.34608L12.9395 8.97956L12.8578 8.64112L12.7889 8.27359L12.7348 7.86522L12.7129 7.60437L12.7037 7.15924L12.7057 7.06583L12.7185 6.79936L12.8144 5.82846L12.8446 5.65847L13.063 4.6891L13.1136 4.52677L13.2759 4.05357L13.2846 4.03417H8.46936C4.17635 4.03417 0.691406 7.51912 0.691406 11.8116V28.781C0.691406 31.2037 1.80167 33.3691 3.54082 34.7963C3.58742 34.8015 3.63578 34.8074 3.68593 34.8135C4.3604 34.8958 5.36106 35.0178 6.82209 33.8295L14.6215 26.9684C14.775 26.8438 14.9667 26.7758 15.1644 26.7758C15.3621 26.7758 15.5537 26.8438 15.7072 26.9684L21.3213 31.5845L23.3147 29.9454C23.4684 29.8211 23.6601 29.7532 23.8578 29.7532C24.0555 29.7532 24.2473 29.8211 24.401 29.9454L30.5368 34.9903C31.2769 35.5503 32.2351 36.2129 34.4444 36.5585H34.8247C39.1172 36.5585 42.6021 33.0735 42.6021 28.781V11.8116C42.6021 7.51912 39.1172 4.03417 34.8247 4.03417ZM30.9973 25.7428C31.3414 25.3987 31.8062 25.2024 32.2928 25.1955C32.7794 25.2024 33.2442 25.3987 33.5884 25.7428C33.9326 26.0869 34.1291 26.5516 34.1361 27.0383C34.1287 27.5248 33.9321 27.9892 33.5879 28.3332C33.2438 28.6771 32.7792 28.8734 32.2928 28.8806C31.8063 28.8736 31.3417 28.6772 30.9976 28.3333C30.6536 27.9893 30.4571 27.5248 30.45 27.0383C30.4569 26.5517 30.6532 26.0869 30.9973 25.7428Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'fly-postgres',
id: '',
is_shipped: true,
links: [
{
url: '/blog/postgres-on-fly-by-supabase',
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'Top 10 Launches of LWX',
description: 'Our CEO takes a look at his favorite ships from LWX',
className: 'sm:aspect-[2/1] sm:col-span-1 sm:col-span-2 sm:aspect-[2/1] h-full',
is_shipped: true,
title: 'TBD',
description: '',
icon: (
<svg
width="43"
height="43"
viewBox="0 0 97 96"
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M45.1845 28.8958C46.1844 27.6366 48.2117 28.3265 48.2358 29.9343L48.3161 42.1777H64.0052C66.8691 42.1777 68.4663 45.4854 66.6855 47.7284L51.5973 66.731C50.5975 67.9901 48.5702 67.3003 48.5461 65.6926L48.3627 53.4492H32.7766C29.9127 53.4492 28.3154 50.1414 30.0963 47.8985L45.1845 28.8958Z"
fill="#EDEDED"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M55.6755 2.97563C51.6248 -0.991875 45.1451 -0.991877 41.0944 2.97563L34.7454 9.19414C33.669 10.2485 32.2267 10.8459 30.72 10.8615L21.8335 10.9537C16.1638 11.0126 11.5819 15.5944 11.5231 21.2642L11.4309 30.1507C11.4152 31.6574 10.8178 33.0997 9.76348 34.1761L3.54496 40.525C-0.422539 44.5758 -0.422541 51.0555 3.54496 55.1062L9.76348 61.4551C10.8178 62.5316 11.4152 63.9739 11.4309 65.4805L11.5231 74.3671C11.5819 80.0368 16.1638 84.6187 21.8335 84.6775L30.72 84.7697C32.2267 84.7854 33.669 85.3828 34.7454 86.4371L41.0944 92.6556C45.1451 96.6231 51.6248 96.6231 55.6755 92.6556L62.0245 86.4371C63.1009 85.3828 64.5432 84.7854 66.0499 84.7697L74.9364 84.6775C80.6061 84.6187 85.188 80.0368 85.2468 74.3671L85.3391 65.4805C85.3547 63.9739 85.9521 62.5316 87.0064 61.4551L93.2249 55.1062C97.1924 51.0555 97.1925 44.5758 93.2249 40.525L87.0064 34.1761C85.9521 33.0997 85.3547 31.6574 85.3391 30.1507L85.2468 21.2642C85.188 15.5944 80.6061 11.0126 74.9364 10.9537L66.0499 10.8615C64.5432 10.8459 63.1009 10.2485 62.0245 9.19414L55.6755 2.97563ZM44.299 6.24742C46.5692 4.02384 50.2007 4.02384 52.4709 6.24742L58.8199 12.4659C60.7405 14.3471 63.314 15.4131 66.0023 15.441L74.8889 15.5332C78.0665 15.5662 80.6344 18.1341 80.6673 21.3117L80.7596 30.1982C80.7875 32.8866 81.8534 35.46 83.7346 37.3807L89.9532 43.7296C92.1767 45.9998 92.1767 49.6314 89.9531 51.9016L83.7346 58.2506C81.8534 60.1712 80.7875 62.7447 80.7596 65.433L80.6673 74.3195C80.6344 77.4971 78.0665 80.065 74.8889 80.098L66.0023 80.1902C63.314 80.2181 60.7405 81.2841 58.8199 83.1653L52.4709 89.3838C50.2007 91.6074 46.5692 91.6074 44.299 89.3838L37.95 83.1653C36.0294 81.2841 33.4559 80.2181 30.7676 80.1902L21.881 80.098C18.7034 80.065 16.1355 77.4971 16.1026 74.3195L16.0103 65.433C15.9824 62.7447 14.9165 60.1712 13.0353 58.2505L6.81676 51.9016C4.59317 49.6314 4.59317 45.9998 6.81676 43.7296L13.0353 37.3807C14.9165 35.46 15.9824 32.8865 16.0103 30.1982L16.1026 21.3117C16.1355 18.1341 18.7034 15.5662 21.881 15.5332L30.7676 15.441C33.4559 15.4131 36.0294 14.3471 37.95 12.4659L44.299 6.24742Z"
fill="#EDEDED"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: 'launch-week-x-best-launches',
id: '',
is_shipped: true,
links: [
{
url: '/blog/launch-week-x-best-launches',
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
{
title: 'TBD',
description: '',
icon: (
<svg
width="34"
height="32"
viewBox="0 0 34 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.60555 3.39842C4.27396 1.57787 6.0073 0.367783 7.94667 0.367783H15.77V0.379374H17.2062C24.0423 0.379374 29.5841 5.92116 29.5841 12.7573V19.8195C29.5841 20.3718 29.1364 20.8195 28.5841 20.8195C28.0318 20.8195 27.5841 20.3718 27.5841 19.8195V12.7573C27.5841 7.02573 22.9377 2.37937 17.2062 2.37937H15.6063C15.5544 2.37937 15.5034 2.37541 15.4536 2.36778H7.94667C6.84605 2.36778 5.86235 3.05453 5.48302 4.08772L2.94795 10.9925C2.5405 12.1023 2.86191 13.3484 3.7553 14.1227L5.49482 15.6302C6.29447 16.3233 6.75386 17.3293 6.75384 18.3875L6.7538 21.158C6.75377 23.4639 8.62302 25.3332 10.9289 25.3332C11.5675 25.3332 12.0851 24.8155 12.0851 24.1769L12.0852 11.832C12.0852 9.23697 13.1217 6.74945 14.9644 4.92224C15.3566 4.53337 15.9898 4.53604 16.3786 4.92821C16.7675 5.32038 16.7648 5.95354 16.3727 6.34241C14.9087 7.79407 14.0852 9.77033 14.0852 11.832L14.0851 24.1769C14.0851 25.92 12.672 27.3332 10.9289 27.3332C7.51844 27.3332 4.75376 24.5684 4.7538 21.158L4.75384 18.3874C4.75385 17.9093 4.54628 17.4548 4.18497 17.1416L2.44545 15.6341C0.923951 14.3155 0.376577 12.1933 1.07049 10.3032L3.60555 3.39842ZM16.7058 18.1671C17.2016 17.9238 17.8007 18.1285 18.044 18.6243C19.3636 21.3133 22.0981 23.0173 25.0934 23.0173L32.9711 23.0172C33.5234 23.0172 33.9711 23.4649 33.9711 24.0172C33.9711 24.5695 33.5234 25.0172 32.9711 25.0172L29.5749 25.0172C29.5809 25.0619 29.5841 25.1074 29.5841 25.1537C29.5841 28.7073 26.3535 31.0611 22.7759 31.0611C19.4633 31.0611 16.7053 28.6964 16.0938 25.5634C15.988 25.0214 16.3417 24.4962 16.8838 24.3904C17.4258 24.2846 17.951 24.6383 18.0568 25.1803C18.4884 27.3921 20.4383 29.0611 22.7759 29.0611C25.6138 29.0611 27.5841 27.2702 27.5841 25.1537C27.5841 25.1074 27.5872 25.0619 27.5933 25.0172L25.0934 25.0173C21.3352 25.0173 17.9043 22.8793 16.2486 19.5054C16.0053 19.0096 16.21 18.4104 16.7058 18.1671Z"
fill="#FAFAFA"
/>
<path
d="M21.8887 12.6451C21.8887 13.2783 22.402 13.7917 23.0353 13.7917C23.6685 13.7917 24.1819 13.2783 24.1819 12.6451C24.1819 12.0119 23.6685 11.4985 23.0353 11.4985C22.402 11.4985 21.8887 12.0119 21.8887 12.6451Z"
fill="#FAFAFA"
/>
</svg>
),
id: '',
is_shipped: true,
links: [
{
url: '#',
label: 'Read blog post',
target: '_blank',
},
],
},
@@ -2,7 +2,7 @@ import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react'
import { Button, cn } from 'ui'
import { SITE_ORIGIN } from '~/lib/constants'
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import { VALID_KEYS } from '~/components/LaunchWeek/hooks/useLwxGame'
import { VALID_KEYS } from '~/components/LaunchWeek/hooks/useLwGame'
const COMPLIMENTS = [
'Congratulations!',
@@ -1,7 +1,5 @@
import useConfData from '~/components/LaunchWeek/hooks/use-conf-data'
import { useParams } from 'common'
import Ticket from './Ticket'
import TicketActions from './TicketActions'
import TicketCustomizationForm from './TicketCustomizationForm'
import TicketCopy from './TicketCopy'
@@ -6,11 +6,11 @@ import { IconCheck, IconCopy, cn } from 'ui'
export default function TicketCopy({ sharePage }: { sharePage: boolean }) {
const { userData } = useConfData()
const { username, golden, metadata } = userData
const [copyEnabled, setCopyEnabled] = useState(false)
const [_copyEnabled, setCopyEnabled] = useState(false)
const [copied, setCopied] = useState(false)
const buttonRef = useRef<HTMLButtonElement>(null)
const hasSecretTicket = metadata?.hasSecretTicket
const url = `${SITE_URL}/tickets/${username}?lw=x${
const url = `${SITE_URL}/x/tickets/${username}?lw=x${
hasSecretTicket ? '&secret=true' : golden ? `&platinum=true` : ''
}`
@@ -16,7 +16,7 @@ import CountdownComponent from '../Countdown'
import LaunchWeekPrizeSection from '../LaunchWeekPrizeSection'
import TicketPresence from './TicketPresence'
import TicketActions from './TicketActions'
import useLwxGame from '../../hooks/useLwxGame'
import useLwxGame from '../../hooks/useLwGame'
import LWXGame from './LWXGame'
const TicketingFlow = () => {
@@ -35,7 +35,7 @@ export default function TicketsGrid({ loadedUsers, isLoading, pageCount, offset
return (
<Link
href={`/launch-week/tickets/${user.username}`}
href={`/launch-week/x/tickets/${user.username}`}
key={`${user.username}-000${i}`}
onClick={() => window.scrollTo(0, 0)}
legacyBehavior
@@ -63,9 +63,9 @@ export default function TicketsGrid({ loadedUsers, isLoading, pageCount, offset
<Image
src={imgUrl}
alt={user.username ?? ''}
layout="fill"
objectFit="cover"
objectPosition="center"
fill
sizes="100%"
className="object-cover object-center"
placeholder="blur"
blurDataURL="/images/launchweek/lwx/tickets/placeholder.png"
/>
@@ -9,6 +9,7 @@ export type UserData = {
ticketNumber?: number
username?: string
name?: string
platinum?: boolean
golden?: boolean
referrals?: number
bg_image_id?: number
@@ -17,9 +18,12 @@ export type UserData = {
company?: string
location?: string
hasSecretTicket?: boolean
hasSharedSecret?: boolean
hideAvatar?: boolean
}
sharedOnTwitter?: string
sharedOnLinkedIn?: string
secret?: boolean
}
type ConfDataContextType = {
@@ -30,12 +30,11 @@ export const VALID_KEYS = [
'z',
]
const useLwxGame = (showCustomizationForm?: boolean) => {
const useLwGame = (disabled?: boolean) => {
const [isGameMode, setIsGameMode] = useState(false)
const { ticketState } = useConfData()
function onKeyDown(event: KeyboardEvent) {
if (showCustomizationForm) return
if (disabled) return
if (event.key === 'Escape') {
setIsGameMode(false)
@@ -49,12 +48,12 @@ const useLwxGame = (showCustomizationForm?: boolean) => {
}
useEffect(() => {
if (!showCustomizationForm) window.addEventListener('keydown', onKeyDown)
if (!disabled) window.addEventListener('keydown', onKeyDown)
return () => window.removeEventListener('keydown', onKeyDown)
}, [showCustomizationForm])
}, [disabled])
return { isGameMode, setIsGameMode }
}
export default useLwxGame
export default useLwGame
+20 -12
View File
@@ -5,7 +5,7 @@ import { useRouter } from 'next/router'
import { useTheme } from 'next-themes'
import { useWindowSize } from 'react-use'
import { Button, cn } from 'ui'
import { Announcement, Button, cn, LW11CountdownBanner } from 'ui'
import {
NavigationMenu,
NavigationMenuContent,
@@ -38,8 +38,10 @@ const Nav = (props: Props) => {
const isUserLoading = useIsUserLoading()
const isHomePage = router.pathname === '/'
const isLaunchWeekPage = router.pathname.includes('launch-week')
const isLaunchWeekXPage = router.pathname === '/launch-week'
const isSpecialAnnouncementPage = router.pathname.includes('special-announcement')
const isLaunchWeekPage = router.pathname.includes('launch-week') || isSpecialAnnouncementPage
const isLaunchWeekXPage = router.pathname === '/launch-week/x'
const isLaunchWeek11Page = router.pathname === '/special-announcement'
const showLaunchWeekNavMode = isLaunchWeekPage && !open
React.useEffect(() => {
@@ -64,6 +66,9 @@ const Nav = (props: Props) => {
return (
<>
<Announcement>
<LW11CountdownBanner />
</Announcement>
<div
className={cn('sticky top-0 z-40 transform', isLaunchWeekXPage && 'relative')}
style={{ transform: 'translate3d(0,0,999px)' }}
@@ -108,15 +113,18 @@ const Nav = (props: Props) => {
/>
</Link>
{isLaunchWeekPage && !isLaunchWeekXPage && (
<Link
href="/launch-week"
as="/launch-week"
className="hidden ml-2 xl:block font-mono text-sm uppercase leading-4 focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-foreground-lighter focus-visible:ring-offset-4 focus-visible:ring-offset-background-alternative focus-visible:rounded-sm"
>
Launch Week
</Link>
)}
{!isSpecialAnnouncementPage &&
!isLaunchWeek11Page &&
isLaunchWeekPage &&
!isLaunchWeekXPage && (
<Link
href="/launch-week"
as="/launch-week"
className="hidden ml-2 xl:block font-mono text-sm uppercase leading-4 focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-foreground-lighter focus-visible:ring-offset-4 focus-visible:ring-offset-background-alternative focus-visible:rounded-sm"
>
Launch Week
</Link>
)}
</div>
<NavigationMenu
delayDuration={0}
+3
View File
@@ -12,6 +12,7 @@ interface Props {
hasInnerShimmer?: boolean
shimmerFromColor?: string
shimmerToColor?: string
style?: any
hasMotion?: boolean
}
@@ -26,6 +27,7 @@ const Panel = ({
shimmerToColor,
hasMotion = false,
children,
style,
}: PropsWithChildren<Props>) => {
const outerRef = useRef(null)
const innerRef = useRef(null)
@@ -85,6 +87,7 @@ const Panel = ({
outerClassName
)}
{...(hasMotion ? { whileHover: 'hover', animate: 'initial' } : undefined)}
style={style}
>
<div
className={cn(
+2 -2
View File
@@ -33,8 +33,8 @@ const footerData = [
url: '/pricing',
},
{
text: 'Launch Week X',
url: '/launch-week',
text: 'Special Announcement',
url: '/special-announcement',
},
],
},
+12 -4
View File
@@ -33,6 +33,12 @@ export const SITE_URL =
: process.env.NEXT_PUBLIC_VERCEL_URL
? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/launch-week`
: 'http://localhost:3000/launch-week'
export const SPECIAL_ANNOUNCEMENT_URL =
process.env.NEXT_PUBLIC_VERCEL_ENV === 'production'
? 'https://supabase.com/special-announcement'
: process.env.NEXT_PUBLIC_VERCEL_URL
? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/special-announcement`
: 'http://localhost:3000/special-announcement'
export const SITE_ORIGIN = new URL(SITE_URL).origin
export const TWITTER_USER_NAME = 'supabase'
export const LW7_DATE = 'April 10th 2023'
@@ -40,8 +46,10 @@ export const LW8_DATE = 'August 7-11'
export const LW8_LAUNCH_DATE = '2023-08-07T09:00:00.000-07:00'
export const LWX_DATE = 'Dec 11-15 / 8am PT'
export const LWX_LAUNCH_DATE = '2023-12-11T08:00:00.000-08:00'
export const TWEET_TEXT =
'#SupaLaunchWeek 🆇 is coming December 11-15 🚀\n\nClaim your ticket for a chance to win @supabase swag:\n'
export const TWEET_TEXT_GOLDEN = `I turned my #SupaLaunchWeek 🆇 ticket Platinum! 🩶😎\n\nClaim your own ticket to win @supabase swag:\n`
export const TWEET_TEXT_SECRET = `I found a secret #SupaLaunchWeek 🆇 ticket! \n\nGuess the word at supabase.com/launch-week to get yours:\n`
export const LW11_DATE = 'April 15-19 / 7am PT'
export const LW11_LAUNCH_DATE = '2024-04-15T07:00:00.000-08:00'
export const TWEET_TEXT = '👁️⚡👁️'
export const TWEET_TEXT_GOLDEN = `👁️⚡👁️`
export const TWEET_TEXT_PLATINUM = `👁️⚡👁️`
export const TWEET_TEXT_SECRET = `Just found a secret @supabase ticket. \n\nClaim a ticket and guess the word to find it:`
export const SITE_NAME = 'Supabase'
+54
View File
@@ -57,6 +57,36 @@ export type Database = {
}
Relationships: []
}
lw11_meetups: {
Row: {
created_at: string | null
display_info: string | null
id: number
isLive: boolean
link: string | null
start_at: string | number
title: string | null
}
Insert: {
created_at?: string | null
display_info?: string | null
id?: number
isLive?: boolean
link?: string | null
start_at?: string | number
title?: string | null
}
Update: {
created_at?: string | null
display_info?: string | null
id?: number
isLive?: boolean
link?: string | null
start_at?: string | number
title?: string | null
}
Relationships: []
}
partner_contacts: {
Row: {
company: string
@@ -207,6 +237,30 @@ export type Database = {
},
]
}
lw11_tickets_platinum: {
Row: {
createdAt: string | null
platinum: boolean | null
id: string | null
metadata: Json | null
name: string | null
referrals: number | null
sharedOnLinkedIn: string | null
sharedOnTwitter: string | null
ticketNumber: number | null
username: string | null
secret: boolean | null
}
Relationships: [
{
foreignKeyName: 'lw11_tickets_id_fkey'
columns: ['id']
isOneToOne: true
referencedRelation: 'users'
referencedColumns: ['id']
},
]
}
}
Functions: {}
Enums: {
+10
View File
@@ -2408,4 +2408,14 @@ module.exports = [
source: '/contact/mfa',
destination: '/docs/guides/auth/auth-mfa',
},
{
permanent: false,
source: '/launch-week',
destination: '/special-announcement',
},
{
permanent: false,
source: '/launch-week/tickets/:path*',
destination: '/special-announcement/tickets/:path*',
},
]
+2
View File
@@ -26,6 +26,7 @@
"@react-three/fiber": "^7.0.29",
"@supabase/auth-helpers-react": "^0.4.2",
"@supabase/auth-ui-react": "^0.4.5",
"animejs": "^3.2.2",
"@supabase/supabase-js": "^2.41.1",
"classnames": "^2.3.1",
"cobe": "^0.6.2",
@@ -70,6 +71,7 @@
"yup": "^1.4.0"
},
"devDependencies": {
"@types/animejs": "^3.1.12",
"@types/classnames": "^2.3.1",
"@types/dat.gui": "^0.7.10",
"@types/mdx-js__react": "^1.5.6",
+5 -3
View File
@@ -67,15 +67,17 @@ export default function App({ Component, pageProps }: AppProps) {
const site_title = `${APP_NAME} | The Open Source Firebase Alternative`
const { basePath, pathname } = useRouter()
const forceDarkMode = pathname === '/' || router.pathname.startsWith('/launch-week')
const isSpecialAnnouncementPage = router.pathname.startsWith('/special-announcement')
const forceDarkMode =
pathname === '/' || router.pathname.startsWith('/launch-week') || isSpecialAnnouncementPage
let applicationName = 'Supabase'
let faviconRoute = DEFAULT_FAVICON_ROUTE
let themeColor = DEFAULT_FAVICON_THEME_COLOR
if (router.asPath && router.asPath.includes('/launch-week')) {
if (router.asPath && router.asPath.includes('/launch-week/x')) {
applicationName = 'Supabase LWX'
faviconRoute = 'images/launchweek/lwx/favicon/'
faviconRoute = 'images/launchweek/lwx/favicon'
themeColor = 'FFFFFF'
}
+11 -19
View File
@@ -247,12 +247,7 @@ export default function launchweek() {
<div className="border border-[#2E2E2E] rounded-2xl text-sm px-5 py-4 flex flex-col sm:flex-row justify-between items-center">
<div className="relative flex items-center mb-4 sm:mb-0">
<div className="flex min-w-[150px]">
<img
// src={`/images/launchweek/${isDarkMode ? 'outro.svg' : 'outro-light.svg'}`}
src={`/images/launchweek/outro.svg`}
width={110}
height={80}
></img>
<img src={`/images/launchweek/outro.svg`} width={110} height={80}></img>
</div>
<div className="flex flex-col lg:flex-row ml-8 sm:ml-10">
<span className="text-white mr-2">Wrap Up</span>
@@ -982,7 +977,7 @@ export default function launchweek() {
<img
src="/images/launchweek/link.svg"
className="absolute top-[16px] right-[10px] text-brand"
></img>
/>
<h3 className="text-white">Super UI</h3>
<p className="text-slate-1000 text-xs">Previous Best Overall Project Runner Up</p>
</div>
@@ -1071,24 +1066,21 @@ export default function launchweek() {
})}
</div>
<div className="flex-1">
<Badge
className={`!bg-transparent !py-1 !px-4 text-transparent bg-clip-text bg-gradient-to-r from-white to-[#DFFFF1] !border-[#DFFFF1] h-fit relative mb-4 ${
true
? 'after:absolute after:rounded-full after:bg-white after:w-full after:h-full after:top-0 after:right-0 after:bottom-0 after:left-0 after:bg-gradient-to-br text-transparent !border-[#163837] after:from-[#14292c] after:to-[#141516] after:border-[#1f3536] after:-z-10'
: ''
}`}
>
<Badge className="!bg-transparent !py-1 !px-4 text-transparent bg-clip-text bg-gradient-to-r from-white to-[#DFFFF1] h-fit relative mb-4 after:absolute after:rounded-full after:bg-white after:w-full after:h-full after:top-0 after:right-0 after:bottom-0 after:left-0 after:bg-gradient-to-br !border-[#163837] after:from-[#14292c] after:to-[#141516] after:border-[#1f3536] after:-z-10">
Shipped
</Badge>
<h2 className="text-3xl text-white mb-2">The Supabase Content Storm</h2>
<p className="text-slate-900 md:max-w-[80%] mb-16">
We worked with more than 30 content creators from around the world to drop a mountain
of content simultaneously!
<a rel="noopener" target="_blank" href="/blog/the-supabase-content-storm">
<div className="text-brand flex items-center mt-2">
See all the content
<IconExternalLink size="small" className="inline-block ml-1" />
</div>
<a
rel="noopener"
target="_blank"
href="/blog/the-supabase-content-storm"
className="text-brand flex items-center mt-2"
>
See all the content
<IconExternalLink size="small" className="inline-block ml-1" />
</a>
</p>
{activeCreator !== null && (
+6 -6
View File
@@ -1,3 +1,5 @@
import 'swiper/swiper.min.css'
import { useState, useEffect } from 'react'
import { GetServerSideProps } from 'next'
import dynamic from 'next/dynamic'
@@ -14,12 +16,8 @@ import SectionContainer from '~/components/Layouts/SectionContainer'
import { LaunchWeekLogoHeader } from '~/components/LaunchWeek/8/LaunchWeekLogoHeader'
import { Meetup } from '~/components/LaunchWeek/8/LW8Meetups'
import LW8CalloutsSection from '~/components/LaunchWeek/8/LW8CalloutsSection'
import AnimatedParticles from '~/components/LaunchWeek/8/AnimatedParticles/ParticlesCanvas'
import 'swiper/swiper.min.css'
const AnimatedParticles = dynamic(
() => import('~/components/LaunchWeek/8/AnimatedParticles/ParticlesCanvas')
)
const LW8Releases = dynamic(() => import('~/components/LaunchWeek/8/Releases'))
const LW8Meetups = dynamic(() => import('~/components/LaunchWeek/8/LW8Meetups'))
const LWArchive = dynamic(() => import('~/components/LaunchWeek/8/LWArchive'))
@@ -145,7 +143,9 @@ export default function TicketHome({ users, meetups }: Props) {
<Image
src="/images/launchweek/8/stars.svg"
alt="starts background"
className="opacity-70 object-cover pointer-events-none"
width={600}
height={600}
className="absolute inset-0 opacity-70 object-cover pointer-events-none w-auto h-auto"
draggable={false}
/>
</div>
@@ -7,6 +7,7 @@ import { Session } from '@supabase/supabase-js'
import { SITE_ORIGIN, SITE_URL } from '~/lib/constants'
import supabase from '~/lib/supabaseMisc'
import FaviconImports from '~/components/LaunchWeek/X/FaviconImports'
import DefaultLayout from '~/components/Layouts/Default'
import { TicketState, ConfDataContext, UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
import SectionContainer from '~/components/Layouts/SectionContainer'
@@ -98,6 +99,7 @@ export default function LaunchWeekIndex({ meetups }: Props) {
],
}}
/>
<FaviconImports />
<ConfDataContext.Provider
value={{
supabase,
@@ -132,7 +134,8 @@ export const getServerSideProps: GetServerSideProps = async () => {
return {
props: {
meetups: meetups?.sort((a, b) => (new Date(a.start_at!) > new Date(b.start_at!) ? 1 : -1)),
// @ts-ignore
meetups: meetups?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1)),
},
}
}
@@ -10,6 +10,7 @@ import { Button } from 'ui'
import { SITE_URL } from '~/lib/constants'
import supabase from '~/lib/supabaseMisc'
import FaviconImports from '~/components/LaunchWeek/X/FaviconImports'
import DefaultLayout from '~/components/Layouts/Default'
import SectionContainer from '~/components/Layouts/SectionContainer'
import { TicketState, ConfDataContext, UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
@@ -32,7 +33,7 @@ export default function UsernamePage({ user, ogImageUrl }: Props) {
const TITLE = `${name ? name + '’s' : 'Get your'} #SupaLaunchWeek Ticket`
const DESCRIPTION = `Claim and share your Supabase Launch Week X ticket for a chance to win Supabase swag.`
const OG_URL = `${SITE_URL}/tickets/${username}`
const OG_URL = `${SITE_URL}/x/tickets/${username}`
const [session, setSession] = useState<Session | null>(null)
const { resolvedTheme, setTheme } = useTheme()
@@ -71,7 +72,7 @@ export default function UsernamePage({ user, ogImageUrl }: Props) {
],
}}
/>
<FaviconImports />
<ConfDataContext.Provider
value={{
supabase,
@@ -94,14 +95,9 @@ export default function UsernamePage({ user, ogImageUrl }: Props) {
<br />
Launch Week X Ticket
</h1>
<span className="text-foreground-lighter">
Claim your own ticket and share it for a chance to win.
</span>
</div>
<Button type="secondary" asChild>
<Link href={`${SITE_URL}${username ? '?referral=' + username : ''}`}>
Join Launch Week X
</Link>
<Link href={`${SITE_URL}/x`}>Go to Launch Week X</Link>
</Button>
</SectionContainer>
<LWXBackground className="absolute z-0 top-0 left-0 right-0 w-full flex items-center justify-center opacity-20" />
@@ -142,7 +138,8 @@ export const getStaticProps: GetStaticProps = async ({ params }) => {
user = data
}
const ticketType = (user?.metadata as any).hasSecretTicket
// @ts-ignore
const ticketType = user?.metadata?.hasSecretTicket
? 'secret'
: user?.golden
? 'platinum'
@@ -159,7 +156,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => {
ogImageUrl,
key: username,
},
revalidate: 5,
// revalidate: 5,
}
}
@@ -14,7 +14,7 @@ import SectionContainer from '~/components/Layouts/SectionContainer'
import { UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
import CTABanner from '~/components/CTABanner'
import TicketsGrid from '~/components/LaunchWeek/X/TicketsGrid'
import supabase from '../../../lib/supabaseMisc'
import supabase from '~/lib/supabaseMisc'
interface Props {
users: UserData[]
@@ -127,7 +127,7 @@ export default function TicketsPage({ users }: Props) {
</p>
<div className="mt-1">
<Button asChild type="outline" size="medium">
<Link href="/launch-week">Go to Launch Week X</Link>
<Link href="/launch-week/x">Go to Launch Week X</Link>
</Button>
</div>
</motion.div>
@@ -0,0 +1,103 @@
import { useState, useEffect } from 'react'
import { useRouter } from 'next/router'
import { NextSeo } from 'next-seo'
import { Session } from '@supabase/supabase-js'
import { SITE_ORIGIN, SPECIAL_ANNOUNCEMENT_URL } from '~/lib/constants'
import supabase from '~/lib/supabaseMisc'
import DefaultLayout from '~/components/Layouts/Default'
import { TicketState, ConfDataContext, UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
import TicketingFlow from '~/components/LaunchWeek/11/Ticket/TicketingFlow'
export default function LaunchWeekIndex() {
const { query } = useRouter()
const TITLE = 'Supabase Special Announcement | 15-19 April'
const DESCRIPTION = 'Join us for a week of announcing new features, every day at 7 AM PT.'
const OG_IMAGE = `${SITE_ORIGIN}/images/launchweek/11/lw11-og.png`
const ticketNumber = query.ticketNumber?.toString()
const bgImageId = query.bgImageId?.toString()
const [session, setSession] = useState<Session | null>(null)
const [showCustomizationForm, setShowCustomizationForm] = useState<boolean>(false)
const defaultUserData = {
id: query.id?.toString(),
ticketNumber: ticketNumber ? parseInt(ticketNumber, 10) : undefined,
name: query.name?.toString(),
username: query.username?.toString(),
golden: !!query.golden,
bgImageId: bgImageId ? parseInt(bgImageId, 10) : undefined,
}
const [userData, setUserData] = useState<UserData>(defaultUserData)
const [ticketState, setTicketState] = useState<TicketState>('loading')
useEffect(() => {
if (supabase) {
supabase.auth.getSession().then(({ data: { session } }) => setSession(session))
const {
data: { subscription },
} = supabase.auth.onAuthStateChange((_event, session) => {
setSession(session)
})
return () => subscription.unsubscribe()
}
}, [supabase])
useEffect(() => {
document.body.classList.add('bg-[#060809]')
return () => {
if (document.body.classList.contains('bg-[#060809]')) {
document.body.classList.remove('bg-[#060809]')
}
}
}, [])
useEffect(() => {
if (session?.user) {
if (userData?.id) {
return setTicketState('ticket')
}
return setTicketState('loading')
}
if (!session) return setTicketState('registration')
}, [session, userData])
return (
<>
<NextSeo
title={TITLE}
description={DESCRIPTION}
openGraph={{
title: TITLE,
description: DESCRIPTION,
url: SPECIAL_ANNOUNCEMENT_URL,
images: [
{
url: OG_IMAGE,
},
],
}}
/>
<ConfDataContext.Provider
value={{
supabase,
session,
userData,
setUserData,
ticketState,
setTicketState,
showCustomizationForm,
setShowCustomizationForm,
}}
>
<DefaultLayout className="min-h-[92vh] h-full flex items-center">
<TicketingFlow />
</DefaultLayout>
</ConfDataContext.Provider>
</>
)
}
@@ -0,0 +1,158 @@
import { useEffect, useState } from 'react'
import { NextSeo } from 'next-seo'
import { GetStaticProps, GetStaticPaths } from 'next'
import Link from 'next/link'
import Error from 'next/error'
import dynamic from 'next/dynamic'
import { Session } from '@supabase/supabase-js'
import { Button } from 'ui'
import { SITE_URL, SPECIAL_ANNOUNCEMENT_URL } from '~/lib/constants'
import supabase from '~/lib/supabaseMisc'
import dayjs from 'dayjs'
import DefaultLayout from '~/components/Layouts/Default'
import SectionContainer from '~/components/Layouts/SectionContainer'
import { TicketState, ConfDataContext, UserData } from '~/components/LaunchWeek/hooks/use-conf-data'
import LW11Background from '~/components/LaunchWeek/11/LW11Background'
const LW11TicketContainer = dynamic(
() => import('~/components/LaunchWeek/11/Ticket/TicketContainer')
)
const LaunchWeekPrizeSection = dynamic(
() => import('~/components/LaunchWeek/11/LaunchWeekPrizeSection')
)
const CTABanner = dynamic(() => import('~/components/CTABanner'))
interface Props {
user: UserData
users: UserData[]
ogImageUrl: string
}
export default function UsernamePage({ user, ogImageUrl }: Props) {
const { username, ticketNumber, name } = user
const DISPLAY_NAME = name || username
const TITLE = `${DISPLAY_NAME ? DISPLAY_NAME.split(' ')[0] + '’s' : 'Get your'} ticket`
const DESCRIPTION = ``
const PAGE_URL = `${SPECIAL_ANNOUNCEMENT_URL}/tickets/${username}`
const [session] = useState<Session | null>(null)
const [ticketState, setTicketState] = useState<TicketState>('ticket')
if (!ticketNumber) {
return <Error statusCode={404} />
}
useEffect(() => {
document.body.classList.add('bg-[#060809]')
return () => {
if (document.body.classList.contains('bg-[#060809]')) {
document.body.classList.remove('bg-[#060809]')
}
}
}, [])
return (
<>
<NextSeo
title={TITLE}
openGraph={{
title: TITLE,
description: DESCRIPTION,
url: PAGE_URL,
images: [
{
url: ogImageUrl,
width: 1200,
height: 630,
},
],
}}
/>
<ConfDataContext.Provider
value={{
supabase,
session,
userData: user,
setUserData: () => null,
ticketState,
setTicketState,
}}
>
<DefaultLayout>
<div className="relative -mt-[65px]">
<SectionContainer className="relative !pt-8 lg:!pt-10 z-10 flex flex-col xl:flex-row items-center xl:justify-center xl:items-center gap-8 md:gap-10 xl:gap-20 text-foreground text-center md:text-left">
<div className="w-auto min-h-[400px] pt-24 flex items-center">
<LW11TicketContainer />
</div>
<div className="flex flex-col items-center justify-center xl:justify-start xl:items-start gap-4 text-foreground text-center md:text-left max-w-sm">
<h1 className="text-2xl">{DISPLAY_NAME?.split(' ')[0]}'s Ticket</h1>
<span className="text-foreground-lighter mb-2">
Join @{username} for a Special Announcement and create your ticket for a chance to
win swag.
</span>
<Button type="alternative" asChild>
<Link href={`${SITE_URL}${username ? '?referral=' + username : ''}`}>
Claim your ticket
</Link>
</Button>
</div>
</SectionContainer>
<LW11Background className="absolute z-0 top-0 left-0 right-0 w-full flex items-center justify-center opacity-20" />
</div>
<SectionContainer className="!pt-4 !pb-0">
<LaunchWeekPrizeSection />
</SectionContainer>
<CTABanner className="!bg-[#060809] border-t-0" />
</DefaultLayout>
</ConfDataContext.Provider>
</>
)
}
export const getStaticProps: GetStaticProps = async ({ params }) => {
const username = params?.username?.toString() || null
let user
fetch(
`https://obuldanrptloktxcffvn.supabase.co/functions/v1/lw11-og?username=${encodeURIComponent(
username ?? ''
)}`
)
// fetch a specific user
if (username) {
const { data } = await supabase!
.from('lw11_tickets_platinum')
.select('name, username, ticketNumber, metadata, platinum, secret')
.eq('username', username)
.single()
user = data
}
const ticketType = user?.secret ? 'secret' : user?.platinum ? 'platinum' : 'regular'
const ogImageUrl = `https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/lw11/og/${ticketType}/${username}.png?t=${dayjs(new Date()).format('DHHmmss')}`
return {
props: {
user: {
...user,
username,
},
ogImageUrl,
key: username,
},
revalidate: 5,
}
}
export const getStaticPaths: GetStaticPaths = async () => {
return Promise.resolve({
paths: [],
fallback: 'blocking',
})
}
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
<browserconfig><msapplication><tile><square70x70logo src="/favicon/ms-icon-70x70.png"/><square150x150logo src="/favicon/ms-icon-150x150.png"/><square310x310logo src="/favicon/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

@@ -1,93 +0,0 @@
<svg width="448" height="400" viewBox="0 0 448 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-17.9141" y="-2.69141" width="476.973" height="430.908" fill="white"/>
<path d="M-152.426 223.468C-127.612 219.483 -99.4041 215.842 -67.9502 213.136C29.3002 205.246 127.114 207.72 223.841 220.516" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-151.594 189.667C-126.509 187.945 -98.1048 186.838 -66.5279 186.986C31.0359 187.828 128.233 199.06 223.419 220.49" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-147.703 156.113C-122.594 156.63 -94.1896 158.081 -62.7602 161.033C34.3393 170.632 130.142 190.538 223.03 220.415" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-140.844 123.027C-115.735 125.782 -87.7237 129.767 -56.7124 135.548C39.1391 153.808 132.775 182.224 222.61 220.317" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-131.059 90.6797C-106.466 95.5995 -78.7255 102.167 -48.3537 110.703C45.4405 137.506 136.122 174.2 222.165 220.169" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-118.387 59.3398C-94.3106 66.5228 -67.3079 75.5014 -37.7968 86.7186C53.2494 121.807 140.305 166.484 221.901 219.996" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-102.969 29.2812C-79.6304 38.6043 -53.5376 49.9444 -25.1577 63.7199C62.3757 106.838 145.078 159.142 221.555 219.752" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-84.9219 0.720703C-62.518 12.0855 -37.5565 25.7133 -10.5292 42.0471C72.7829 92.8288 150.457 152.333 221.182 219.554" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-64.3828 -26.1172C-43.0856 -12.7845 -19.4521 3.03267 6.00122 21.7033C84.4373 79.7586 156.48 145.991 220.916 219.283" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-41.5352 -50.9863C-21.4922 -35.8087 0.616574 -17.9498 24.2993 2.93475C97.2186 67.79 163.03 140.224 220.622 219.013" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-16.5273 -73.7402C2.04007 -56.8161 22.4765 -37.0139 44.118 -14.1122C110.927 57.0252 169.986 135.065 220.299 218.693" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M10.3984 -94.209C27.3919 -75.6859 45.9593 -54.1372 65.5351 -29.3659C125.701 47.4664 177.53 130.479 220.149 218.273" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M39.0508 -112.041C54.3228 -92.0666 71.0212 -68.9435 88.236 -42.5242C141.248 39.4043 185.402 126.738 219.954 218.004" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M69.2031 -127.293C82.6061 -106.039 97.042 -81.5388 111.871 -53.6681C157.363 32.6804 193.538 123.627 219.784 217.635" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M100.68 -139.789C112.14 -117.429 124.313 -91.7226 136.585 -62.6219C174.147 27.4537 202.027 121.269 219.757 217.241" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M132.969 -149.432C142.486 -126.186 152.323 -99.4218 161.816 -69.3618C191.144 23.7264 210.501 119.668 219.559 216.848" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M166.074 -156.123C173.452 -132.065 180.83 -104.465 187.642 -73.7901C208.557 21.5588 219.274 118.862 219.612 216.479" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M199.668 -159.812C204.759 -135.213 209.653 -107.171 213.76 -75.8806C226.005 20.947 227.925 118.802 219.49 216.036" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M233.481 -160.477C236.359 -135.509 238.72 -107.17 239.999 -75.6099C243.512 21.9598 236.637 119.627 219.488 215.741" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M267.126 -158.166C267.741 -133.05 267.568 -104.589 266.019 -73.0534C260.795 24.3999 245.214 121.02 219.539 215.174" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M300.497 -152.756C298.85 -127.665 296.12 -99.3514 291.742 -68.086C277.797 28.4998 253.626 123.329 219.637 214.803" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M333.228 -144.414C329.342 -119.569 324.08 -91.6245 316.923 -60.7773C294.379 34.178 261.807 126.467 219.758 214.535" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M365.076 -133.172C359.002 -108.77 351.255 -81.3909 341.369 -51.4293C310.414 41.1299 269.697 130.13 219.906 214.068" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M395.792 -119.102C387.529 -95.3635 377.372 -68.7965 364.83 -39.8189C325.695 49.5858 277.172 134.577 220.078 213.723" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M425.152 -102.35C414.799 -79.4479 402.306 -53.8895 387.206 -26.0926C340.216 59.3894 284.273 139.632 220.32 213.281" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M452.872 -83.0391C440.576 -61.1459 425.82 -36.8175 408.261 -10.5457C353.797 70.4325 290.88 145.389 220.57 213.06" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M478.745 -61.3203C464.481 -40.6079 447.611 -17.7062 427.764 6.89282C366.263 82.6589 296.882 151.67 220.793 212.762" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M502.572 -37.3574C486.489 -18.0226 467.651 3.28019 445.739 26.0097C377.706 95.9563 302.431 158.469 221.184 212.495" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M524.142 -11.3574C506.41 6.45228 485.728 25.9839 461.873 46.6471C387.837 110.214 307.253 165.726 221.48 212.248" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M543.351 16.4902C524.07 32.6518 501.74 50.2401 476.115 68.6894C396.685 125.364 311.45 173.422 221.852 212.053" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M559.905 46.0059C539.296 60.3471 515.466 75.8691 488.291 91.9569C404.101 141.284 314.901 181.508 222.199 211.951" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M573.79 76.709C551.952 89.1561 526.843 102.489 498.34 116.067C410.067 157.654 317.619 189.723 222.559 211.733" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M584.883 108.637C562.011 119.067 535.697 130.087 506.186 141.058C414.543 174.552 319.598 198.202 222.953 211.608" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M593.046 141.428C569.339 149.767 542.238 158.401 511.891 166.666C417.612 191.808 320.928 206.849 223.469 211.535" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M598.239 174.809C573.892 181.008 546.127 187.108 515.042 192.667C418.851 209.251 321.169 215.559 223.645 211.486" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M600.431 208.533C575.617 212.518 547.409 216.159 515.955 218.84C418.705 226.74 320.891 224.266 224.164 211.46" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M599.571 242.31C574.511 244.056 546.082 245.163 514.53 245.016C416.959 244.16 319.755 232.929 224.559 211.512" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M595.702 275.885C570.569 275.368 542.189 273.917 510.759 270.965C413.66 261.376 317.857 241.479 224.969 211.607" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M588.842 308.973C563.856 306.218 535.697 302.208 504.686 296.427C408.836 278.175 315.2 249.767 225.363 211.684" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M579.036 341.319C554.444 336.4 526.728 329.807 496.331 321.271C402.536 294.483 311.853 257.796 225.812 211.83" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M566.389 372.634C542.289 365.451 515.311 356.497 485.8 345.28C394.758 310.181 307.703 265.504 226.102 212.002" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M550.973 402.693C527.635 393.37 501.542 382.03 473.162 368.254C385.625 325.142 302.922 272.837 226.449 212.223" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M532.926 431.278C510.497 419.914 485.56 406.261 458.533 389.952C375.212 339.172 297.53 279.668 226.797 212.445" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M512.385 458.114C491.063 444.781 467.429 428.964 441.976 410.293C363.539 352.239 291.503 285.998 227.086 212.689" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M489.515 482.983C469.571 467.806 447.437 449.922 423.706 429.038C350.788 364.19 284.976 291.764 227.383 212.984" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M464.652 505.713C446.06 488.788 425.649 469.011 403.933 446.085C337.076 374.958 277.975 296.917 227.629 213.279" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M437.598 526.132C420.604 507.609 402.037 486.06 382.461 461.289C322.296 384.457 270.466 301.444 227.848 213.65" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M408.95 544.015C393.678 524.065 377.102 500.942 359.764 474.523C306.732 392.595 262.553 305.261 227.973 213.994" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M378.795 559.289C365.392 538.035 350.957 513.51 336.127 485.639C290.632 399.301 254.457 308.362 228.215 214.361" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M347.421 571.788C335.961 549.403 323.788 523.697 311.516 494.621C273.954 404.545 246.073 310.73 228.344 214.758" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M315.034 581.43C305.64 558.11 295.803 531.42 286.187 501.336C256.899 408.252 237.583 312.318 228.566 215.15" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M281.933 588.12C274.555 564.038 267.177 536.585 260.365 505.763C239.448 410.414 228.731 313.111 228.395 215.494" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M248.238 591.812C243.147 567.212 238.253 539.17 234.146 507.855C221.95 411.03 220.079 313.183 228.563 215.963" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M214.574 592.475C211.696 567.507 209.336 539.144 208.057 507.608C204.55 410.071 211.426 312.438 228.567 216.355" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M180.852 590.114C180.237 564.974 180.434 536.537 181.983 505.001C187.256 407.538 202.87 310.912 228.561 216.75" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M147.406 584.729C149.054 559.638 151.784 531.324 156.161 500.059C170.091 403.47 194.263 308.639 228.267 217.17" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M114.773 576.389C118.659 551.568 123.897 523.599 131.078 492.752C153.616 397.794 186.187 305.504 228.244 217.439" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M82.9219 565.047C88.9962 540.67 96.7429 513.389 106.629 483.305C137.584 390.753 178.301 301.761 228.092 217.832" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M52.1836 551.1C60.4467 527.362 70.6035 500.795 83.1457 471.817C122.265 382.382 170.789 297.364 227.898 218.201" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M22.8398 534.346C33.1933 511.444 45.6864 485.886 60.7862 458.089C107.77 372.558 163.713 292.267 227.672 218.568" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-4.86719 515.036C7.42912 493.143 22.1847 468.814 39.7438 442.543C94.2077 361.564 157.125 286.608 227.435 218.938" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-30.7383 493.315C-16.4746 472.603 0.395961 449.701 20.1684 425.102C81.6772 349.334 151.066 280.323 227.164 219.232" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-54.5703 469.358C-38.4867 450.023 -19.6488 428.721 2.26321 405.991C70.3036 336.043 145.587 273.53 226.843 219.506" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-76.1406 443.355C-58.4094 425.545 -37.7516 406.014 -13.8722 385.351C60.1577 321.775 140.743 266.262 226.521 219.75" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-95.3242 415.534C-76.0682 399.373 -53.7135 381.784 -28.088 363.335C51.3193 306.659 136.528 258.593 226.101 219.947" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-111.922 386.092C-91.2887 371.726 -67.4584 356.204 -40.2836 340.141C43.9048 290.81 133.105 250.585 225.808 220.146" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-125.793 355.294C-103.979 342.847 -78.8457 329.515 -50.3429 315.936C37.9346 274.366 130.382 242.306 225.439 220.295" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-136.883 323.362C-114.012 312.908 -87.6976 301.912 -58.1865 290.941C33.4562 257.444 128.402 233.794 225.047 220.391" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-145.047 290.572C-121.34 282.233 -94.2385 273.599 -63.7683 265.334C30.5103 240.192 127.195 225.151 224.654 220.465" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-150.16 257.191C-125.813 250.992 -98.0484 244.892 -66.9634 239.332C29.1863 222.745 126.827 216.436 224.311 220.514" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<rect x="-0.0546875" y="-1.09766" width="448.055" height="402.196" fill="url(#paint0_radial_1208_54618)"/>
<g filter="url(#filter0_f_1208_54618)">
<ellipse cx="222.82" cy="-113.582" rx="349" ry="159" fill="url(#paint1_linear_1208_54618)"/>
</g>
<defs>
<filter id="filter0_f_1208_54618" x="-261.057" y="-407.459" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1208_54618"/>
</filter>
<radialGradient id="paint0_radial_1208_54618" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(231.088 218.979) rotate(90) scale(525.744 525.744)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
<linearGradient id="paint1_linear_1208_54618" x1="56.1093" y1="-410.907" x2="215.69" y2="125.046" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,93 +0,0 @@
<svg width="448" height="400" viewBox="0 0 448 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-11.4883" y="-16.6172" width="476.973" height="430.908" fill="white"/>
<path d="M-152.426 223.468C-127.612 219.483 -99.4041 215.842 -67.9502 213.136C29.3002 205.246 127.114 207.72 223.841 220.516" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-151.594 189.667C-126.509 187.945 -98.1048 186.838 -66.5279 186.986C31.0359 187.828 128.233 199.06 223.419 220.49" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-147.703 156.113C-122.594 156.63 -94.1896 158.081 -62.7602 161.033C34.3393 170.632 130.142 190.538 223.03 220.415" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-140.844 123.027C-115.735 125.782 -87.7237 129.767 -56.7124 135.548C39.1391 153.808 132.775 182.224 222.61 220.317" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-131.059 90.6797C-106.466 95.5995 -78.7255 102.167 -48.3537 110.703C45.4405 137.506 136.122 174.2 222.165 220.169" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-118.387 59.3398C-94.3106 66.5228 -67.3079 75.5014 -37.7968 86.7186C53.2494 121.807 140.305 166.484 221.901 219.996" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-102.969 29.2812C-79.6304 38.6043 -53.5376 49.9444 -25.1577 63.7199C62.3757 106.838 145.078 159.142 221.555 219.752" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-84.9219 0.720703C-62.518 12.0855 -37.5565 25.7133 -10.5292 42.0471C72.7829 92.8288 150.457 152.333 221.182 219.554" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-64.3828 -26.1172C-43.0856 -12.7845 -19.4521 3.03267 6.00122 21.7033C84.4373 79.7586 156.48 145.991 220.916 219.283" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-41.5352 -50.9863C-21.4922 -35.8087 0.616574 -17.9498 24.2993 2.93475C97.2186 67.79 163.03 140.224 220.622 219.013" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-16.5273 -73.7402C2.04007 -56.8161 22.4765 -37.0139 44.118 -14.1122C110.927 57.0252 169.986 135.065 220.299 218.693" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M10.3984 -94.209C27.3919 -75.6859 45.9593 -54.1372 65.5351 -29.3659C125.701 47.4664 177.53 130.479 220.149 218.273" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M39.0508 -112.041C54.3228 -92.0666 71.0212 -68.9435 88.236 -42.5242C141.248 39.4043 185.402 126.738 219.954 218.004" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M69.2031 -127.293C82.6061 -106.039 97.042 -81.5388 111.871 -53.6681C157.363 32.6804 193.538 123.627 219.784 217.635" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M100.68 -139.789C112.14 -117.429 124.313 -91.7226 136.585 -62.6219C174.147 27.4537 202.027 121.269 219.757 217.241" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M132.969 -149.432C142.486 -126.186 152.323 -99.4218 161.816 -69.3618C191.144 23.7264 210.501 119.668 219.559 216.848" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M166.074 -156.123C173.452 -132.065 180.83 -104.465 187.642 -73.7901C208.557 21.5588 219.274 118.862 219.612 216.479" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M199.668 -159.812C204.759 -135.213 209.653 -107.171 213.76 -75.8806C226.005 20.947 227.925 118.802 219.49 216.036" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M233.481 -160.477C236.359 -135.509 238.72 -107.17 239.999 -75.6099C243.512 21.9598 236.637 119.627 219.488 215.741" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M267.126 -158.166C267.741 -133.05 267.568 -104.589 266.019 -73.0534C260.795 24.3999 245.214 121.02 219.539 215.174" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M300.497 -152.756C298.85 -127.665 296.12 -99.3514 291.742 -68.086C277.797 28.4998 253.626 123.329 219.637 214.803" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M333.228 -144.414C329.342 -119.569 324.08 -91.6245 316.923 -60.7773C294.379 34.178 261.807 126.467 219.758 214.535" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M365.076 -133.172C359.002 -108.77 351.255 -81.3909 341.369 -51.4293C310.414 41.1299 269.697 130.13 219.906 214.068" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M395.792 -119.102C387.529 -95.3635 377.372 -68.7965 364.83 -39.8189C325.695 49.5858 277.172 134.577 220.078 213.723" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M425.152 -102.35C414.799 -79.4479 402.306 -53.8895 387.206 -26.0926C340.216 59.3894 284.273 139.632 220.32 213.281" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M452.872 -83.0391C440.576 -61.1459 425.82 -36.8175 408.261 -10.5457C353.797 70.4325 290.88 145.389 220.57 213.06" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M478.745 -61.3203C464.481 -40.6079 447.611 -17.7062 427.764 6.89282C366.263 82.6589 296.882 151.67 220.793 212.762" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M502.572 -37.3574C486.489 -18.0226 467.651 3.28019 445.739 26.0097C377.706 95.9563 302.431 158.469 221.184 212.495" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M524.142 -11.3574C506.41 6.45228 485.728 25.9839 461.873 46.6471C387.837 110.214 307.253 165.726 221.48 212.248" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M543.351 16.4902C524.07 32.6518 501.74 50.2401 476.115 68.6894C396.685 125.364 311.45 173.422 221.852 212.053" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M559.905 46.0059C539.296 60.3471 515.466 75.8691 488.291 91.9569C404.101 141.284 314.901 181.508 222.199 211.951" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M573.79 76.709C551.952 89.1561 526.843 102.489 498.34 116.067C410.067 157.654 317.619 189.723 222.559 211.733" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M584.883 108.637C562.011 119.067 535.697 130.087 506.186 141.058C414.543 174.552 319.598 198.202 222.953 211.608" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M593.046 141.428C569.339 149.767 542.238 158.401 511.891 166.666C417.612 191.808 320.928 206.849 223.469 211.535" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M598.239 174.809C573.892 181.008 546.127 187.108 515.042 192.667C418.851 209.251 321.169 215.559 223.645 211.486" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M600.431 208.533C575.617 212.518 547.409 216.159 515.955 218.84C418.705 226.74 320.891 224.266 224.164 211.46" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M599.571 242.31C574.511 244.056 546.082 245.163 514.53 245.016C416.959 244.16 319.755 232.929 224.559 211.512" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M595.702 275.885C570.569 275.368 542.189 273.917 510.759 270.965C413.66 261.376 317.857 241.479 224.969 211.607" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M588.842 308.973C563.856 306.218 535.697 302.208 504.686 296.427C408.836 278.175 315.2 249.767 225.363 211.684" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M579.036 341.319C554.444 336.4 526.728 329.807 496.331 321.271C402.536 294.483 311.853 257.796 225.812 211.83" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M566.389 372.634C542.289 365.451 515.311 356.497 485.8 345.28C394.758 310.181 307.703 265.504 226.102 212.002" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M550.973 402.693C527.635 393.37 501.542 382.03 473.162 368.254C385.625 325.142 302.922 272.837 226.449 212.223" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M532.926 431.278C510.497 419.914 485.56 406.261 458.533 389.952C375.212 339.172 297.53 279.668 226.797 212.445" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M512.385 458.114C491.063 444.781 467.429 428.964 441.976 410.293C363.539 352.239 291.503 285.998 227.086 212.689" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M489.515 482.983C469.571 467.806 447.437 449.922 423.706 429.038C350.788 364.19 284.976 291.764 227.383 212.984" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M464.652 505.713C446.06 488.788 425.649 469.011 403.933 446.085C337.076 374.958 277.975 296.917 227.629 213.279" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M437.598 526.132C420.604 507.609 402.037 486.06 382.461 461.289C322.296 384.457 270.466 301.444 227.848 213.65" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M408.95 544.015C393.678 524.065 377.102 500.942 359.764 474.523C306.732 392.595 262.553 305.261 227.973 213.994" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M378.795 559.289C365.392 538.035 350.957 513.51 336.127 485.639C290.632 399.301 254.457 308.362 228.215 214.361" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M347.421 571.788C335.961 549.403 323.788 523.697 311.516 494.621C273.954 404.545 246.073 310.73 228.344 214.758" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M315.034 581.43C305.64 558.11 295.803 531.42 286.187 501.336C256.899 408.252 237.583 312.318 228.566 215.15" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M281.933 588.12C274.555 564.038 267.177 536.585 260.365 505.763C239.448 410.414 228.731 313.111 228.395 215.494" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M248.238 591.812C243.147 567.212 238.253 539.17 234.146 507.855C221.95 411.03 220.079 313.183 228.563 215.963" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M214.574 592.475C211.696 567.507 209.336 539.144 208.057 507.608C204.55 410.071 211.426 312.438 228.567 216.355" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M180.852 590.114C180.237 564.974 180.434 536.537 181.983 505.001C187.256 407.538 202.87 310.912 228.561 216.75" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M147.406 584.729C149.054 559.638 151.784 531.324 156.161 500.059C170.091 403.47 194.263 308.639 228.267 217.17" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M114.773 576.389C118.659 551.568 123.897 523.599 131.078 492.752C153.616 397.794 186.187 305.504 228.244 217.439" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M82.9219 565.047C88.9962 540.67 96.7429 513.389 106.629 483.305C137.584 390.753 178.301 301.761 228.092 217.832" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M52.1836 551.1C60.4467 527.362 70.6035 500.795 83.1457 471.817C122.265 382.382 170.789 297.364 227.898 218.201" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M22.8398 534.346C33.1933 511.444 45.6864 485.886 60.7862 458.089C107.77 372.558 163.713 292.267 227.672 218.568" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-4.86719 515.036C7.42912 493.143 22.1847 468.814 39.7438 442.543C94.2077 361.564 157.125 286.608 227.435 218.938" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-30.7383 493.315C-16.4746 472.603 0.395961 449.701 20.1684 425.102C81.6772 349.334 151.066 280.323 227.164 219.232" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-54.5703 469.358C-38.4867 450.023 -19.6488 428.721 2.26321 405.991C70.3036 336.043 145.587 273.53 226.843 219.506" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-76.1406 443.355C-58.4094 425.545 -37.7516 406.014 -13.8722 385.351C60.1577 321.775 140.743 266.262 226.521 219.75" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-95.3242 415.534C-76.0682 399.373 -53.7135 381.784 -28.088 363.335C51.3193 306.659 136.528 258.593 226.101 219.947" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-111.922 386.092C-91.2887 371.726 -67.4584 356.204 -40.2836 340.141C43.9048 290.81 133.105 250.585 225.808 220.146" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-125.793 355.294C-103.979 342.847 -78.8457 329.515 -50.3429 315.936C37.9346 274.366 130.382 242.306 225.439 220.295" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-136.883 323.362C-114.012 312.908 -87.6976 301.912 -58.1865 290.941C33.4562 257.444 128.402 233.794 225.047 220.391" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-145.047 290.572C-121.34 282.233 -94.2385 273.599 -63.7683 265.334C30.5103 240.192 127.195 225.151 224.654 220.465" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<path d="M-150.16 257.191C-125.813 250.992 -98.0484 244.892 -66.9634 239.332C29.1863 222.745 126.827 216.436 224.311 220.514" stroke="#6AA99B" stroke-width="0.5" stroke-miterlimit="10"/>
<rect x="-0.0546875" y="-1.09766" width="448.055" height="402.196" fill="url(#paint0_radial_1208_57531)"/>
<g filter="url(#filter0_f_1208_57531)">
<ellipse cx="222.836" cy="-137.582" rx="349" ry="159" fill="url(#paint1_linear_1208_57531)"/>
</g>
<defs>
<filter id="filter0_f_1208_57531" x="-261.041" y="-431.459" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1208_57531"/>
</filter>
<radialGradient id="paint0_radial_1208_57531" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(231.088 218.979) rotate(90) scale(221.729 221.729)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
<linearGradient id="paint1_linear_1208_57531" x1="56.125" y1="-434.907" x2="215.706" y2="101.046" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,198 +0,0 @@
<svg width="449" height="401" viewBox="0 0 449 401" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-13.3477" y="-17.9375" width="476.973" height="430.908" fill="white"/>
<path d="M10.9648 104.424L123.224 169.441" stroke="url(#paint0_linear_1200_152285)" stroke-width="0.5"/>
<path d="M322.578 172.469L474.073 260.21" stroke="url(#paint1_linear_1200_152285)" stroke-width="0.5"/>
<path d="M322.578 60.0957L474.073 147.837" stroke="url(#paint2_linear_1200_152285)" stroke-width="0.5"/>
<path d="M323.621 284.994L475.116 372.736" stroke="url(#paint3_linear_1200_152285)" stroke-width="0.5"/>
<path d="M124.445 175.562L-14.8801 255.749" stroke="url(#paint4_linear_1200_152285)" stroke-width="0.5"/>
<path d="M122.676 64.8809L-16.6496 145.067" stroke="url(#paint5_linear_1200_152285)" stroke-width="0.5"/>
<path d="M129.043 284.104L28.6711 341.871" stroke="url(#paint6_linear_1200_152285)" stroke-width="0.5"/>
<path d="M433.977 108.389L333.605 166.156" stroke="url(#paint7_linear_1200_152285)" stroke-width="0.5"/>
<path d="M175.59 257.037L129.046 283.825" stroke="url(#paint8_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M275.949 258.039L322.493 284.827" stroke="url(#paint9_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M224.77 227.965L323.495 171.145" stroke="url(#paint10_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M322.16 387.071L322.16 289.699" stroke="url(#paint11_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M419.449 387.072L419.449 114.623" stroke="url(#paint12_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M32.2813 387.072L32.2812 114.623" stroke="url(#paint13_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M225.492 171.777L225.492 114.623" stroke="url(#paint14_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M-24.1289 196.043L121.074 280.14" stroke="url(#paint15_linear_1200_152285)" stroke-width="0.5"/>
<path d="M225.24 340.297L322.16 284.34V172.427L225.24 116.471L128.32 172.427M225.24 340.3L128.32 284.344V172.43" stroke="url(#paint16_linear_1200_152285)" stroke-width="0.5"/>
<path d="M235.528 234.326L128.32 172.43" stroke="url(#paint17_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M225.254 340.043L225.254 286.912" stroke="url(#paint18_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M225.35 96.7637L339.338 162.575V294.198L225.35 360.01L111.361 294.198V162.575L225.35 96.7637Z" stroke="url(#paint19_linear_1200_152285)" stroke-width="0.5"/>
<path d="M225.347 81.2383L352.781 154.812V301.96L225.347 375.534L97.9133 301.96V154.812L225.347 81.2383Z" stroke="url(#paint20_linear_1200_152285)" stroke-width="0.5"/>
<path d="M225.348 171.775L274.373 200.08V256.69L225.348 284.994L176.323 256.69V200.08L225.348 171.775Z" fill="url(#paint21_linear_1200_152285)" stroke="url(#paint22_linear_1200_152285)" stroke-width="0.5"/>
<path d="M225.344 172.469L273.768 256.341H176.921L225.344 172.469Z" fill="url(#paint23_linear_1200_152285)" stroke="url(#paint24_linear_1200_152285)" stroke-width="0.5"/>
<path d="M274.057 256.149L322.148 228.383L274.057 200.617" stroke="url(#paint25_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M176.154 256.002L128.32 228.385L176.154 200.768" stroke="url(#paint26_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M128.312 385.235L128.312 287.91" stroke="url(#paint27_linear_1200_152285)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<circle cx="225.25" cy="284.301" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="225.25" cy="171.774" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="176.942" cy="256.639" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="128.313" cy="284.346" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="128.313" cy="172.43" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="321.578" cy="283.346" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="321.578" cy="172.467" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="176.942" cy="200.133" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="274.055" cy="256.639" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="274.055" cy="200.133" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<path d="M-2.28125 0.0976562H445.773V402.294H-2.28125V0.0976562Z" fill="url(#paint28_radial_1200_152285)"/>
<g filter="url(#filter0_f_1200_152285)">
<ellipse cx="223.926" cy="-113.902" rx="349" ry="159" fill="url(#paint29_linear_1200_152285)"/>
</g>
<defs>
<filter id="filter0_f_1200_152285" x="-259.951" y="-407.779" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1200_152285"/>
</filter>
<linearGradient id="paint0_linear_1200_152285" x1="27.73" y1="98.0813" x2="53.7297" y2="180.578" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1200_152285" x1="345.203" y1="163.909" x2="380.29" y2="275.239" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_1200_152285" x1="345.203" y1="51.5364" x2="380.29" y2="162.866" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_1200_152285" x1="346.246" y1="276.435" x2="381.332" y2="387.764" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_1200_152285" x1="120.864" y1="197.483" x2="16.2264" y2="174.272" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_1200_152285" x1="119.095" y1="86.8017" x2="14.4569" y2="63.5904" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_1200_152285" x1="126.463" y1="299.896" x2="51.0806" y2="283.174" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_1200_152285" x1="431.397" y1="124.181" x2="356.014" y2="107.459" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_1200_152285" x1="174.394" y1="264.36" x2="139.438" y2="256.606" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_1200_152285" x1="277.145" y1="265.362" x2="312.102" y2="257.608" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint10_linear_1200_152285" x1="227.307" y1="212.432" x2="301.453" y2="228.879" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear_1200_152285" x1="317.484" y1="286.323" x2="317.484" y2="307.959" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.494792" stop-color="#3AA491"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear_1200_152285" x1="419.599" y1="88.0453" x2="422.162" y2="88.0625" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.47"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear_1200_152285" x1="32.4306" y1="88.0453" x2="32.4306" y2="384.993" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.37"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint14_linear_1200_152285" x1="225.642" y1="109.048" x2="228.202" y2="109.13" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint15_linear_1200_152285" x1="-2.44392" y1="187.839" x2="31.1857" y2="294.545" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint16_linear_1200_152285" x1="157.269" y1="112.904" x2="166.088" y2="322.4" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint17_linear_1200_152285" x1="144.331" y1="166.392" x2="169.019" y2="244.972" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint18_linear_1200_152285" x1="225.403" y1="281.729" x2="227.964" y2="281.818" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint19_linear_1200_152285" x1="133.04" y1="92.5684" x2="142.027" y2="339.066" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint20_linear_1200_152285" x1="122.15" y1="76.5482" x2="132.197" y2="352.12" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_1200_152285" x1="225.348" y1="171.775" x2="225.348" y2="284.994" gradientUnits="userSpaceOnUse">
<stop stopColor="#00D9A9" stop-opacity="0.12"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear_1200_152285" x1="185.647" y1="160.731" x2="251.95" y2="282.576" gradientUnits="userSpaceOnUse">
<stop stopColor="#6AA99B" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear_1200_152285" x1="225.344" y1="172.469" x2="225.344" y2="284.298" gradientUnits="userSpaceOnUse">
<stop stopColor="#00D9A9" stop-opacity="0.12"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_1200_152285" x1="186.131" y1="161.56" x2="251.62" y2="281.909" gradientUnits="userSpaceOnUse">
<stop stopColor="#6AA99B" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint25_linear_1200_152285" x1="326.84" y1="208.91" x2="271.949" y2="234.778" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint26_linear_1200_152285" x1="123.654" y1="209.016" x2="178.251" y2="234.745" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#16FFD5"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint27_linear_1200_152285" x1="123.636" y1="284.535" x2="123.636" y2="313.495" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.588542" stop-color="#375965"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint28_radial_1200_152285" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(221.746 218.866) rotate(180) scale(357.75 721.489)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.630208" stop-color="white" stop-opacity="0.35"/>
<stop offset="1" stop-color="white" stop-opacity="0.88"/>
</radialGradient>
<linearGradient id="paint29_linear_1200_152285" x1="57.2148" y1="-411.228" x2="216.796" y2="124.725" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,192 +0,0 @@
<svg width="449" height="401" viewBox="0 0 449 401" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-13.6172" y="-17.8398" width="476.973" height="430.908" fill="white"/>
<path d="M10.8242 104.508L123.084 169.525" stroke="url(#paint0_linear_1200_152564)" stroke-width="0.5"/>
<path d="M322.438 172.553L473.932 260.294" stroke="url(#paint1_linear_1200_152564)" stroke-width="0.5"/>
<path d="M322.438 60.1797L473.932 147.921" stroke="url(#paint2_linear_1200_152564)" stroke-width="0.5"/>
<path d="M323.48 285.078L474.975 372.82" stroke="url(#paint3_linear_1200_152564)" stroke-width="0.5"/>
<path d="M124.305 175.646L-15.0207 255.833" stroke="url(#paint4_linear_1200_152564)" stroke-width="0.5"/>
<path d="M122.535 64.9648L-16.7902 145.151" stroke="url(#paint5_linear_1200_152564)" stroke-width="0.5"/>
<path d="M128.902 284.188L28.5305 341.955" stroke="url(#paint6_linear_1200_152564)" stroke-width="0.5"/>
<path d="M433.836 108.473L333.464 166.24" stroke="url(#paint7_linear_1200_152564)" stroke-width="0.5"/>
<path d="M175.449 257.121L128.905 283.909" stroke="url(#paint8_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M275.809 258.123L322.353 284.911" stroke="url(#paint9_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M224.629 228.049L323.355 171.229" stroke="url(#paint10_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M322.02 387.155L322.02 289.783" stroke="url(#paint11_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M419.309 387.156L419.309 114.707" stroke="url(#paint12_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M32.1406 387.156L32.1406 114.707" stroke="url(#paint13_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M225.352 171.861L225.352 114.707" stroke="url(#paint14_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M-24.2695 196.127L120.934 280.224" stroke="url(#paint15_linear_1200_152564)" stroke-width="0.5"/>
<path d="M225.099 340.381L322.019 284.424V172.511L225.099 116.555L128.18 172.511M225.099 340.384L128.18 284.428V172.514" stroke="url(#paint16_linear_1200_152564)" stroke-width="0.5"/>
<path d="M235.388 234.41L128.18 172.514" stroke="url(#paint17_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M225.209 96.8477L339.198 162.659V294.282L225.209 360.094L111.22 294.282V162.659L225.209 96.8477Z" stroke="url(#paint18_linear_1200_152564)" stroke-width="0.5"/>
<path d="M225.207 81.3223L352.641 154.896V302.044L225.207 375.618L97.7727 302.044V154.896L225.207 81.3223Z" stroke="url(#paint19_linear_1200_152564)" stroke-width="0.5"/>
<path d="M225.207 171.859L274.232 200.164V256.774L225.207 285.078L176.182 256.774V200.164L225.207 171.859Z" fill="url(#paint20_linear_1200_152564)" stroke="url(#paint21_linear_1200_152564)" stroke-width="0.5"/>
<path d="M225.204 172.553L273.627 256.425H176.78L225.204 172.553Z" fill="url(#paint22_linear_1200_152564)" stroke="url(#paint23_linear_1200_152564)" stroke-width="0.5"/>
<path d="M273.916 256.233L322.008 228.467L273.916 200.701" stroke="url(#paint24_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M176.014 256.085L128.18 228.469L176.014 200.852" stroke="url(#paint25_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<path d="M128.172 385.319L128.172 287.994" stroke="url(#paint26_linear_1200_152564)" stroke-width="0.5" strokeDasharray="0.1 2"/>
<circle cx="225.11" cy="284.385" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="225.11" cy="171.858" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="176.801" cy="256.723" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="128.172" cy="284.43" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="128.172" cy="172.514" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="321.438" cy="283.43" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="321.438" cy="172.551" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="176.801" cy="200.217" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="273.914" cy="256.723" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<circle cx="273.914" cy="200.217" r="4.61993" fill="#6AA99B" stroke="white" stroke-width="1.55778"/>
<path d="M-2.42188 0.0976562H445.633V402.294H-2.42188V0.0976562Z" fill="url(#paint27_radial_1200_152564)"/>
<g filter="url(#filter0_f_1200_152564)">
<ellipse cx="223.656" cy="-137.805" rx="349" ry="159" fill="url(#paint28_linear_1200_152564)"/>
</g>
<defs>
<filter id="filter0_f_1200_152564" x="-260.221" y="-431.682" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1200_152564"/>
</filter>
<linearGradient id="paint0_linear_1200_152564" x1="27.5893" y1="98.1653" x2="53.5891" y2="180.662" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1200_152564" x1="345.062" y1="163.993" x2="380.149" y2="275.323" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_1200_152564" x1="345.062" y1="51.6204" x2="380.149" y2="162.95" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_1200_152564" x1="346.105" y1="276.519" x2="381.192" y2="387.848" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_1200_152564" x1="120.724" y1="197.567" x2="16.0858" y2="174.356" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_1200_152564" x1="118.954" y1="86.8857" x2="14.3163" y2="63.6744" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_1200_152564" x1="126.323" y1="299.98" x2="50.94" y2="283.258" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.33"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_1200_152564" x1="431.256" y1="124.265" x2="355.874" y2="107.543" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_1200_152564" x1="174.253" y1="264.444" x2="139.297" y2="256.69" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_1200_152564" x1="277.005" y1="265.446" x2="311.961" y2="257.692" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint10_linear_1200_152564" x1="227.166" y1="212.516" x2="301.313" y2="228.963" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear_1200_152564" x1="317.343" y1="286.407" x2="317.343" y2="308.043" gradientUnits="userSpaceOnUse">
<stop stopColor="#6AA99B" stop-opacity="0"/>
<stop offset="0.494792" stop-color="#3AA491"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear_1200_152564" x1="419.458" y1="88.1292" x2="422.021" y2="88.1465" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B" stop-opacity="0.47"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear_1200_152564" x1="32.29" y1="88.1292" x2="32.29" y2="385.077" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B" stop-opacity="0.37"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint14_linear_1200_152564" x1="225.501" y1="109.132" x2="228.062" y2="109.214" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint15_linear_1200_152564" x1="-2.58454" y1="187.923" x2="31.045" y2="294.629" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint16_linear_1200_152564" x1="157.128" y1="112.988" x2="165.948" y2="322.484" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint17_linear_1200_152564" x1="144.19" y1="166.476" x2="168.878" y2="245.056" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint18_linear_1200_152564" x1="132.9" y1="92.6524" x2="141.886" y2="339.15" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint19_linear_1200_152564" x1="122.009" y1="76.6322" x2="132.056" y2="352.204" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#00DED1" stop-opacity="0.82"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint20_linear_1200_152564" x1="225.207" y1="171.859" x2="225.207" y2="285.078" gradientUnits="userSpaceOnUse">
<stop stopColor="#00D9A9" stop-opacity="0.12"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_1200_152564" x1="185.506" y1="160.815" x2="251.809" y2="282.66" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear_1200_152564" x1="225.204" y1="172.553" x2="225.204" y2="284.382" gradientUnits="userSpaceOnUse">
<stop stopColor="#00D9A9" stop-opacity="0.12"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear_1200_152564" x1="185.99" y1="161.644" x2="251.479" y2="281.993" gradientUnits="userSpaceOnUse">
<stop stopColor="#6AA99B" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_1200_152564" x1="326.699" y1="208.994" x2="271.808" y2="234.862" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint25_linear_1200_152564" x1="123.513" y1="209.1" x2="178.11" y2="234.829" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.515625" stop-color="#6AA99B"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint26_linear_1200_152564" x1="123.496" y1="284.619" x2="123.496" y2="313.579" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="0.588542" stop-color="#375965"/>
<stop offset="1" stop-color="#375965" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint27_radial_1200_152564" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(203.05 218.866) rotate(-180) scale(146.703 1350.43)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.630208" stop-color="white" stop-opacity="0.35"/>
<stop offset="1" stop-color="white" stop-opacity="0.88"/>
</radialGradient>
<linearGradient id="paint28_linear_1200_152564" x1="56.9453" y1="-435.13" x2="216.526" y2="100.823" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,129 +0,0 @@
<svg width="448" height="400" viewBox="0 0 448 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-5.66406" y="-24.1992" width="476.973" height="430.908" fill="white"/>
<path d="M260.359 243.852H458.131" stroke="url(#paint0_linear_1200_89039)"/>
<path d="M252.879 220.738H458.13" stroke="url(#paint1_linear_1200_89039)"/>
<path d="M246.094 197.623L458.129 197.623" stroke="url(#paint2_linear_1200_89039)"/>
<path d="M260.359 174.51H458.131" stroke="url(#paint3_linear_1200_89039)"/>
<path d="M241.316 266.279L458.129 266.279" stroke="url(#paint4_linear_1200_89039)"/>
<path d="M199.738 243.852L-5.48504 243.852" stroke="url(#paint5_linear_1200_89039)"/>
<path d="M199.766 220.738H-5.48563" stroke="url(#paint6_linear_1200_89039)"/>
<path d="M192.285 197.623L-5.48601 197.623" stroke="url(#paint7_linear_1200_89039)"/>
<path d="M206.871 174.51L-5.48402 174.51" stroke="url(#paint8_linear_1200_89039)"/>
<path d="M211.328 266.279L-5.48434 266.279" stroke="url(#paint9_linear_1200_89039)"/>
<g clip-path="url(#clip0_1200_89039)">
<rect x="160.598" y="158.094" width="131.505" height="121.291" rx="16" fill="white"/>
<circle cx="250.666" cy="205.185" r="0.978774" transform="rotate(-180 250.666 205.185)" fill="#73867C"/>
<circle cx="263.638" cy="185.072" r="0.978774" transform="rotate(-180 263.638 185.072)" fill="#73867C"/>
<ellipse cx="189.015" cy="190.256" rx="0.324429" ry="0.324429" transform="rotate(-180 189.015 190.256)" fill="#73867C"/>
<circle cx="188.373" cy="203.238" r="0.978774" transform="rotate(-180 188.373 203.238)" fill="#73867C"/>
<ellipse cx="177.34" cy="205.181" rx="0.324429" ry="0.324429" transform="rotate(-180 177.34 205.181)" fill="#73867C"/>
<circle cx="174.095" cy="198.695" r="0.978774" transform="rotate(-180 174.095 198.695)" fill="#73867C"/>
<circle cx="175.396" cy="233.084" r="0.978774" transform="rotate(-180 175.396 233.084)" fill="#73867C"/>
<circle cx="168.908" cy="220.758" r="0.978774" transform="rotate(-180 168.908 220.758)" fill="#73867C"/>
<circle cx="187.08" cy="220.758" r="0.978774" transform="rotate(-180 187.08 220.758)" fill="#73867C"/>
<circle cx="201.345" cy="235.035" r="0.978774" transform="rotate(-180 201.345 235.035)" fill="#73867C"/>
<ellipse cx="252.601" cy="253.195" rx="0.324429" ry="0.324429" transform="rotate(-180 252.601 253.195)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 192.914 246.057)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 203.945 238.272)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 195.504 236.324)" fill="#73867C"/>
<circle cx="258.019" cy="233.952" r="0.978774" transform="rotate(-75 258.019 233.952)" fill="#73867C"/>
<circle cx="230.121" cy="248.878" r="0.978774" transform="rotate(-75 230.121 248.878)" fill="#73867C"/>
<circle cx="270.192" cy="200.861" r="0.353739" transform="rotate(105 270.192 200.861)" fill="#73867C"/>
<ellipse cx="235.734" cy="228.539" rx="0.324429" ry="0.324429" transform="rotate(-180 235.734 228.539)" fill="#73867C"/>
<circle cx="259.947" cy="242.213" r="0.978774" transform="rotate(-180 259.947 242.213)" fill="#73867C"/>
<circle cx="277.73" cy="223.15" r="0.978774" transform="rotate(-75 277.73 223.15)" fill="#73867C"/>
<path d="M156.594 134.775H298.414V289.016H156.594V134.775Z" fill="url(#paint10_radial_1200_89039)"/>
<g filter="url(#filter0_f_1200_89039)">
<ellipse cx="235.353" cy="-15.4428" rx="312.884" ry="142.565" fill="url(#paint11_linear_1200_89039)"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M220.516 179.86C218.951 177.987 216.189 177.68 214.251 179.162C212.281 180.667 211.876 183.471 213.339 185.472L219.135 193.4C221.124 196.122 221.048 199.839 218.948 202.477L208.598 215.479L219.18 226.493C216.552 227.232 213.911 228.842 212.054 231.876C210.502 234.411 210.707 237.235 211.386 239.539C212.071 241.862 213.375 244.177 214.816 246.264C217.714 250.457 221.686 254.457 224.457 256.877L227.177 259.253L233.51 251.767L230.345 249.529C229.163 248.693 227.497 247.266 226.357 245.796C225.786 245.059 225.475 244.473 225.348 244.08C225.305 243.944 225.287 243.83 225.281 243.753C225.28 243.744 225.28 243.735 225.28 243.728C225.621 243.103 226.611 242.368 228.725 241.99C230.761 241.626 233.357 241.912 235.889 243.205L238.485 244.531L244.102 237.428L241.176 235.242C239.272 233.819 236.41 231.22 234.181 228.204C231.879 225.087 230.838 222.287 231.047 219.918C231.245 217.675 232.53 214.849 234.101 212.288C235.668 209.736 237.422 207.603 238.422 206.739L241.068 204.453L220.516 179.86ZM215.247 180.465C216.488 179.516 218.256 179.713 219.257 180.912L238.774 204.267L237.35 205.498C236.17 206.517 234.312 208.808 232.703 211.43C231.099 214.043 229.646 217.139 229.413 219.773C229.153 222.719 230.455 225.921 232.862 229.179C235.203 232.348 238.188 235.056 240.194 236.556L241.77 237.733L238.033 242.458L236.635 241.744C233.795 240.294 230.837 239.946 228.436 240.375C226.066 240.799 224.406 241.731 223.759 243.101L223.739 243.143L223.702 243.251L223.701 243.255C223.633 243.461 223.632 243.694 223.645 243.872C223.66 244.079 223.703 244.322 223.786 244.581C223.993 245.225 224.426 245.982 225.061 246.801C226.33 248.437 228.129 249.971 229.398 250.868L231.102 252.074L227.001 256.921L225.536 255.642C222.829 253.277 218.962 249.378 216.166 245.331C214.772 243.314 213.575 241.162 212.96 239.076C212.347 236.997 212.241 234.711 213.453 232.732C215.358 229.621 218.199 228.238 220.916 227.785L222.45 227.529L210.775 215.378L220.232 203.498C222.792 200.282 222.885 195.751 220.459 192.432L214.664 184.504C213.727 183.223 213.986 181.428 215.247 180.465ZM226.795 254.201L228.293 252.431C225.554 250.494 220.468 245.795 222.029 242.491C223.98 238.361 231.106 236.772 237.505 240.04L239.048 238.089C234.797 234.911 226.54 226.742 227.52 219.48C228.501 212.218 233.648 206.167 236.098 204.049L217.789 182.139C217.444 181.727 216.836 181.659 216.409 181.985C215.976 182.317 215.887 182.934 216.209 183.374L222.004 191.303C224.939 195.318 224.826 200.799 221.729 204.69L213.315 215.259L227.793 230.328C224.919 229.238 218.353 228.394 215.085 233.732C211.817 239.069 221.53 249.601 226.795 254.201Z" fill="url(#paint12_linear_1200_89039)"/>
</g>
<rect x="160.922" y="158.418" width="130.856" height="120.642" rx="15.6756" stroke="url(#paint13_linear_1200_89039)" stroke-width="0.648858"/>
<rect x="-5.48438" y="-5.21289" width="456.316" height="405.213" fill="url(#paint14_radial_1200_89039)"/>
<g filter="url(#filter1_f_1200_89039)">
<ellipse cx="223.285" cy="-105.711" rx="349" ry="159" fill="url(#paint15_linear_1200_89039)"/>
</g>
<defs>
<filter id="filter0_f_1200_89039" x="-212.408" y="-292.885" width="895.523" height="554.885" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1200_89039"/>
</filter>
<filter id="filter1_f_1200_89039" x="-260.592" y="-399.588" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1200_89039"/>
</filter>
<linearGradient id="paint0_linear_1200_89039" x1="264.669" y1="242.576" x2="418.255" y2="242.576" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint1_linear_1200_89039" x1="257.351" y1="219.463" x2="416.746" y2="219.463" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint2_linear_1200_89039" x1="250.714" y1="196.348" x2="415.377" y2="196.348" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint3_linear_1200_89039" x1="264.669" y1="173.234" x2="418.255" y2="173.234" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint4_linear_1200_89039" x1="246.041" y1="265.004" x2="414.414" y2="265.004" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint5_linear_1200_89039" x1="195.267" y1="245.127" x2="35.8933" y2="245.127" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint6_linear_1200_89039" x1="195.293" y1="219.463" x2="35.8983" y2="219.463" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint7_linear_1200_89039" x1="187.976" y1="198.898" x2="34.3897" y2="198.898" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint8_linear_1200_89039" x1="202.244" y1="175.785" x2="37.3322" y2="175.785" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint9_linear_1200_89039" x1="206.604" y1="265.004" x2="38.2306" y2="265.004" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<radialGradient id="paint10_radial_1200_89039" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(227.504 226.603) rotate(180) scale(105.285 57.1296)">
<stop stopColor="white" stop-opacity="0.43"/>
<stop offset="0.651042" stop-color="#FCFBFB"/>
<stop offset="1" stop-color="#F2F2F2"/>
</radialGradient>
<linearGradient id="paint11_linear_1200_89039" x1="85.894" y1="-282.035" x2="228.996" y2="198.509" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
<linearGradient id="paint12_linear_1200_89039" x1="244.102" y1="178.225" x2="252.671" y2="299.046" gradientUnits="userSpaceOnUse">
<stop stopColor="#373737" stop-opacity="0.85"/>
<stop offset="1" stop-color="#5D7D7B" stop-opacity="0.35"/>
</linearGradient>
<linearGradient id="paint13_linear_1200_89039" x1="160.598" y1="196.493" x2="205.933" y2="256.358" gradientUnits="userSpaceOnUse">
<stop stopColor="#DAE9E2"/>
<stop offset="0.588542" stop-color="#89A296"/>
<stop offset="1" stop-color="#89A296" stop-opacity="0.08"/>
</linearGradient>
<radialGradient id="paint14_radial_1200_89039" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(222.674 216.528) rotate(90) scale(246.184 217.511)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
<linearGradient id="paint15_linear_1200_89039" x1="56.5742" y1="-403.036" x2="216.155" y2="132.917" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
<clipPath id="clip0_1200_89039">
<rect x="160.598" y="158.094" width="131.505" height="121.291" rx="16" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,116 +0,0 @@
<svg width="449" height="400" viewBox="0 0 449 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-15.3008" y="-8.0293" width="476.973" height="430.908" fill="white"/>
<path d="M261.355 243.852H459.127" stroke="url(#paint0_linear_1200_128306)"/>
<path d="M253.875 220.738H459.126" stroke="url(#paint1_linear_1200_128306)"/>
<path d="M247.09 197.623L459.125 197.623" stroke="url(#paint2_linear_1200_128306)"/>
<path d="M261.355 174.51H459.127" stroke="url(#paint3_linear_1200_128306)"/>
<path d="M242.312 266.279L459.125 266.279" stroke="url(#paint4_linear_1200_128306)"/>
<path d="M200.734 243.852L-4.48895 243.852" stroke="url(#paint5_linear_1200_128306)"/>
<path d="M200.762 220.738H-4.48953" stroke="url(#paint6_linear_1200_128306)"/>
<path d="M193.281 197.623L-4.48992 197.623" stroke="url(#paint7_linear_1200_128306)"/>
<path d="M207.867 174.51L-4.48792 174.51" stroke="url(#paint8_linear_1200_128306)"/>
<path d="M212.324 266.279L-4.48825 266.279" stroke="url(#paint9_linear_1200_128306)"/>
<g clip-path="url(#clip0_1200_128306)">
<rect x="161.594" y="158.094" width="131.505" height="121.291" rx="16" fill="white"/>
<circle cx="251.662" cy="205.185" r="0.978774" transform="rotate(-180 251.662 205.185)" fill="#73867C"/>
<circle cx="264.635" cy="185.072" r="0.978774" transform="rotate(-180 264.635 185.072)" fill="#73867C"/>
<ellipse cx="190.012" cy="190.256" rx="0.324429" ry="0.324429" transform="rotate(-180 190.012 190.256)" fill="#73867C"/>
<circle cx="189.369" cy="203.238" r="0.978774" transform="rotate(-180 189.369 203.238)" fill="#73867C"/>
<ellipse cx="178.336" cy="205.181" rx="0.324429" ry="0.324429" transform="rotate(-180 178.336 205.181)" fill="#73867C"/>
<circle cx="175.092" cy="198.695" r="0.978774" transform="rotate(-180 175.092 198.695)" fill="#73867C"/>
<circle cx="176.392" cy="233.084" r="0.978774" transform="rotate(-180 176.392 233.084)" fill="#73867C"/>
<circle cx="169.904" cy="220.758" r="0.978774" transform="rotate(-180 169.904 220.758)" fill="#73867C"/>
<circle cx="188.076" cy="220.758" r="0.978774" transform="rotate(-180 188.076 220.758)" fill="#73867C"/>
<circle cx="202.342" cy="235.035" r="0.978774" transform="rotate(-180 202.342 235.035)" fill="#73867C"/>
<ellipse cx="253.597" cy="253.195" rx="0.324429" ry="0.324429" transform="rotate(-180 253.597 253.195)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 193.91 246.057)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 204.941 238.272)" fill="#73867C"/>
<ellipse rx="0.324429" ry="0.324429" transform="matrix(-1 -8.18178e-08 -8.18178e-08 1 196.5 236.324)" fill="#73867C"/>
<circle cx="259.015" cy="233.952" r="0.978774" transform="rotate(-75 259.015 233.952)" fill="#73867C"/>
<circle cx="231.117" cy="248.878" r="0.978774" transform="rotate(-75 231.117 248.878)" fill="#73867C"/>
<circle cx="271.188" cy="200.861" r="0.353739" transform="rotate(105 271.188 200.861)" fill="#73867C"/>
<ellipse cx="236.73" cy="228.539" rx="0.324429" ry="0.324429" transform="rotate(-180 236.73 228.539)" fill="#73867C"/>
<circle cx="260.943" cy="242.213" r="0.978774" transform="rotate(-180 260.943 242.213)" fill="#73867C"/>
<circle cx="278.726" cy="223.15" r="0.978774" transform="rotate(-75 278.726 223.15)" fill="#73867C"/>
<path d="M157.59 134.775H299.411V289.016H157.59V134.775Z" fill="url(#paint10_radial_1200_128306)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M221.512 179.86C219.947 177.987 217.185 177.68 215.247 179.162C213.277 180.667 212.873 183.471 214.335 185.472L220.131 193.4C222.12 196.122 222.044 199.839 219.944 202.477L209.594 215.479L220.176 226.493C217.548 227.232 214.907 228.842 213.05 231.876C211.498 234.411 211.703 237.235 212.383 239.539C213.067 241.862 214.371 244.177 215.813 246.264C218.71 250.457 222.682 254.457 225.453 256.877L228.173 259.253L234.506 251.767L231.341 249.529C230.159 248.693 228.493 247.266 227.353 245.796C226.782 245.059 226.471 244.473 226.344 244.08C226.301 243.944 226.283 243.83 226.277 243.753C226.276 243.744 226.276 243.735 226.276 243.728C226.617 243.103 227.607 242.368 229.721 241.99C231.757 241.626 234.353 241.912 236.885 243.205L239.481 244.531L245.098 237.428L242.172 235.242C240.268 233.819 237.406 231.22 235.177 228.204C232.875 225.087 231.834 222.287 232.043 219.918C232.241 217.675 233.526 214.849 235.097 212.288C236.664 209.736 238.418 207.603 239.418 206.739L242.064 204.453L221.512 179.86ZM216.243 180.465C217.484 179.516 219.252 179.713 220.253 180.912L239.77 204.267L238.346 205.498C237.166 206.517 235.308 208.808 233.699 211.43C232.096 214.043 230.642 217.139 230.409 219.773C230.149 222.719 231.451 225.921 233.858 229.179C236.2 232.348 239.184 235.056 241.19 236.556L242.766 237.733L239.029 242.458L237.631 241.744C234.791 240.294 231.833 239.946 229.432 240.375C227.062 240.799 225.402 241.731 224.755 243.101L224.735 243.143L224.698 243.251L224.697 243.255C224.629 243.461 224.628 243.694 224.641 243.872C224.656 244.079 224.699 244.322 224.782 244.581C224.989 245.225 225.422 245.982 226.057 246.801C227.326 248.437 229.125 249.971 230.394 250.868L232.098 252.074L227.997 256.921L226.532 255.642C223.825 253.277 219.958 249.378 217.162 245.331C215.768 243.314 214.571 241.162 213.956 239.076C213.343 236.997 213.237 234.711 214.449 232.732C216.354 229.621 219.196 228.238 221.912 227.785L223.446 227.529L211.771 215.378L221.228 203.498C223.788 200.282 223.881 195.751 221.455 192.432L215.66 184.504C214.723 183.223 214.983 181.428 216.243 180.465ZM227.791 254.201L229.289 252.431C226.55 250.494 221.464 245.795 223.025 242.491C224.977 238.361 232.102 236.772 238.501 240.04L240.045 238.089C235.793 234.911 227.536 226.742 228.517 219.48C229.497 212.218 234.644 206.167 237.094 204.049L218.785 182.139C218.44 181.727 217.832 181.659 217.405 181.985C216.972 182.317 216.883 182.934 217.205 183.374L223 191.303C225.935 195.318 225.822 200.799 222.725 204.69L214.311 215.259L228.789 230.328C225.915 229.238 219.349 228.394 216.081 233.732C212.813 239.069 222.526 249.601 227.791 254.201Z" fill="url(#paint11_linear_1200_128306)"/>
</g>
<rect x="161.918" y="158.418" width="130.856" height="120.642" rx="15.6756" stroke="url(#paint12_linear_1200_128306)" stroke-width="0.648858"/>
<rect x="-4.48828" y="-5.21289" width="456.316" height="405.213" fill="url(#paint13_radial_1200_128306)"/>
<g filter="url(#filter0_f_1200_128306)">
<ellipse cx="224.281" cy="-153.711" rx="349" ry="159" fill="url(#paint14_linear_1200_128306)"/>
</g>
<defs>
<filter id="filter0_f_1200_128306" x="-259.596" y="-447.588" width="967.754" height="587.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="67.4384" result="effect1_foregroundBlur_1200_128306"/>
</filter>
<linearGradient id="paint0_linear_1200_128306" x1="265.665" y1="242.576" x2="419.251" y2="242.576" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint1_linear_1200_128306" x1="258.347" y1="219.463" x2="417.742" y2="219.463" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint2_linear_1200_128306" x1="251.71" y1="196.348" x2="416.373" y2="196.348" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint3_linear_1200_128306" x1="265.665" y1="173.234" x2="419.251" y2="173.234" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint4_linear_1200_128306" x1="247.037" y1="265.004" x2="415.41" y2="265.004" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint5_linear_1200_128306" x1="196.263" y1="245.127" x2="36.8894" y2="245.127" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint6_linear_1200_128306" x1="196.289" y1="219.463" x2="36.8944" y2="219.463" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint7_linear_1200_128306" x1="188.972" y1="198.898" x2="35.3858" y2="198.898" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint8_linear_1200_128306" x1="203.24" y1="175.785" x2="38.3283" y2="175.785" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<linearGradient id="paint9_linear_1200_128306" x1="207.6" y1="265.004" x2="39.2267" y2="265.004" gradientUnits="userSpaceOnUse">
<stop stopColor="#375965" stop-opacity="0"/>
<stop offset="1" stop-color="#7AFFDF"/>
</linearGradient>
<radialGradient id="paint10_radial_1200_128306" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(228.5 226.603) rotate(180) scale(105.285 57.1296)">
<stop stopColor="white" stop-opacity="0.43"/>
<stop offset="0.651042" stop-color="#FCFBFB"/>
<stop offset="1" stop-color="#F2F2F2"/>
</radialGradient>
<linearGradient id="paint11_linear_1200_128306" x1="245.098" y1="178.225" x2="253.667" y2="299.046" gradientUnits="userSpaceOnUse">
<stop stopColor="#373737" stop-opacity="0.85"/>
<stop offset="1" stop-color="#5D7D7B" stop-opacity="0.35"/>
</linearGradient>
<linearGradient id="paint12_linear_1200_128306" x1="161.594" y1="196.493" x2="221.947" y2="233.528" gradientUnits="userSpaceOnUse">
<stop stopColor="#DAE9E2"/>
<stop offset="0.588542" stop-color="#89A296"/>
<stop offset="1" stop-color="#89A296" stop-opacity="0.08"/>
</linearGradient>
<radialGradient id="paint13_radial_1200_128306" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(223.67 216.528) rotate(90) scale(183.472 162.103)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
<linearGradient id="paint14_linear_1200_128306" x1="57.5703" y1="-451.036" x2="217.151" y2="84.9167" gradientUnits="userSpaceOnUse">
<stop stopColor="#39617D" stop-opacity="0.49"/>
<stop offset="0.9999" stop-color="#00DED1" stop-opacity="0.46"/>
<stop offset="1" stop-color="white" stop-opacity="0.51"/>
</linearGradient>
<clipPath id="clip0_1200_128306">
<rect x="161.594" y="158.094" width="131.505" height="121.291" rx="16" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,70 +0,0 @@
<svg width="448" height="400" viewBox="0 0 448 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-15.8672" y="-25.0273" width="476.973" height="430.908" fill="white"/>
<path d="M65.7756 211.771C66.9456 211.771 67.8606 211.351 68.5806 210.871L68.1456 210.046C67.4706 210.496 66.7806 210.766 65.9256 210.766C64.3356 210.766 63.1956 209.701 63.1356 208.051H68.8356C68.8656 207.856 68.8806 207.586 68.8806 207.331C68.8806 205.171 67.6506 203.746 65.5656 203.746C63.6756 203.746 61.8606 205.276 61.8606 207.766C61.8606 210.271 63.6156 211.771 65.7756 211.771ZM63.1206 207.151C63.3156 205.621 64.3956 204.721 65.5806 204.721C66.9306 204.721 67.7406 205.591 67.7406 207.151H63.1206ZM71.4847 214.831C73.1347 214.831 74.0197 213.676 74.5897 212.206L77.7847 203.926H76.6147L75.0247 208.231C74.7697 208.921 74.4997 209.716 74.2447 210.436H74.1847C73.8847 209.701 73.5697 208.906 73.2847 208.231L71.4997 203.926H70.2547L73.6597 211.606L73.4497 212.146C73.0597 213.151 72.4597 213.811 71.4397 213.811C71.2147 213.811 70.9747 213.766 70.7797 213.706L70.5247 214.681C70.7797 214.771 71.1397 214.831 71.4847 214.831ZM82.3539 211.756C84.7989 211.756 85.6089 210.256 85.6089 208.411V201.661H80.2389V202.711H84.3639V208.306C84.3639 209.941 83.7339 210.661 82.3239 210.661C81.5589 210.661 80.8089 210.241 80.2389 209.356L79.4289 210.106C80.1039 211.261 81.2439 211.756 82.3539 211.756ZM91.708 202.216C92.293 202.216 92.758 201.796 92.758 201.181C92.758 200.551 92.293 200.116 91.708 200.116C91.123 200.116 90.658 200.551 90.658 201.181C90.658 201.796 91.123 202.216 91.708 202.216ZM88.408 211.576H95.308V210.556H92.473V203.926H88.408V204.931H91.243V210.556H88.408V211.576ZM96.5772 211.576H103.687V210.511H98.0922L103.612 202.411V201.661H97.0572V202.711H102.082L96.5772 210.826V211.576ZM70.3297 231.576H71.6497L73.1197 228.891C73.3747 228.411 73.6297 227.916 73.9147 227.316H73.9747C74.3047 227.916 74.5747 228.426 74.8447 228.906L76.3297 231.576H77.7097L74.7697 226.521L77.5147 221.676H76.1947L74.8447 224.211C74.6047 224.661 74.4097 225.081 74.1397 225.651H74.0797C73.7647 225.081 73.5397 224.661 73.2847 224.211L71.9047 221.676H70.5247L73.2697 226.461L70.3297 231.576ZM79.4589 231.576H80.6439V226.386C80.6439 225.366 80.5239 224.301 80.4789 223.296H80.5089L81.4989 225.321L84.6939 231.576H85.9689V221.676H84.7839V226.821C84.7839 227.856 84.9039 228.981 84.9489 229.956H84.9189L83.9289 227.931L80.7339 221.676H79.4589V231.576ZM91.408 231.756C93.538 231.756 94.843 229.881 94.843 226.596C94.843 223.281 93.538 221.496 91.408 221.496C89.278 221.496 87.973 223.281 87.973 226.596C87.973 229.881 89.278 231.756 91.408 231.756ZM91.408 230.766C90.073 230.766 89.128 229.446 89.128 226.596C89.128 223.731 90.073 222.486 91.408 222.486C92.743 222.486 93.688 223.731 93.688 226.596C93.688 229.446 92.743 230.766 91.408 230.766ZM91.408 227.511C91.903 227.511 92.338 227.136 92.338 226.491C92.338 225.846 91.903 225.471 91.408 225.471C90.913 225.471 90.478 225.846 90.478 226.491C90.478 227.136 90.913 227.511 91.408 227.511Z" fill="#07B07E"/>
<path d="M131.276 211.576H132.596L134.066 208.891C134.321 208.411 134.576 207.916 134.861 207.316H134.921C135.251 207.916 135.521 208.426 135.791 208.906L137.276 211.576H138.656L135.716 206.521L138.461 201.676H137.141L135.791 204.211C135.551 204.661 135.356 205.081 135.086 205.651H135.026C134.711 205.081 134.486 204.661 134.231 204.211L132.851 201.676H131.471L134.216 206.461L131.276 211.576ZM140.255 211.576H146.99V210.511H143.84C143.27 210.511 142.64 210.556 142.055 210.601C144.665 208.111 146.465 206.266 146.465 204.406C146.465 202.651 145.265 201.496 143.345 201.496C141.995 201.496 141.05 202.096 140.195 202.996L140.9 203.701C141.515 203.026 142.295 202.501 143.195 202.501C144.605 202.501 145.28 203.326 145.28 204.451C145.28 206.116 143.495 207.856 140.255 210.841V211.576ZM149.354 211.576H150.599V207.391H152.354L154.724 211.576H156.149L153.644 207.256C154.979 206.911 155.849 205.996 155.849 204.451C155.849 202.396 154.409 201.676 152.414 201.676H149.354V211.576ZM150.599 206.371V202.681H152.234C153.764 202.681 154.604 203.146 154.604 204.451C154.604 205.741 153.764 206.371 152.234 206.371H150.599ZM157.944 211.576H159.174V206.236C160.029 205.276 160.614 204.811 161.484 204.811C162.684 204.811 163.164 205.516 163.164 206.986V211.576H164.394V206.821C164.394 204.811 163.599 203.746 161.874 203.746C160.734 203.746 159.894 204.391 159.114 205.261L159.174 203.431V200.671H157.944V211.576ZM169.308 211.771C170.208 211.771 171.078 211.201 171.678 210.556H171.723L171.828 211.576H172.848V200.671H171.618V203.311L171.663 204.751C170.988 204.121 170.343 203.746 169.458 203.746C167.733 203.746 166.143 205.291 166.143 207.766C166.143 210.316 167.403 211.771 169.308 211.771ZM169.563 210.736C168.213 210.736 167.418 209.596 167.418 207.751C167.418 205.996 168.438 204.781 169.698 204.781C170.328 204.781 170.958 205.036 171.618 205.696V209.551C170.973 210.331 170.283 210.736 169.563 210.736ZM144.215 231.756C145.49 231.756 146.525 231.246 147.155 230.616V226.446H144.035V227.481H146V230.076C145.625 230.436 144.98 230.661 144.29 230.661C142.355 230.661 141.26 229.086 141.26 226.596C141.26 224.136 142.475 222.591 144.32 222.591C145.265 222.591 145.85 222.981 146.33 223.491L147.035 222.696C146.48 222.111 145.625 221.496 144.32 221.496C141.77 221.496 139.955 223.431 139.955 226.626C139.955 229.851 141.74 231.756 144.215 231.756ZM149.879 231.576H151.124V227.136H155.159V226.086H151.124V222.726H155.894V221.676H149.879V231.576ZM161.349 222.216C161.934 222.216 162.399 221.796 162.399 221.181C162.399 220.551 161.934 220.116 161.349 220.116C160.764 220.116 160.299 220.551 160.299 221.181C160.299 221.796 160.764 222.216 161.349 222.216ZM158.049 231.576H164.949V230.556H162.114V223.926H158.049V224.931H160.884V230.556H158.049V231.576Z" fill="#07B07E"/>
<path d="M206.522 211.576H207.782V208.036L211.082 201.676H209.792L208.367 204.601C207.992 205.366 207.602 206.131 207.212 206.926H207.152C206.747 206.131 206.402 205.381 206.027 204.631L204.542 201.676H203.222L206.522 208.036V211.576ZM212.156 211.576H213.476L214.946 208.891C215.201 208.411 215.456 207.916 215.741 207.316H215.801C216.131 207.916 216.401 208.426 216.671 208.906L218.156 211.576H219.536L216.596 206.521L219.341 201.676H218.021L216.671 204.211C216.431 204.661 216.236 205.081 215.966 205.651H215.906C215.591 205.081 215.366 204.661 215.111 204.211L213.731 201.676H212.351L215.096 206.461L212.156 211.576ZM221.285 211.576H222.47V206.386C222.47 205.366 222.35 204.301 222.305 203.296H222.335L223.325 205.321L226.52 211.576H227.795V201.676H226.61V206.821C226.61 207.856 226.73 208.981 226.775 209.956H226.745L225.755 207.931L222.56 201.676H221.285V211.576ZM234.824 211.771C235.619 211.771 236.129 211.561 236.789 211.306L236.474 210.376C235.934 210.631 235.514 210.751 235.094 210.751C234.224 210.751 233.669 210.256 233.669 209.131V200.671H229.949V201.676H232.439V209.041C232.439 210.841 233.279 211.771 234.824 211.771ZM238.853 211.576H245.003V210.511H242.558V202.726H245.003V201.676H238.853V202.726H241.298V210.511H238.853V211.576ZM216.566 222.216C217.151 222.216 217.616 221.796 217.616 221.181C217.616 220.551 217.151 220.116 216.566 220.116C215.981 220.116 215.516 220.551 215.516 221.181C215.516 221.796 215.981 222.216 216.566 222.216ZM214.256 234.831C216.611 234.831 217.316 233.511 217.316 231.621V223.926H212.696V224.931H216.086V231.726C216.086 233.196 215.696 233.826 214.241 233.826C213.686 233.826 213.101 233.661 212.576 233.406L212.171 234.321C212.756 234.621 213.491 234.831 214.256 234.831ZM224.54 231.771C226.46 231.771 228.14 230.301 228.14 227.766C228.14 225.201 226.46 223.746 224.54 223.746C222.62 223.746 220.94 225.201 220.94 227.766C220.94 230.301 222.62 231.771 224.54 231.771ZM224.54 230.751C223.145 230.751 222.215 229.551 222.215 227.766C222.215 225.981 223.145 224.766 224.54 224.766C225.935 224.766 226.865 225.981 226.865 227.766C226.865 229.551 225.935 230.751 224.54 230.751ZM233.534 222.216C234.119 222.216 234.584 221.796 234.584 221.181C234.584 220.551 234.119 220.116 233.534 220.116C232.949 220.116 232.484 220.551 232.484 221.181C232.484 221.796 232.949 222.216 233.534 222.216ZM230.234 231.576H237.134V230.556H234.299V223.926H230.234V224.931H233.069V230.556H230.234V231.576Z" fill="#07B07E"/>
<path d="M277.078 211.771C278.158 211.771 279.178 211.321 279.973 210.571L279.433 209.776C278.818 210.316 278.068 210.751 277.168 210.751C275.488 210.751 274.363 209.551 274.363 207.766C274.363 205.981 275.518 204.766 277.198 204.766C277.963 204.766 278.593 205.096 279.193 205.666L279.808 204.871C279.208 204.256 278.338 203.746 277.153 203.746C274.948 203.746 273.088 205.201 273.088 207.766C273.088 210.301 274.798 211.771 277.078 211.771ZM284.887 211.756C286.792 211.756 288.352 210.691 288.352 208.936C288.352 207.571 287.257 206.701 285.982 206.431V206.356C287.167 205.966 288.022 205.201 288.022 204.001C288.022 202.411 286.657 201.496 284.857 201.496C283.627 201.496 282.592 202.021 281.797 202.741L282.457 203.521C283.087 202.921 283.912 202.501 284.812 202.501C285.982 202.501 286.762 203.116 286.762 204.091C286.762 205.141 285.892 205.951 283.627 205.951V206.911C286.147 206.911 287.107 207.706 287.107 208.906C287.107 210.016 286.117 210.736 284.812 210.736C283.582 210.736 282.697 210.181 282.067 209.551L281.437 210.361C282.142 211.096 283.237 211.756 284.887 211.756ZM293.056 211.576H294.511L297.631 201.676H296.356L294.781 207.031C294.436 208.201 294.196 209.131 293.836 210.301H293.776C293.416 209.131 293.176 208.201 292.831 207.031L291.241 201.676H289.921L293.056 211.576ZM299.726 211.576H301.196L302.036 207.631C302.216 206.761 302.321 206.071 302.441 205.411H302.501C302.651 206.176 302.771 206.896 302.906 207.616L303.776 211.576H305.261L306.851 203.926H305.681L304.811 208.411C304.676 209.131 304.571 209.821 304.436 210.526H304.376C304.226 209.821 304.091 209.131 303.926 208.411L303.026 204.346H301.976L301.091 208.411C300.926 209.116 300.791 209.821 300.656 210.526H300.596C300.491 209.821 300.371 209.131 300.236 208.411L299.351 203.926H298.091L299.726 211.576ZM310.535 211.576H311.795V208.036L315.095 201.676H313.805L312.38 204.601C312.005 205.366 311.615 206.131 311.225 206.926H311.165C310.76 206.131 310.415 205.381 310.04 204.631L308.555 201.676H307.235L310.535 208.036V211.576ZM282.247 231.576H283.597L284.677 227.421C284.827 226.836 284.947 226.221 285.067 225.636H285.112C285.217 226.221 285.337 226.836 285.472 227.421L286.597 231.576H287.977L289.432 221.661H288.247L287.497 227.886C287.437 228.696 287.347 229.521 287.287 230.331H287.227C287.017 229.521 286.792 228.681 286.612 227.886L285.577 224.226H284.692L283.657 227.886C283.462 228.696 283.237 229.521 283.027 230.331H282.982C282.922 229.521 282.817 228.711 282.772 227.886L281.977 221.661H280.732L282.247 231.576ZM293.416 231.756C295.861 231.756 296.671 230.256 296.671 228.411V221.661H291.301V222.711H295.426V228.306C295.426 229.941 294.796 230.661 293.386 230.661C292.621 230.661 291.871 230.241 291.301 229.356L290.491 230.106C291.166 231.261 292.306 231.756 293.416 231.756ZM299.366 231.576H300.596V226.236C301.451 225.276 302.036 224.811 302.906 224.811C304.106 224.811 304.586 225.516 304.586 226.986V231.576H305.816V226.821C305.816 224.811 305.021 223.746 303.296 223.746C302.156 223.746 301.316 224.391 300.536 225.261L300.596 223.431V220.671H299.366V231.576Z" fill="#07B07E"/>
<path d="M347.336 211.771C348.416 211.771 349.436 211.321 350.231 210.571L349.691 209.776C349.076 210.316 348.326 210.751 347.426 210.751C345.746 210.751 344.621 209.551 344.621 207.766C344.621 205.981 345.776 204.766 347.456 204.766C348.221 204.766 348.851 205.096 349.451 205.666L350.066 204.871C349.466 204.256 348.596 203.746 347.411 203.746C345.206 203.746 343.346 205.201 343.346 207.766C343.346 210.301 345.056 211.771 347.336 211.771ZM351.935 211.576H358.67V210.511H355.52C354.95 210.511 354.32 210.556 353.735 210.601C356.345 208.111 358.145 206.266 358.145 204.406C358.145 202.651 356.945 201.496 355.025 201.496C353.675 201.496 352.73 202.096 351.875 202.996L352.58 203.701C353.195 203.026 353.975 202.501 354.875 202.501C356.285 202.501 356.96 203.326 356.96 204.451C356.96 206.116 355.175 207.856 351.935 210.841V211.576ZM364.049 211.756C365.969 211.756 367.349 210.676 367.349 207.841V201.676H366.134V207.856C366.134 209.926 365.234 210.661 364.049 210.661C362.864 210.661 361.979 209.926 361.979 207.856V201.676H360.719V207.841C360.719 210.676 362.114 211.756 364.049 211.756ZM373.028 202.216C373.613 202.216 374.078 201.796 374.078 201.181C374.078 200.551 373.613 200.116 373.028 200.116C372.443 200.116 371.978 200.551 371.978 201.181C371.978 201.796 372.443 202.216 373.028 202.216ZM369.728 211.576H376.628V210.556H373.793V203.926H369.728V204.931H372.563V210.556H369.728V211.576ZM380.552 211.576H381.767V204.931H384.827V203.926H381.767V203.536C381.767 202.276 382.307 201.496 383.612 201.496C384.242 201.496 384.707 201.571 385.307 201.871L385.592 200.941C384.902 200.626 384.212 200.491 383.492 200.491C381.482 200.491 380.552 201.706 380.552 203.581V203.926L378.467 204.016V204.931H380.552V211.576ZM358.025 234.036C358.46 234.036 358.82 233.946 359.135 233.826L358.91 232.821C358.73 232.896 358.475 232.971 358.175 232.971C357.155 232.971 356.375 232.536 356.045 231.681C357.86 231.306 359.06 229.401 359.06 226.581C359.06 223.431 357.545 221.481 355.325 221.481C353.09 221.481 351.575 223.416 351.575 226.581C351.575 229.446 352.82 231.366 354.71 231.696C355.205 233.046 356.285 234.036 358.025 234.036ZM355.325 230.676C353.81 230.676 352.85 229.041 352.85 226.581C352.85 224.121 353.81 222.561 355.325 222.561C356.825 222.561 357.785 224.121 357.785 226.581C357.785 229.041 356.825 230.676 355.325 230.676ZM360.809 225.486H367.259V224.556H360.809V225.486ZM360.809 228.696H367.259V227.766H360.809V228.696ZM369.503 225.486H375.953V224.556H369.503V225.486ZM369.503 228.696H375.953V227.766H369.503V228.696Z" fill="#07B07E"/>
<rect x="55.457" y="163.041" width="54.8775" height="118.142" fill="url(#paint0_linear_1183_53735)" stroke="url(#paint1_linear_1183_53735)"/>
<rect x="125.762" y="163.041" width="54.8775" height="118.142" fill="url(#paint2_linear_1183_53735)" stroke="url(#paint3_linear_1183_53735)"/>
<rect x="196.07" y="163.041" width="54.8775" height="118.142" fill="url(#paint4_linear_1183_53735)" stroke="url(#paint5_linear_1183_53735)"/>
<rect x="266.367" y="163.041" width="54.8775" height="118.142" fill="url(#paint6_linear_1183_53735)" stroke="url(#paint7_linear_1183_53735)"/>
<rect x="336.668" y="163.041" width="54.8775" height="118.142" fill="url(#paint8_linear_1183_53735)" stroke="url(#paint9_linear_1183_53735)"/>
<rect x="-0.0273438" y="-1.09766" width="448.055" height="402.196" fill="url(#paint10_radial_1183_53735)"/>
<defs>
<linearGradient id="paint0_linear_1183_53735" x1="110.335" y1="163.041" x2="110.335" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1183_53735" x1="82.8958" y1="163.041" x2="82.8958" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_1183_53735" x1="180.639" y1="163.041" x2="180.639" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_1183_53735" x1="153.2" y1="163.041" x2="153.2" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_1183_53735" x1="250.948" y1="163.041" x2="250.948" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_1183_53735" x1="223.509" y1="163.041" x2="223.509" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_1183_53735" x1="321.245" y1="163.041" x2="321.245" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_1183_53735" x1="293.806" y1="163.041" x2="293.806" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_1183_53735" x1="391.545" y1="163.041" x2="391.545" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_1183_53735" x1="364.107" y1="163.041" x2="364.107" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint10_radial_1183_53735" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(231.116 218.979) rotate(90) scale(293.083 389.712)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

@@ -1,70 +0,0 @@
<svg width="448" height="400" viewBox="0 0 448 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="-8.85156" y="-17.0273" width="476.973" height="430.908" fill="white"/>
<path d="M65.7756 211.771C66.9456 211.771 67.8606 211.351 68.5806 210.871L68.1456 210.046C67.4706 210.496 66.7806 210.766 65.9256 210.766C64.3356 210.766 63.1956 209.701 63.1356 208.051H68.8356C68.8656 207.856 68.8806 207.586 68.8806 207.331C68.8806 205.171 67.6506 203.746 65.5656 203.746C63.6756 203.746 61.8606 205.276 61.8606 207.766C61.8606 210.271 63.6156 211.771 65.7756 211.771ZM63.1206 207.151C63.3156 205.621 64.3956 204.721 65.5806 204.721C66.9306 204.721 67.7406 205.591 67.7406 207.151H63.1206ZM71.4847 214.831C73.1347 214.831 74.0197 213.676 74.5897 212.206L77.7847 203.926H76.6147L75.0247 208.231C74.7697 208.921 74.4997 209.716 74.2447 210.436H74.1847C73.8847 209.701 73.5697 208.906 73.2847 208.231L71.4997 203.926H70.2547L73.6597 211.606L73.4497 212.146C73.0597 213.151 72.4597 213.811 71.4397 213.811C71.2147 213.811 70.9747 213.766 70.7797 213.706L70.5247 214.681C70.7797 214.771 71.1397 214.831 71.4847 214.831ZM82.3539 211.756C84.7989 211.756 85.6089 210.256 85.6089 208.411V201.661H80.2389V202.711H84.3639V208.306C84.3639 209.941 83.7339 210.661 82.3239 210.661C81.5589 210.661 80.8089 210.241 80.2389 209.356L79.4289 210.106C80.1039 211.261 81.2439 211.756 82.3539 211.756ZM91.708 202.216C92.293 202.216 92.758 201.796 92.758 201.181C92.758 200.551 92.293 200.116 91.708 200.116C91.123 200.116 90.658 200.551 90.658 201.181C90.658 201.796 91.123 202.216 91.708 202.216ZM88.408 211.576H95.308V210.556H92.473V203.926H88.408V204.931H91.243V210.556H88.408V211.576ZM96.5772 211.576H103.687V210.511H98.0922L103.612 202.411V201.661H97.0572V202.711H102.082L96.5772 210.826V211.576ZM70.3297 231.576H71.6497L73.1197 228.891C73.3747 228.411 73.6297 227.916 73.9147 227.316H73.9747C74.3047 227.916 74.5747 228.426 74.8447 228.906L76.3297 231.576H77.7097L74.7697 226.521L77.5147 221.676H76.1947L74.8447 224.211C74.6047 224.661 74.4097 225.081 74.1397 225.651H74.0797C73.7647 225.081 73.5397 224.661 73.2847 224.211L71.9047 221.676H70.5247L73.2697 226.461L70.3297 231.576ZM79.4589 231.576H80.6439V226.386C80.6439 225.366 80.5239 224.301 80.4789 223.296H80.5089L81.4989 225.321L84.6939 231.576H85.9689V221.676H84.7839V226.821C84.7839 227.856 84.9039 228.981 84.9489 229.956H84.9189L83.9289 227.931L80.7339 221.676H79.4589V231.576ZM91.408 231.756C93.538 231.756 94.843 229.881 94.843 226.596C94.843 223.281 93.538 221.496 91.408 221.496C89.278 221.496 87.973 223.281 87.973 226.596C87.973 229.881 89.278 231.756 91.408 231.756ZM91.408 230.766C90.073 230.766 89.128 229.446 89.128 226.596C89.128 223.731 90.073 222.486 91.408 222.486C92.743 222.486 93.688 223.731 93.688 226.596C93.688 229.446 92.743 230.766 91.408 230.766ZM91.408 227.511C91.903 227.511 92.338 227.136 92.338 226.491C92.338 225.846 91.903 225.471 91.408 225.471C90.913 225.471 90.478 225.846 90.478 226.491C90.478 227.136 90.913 227.511 91.408 227.511Z" fill="#07B07E"/>
<path d="M131.276 211.576H132.596L134.066 208.891C134.321 208.411 134.576 207.916 134.861 207.316H134.921C135.251 207.916 135.521 208.426 135.791 208.906L137.276 211.576H138.656L135.716 206.521L138.461 201.676H137.141L135.791 204.211C135.551 204.661 135.356 205.081 135.086 205.651H135.026C134.711 205.081 134.486 204.661 134.231 204.211L132.851 201.676H131.471L134.216 206.461L131.276 211.576ZM140.255 211.576H146.99V210.511H143.84C143.27 210.511 142.64 210.556 142.055 210.601C144.665 208.111 146.465 206.266 146.465 204.406C146.465 202.651 145.265 201.496 143.345 201.496C141.995 201.496 141.05 202.096 140.195 202.996L140.9 203.701C141.515 203.026 142.295 202.501 143.195 202.501C144.605 202.501 145.28 203.326 145.28 204.451C145.28 206.116 143.495 207.856 140.255 210.841V211.576ZM149.354 211.576H150.599V207.391H152.354L154.724 211.576H156.149L153.644 207.256C154.979 206.911 155.849 205.996 155.849 204.451C155.849 202.396 154.409 201.676 152.414 201.676H149.354V211.576ZM150.599 206.371V202.681H152.234C153.764 202.681 154.604 203.146 154.604 204.451C154.604 205.741 153.764 206.371 152.234 206.371H150.599ZM157.944 211.576H159.174V206.236C160.029 205.276 160.614 204.811 161.484 204.811C162.684 204.811 163.164 205.516 163.164 206.986V211.576H164.394V206.821C164.394 204.811 163.599 203.746 161.874 203.746C160.734 203.746 159.894 204.391 159.114 205.261L159.174 203.431V200.671H157.944V211.576ZM169.308 211.771C170.208 211.771 171.078 211.201 171.678 210.556H171.723L171.828 211.576H172.848V200.671H171.618V203.311L171.663 204.751C170.988 204.121 170.343 203.746 169.458 203.746C167.733 203.746 166.143 205.291 166.143 207.766C166.143 210.316 167.403 211.771 169.308 211.771ZM169.563 210.736C168.213 210.736 167.418 209.596 167.418 207.751C167.418 205.996 168.438 204.781 169.698 204.781C170.328 204.781 170.958 205.036 171.618 205.696V209.551C170.973 210.331 170.283 210.736 169.563 210.736ZM144.215 231.756C145.49 231.756 146.525 231.246 147.155 230.616V226.446H144.035V227.481H146V230.076C145.625 230.436 144.98 230.661 144.29 230.661C142.355 230.661 141.26 229.086 141.26 226.596C141.26 224.136 142.475 222.591 144.32 222.591C145.265 222.591 145.85 222.981 146.33 223.491L147.035 222.696C146.48 222.111 145.625 221.496 144.32 221.496C141.77 221.496 139.955 223.431 139.955 226.626C139.955 229.851 141.74 231.756 144.215 231.756ZM149.879 231.576H151.124V227.136H155.159V226.086H151.124V222.726H155.894V221.676H149.879V231.576ZM161.349 222.216C161.934 222.216 162.399 221.796 162.399 221.181C162.399 220.551 161.934 220.116 161.349 220.116C160.764 220.116 160.299 220.551 160.299 221.181C160.299 221.796 160.764 222.216 161.349 222.216ZM158.049 231.576H164.949V230.556H162.114V223.926H158.049V224.931H160.884V230.556H158.049V231.576Z" fill="#07B07E"/>
<path d="M206.522 211.576H207.782V208.036L211.082 201.676H209.792L208.367 204.601C207.992 205.366 207.602 206.131 207.212 206.926H207.152C206.747 206.131 206.402 205.381 206.027 204.631L204.542 201.676H203.222L206.522 208.036V211.576ZM212.156 211.576H213.476L214.946 208.891C215.201 208.411 215.456 207.916 215.741 207.316H215.801C216.131 207.916 216.401 208.426 216.671 208.906L218.156 211.576H219.536L216.596 206.521L219.341 201.676H218.021L216.671 204.211C216.431 204.661 216.236 205.081 215.966 205.651H215.906C215.591 205.081 215.366 204.661 215.111 204.211L213.731 201.676H212.351L215.096 206.461L212.156 211.576ZM221.285 211.576H222.47V206.386C222.47 205.366 222.35 204.301 222.305 203.296H222.335L223.325 205.321L226.52 211.576H227.795V201.676H226.61V206.821C226.61 207.856 226.73 208.981 226.775 209.956H226.745L225.755 207.931L222.56 201.676H221.285V211.576ZM234.824 211.771C235.619 211.771 236.129 211.561 236.789 211.306L236.474 210.376C235.934 210.631 235.514 210.751 235.094 210.751C234.224 210.751 233.669 210.256 233.669 209.131V200.671H229.949V201.676H232.439V209.041C232.439 210.841 233.279 211.771 234.824 211.771ZM238.853 211.576H245.003V210.511H242.558V202.726H245.003V201.676H238.853V202.726H241.298V210.511H238.853V211.576ZM216.566 222.216C217.151 222.216 217.616 221.796 217.616 221.181C217.616 220.551 217.151 220.116 216.566 220.116C215.981 220.116 215.516 220.551 215.516 221.181C215.516 221.796 215.981 222.216 216.566 222.216ZM214.256 234.831C216.611 234.831 217.316 233.511 217.316 231.621V223.926H212.696V224.931H216.086V231.726C216.086 233.196 215.696 233.826 214.241 233.826C213.686 233.826 213.101 233.661 212.576 233.406L212.171 234.321C212.756 234.621 213.491 234.831 214.256 234.831ZM224.54 231.771C226.46 231.771 228.14 230.301 228.14 227.766C228.14 225.201 226.46 223.746 224.54 223.746C222.62 223.746 220.94 225.201 220.94 227.766C220.94 230.301 222.62 231.771 224.54 231.771ZM224.54 230.751C223.145 230.751 222.215 229.551 222.215 227.766C222.215 225.981 223.145 224.766 224.54 224.766C225.935 224.766 226.865 225.981 226.865 227.766C226.865 229.551 225.935 230.751 224.54 230.751ZM233.534 222.216C234.119 222.216 234.584 221.796 234.584 221.181C234.584 220.551 234.119 220.116 233.534 220.116C232.949 220.116 232.484 220.551 232.484 221.181C232.484 221.796 232.949 222.216 233.534 222.216ZM230.234 231.576H237.134V230.556H234.299V223.926H230.234V224.931H233.069V230.556H230.234V231.576Z" fill="#07B07E"/>
<path d="M277.078 211.771C278.158 211.771 279.178 211.321 279.973 210.571L279.433 209.776C278.818 210.316 278.068 210.751 277.168 210.751C275.488 210.751 274.363 209.551 274.363 207.766C274.363 205.981 275.518 204.766 277.198 204.766C277.963 204.766 278.593 205.096 279.193 205.666L279.808 204.871C279.208 204.256 278.338 203.746 277.153 203.746C274.948 203.746 273.088 205.201 273.088 207.766C273.088 210.301 274.798 211.771 277.078 211.771ZM284.887 211.756C286.792 211.756 288.352 210.691 288.352 208.936C288.352 207.571 287.257 206.701 285.982 206.431V206.356C287.167 205.966 288.022 205.201 288.022 204.001C288.022 202.411 286.657 201.496 284.857 201.496C283.627 201.496 282.592 202.021 281.797 202.741L282.457 203.521C283.087 202.921 283.912 202.501 284.812 202.501C285.982 202.501 286.762 203.116 286.762 204.091C286.762 205.141 285.892 205.951 283.627 205.951V206.911C286.147 206.911 287.107 207.706 287.107 208.906C287.107 210.016 286.117 210.736 284.812 210.736C283.582 210.736 282.697 210.181 282.067 209.551L281.437 210.361C282.142 211.096 283.237 211.756 284.887 211.756ZM293.056 211.576H294.511L297.631 201.676H296.356L294.781 207.031C294.436 208.201 294.196 209.131 293.836 210.301H293.776C293.416 209.131 293.176 208.201 292.831 207.031L291.241 201.676H289.921L293.056 211.576ZM299.726 211.576H301.196L302.036 207.631C302.216 206.761 302.321 206.071 302.441 205.411H302.501C302.651 206.176 302.771 206.896 302.906 207.616L303.776 211.576H305.261L306.851 203.926H305.681L304.811 208.411C304.676 209.131 304.571 209.821 304.436 210.526H304.376C304.226 209.821 304.091 209.131 303.926 208.411L303.026 204.346H301.976L301.091 208.411C300.926 209.116 300.791 209.821 300.656 210.526H300.596C300.491 209.821 300.371 209.131 300.236 208.411L299.351 203.926H298.091L299.726 211.576ZM310.535 211.576H311.795V208.036L315.095 201.676H313.805L312.38 204.601C312.005 205.366 311.615 206.131 311.225 206.926H311.165C310.76 206.131 310.415 205.381 310.04 204.631L308.555 201.676H307.235L310.535 208.036V211.576ZM282.247 231.576H283.597L284.677 227.421C284.827 226.836 284.947 226.221 285.067 225.636H285.112C285.217 226.221 285.337 226.836 285.472 227.421L286.597 231.576H287.977L289.432 221.661H288.247L287.497 227.886C287.437 228.696 287.347 229.521 287.287 230.331H287.227C287.017 229.521 286.792 228.681 286.612 227.886L285.577 224.226H284.692L283.657 227.886C283.462 228.696 283.237 229.521 283.027 230.331H282.982C282.922 229.521 282.817 228.711 282.772 227.886L281.977 221.661H280.732L282.247 231.576ZM293.416 231.756C295.861 231.756 296.671 230.256 296.671 228.411V221.661H291.301V222.711H295.426V228.306C295.426 229.941 294.796 230.661 293.386 230.661C292.621 230.661 291.871 230.241 291.301 229.356L290.491 230.106C291.166 231.261 292.306 231.756 293.416 231.756ZM299.366 231.576H300.596V226.236C301.451 225.276 302.036 224.811 302.906 224.811C304.106 224.811 304.586 225.516 304.586 226.986V231.576H305.816V226.821C305.816 224.811 305.021 223.746 303.296 223.746C302.156 223.746 301.316 224.391 300.536 225.261L300.596 223.431V220.671H299.366V231.576Z" fill="#07B07E"/>
<path d="M347.336 211.771C348.416 211.771 349.436 211.321 350.231 210.571L349.691 209.776C349.076 210.316 348.326 210.751 347.426 210.751C345.746 210.751 344.621 209.551 344.621 207.766C344.621 205.981 345.776 204.766 347.456 204.766C348.221 204.766 348.851 205.096 349.451 205.666L350.066 204.871C349.466 204.256 348.596 203.746 347.411 203.746C345.206 203.746 343.346 205.201 343.346 207.766C343.346 210.301 345.056 211.771 347.336 211.771ZM351.935 211.576H358.67V210.511H355.52C354.95 210.511 354.32 210.556 353.735 210.601C356.345 208.111 358.145 206.266 358.145 204.406C358.145 202.651 356.945 201.496 355.025 201.496C353.675 201.496 352.73 202.096 351.875 202.996L352.58 203.701C353.195 203.026 353.975 202.501 354.875 202.501C356.285 202.501 356.96 203.326 356.96 204.451C356.96 206.116 355.175 207.856 351.935 210.841V211.576ZM364.049 211.756C365.969 211.756 367.349 210.676 367.349 207.841V201.676H366.134V207.856C366.134 209.926 365.234 210.661 364.049 210.661C362.864 210.661 361.979 209.926 361.979 207.856V201.676H360.719V207.841C360.719 210.676 362.114 211.756 364.049 211.756ZM373.028 202.216C373.613 202.216 374.078 201.796 374.078 201.181C374.078 200.551 373.613 200.116 373.028 200.116C372.443 200.116 371.978 200.551 371.978 201.181C371.978 201.796 372.443 202.216 373.028 202.216ZM369.728 211.576H376.628V210.556H373.793V203.926H369.728V204.931H372.563V210.556H369.728V211.576ZM380.552 211.576H381.767V204.931H384.827V203.926H381.767V203.536C381.767 202.276 382.307 201.496 383.612 201.496C384.242 201.496 384.707 201.571 385.307 201.871L385.592 200.941C384.902 200.626 384.212 200.491 383.492 200.491C381.482 200.491 380.552 201.706 380.552 203.581V203.926L378.467 204.016V204.931H380.552V211.576ZM358.025 234.036C358.46 234.036 358.82 233.946 359.135 233.826L358.91 232.821C358.73 232.896 358.475 232.971 358.175 232.971C357.155 232.971 356.375 232.536 356.045 231.681C357.86 231.306 359.06 229.401 359.06 226.581C359.06 223.431 357.545 221.481 355.325 221.481C353.09 221.481 351.575 223.416 351.575 226.581C351.575 229.446 352.82 231.366 354.71 231.696C355.205 233.046 356.285 234.036 358.025 234.036ZM355.325 230.676C353.81 230.676 352.85 229.041 352.85 226.581C352.85 224.121 353.81 222.561 355.325 222.561C356.825 222.561 357.785 224.121 357.785 226.581C357.785 229.041 356.825 230.676 355.325 230.676ZM360.809 225.486H367.259V224.556H360.809V225.486ZM360.809 228.696H367.259V227.766H360.809V228.696ZM369.503 225.486H375.953V224.556H369.503V225.486ZM369.503 228.696H375.953V227.766H369.503V228.696Z" fill="#07B07E"/>
<rect x="55.457" y="163.041" width="54.8775" height="118.142" fill="url(#paint0_linear_1183_52987)" stroke="url(#paint1_linear_1183_52987)"/>
<rect x="125.762" y="163.041" width="54.8775" height="118.142" fill="url(#paint2_linear_1183_52987)" stroke="url(#paint3_linear_1183_52987)"/>
<rect x="196.07" y="163.041" width="54.8775" height="118.142" fill="url(#paint4_linear_1183_52987)" stroke="url(#paint5_linear_1183_52987)"/>
<rect x="266.367" y="163.041" width="54.8775" height="118.142" fill="url(#paint6_linear_1183_52987)" stroke="url(#paint7_linear_1183_52987)"/>
<rect x="336.668" y="163.041" width="54.8775" height="118.142" fill="url(#paint8_linear_1183_52987)" stroke="url(#paint9_linear_1183_52987)"/>
<rect x="-0.0273438" y="-1.09766" width="448.055" height="402.196" fill="url(#paint10_radial_1183_52987)"/>
<defs>
<linearGradient id="paint0_linear_1183_52987" x1="110.335" y1="163.041" x2="117.667" y2="272.642" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1183_52987" x1="82.8958" y1="163.041" x2="82.8958" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_1183_52987" x1="180.639" y1="163.041" x2="187.972" y2="272.642" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_1183_52987" x1="153.2" y1="163.041" x2="153.2" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_1183_52987" x1="250.948" y1="163.041" x2="250.948" y2="273.133" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_1183_52987" x1="223.509" y1="163.041" x2="223.509" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_1183_52987" x1="321.245" y1="163.041" x2="328.577" y2="272.642" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_1183_52987" x1="293.806" y1="163.041" x2="293.806" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_1183_52987" x1="391.545" y1="163.041" x2="398.878" y2="272.642" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.473958" stop-color="#60C2BD" stop-opacity="0.58"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_1183_52987" x1="364.107" y1="163.041" x2="364.107" y2="281.184" gradientUnits="userSpaceOnUse">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="0.489583" stop-color="#6DC6AB"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint10_radial_1183_52987" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(231.116 218.979) rotate(90) scale(182.119 182.119)">
<stop stopColor="white" stop-opacity="0"/>
<stop offset="1" stop-color="white"/>
</radialGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 991 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Loaded 100 of 193 files, more files were not shown because too many files have changed in this diff. Show more