feat: ai builders landing page (#34616)
* chore: init ai builders paage * add content * ai builders wip * feat: ai builders features section * feat: videos section * feat: fix types * chore: add video urls * updated Quotes * ai builders form * submit * fix type error * add solutions to nav dropdown * fix pagename * add ai builders logos * docs link * update ai builders page * update quotes * reduce padding * update author role * update quote * React * add env in turbo.json * fix og image * connect your app --------- Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com> Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com>
@@ -2,8 +2,8 @@
|
||||
title: 'Data API Routes to Nearest Read Replica'
|
||||
description: Route your Data API (PostgREST) requests to the nearest Read Replica
|
||||
author: jose
|
||||
image: lw14-data-api-nearest-rr/geo-aware-routing-og.png
|
||||
thumb: lw14-data-api-nearest-rr/geo-aware-routing-thumb.png
|
||||
image: lw14-data-api-nearest-rr/og.png
|
||||
thumb: lw14-data-api-nearest-rr/thumb.png
|
||||
categories:
|
||||
- launch-week
|
||||
- product
|
||||
|
||||
110
apps/www/app/api-v2/submit-form-talk-to-partnership/route.tsx
Normal file
@@ -0,0 +1,110 @@
|
||||
const corsHeaders = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
|
||||
}
|
||||
|
||||
const personalEmailDomains = [
|
||||
'@gmail.com',
|
||||
'@yahoo.com',
|
||||
'@hotmail.',
|
||||
'@outlook.com',
|
||||
'@aol.com',
|
||||
'@icloud.com',
|
||||
'@live.com',
|
||||
'@protonmail.com',
|
||||
'@mail.com',
|
||||
'@example.com',
|
||||
]
|
||||
|
||||
const isValidEmail = (email: string): boolean => {
|
||||
const emailPattern = /^[\w-\.+]+@([\w-]+\.)+[\w-]{2,8}$/
|
||||
return emailPattern.test(email)
|
||||
}
|
||||
|
||||
const isCompanyEmail = (email: string): boolean => {
|
||||
for (const domain of personalEmailDomains) {
|
||||
if (email.includes(domain)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const HUBSPOT_PORTAL_ID = process.env.HUBSPOT_PORTAL_ID
|
||||
const HUBSPOT_FORM_GUID = process.env.HUBSPOT_PARTNERSHIP_FORM_GUID
|
||||
|
||||
const body = await req.json()
|
||||
const { firstName, secondName, companyEmail } = body
|
||||
|
||||
if (!firstName || !secondName || !companyEmail) {
|
||||
return new Response(JSON.stringify({ message: 'All fields are required' }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: 422,
|
||||
})
|
||||
}
|
||||
|
||||
// Validate email
|
||||
if (companyEmail && !isValidEmail(companyEmail)) {
|
||||
return new Response(JSON.stringify({ message: 'Invalid email address' }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: 422,
|
||||
})
|
||||
}
|
||||
|
||||
// Validate company email
|
||||
if (companyEmail && !isCompanyEmail(companyEmail)) {
|
||||
return new Response(JSON.stringify({ message: 'Please use a company email address' }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: 422,
|
||||
})
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://api.hsforms.com/submissions/v3/integration/submit/${HUBSPOT_PORTAL_ID}/${HUBSPOT_FORM_GUID}`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
fields: [
|
||||
{ objectTypeId: '0-1', name: 'firstname', value: firstName },
|
||||
{ objectTypeId: '0-1', name: 'lastname', value: secondName },
|
||||
{ objectTypeId: '0-1', name: 'email', value: companyEmail },
|
||||
],
|
||||
context: {
|
||||
pageUri: 'https://supabase.com/solutions/ai-builders',
|
||||
pageName: 'Solutions / AI Builders',
|
||||
},
|
||||
legalConsentOptions: {
|
||||
consent: {
|
||||
consentToProcess: true,
|
||||
text: 'By submitting this form, I confirm that I have read and understood the Privacy Policy.',
|
||||
},
|
||||
},
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json()
|
||||
return new Response(JSON.stringify({ message: errorData.message }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: response.status,
|
||||
})
|
||||
}
|
||||
|
||||
return new Response(JSON.stringify({ message: 'Submission successful' }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: 200,
|
||||
})
|
||||
} catch (error: any) {
|
||||
return new Response(JSON.stringify({ error: error.message }), {
|
||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||
status: 500,
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -7,13 +7,13 @@ import type { LucideIcon } from 'lucide-react'
|
||||
|
||||
interface Props {
|
||||
id: string
|
||||
label: string | JSX.Element
|
||||
label?: string | JSX.Element
|
||||
heading: string | JSX.Element
|
||||
features: Feature[]
|
||||
}
|
||||
|
||||
type Feature = {
|
||||
icon: LucideIcon
|
||||
icon: LucideIcon | any
|
||||
heading: string
|
||||
subheading: string
|
||||
}
|
||||
|
||||
@@ -13,22 +13,22 @@ import Image from 'next/image'
|
||||
|
||||
interface Props {
|
||||
id: string
|
||||
label: string | JSX.Element
|
||||
heading: string | JSX.Element
|
||||
stories: Story[]
|
||||
highlights: Highlight[]
|
||||
label?: string | JSX.Element
|
||||
heading?: string | JSX.Element
|
||||
stories?: Story[]
|
||||
highlights?: Highlight[]
|
||||
}
|
||||
|
||||
export type Story = {
|
||||
icon: string
|
||||
icon?: string
|
||||
url: string
|
||||
target?: '_blank' | string
|
||||
heading: string
|
||||
subheading: string | JSX.Element
|
||||
heading?: string
|
||||
subheading?: string | JSX.Element
|
||||
}
|
||||
|
||||
type Highlight = {
|
||||
icon: LucideIcon
|
||||
icon?: LucideIcon
|
||||
heading: string
|
||||
subheading: string
|
||||
url: string
|
||||
@@ -45,7 +45,7 @@ const UseCases: FC<Props> = (props) => (
|
||||
<div className="overflow-hidden">
|
||||
<SectionContainer className="!py-4">
|
||||
<ul className="hidden xl:flex flex-col gap-4 md:flex-row items-stretch w-full h-auto min-h-[300px]">
|
||||
{props.stories.map((story) => (
|
||||
{props.stories?.map((story) => (
|
||||
<li key={story.heading} className="w-full">
|
||||
<StoryCard story={story} />
|
||||
</li>
|
||||
@@ -74,7 +74,7 @@ const UseCases: FC<Props> = (props) => (
|
||||
},
|
||||
}}
|
||||
>
|
||||
{props.stories.map((story: Story, i: number) => (
|
||||
{props.stories?.map((story: Story, i: number) => (
|
||||
<SwiperSlide key={`${story.heading}-mobile`}>
|
||||
<StoryCard story={story} />
|
||||
</SwiperSlide>
|
||||
@@ -85,7 +85,7 @@ const UseCases: FC<Props> = (props) => (
|
||||
</div>
|
||||
<SectionContainer className="!pt-0">
|
||||
<ul className="grid grid-cols-2 gap-4 sm:gap-10 gap-y-10 lg:grid-cols-4 md:gap-12 lg:gap-x-8 mt-8">
|
||||
{props.highlights.map((highlight) => (
|
||||
{props.highlights?.map((highlight) => (
|
||||
<HighlightCard highlight={highlight} key={highlight.heading} />
|
||||
))}
|
||||
</ul>
|
||||
@@ -105,13 +105,15 @@ const StoryCard: FC<StoryCardProps> = ({ story }) => (
|
||||
innerClassName="flex flex-col justify-between text-foreground-lighter bg-surface-75 p-2"
|
||||
>
|
||||
<div className="flex flex-col justify-between gap-6 p-3 md:max-w-[230px]">
|
||||
<Image
|
||||
src={story.icon}
|
||||
alt={story.heading}
|
||||
width={150}
|
||||
height={30}
|
||||
className="max-h-[23px] max-w-[150px] w-auto object-contain object-left-bottom filter invert dark:invert-0 opacity-60"
|
||||
/>
|
||||
{story.icon && (
|
||||
<Image
|
||||
src={story.icon}
|
||||
alt={story.heading ?? ''}
|
||||
width={150}
|
||||
height={30}
|
||||
className="max-h-[23px] max-w-[150px] w-auto object-contain object-left-bottom filter invert dark:invert-0 opacity-60"
|
||||
/>
|
||||
)}
|
||||
<h3 className="text-foreground">{story.heading}</h3>
|
||||
</div>
|
||||
<div className="p-3 bg-surface-200 rounded-lg">
|
||||
@@ -126,11 +128,11 @@ interface HighlightCardProps {
|
||||
}
|
||||
|
||||
const HighlightCard: FC<HighlightCardProps> = ({ highlight }) => {
|
||||
const Icon: LucideIcon = highlight.icon
|
||||
const Icon: LucideIcon | undefined = highlight.icon
|
||||
|
||||
return (
|
||||
<li className="text-foreground text-sm max-w-[250px]">
|
||||
<Icon className="stroke-1 mb-2" />
|
||||
{Icon && <Icon className="stroke-1 mb-2" />}
|
||||
<h4 className="text-foreground text-xl lg:text-2xl">{highlight.heading}</h4>
|
||||
<p className="text-foreground-lighter text-sm">{highlight.subheading}</p>
|
||||
<TextLink hasChevron label="Read story" url={highlight.url} className="mt-4" />
|
||||
|
||||
285
apps/www/components/Forms/TalkToPartnershipTeamForm.tsx
Normal file
@@ -0,0 +1,285 @@
|
||||
import { FC, useEffect, useState } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { CircleAlert } from 'lucide-react'
|
||||
import { Button, cn, Input_Shadcn_, Label_Shadcn_, Separator, TextArea_Shadcn_ } from 'ui'
|
||||
import { Alert } from 'ui/src/components/shadcn/ui/alert'
|
||||
import { useSendTelemetryEvent } from '~/lib/telemetry'
|
||||
|
||||
interface FormData {
|
||||
firstName: string
|
||||
secondName: string
|
||||
companyEmail: string
|
||||
}
|
||||
|
||||
interface FormItem {
|
||||
type: 'text' | 'textarea'
|
||||
label: string
|
||||
placeholder: string
|
||||
required: boolean
|
||||
className?: string
|
||||
component: typeof TextArea_Shadcn_ | typeof Input_Shadcn_
|
||||
}
|
||||
|
||||
type FormConfig = {
|
||||
[K in keyof FormData]: FormItem
|
||||
}
|
||||
|
||||
interface Props {
|
||||
className?: string
|
||||
}
|
||||
|
||||
const formConfig: FormConfig = {
|
||||
firstName: {
|
||||
type: 'text',
|
||||
label: 'First Name',
|
||||
placeholder: 'First Name',
|
||||
required: true,
|
||||
className: 'col-span-full',
|
||||
component: Input_Shadcn_,
|
||||
},
|
||||
secondName: {
|
||||
type: 'text',
|
||||
label: 'Last Name',
|
||||
placeholder: 'Last Name',
|
||||
required: true,
|
||||
className: 'col-span-full',
|
||||
component: Input_Shadcn_,
|
||||
},
|
||||
companyEmail: {
|
||||
type: 'text',
|
||||
label: 'Company Email',
|
||||
placeholder: 'Company Email',
|
||||
required: true,
|
||||
className: '',
|
||||
component: Input_Shadcn_,
|
||||
},
|
||||
}
|
||||
|
||||
const isValidEmail = (email: string): boolean => {
|
||||
const emailPattern = /^[\w-\.+]+@([\w-]+\.)+[\w-]{2,8}$/
|
||||
return emailPattern.test(email)
|
||||
}
|
||||
|
||||
const personalEmailDomains = [
|
||||
'@gmail.com',
|
||||
'@yahoo.com',
|
||||
'@hotmail.',
|
||||
'@outlook.com',
|
||||
'@aol.com',
|
||||
'@icloud.com',
|
||||
'@live.com',
|
||||
'@protonmail.com',
|
||||
'@mail.com',
|
||||
'@example.com',
|
||||
]
|
||||
|
||||
const isCompanyEmail = (email: string): boolean => {
|
||||
for (const domain of personalEmailDomains) {
|
||||
if (email.includes(domain)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
const defaultFormValue: FormData = {
|
||||
firstName: '',
|
||||
secondName: '',
|
||||
companyEmail: '',
|
||||
}
|
||||
|
||||
const TalkToPartnershipTeamForm: FC<Props> = ({ className }) => {
|
||||
const [formData, setFormData] = useState<FormData>(defaultFormValue)
|
||||
const [honeypot, setHoneypot] = useState<string>('') // field to prevent spam
|
||||
const [errors, setErrors] = useState<{ [key: string]: string }>({})
|
||||
const [isSubmitting, setIsSubmitting] = useState(false)
|
||||
const [success, setSuccess] = useState<string | null>(null)
|
||||
const [startTime, setStartTime] = useState<number>(0)
|
||||
const sendTelemetryEvent = useSendTelemetryEvent()
|
||||
|
||||
const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
|
||||
const { name, value } = e.target
|
||||
setErrors({})
|
||||
setFormData((prev) => ({ ...prev, [name]: value }))
|
||||
}
|
||||
|
||||
const handleReset = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||
e.preventDefault()
|
||||
setFormData(defaultFormValue)
|
||||
setSuccess(null)
|
||||
setErrors({})
|
||||
}
|
||||
|
||||
const validate = (): boolean => {
|
||||
const newErrors: { [key in keyof FormData]?: string } = {}
|
||||
|
||||
// Check required fields
|
||||
for (const key in formConfig) {
|
||||
if (formConfig[key as keyof FormData].required && !formData[key as keyof FormData]) {
|
||||
newErrors[key as keyof FormData] = `This field is required`
|
||||
}
|
||||
}
|
||||
|
||||
// Validate email
|
||||
if (formData.companyEmail && !isValidEmail(formData.companyEmail)) {
|
||||
newErrors.companyEmail = 'Invalid email address'
|
||||
}
|
||||
|
||||
// Validate company email
|
||||
if (formData.companyEmail && !isCompanyEmail(formData.companyEmail)) {
|
||||
newErrors.companyEmail = 'Please use a company email address'
|
||||
}
|
||||
|
||||
setErrors(newErrors)
|
||||
|
||||
// Return validation status, also check if honeypot is filled (indicating a bot)
|
||||
return Object.keys(newErrors).length === 0 && honeypot === ''
|
||||
}
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault()
|
||||
|
||||
const currentTime = Date.now()
|
||||
const timeElapsed = (currentTime - startTime) / 1000
|
||||
|
||||
// Spam prevention: Reject form if submitted too quickly (less than 3 seconds)
|
||||
if (timeElapsed < 3) {
|
||||
setErrors({ general: 'Submission too fast. Please fill the form correctly.' })
|
||||
return
|
||||
}
|
||||
|
||||
if (!validate()) {
|
||||
return
|
||||
}
|
||||
|
||||
setIsSubmitting(true)
|
||||
setSuccess(null)
|
||||
|
||||
try {
|
||||
const response = await fetch('/api-v2/submit-form-talk-to-partnership', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(formData),
|
||||
})
|
||||
|
||||
if (response.ok) {
|
||||
setSuccess('Thank you for your submission!')
|
||||
setFormData({ firstName: '', secondName: '', companyEmail: '' })
|
||||
} else {
|
||||
const errorData = await response.json()
|
||||
setErrors({ general: `Submission failed: ${errorData.message}` })
|
||||
}
|
||||
} catch (error) {
|
||||
setErrors({ general: 'An unexpected error occurred. Please try again.' })
|
||||
} finally {
|
||||
setIsSubmitting(false)
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setStartTime(Date.now())
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'flex flex-col gap-4 w-full items-center justify-center min-h-[300px]',
|
||||
className
|
||||
)}
|
||||
>
|
||||
<div className="border rounded-xl bg-surface-75 p-4 md:p-6 w-full lg:max-w-lg min-h-[200px]">
|
||||
{success ? (
|
||||
<div className="flex flex-col h-full w-full min-w-[300px] gap-4 items-center justify-center opacity-0 transition-opacity animate-fade-in scale-1">
|
||||
<p className="text-center text-sm">{success}</p>
|
||||
<Button onClick={handleReset}>Reset</Button>
|
||||
</div>
|
||||
) : (
|
||||
<form
|
||||
id="support-form"
|
||||
className={cn('flex flex-col lg:grid lg:grid-cols-2 gap-4')}
|
||||
onSubmit={handleSubmit}
|
||||
>
|
||||
{Object.entries(formConfig).map(([key, { component: Component, ...fieldValue }]) => {
|
||||
const fieldKey = key as keyof FormData
|
||||
|
||||
return (
|
||||
<div
|
||||
key={key}
|
||||
className={cn('flex flex-col col-span-full gap-y-2', fieldValue.className)}
|
||||
>
|
||||
<Label_Shadcn_
|
||||
htmlFor={fieldKey}
|
||||
className="text-foreground-light flex justify-between"
|
||||
>
|
||||
{fieldValue.label}
|
||||
<div
|
||||
className={cn(
|
||||
'flex flex-nowrap text-right gap-1 items-center text-xs leading-none transition-opacity opacity-0 text-foreground-muted',
|
||||
errors[key as keyof FormData] && 'opacity-100 animate-fade-in'
|
||||
)}
|
||||
>
|
||||
{errors[fieldKey]}
|
||||
</div>
|
||||
</Label_Shadcn_>
|
||||
<Component
|
||||
type="text"
|
||||
id={fieldKey}
|
||||
name={fieldKey}
|
||||
value={formData[fieldKey]}
|
||||
onChange={handleChange}
|
||||
placeholder={fieldValue.placeholder}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
|
||||
{/* Spam prevention */}
|
||||
<input
|
||||
type="text"
|
||||
name="honeypot"
|
||||
value={honeypot}
|
||||
onChange={(e: React.ChangeEvent<HTMLInputElement>) => setHoneypot(e.target.value)}
|
||||
style={{ display: 'none' }}
|
||||
aria-hidden="true"
|
||||
/>
|
||||
|
||||
<Separator className="col-span-full" />
|
||||
<Button
|
||||
block
|
||||
htmlType="submit"
|
||||
size="small"
|
||||
className="col-span-full"
|
||||
disabled={isSubmitting}
|
||||
loading={isSubmitting}
|
||||
onClick={() =>
|
||||
sendTelemetryEvent({
|
||||
action: 'request_demo_button_clicked',
|
||||
properties: { buttonLocation: 'Enterprise Request Demo Form' },
|
||||
})
|
||||
}
|
||||
>
|
||||
Submit
|
||||
</Button>
|
||||
<p className="text-foreground-lighter text-sm col-span-full">
|
||||
By submitting this form, I confirm that I have read and understood the{' '}
|
||||
<Link href="/privacy" className="text-foreground hover:underline">
|
||||
Privacy Policy
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
{errors.general && (
|
||||
<Alert className="flex gap-2 text-foreground text-sm col-span-full">
|
||||
<CircleAlert className="w-3 h-3" /> <span>{errors.general}</span>
|
||||
</Alert>
|
||||
)}
|
||||
</form>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default TalkToPartnershipTeamForm
|
||||
@@ -16,7 +16,7 @@ type LinkProps = {
|
||||
|
||||
const DevelopersDropdown = () => (
|
||||
<div className="flex flex-col xl:flex-row">
|
||||
<div className="w-[550px] xl:w-[500px] py-8 px-8 bg-background grid gap-3 grid-cols-2">
|
||||
<div className="w-[550px] xl:w-[470px] py-8 px-8 bg-background grid gap-3 grid-cols-2">
|
||||
{DevelopersData['navigation'].map((column) => (
|
||||
<div key={column.label} className="p-0 flex flex-col gap-6">
|
||||
<label className="text-foreground-lighter text-xs uppercase tracking-widest font-mono">
|
||||
|
||||
@@ -10,6 +10,7 @@ import { NavigationMenuLink } from 'ui/src/components/shadcn/ui/navigation-menu'
|
||||
import MenuItem from './MenuItem'
|
||||
|
||||
import ComparisonsData from '~/data/Comparisons'
|
||||
import SolutionsData from '~/data/Solutions'
|
||||
import CustomersData from '~/data/CustomerStories'
|
||||
import MainProductsData from '~/data/MainProducts'
|
||||
import ProductModulesData from '~/data/ProductModules'
|
||||
@@ -123,8 +124,8 @@ const ProductDropdown = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-surface-75 border-t xl:border-t-0 xl:border-l p-6 gap-8 grid grid-cols-5 xl:flex xl:flex-col w-full xl:w-[350px]">
|
||||
<div className="col-span-3 flex flex-col gap-8 xl:w-auto">
|
||||
<div className="bg-surface-75 border-t xl:border-t-0 xl:border-l p-6 gap-8 flex flex-col w-full xl:w-[400px]">
|
||||
<div className="col-span-3 flex flex-row gap-8 xl:w-auto">
|
||||
<div>
|
||||
<Link
|
||||
href="/customers"
|
||||
@@ -133,8 +134,8 @@ const ProductDropdown = () => {
|
||||
Customer Stories
|
||||
<ChevronRight className="h-3 w-3 transition-transform will-change-transform -translate-x-1 group-hover:translate-x-0" />
|
||||
</Link>
|
||||
<ul className="flex flex-col gap-2">
|
||||
{CustomersData.slice(0, isTablet ? 2 : 1).map((customer) => (
|
||||
<ul className="flex flex-row gap-2">
|
||||
{CustomersData.slice(0, isTablet ? 1 : 1).map((customer) => (
|
||||
<li key={customer.organization}>
|
||||
<Link
|
||||
href={customer.url}
|
||||
@@ -159,8 +160,8 @@ const ProductDropdown = () => {
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-span-2 grid grid-cols-1 gap-6 xl:gap-2">
|
||||
<div>
|
||||
<div className="w-full col-span-2 grid grid-cols-4 xl:grid-cols-5 gap-6 xl:gap-2">
|
||||
<div className="col-span-2 xl:col-span-3">
|
||||
<p className="text-foreground-lighter text-xs uppercase tracking-widest font-mono mb-3">
|
||||
{ComparisonsData.label}
|
||||
</p>
|
||||
@@ -177,6 +178,23 @@ const ProductDropdown = () => {
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<div className="col-span-2">
|
||||
<p className="text-foreground-lighter text-xs uppercase tracking-widest font-mono mb-3">
|
||||
{SolutionsData.label}
|
||||
</p>
|
||||
<ul className="flex flex-col gap-2">
|
||||
{SolutionsData.solutions.map((link) => (
|
||||
<li key={link.text}>
|
||||
<TextLink
|
||||
chevronAnimation="fadeIn"
|
||||
url={link.url}
|
||||
label={link.text}
|
||||
className="mt-0 hover:text-foreground focus-visible:text-foreground focus-visible:ring-offset-4 focus-visible:ring-offset-background-overlay"
|
||||
/>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,6 +5,8 @@ import ProductIcon from '../ProductIcon'
|
||||
import SectionContainer from '../Layouts/SectionContainer'
|
||||
import { CTA } from '~/types/common'
|
||||
|
||||
// to do: move types to be global
|
||||
// then solutions.types.ts should extend this
|
||||
interface Props {
|
||||
label?: string | React.ReactNode
|
||||
h1: string | React.ReactNode
|
||||
@@ -70,7 +72,7 @@ const ProductHeader = (props: Props) => (
|
||||
)}
|
||||
</div>
|
||||
{props.image && (
|
||||
<div className="relative min-h-[300px] col-span-12 mt-8 lg:col-span-7 lg:mt-0 xl:col-span-6 xl:col-start-7">
|
||||
<div className="image-container relative min-h-[300px] col-span-12 mt-8 lg:col-span-7 lg:mt-0 xl:col-span-6 xl:col-start-7">
|
||||
{props.image}
|
||||
</div>
|
||||
)}
|
||||
|
||||
83
apps/www/components/Solutions/AIBuildersLogos.tsx
Normal file
@@ -0,0 +1,83 @@
|
||||
import Link from 'next/link'
|
||||
import React from 'react'
|
||||
import { cn } from 'ui'
|
||||
|
||||
const logos = [
|
||||
{
|
||||
image: `/images/logos/publicity/lovable.svg`,
|
||||
alt: 'lovable',
|
||||
name: 'lovable',
|
||||
href: 'https://lovable.dev/',
|
||||
},
|
||||
{
|
||||
image: `/images/logos/publicity/bolt.svg`,
|
||||
alt: 'bolt',
|
||||
name: 'bolt',
|
||||
href: 'https://bolt.new',
|
||||
},
|
||||
{
|
||||
image: `/images/logos/publicity/v0.svg`,
|
||||
alt: 'v0',
|
||||
name: 'v0',
|
||||
href: 'https://v0.dev',
|
||||
},
|
||||
|
||||
{
|
||||
image: `/images/logos/publicity/tempo-labs.svg`,
|
||||
alt: 'tempo labs',
|
||||
name: 'tempo-labs',
|
||||
href: 'https://www.tempo.new/',
|
||||
},
|
||||
{
|
||||
image: `/images/logos/publicity/gumloop.svg`,
|
||||
alt: 'gumloop',
|
||||
name: 'gumloop',
|
||||
href: 'https://gumloop.com',
|
||||
},
|
||||
{
|
||||
image: `/images/logos/publicity/co-com.svg`,
|
||||
alt: 'co.com',
|
||||
name: 'co-com',
|
||||
href: 'https://co.dev',
|
||||
},
|
||||
]
|
||||
|
||||
interface Props {
|
||||
className?: string
|
||||
}
|
||||
|
||||
const EnterpriseLogos: React.FC<Props> = ({ className }) => {
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'flex lg:grid grid-cols-2 xl:flex flex-nowrap gap-4 md:gap-8 lg:gap-4 2xl:gap-8',
|
||||
className
|
||||
)}
|
||||
suppressHydrationWarning
|
||||
>
|
||||
{logos.map((logo) => (
|
||||
<Link
|
||||
href={logo.href}
|
||||
target="_blank"
|
||||
key={`ent-logo-${logo.name}`}
|
||||
className="h-12 lg:h-12 w-max hover:opacity-100 opacity-80 transition-opacity"
|
||||
>
|
||||
<img
|
||||
src={logo.image}
|
||||
alt={logo.alt}
|
||||
className="
|
||||
w-auto block
|
||||
h-10 !min-h-10
|
||||
md:h-10 md:!min-h-10
|
||||
lg:h-7 lg:!min-h-7
|
||||
2xl:h-12 2xl:!min-h-12
|
||||
"
|
||||
draggable={false}
|
||||
/>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default EnterpriseLogos
|
||||
43
apps/www/components/Solutions/CTAForm.tsx
Normal file
@@ -0,0 +1,43 @@
|
||||
import React, { FC } from 'react'
|
||||
import { cn, TextLink } from 'ui'
|
||||
import SectionContainer from '~/components/Layouts/SectionContainer'
|
||||
import TalkToPartnershipTeamForm from '~/components/Forms/TalkToPartnershipTeamForm'
|
||||
|
||||
interface Props {}
|
||||
|
||||
const UseCases: FC<Props> = () => {
|
||||
return (
|
||||
<SectionContainer className="text grid gap-8 lg:gap-12 md:grid-cols-2 xl:pt-20">
|
||||
<div className="md:h-full w-full flex flex-col justify-between gap-4 lg:gap-8">
|
||||
<div className="flex flex-col gap-2 md:max-w-md">
|
||||
<h1 className="h1 !m-0">
|
||||
Talk to our
|
||||
<br className="hidden md:block" />
|
||||
partnership team
|
||||
</h1>
|
||||
<p className="md:text-lg text-foreground-lighter">
|
||||
Explore custom pricing and infrastructure options.
|
||||
</p>
|
||||
</div>
|
||||
<ConnectCallout className="hidden md:flex" />
|
||||
</div>
|
||||
<TalkToPartnershipTeamForm />
|
||||
<ConnectCallout className="md:hidden" />
|
||||
</SectionContainer>
|
||||
)
|
||||
}
|
||||
|
||||
const ConnectCallout: FC<{ className?: string }> = ({ className }) => (
|
||||
<div className={cn('border rounded-lg p-4 md:p-6 bg-surface-75 flex flex-col gap-2', className)}>
|
||||
<h5>Connect your app to Supabase now</h5>
|
||||
<p className="text-foreground-lighter">
|
||||
Set up a Supabase OAuth app so your users can start interacting with their Supabase Project.
|
||||
</p>
|
||||
<TextLink
|
||||
url="https://supabase.com/docs/guides/integrations/build-a-supabase-integration"
|
||||
label="View docs"
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
||||
export default UseCases
|
||||
65
apps/www/components/Solutions/FeaturesGrid.tsx
Normal file
@@ -0,0 +1,65 @@
|
||||
import styles from './features-grid.module.css'
|
||||
import React from 'react'
|
||||
import { cn } from 'ui'
|
||||
import Panel from '~/components/Panel'
|
||||
import SectionContainer from '../Layouts/SectionContainer'
|
||||
|
||||
export default function FeaturesGrid(props: any) {
|
||||
return (
|
||||
<SectionContainer className="flex flex-col gap-4 xl:pt-20">
|
||||
<div className="flex flex-col gap-2 max-w-xl">
|
||||
<h2 className="h2 text-foreground-lighter !m-0">{props.heading}</h2>
|
||||
<p className="p !text-foreground-lighter max-w-md">{props.subheading}</p>
|
||||
</div>
|
||||
<div
|
||||
className={cn(
|
||||
'h-auto flex flex-col md:grid grid-cols-2 xl:grid-cols-3 gap-5 xl:flex-row',
|
||||
styles['features-grid']
|
||||
)}
|
||||
>
|
||||
<Content
|
||||
card={props.features['mgmt-api']}
|
||||
innerClassName="
|
||||
xl:flex-row
|
||||
[&_.image-container]:border-b
|
||||
[&_.image-container]:pb-0
|
||||
[&_.image-container]:xl:border-none
|
||||
[&_.image-container]:xl:items-end
|
||||
[&_.image-container]:xl:order-last
|
||||
[&_.image-container]:xl:w-[calc(50%+1rem)]
|
||||
[&_.next-image--dynamic-fill]:rounded-none"
|
||||
/>
|
||||
<Content
|
||||
card={props.features['postgres']}
|
||||
innerClassName="[&_.image-container]:xl:pt-4 [&_.image-container]:xl:pl-8"
|
||||
/>
|
||||
<Content card={props.features['branching']} />
|
||||
<Content card={props.features['pricing']} />
|
||||
</div>
|
||||
</SectionContainer>
|
||||
)
|
||||
}
|
||||
|
||||
const Content = ({ card, innerClassName }: { card: any; innerClassName?: string }) => {
|
||||
return (
|
||||
<Panel
|
||||
key={card.heading}
|
||||
hasActiveOnHover={false}
|
||||
outerClassName="w-full group hover:shadow-none"
|
||||
innerClassName={cn('relative flex flex-col justify-between xl:min-h-[250px]', innerClassName)}
|
||||
style={{ gridArea: card.id }}
|
||||
>
|
||||
{card.img && (
|
||||
<div className="image-container relative h-full w-full inline-flex items-start p-6">
|
||||
{card.img}
|
||||
</div>
|
||||
)}
|
||||
<div className="content-container flex flex-col justify-between gap-3 p-6 flex-1">
|
||||
<h3 className="text-foreground-lighter flex items-center gap-2">{card.heading}</h3>
|
||||
<div className="flex flex-col justify-between gap-2">
|
||||
<p className="text-sm text-foreground-lighter">{card.subheading}</p>
|
||||
</div>
|
||||
</div>
|
||||
</Panel>
|
||||
)
|
||||
}
|
||||
46
apps/www/components/Solutions/FeaturesSection.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import React, { FC } from 'react'
|
||||
|
||||
import { cn } from 'ui'
|
||||
import SectionContainer from '~/components/Layouts/SectionContainer'
|
||||
import type { Feature, WhySection } from '~/data/solutions/solutions.types'
|
||||
|
||||
const Support: FC<WhySection> = (props) => {
|
||||
return (
|
||||
<SectionContainer id={props.id} className="flex flex-col gap-4 md:gap-8">
|
||||
<div className="flex flex-col gap-2">
|
||||
<span className="label">{props.label}</span>
|
||||
<h2 className="h2 text-foreground-lighter">{props.heading}</h2>
|
||||
</div>
|
||||
<ul className="grid grid-cols-1 gap-4 gap-y-10 md:grid-cols-3 md:gap-12 xl:gap-20">
|
||||
{props.features?.map((feature, index) => <FeatureItem feature={feature} key={index} />)}
|
||||
</ul>
|
||||
</SectionContainer>
|
||||
)
|
||||
}
|
||||
|
||||
interface FeatureItemProps {
|
||||
feature: Feature
|
||||
}
|
||||
|
||||
const FeatureItem: FC<FeatureItemProps> = ({ feature }) => {
|
||||
const Icon = feature.icon
|
||||
const iconSize = 7
|
||||
const iconWidth = `w-${iconSize}`
|
||||
const iconHeight = `h-${iconSize}`
|
||||
|
||||
return (
|
||||
<li className="flex flex-col gap-2 text-sm">
|
||||
{Icon && (
|
||||
<Icon className={cn('stroke-1 mb-2 text-foreground-lighter', iconWidth, iconHeight)} />
|
||||
)}
|
||||
<div className="w-full h-px overflow-hidden flex items-start bg-border-muted">
|
||||
<span className={cn('h-full bg-foreground-lighter', iconWidth)} />
|
||||
</div>
|
||||
<h4 className="text-foreground text-lg lg:text-xl mt-1">{feature.heading}</h4>
|
||||
<p className="text-foreground-lighter text-sm">{feature.subheading}</p>
|
||||
{/* <TextLink hasChevron label="Read story" url={feature.url} className="mt-4" /> */}
|
||||
</li>
|
||||
)
|
||||
}
|
||||
|
||||
export default Support
|
||||
90
apps/www/components/Solutions/Quotes.tsx
Normal file
@@ -0,0 +1,90 @@
|
||||
import 'swiper/css'
|
||||
|
||||
import Link from 'next/link'
|
||||
import { FC } from 'react'
|
||||
import { Swiper, SwiperSlide } from 'swiper/react'
|
||||
|
||||
import SectionContainer from '~/components/Layouts/SectionContainer'
|
||||
import Panel from '~/components/Panel'
|
||||
|
||||
import type { Quote, Quotes } from '~/data/solutions/solutions.types'
|
||||
import Image from 'next/image'
|
||||
|
||||
const Quotes: FC<Quotes> = (props) => (
|
||||
<section id={props.id}>
|
||||
<div className="overflow-hidden">
|
||||
<SectionContainer className="!py-4">
|
||||
<ul className="hidden xl:flex flex-col gap-4 md:flex-row items-stretch w-full h-auto min-h-64">
|
||||
{props.items?.map((quote: Quote) => (
|
||||
<li key={quote.author} className="w-full">
|
||||
<QuoteCard {...quote} />
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<div className="xl:hidden">
|
||||
<Swiper
|
||||
style={{ zIndex: 0, marginRight: '1px' }}
|
||||
initialSlide={0}
|
||||
spaceBetween={12}
|
||||
slidesPerView={1.2}
|
||||
speed={300}
|
||||
watchOverflow
|
||||
threshold={2}
|
||||
updateOnWindowResize
|
||||
className="h-[300px] w-full !overflow-visible"
|
||||
breakpoints={{
|
||||
320: {
|
||||
slidesPerView: 1.2,
|
||||
},
|
||||
540: {
|
||||
slidesPerView: 1.5,
|
||||
},
|
||||
900: {
|
||||
slidesPerView: 2.5,
|
||||
},
|
||||
}}
|
||||
>
|
||||
{props.items?.map((quote: Quote, i: number) => (
|
||||
<SwiperSlide key={`${i}-mobile`}>
|
||||
<QuoteCard {...quote} />
|
||||
</SwiperSlide>
|
||||
))}
|
||||
</Swiper>
|
||||
</div>
|
||||
</SectionContainer>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
||||
const QuoteCard: FC<Quote> = ({ quote, author, avatar, authorTitle }) => {
|
||||
return (
|
||||
<Panel
|
||||
outerClassName="w-full h-full"
|
||||
innerClassName="flex flex-col justify-between text-foreground-lighter bg-surface-75 p-5"
|
||||
>
|
||||
<div className="flex flex-col justify-between gap-6">
|
||||
<q className="text-base">{quote}</q>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row gap-3 w-full items-center">
|
||||
<Image
|
||||
src={avatar}
|
||||
alt={author}
|
||||
width={32}
|
||||
height={32}
|
||||
className="bg-surface-200 rounded-full border flex-shrink-0"
|
||||
/>
|
||||
<div className="flex flex-col gap-0">
|
||||
<span className="text-base text-foreground-light leading-snug">{author}</span>
|
||||
{authorTitle && (
|
||||
<span className="uppercase font-mono text-sm text-foreground-lighter leading-tight">
|
||||
{authorTitle}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</Panel>
|
||||
)
|
||||
}
|
||||
|
||||
export default Quotes
|
||||
47
apps/www/components/Solutions/Videos.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
import React, { FC } from 'react'
|
||||
|
||||
import SectionContainer from '~/components/Layouts/SectionContainer'
|
||||
import Panel from '../Panel'
|
||||
import type { Testimonials } from '~/data/solutions/solutions.types'
|
||||
|
||||
export type Story = {
|
||||
url: string
|
||||
heading: string
|
||||
subheading: string | JSX.Element
|
||||
}
|
||||
|
||||
const EnterpriseSecurity: FC<Testimonials> = (props) => {
|
||||
return (
|
||||
<SectionContainer id={props.id} className="flex flex-col gap-4 xl:pt-20">
|
||||
<div className="flex flex-col gap-2 max-w-xl">
|
||||
<h2 className="h2 text-foreground-lighter !m-0">{props.heading}</h2>
|
||||
</div>
|
||||
<ul className="grid grid-cols-1 sm:grid-cols-2 gap-4 h-fit mt-4">
|
||||
<Panel innerClassName="p-2">
|
||||
<div className="video-container !rounded-md">
|
||||
<iframe
|
||||
className="w-full"
|
||||
src="https://www.youtube-nocookie.com/embed/9GQtXXERnqU"
|
||||
title="Supabase + Lovable"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture; web-share"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
</Panel>
|
||||
<Panel innerClassName="p-2">
|
||||
<div className="video-container !rounded-md">
|
||||
<iframe
|
||||
className="w-full"
|
||||
src="https://www.youtube-nocookie.com/embed/LfAV5fmRybg"
|
||||
title="Supabase + Bolt"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture; web-share"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
</Panel>
|
||||
</ul>
|
||||
</SectionContainer>
|
||||
)
|
||||
}
|
||||
|
||||
export default EnterpriseSecurity
|
||||
13
apps/www/components/Solutions/features-grid.module.css
Normal file
@@ -0,0 +1,13 @@
|
||||
.features-grid {
|
||||
grid-template-areas:
|
||||
'mgmt-api postgres'
|
||||
'branching pricing ';
|
||||
}
|
||||
|
||||
@media (min-width: 1280px) {
|
||||
.features-grid {
|
||||
grid-template-areas:
|
||||
'mgmt-api mgmt-api postgres'
|
||||
'branching pricing postgres';
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,10 @@ const footerData = [
|
||||
text: 'Launch Week',
|
||||
url: '/launch-week',
|
||||
},
|
||||
{
|
||||
text: 'AI Builders',
|
||||
url: '/solutions/ai-builders',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
12
apps/www/data/Solutions.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
export const data = {
|
||||
label: 'Solutions',
|
||||
solutions: [
|
||||
{
|
||||
text: 'AI Builders',
|
||||
description: '',
|
||||
url: '/solutions/ai-builders',
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
export default data
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
Users,
|
||||
UserX,
|
||||
} from 'lucide-react'
|
||||
import RequestADemoForm from '../../components/Forms/RequestADemoForm'
|
||||
import RequestADemoForm from '../components/Forms/RequestADemoForm'
|
||||
|
||||
export default {
|
||||
metadata: {
|
||||
569
apps/www/data/solutions/ai-builders.tsx
Normal file
@@ -0,0 +1,569 @@
|
||||
import { Timer } from 'lucide-react'
|
||||
import { CubeIcon } from '@heroicons/react/outline'
|
||||
import { Image } from 'ui'
|
||||
import { AIData } from './solutions.types'
|
||||
|
||||
const data: AIData = {
|
||||
metadata: {
|
||||
metaTitle: 'Supabase for AI Builders',
|
||||
metaDescription:
|
||||
'Leading enterprises use Supabase to build faster, better, and more scalable products.',
|
||||
},
|
||||
heroSection: {
|
||||
id: 'hero',
|
||||
title: 'AI Builders',
|
||||
h1: <>Supabase for AI Builders</>,
|
||||
subheader: [
|
||||
<>
|
||||
Supabase is the Postgres development platform that powers a new generation of developer
|
||||
tools. Give your users an integrated, scalable backend that lets them focus on building
|
||||
without worrying about infrastructure.
|
||||
</>,
|
||||
],
|
||||
image: (
|
||||
<Image
|
||||
src={{
|
||||
dark: '/images/solutions/ai-builders/ai-builders-agent-dark.svg',
|
||||
light: '/images/solutions/ai-builders/ai-builders-agent-light.svg',
|
||||
}}
|
||||
alt="AI agent for ai builders"
|
||||
width={1000}
|
||||
height={1000}
|
||||
/>
|
||||
),
|
||||
ctas: [
|
||||
{
|
||||
label: 'Start your project',
|
||||
href: 'https://supabase.com/dashboard',
|
||||
type: 'primary' as any,
|
||||
},
|
||||
{
|
||||
label: 'Connect your app',
|
||||
href: 'https://supabase.com/docs/guides/integrations/build-a-supabase-integration',
|
||||
type: 'default' as any,
|
||||
},
|
||||
],
|
||||
logos: [
|
||||
{
|
||||
name: 'GitHub',
|
||||
image: '/images/enterprise/github.svg',
|
||||
},
|
||||
{
|
||||
name: 'PwC',
|
||||
image: '/images/enterprise/pwc.svg',
|
||||
},
|
||||
],
|
||||
},
|
||||
quotes: {
|
||||
id: 'quotes',
|
||||
items: [
|
||||
{
|
||||
icon: '/images/customers/logos/light/lovable.png',
|
||||
avatar: '/images/avatars/antonosika.jpg',
|
||||
author: 'Anton Osika',
|
||||
authorTitle: 'Lovable - CEO',
|
||||
quote: (
|
||||
<>
|
||||
We chose Supabase because{' '}
|
||||
<span className="text-foreground">
|
||||
it’s extremely user friendly and covers all the needs to build full stack applications
|
||||
</span>
|
||||
.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
icon: '/images/customers/logos/light/bolt.png',
|
||||
avatar: '/images/avatars/eric-simons.jpg',
|
||||
author: 'Eric Simmons',
|
||||
authorTitle: 'Stackblitz (Bolt.new) - CEO',
|
||||
quote: (
|
||||
<>
|
||||
Supabase is awesome. Supabase is the key database integration that we have. Really, the
|
||||
primary and only one we’re pointing people at because{' '}
|
||||
<span className="text-foreground">
|
||||
it’s the best product in the world for storing and retrieving data
|
||||
</span>
|
||||
.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
icon: '/images/customers/logos/light/v0.png',
|
||||
avatar: '/images/avatars/kevin-michael.jpg',
|
||||
author: 'Kevin Michael',
|
||||
authorTitle: 'Tempo - CEO',
|
||||
quote: (
|
||||
<>
|
||||
<span className="text-foreground">
|
||||
Supabase is the missing piece for building full-stack React apps and has been our
|
||||
go-to for a long time.
|
||||
</span>{' '}
|
||||
We love Supabase and so do our customers. Also a fellow YC company.
|
||||
</>
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
why: {
|
||||
id: 'why-supabase',
|
||||
label: '',
|
||||
heading: (
|
||||
<>
|
||||
Why <span className="text-foreground">AI Builders</span> choose Supabase
|
||||
</>
|
||||
),
|
||||
features: [
|
||||
{
|
||||
icon: Timer,
|
||||
heading: 'Get to market faster',
|
||||
subheading:
|
||||
'Supabase is easy to use and set up. Use your existing Postgres knowledge and skills. Build with your favorite frameworks and tools.',
|
||||
},
|
||||
{
|
||||
icon: CubeIcon,
|
||||
heading: 'The tools you need at a great price',
|
||||
subheading:
|
||||
'Supabase offers a fully integrated suite of tools including authentication, storage, edge functions, real-time subscriptions, and vector search. Use one or all.',
|
||||
},
|
||||
{
|
||||
icon: (props: any) => (
|
||||
<svg
|
||||
width="23"
|
||||
height="23"
|
||||
viewBox="0 0 40 32"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
{...props}
|
||||
>
|
||||
<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="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<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="hsl(var(--foreground-light))"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
heading: 'Scalable and dependable',
|
||||
subheading:
|
||||
'Supabase is Postgres, with all the performance, high availability, and flexibility your users need to grow.',
|
||||
},
|
||||
],
|
||||
},
|
||||
features: {
|
||||
id: 'features',
|
||||
heading: (
|
||||
<>
|
||||
Supabase powers <span className="text-foreground block">next generation tools</span>
|
||||
</>
|
||||
),
|
||||
subheading:
|
||||
'Build a delightful application building experience backed seamlessly by a powerful application backend.',
|
||||
features: {
|
||||
'mgmt-api': {
|
||||
id: 'mgmt-api',
|
||||
icon: Timer,
|
||||
heading: (
|
||||
<>
|
||||
<svg
|
||||
width="18"
|
||||
height="18"
|
||||
viewBox="0 0 18 18"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M11.7118 15.4553C10.8778 15.8061 9.96154 16 9 16C8.03846 16 7.1222 15.8061 6.28818 15.4553M2.42438 11.4058C2.14983 10.6556 2 9.84529 2 9C2 8.15471 2.14983 7.34441 2.42438 6.59421M6.28818 2.54465C7.1222 2.19387 8.03846 2 9 2C9.96154 2 10.8778 2.19387 11.7118 2.54466M15.4553 6.28818C15.8061 7.1222 16 8.03846 16 9C16 9.96154 15.8061 10.8778 15.4553 11.7118M11.0051 11.1136L13.0078 13.1163M4.99476 5.10328L6.88638 6.99491M6.88638 11.0051L4.88369 13.0078M12.8967 4.99476L11.0051 6.88639M6.08663 9C6.08663 7.39099 7.39099 6.08663 9 6.08663C10.609 6.08663 11.9134 7.39099 11.9134 9C11.9134 10.609 10.609 11.9134 9 11.9134C7.39099 11.9134 6.08663 10.609 6.08663 9ZM3.10575 3.10575C3.58524 2.62626 4.36265 2.62626 4.84214 3.10575C5.32164 3.58524 5.32164 4.36265 4.84214 4.84215C4.36265 5.32164 3.58524 5.32164 3.10575 4.84214C2.62625 4.36265 2.62625 3.58524 3.10575 3.10575ZM13.1579 13.1579C13.6373 12.6784 14.4148 12.6784 14.8943 13.1579C15.3737 13.6373 15.3737 14.4148 14.8943 14.8943C14.4148 15.3737 13.6373 15.3737 13.1579 14.8943C12.6784 14.4148 12.6784 13.6373 13.1579 13.1579ZM14.8948 3.10572C15.3743 3.58522 15.3743 4.36263 14.8948 4.84212C14.4153 5.32161 13.6379 5.32161 13.1584 4.84212C12.6789 4.36263 12.6789 3.58522 13.1584 3.10572C13.6379 2.62623 14.4153 2.62623 14.8948 3.10572ZM4.84214 13.1579C5.32164 13.6373 5.32164 14.4148 4.84214 14.8943C4.36265 15.3737 3.58524 15.3737 3.10575 14.8943C2.62625 14.4148 2.62625 13.6373 3.10575 13.1579C3.58524 12.6784 4.36265 12.6784 4.84214 13.1579Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="bevel"
|
||||
/>
|
||||
</svg>
|
||||
Management API
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
<>
|
||||
<span className="text-foreground">Enable your customers to scale their projects.</span>{' '}
|
||||
Use the Management API to programmatically back every project with a powerful Supabase
|
||||
backend.
|
||||
</>
|
||||
),
|
||||
img: (
|
||||
<Image
|
||||
src={{
|
||||
dark: '/images/solutions/ai-builders/mgmt-api-permissions-dark.png',
|
||||
light: '/images/solutions/ai-builders/mgmt-api-permissions-light.png',
|
||||
}}
|
||||
alt="Management Api Permissions panel"
|
||||
width={900}
|
||||
height={900}
|
||||
/>
|
||||
),
|
||||
},
|
||||
postgres: {
|
||||
id: 'postgres',
|
||||
icon: Timer,
|
||||
heading: (
|
||||
<>
|
||||
<svg
|
||||
width="18"
|
||||
height="18"
|
||||
viewBox="0 0 18 18"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M8.09431 1.43094C7.77675 1.43094 7.51931 1.68838 7.51931 2.00594C7.51931 2.32351 7.77675 2.58094 8.09431 2.58094V1.43094ZM15.3251 14.1989C15.3251 13.8813 15.0676 13.6239 14.7501 13.6239C14.4325 13.6239 14.1751 13.8813 14.1751 14.1989H15.3251ZM14.1751 11.4632C14.1751 11.7807 14.4325 12.0382 14.7501 12.0382C15.0676 12.0382 15.3251 11.7807 15.3251 11.4632H14.1751ZM9.41204 14.2006C9.35121 13.8889 9.04923 13.6856 8.73755 13.7464C8.42587 13.8072 8.22251 14.1092 8.28334 14.4209L9.41204 14.2006ZM6.80129 13.6979L6.22629 13.6979V13.6979H6.80129ZM2.42103 3.21819L1.88126 3.02002L1.88126 3.02002L2.42103 3.21819ZM1.1209 6.7594L0.581129 6.56122H0.581129L1.1209 6.7594ZM1.68051 8.92905L1.30393 9.36357H1.30393L1.68051 8.92905ZM2.57264 9.70221L2.19606 10.1367V10.1367L2.57264 9.70221ZM3.04137 10.7287L2.46637 10.7287L3.04137 10.7287ZM3.04135 12.1496L3.61635 12.1496L3.04135 12.1496ZM6.80133 7.36668L6.22633 7.36667V7.36667L6.80133 7.36668ZM8.53109 4.59541C8.75659 4.37181 8.75812 4.00774 8.53452 3.78225C8.31092 3.55675 7.94685 3.55521 7.72135 3.77882L8.53109 4.59541ZM12.9599 13.616L12.9599 13.041L12.9599 13.616ZM17 14.191C17.3176 14.191 17.575 13.9335 17.575 13.616C17.575 13.2984 17.3176 13.041 17 13.041L17 14.191ZM9.4003 10.8228C9.2604 10.5377 8.91588 10.42 8.63079 10.5599C8.3457 10.6998 8.22801 11.0443 8.36791 11.3294L9.4003 10.8228ZM8.09431 2.58094H8.91481V1.43094H8.09431V2.58094ZM14.1751 14.1989C14.1751 15.2397 13.2037 16.1407 11.7713 16.1407V17.2907C13.6291 17.2907 15.3251 16.066 15.3251 14.1989H14.1751ZM8.91481 2.58094C11.82 2.58094 14.1751 4.93605 14.1751 7.84122H15.3251C15.3251 4.30092 12.4551 1.43094 8.91481 1.43094V2.58094ZM14.1751 7.84122V11.4632H15.3251V7.84122H14.1751ZM11.7713 16.1407C10.6027 16.1407 9.62784 15.3063 9.41204 14.2006L8.28334 14.4209C8.60251 16.0563 10.0421 17.2907 11.7713 17.2907V16.1407ZM8.17827 1.425H4.16598V2.575H8.17827V1.425ZM1.88126 3.02002L0.581129 6.56122L1.66067 6.95757L2.9608 3.41636L1.88126 3.02002ZM1.30393 9.36357L2.19606 10.1367L2.94922 9.26768L2.05709 8.49452L1.30393 9.36357ZM2.46637 10.7287L2.46635 12.1496L3.61635 12.1496L3.61637 10.7287L2.46637 10.7287ZM7.37633 7.36668C7.37633 6.3259 7.79205 5.32824 8.53109 4.59541L7.72135 3.77882C6.76455 4.72758 6.22634 6.01922 6.22633 7.36667L7.37633 7.36668ZM0.581129 6.56122C0.216349 7.55478 0.504096 8.6704 1.30393 9.36357L2.05709 8.49452C1.61842 8.11435 1.46061 7.50249 1.66067 6.95757L0.581129 6.56122ZM5.69543 15.3787C6.62374 15.3787 7.37629 14.6262 7.37629 13.6979H6.22629C6.22629 13.9911 5.98862 14.2287 5.69543 14.2287V15.3787ZM5.69543 14.2287C4.54717 14.2287 3.61633 13.2979 3.61635 12.1496L2.46635 12.1496C2.46632 13.933 3.91204 15.3787 5.69543 15.3787V14.2287ZM2.19606 10.1367C2.36774 10.2855 2.46637 10.5015 2.46637 10.7287L3.61637 10.7287C3.61637 10.168 3.37295 9.63491 2.94922 9.26768L2.19606 10.1367ZM4.16598 1.425C3.1453 1.425 2.23304 2.06187 1.88126 3.02002L2.9608 3.41636C3.14637 2.91094 3.62757 2.575 4.16598 2.575V1.425ZM12.9599 14.191L17 14.191L17 13.041L12.9599 13.041L12.9599 14.191ZM8.36791 11.3294C9.2275 13.081 11.0087 14.191 12.9599 14.191L12.9599 13.041C11.4474 13.041 10.0666 12.1806 9.4003 10.8228L8.36791 11.3294ZM7.37629 13.6979L7.37633 7.36668L6.22633 7.36667L6.22629 13.6979L7.37629 13.6979Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M11.9044 7.79688C11.9016 7.79688 11.9003 7.79642 11.8995 7.79609C11.8984 7.79561 11.8968 7.79466 11.8952 7.79306C11.8936 7.79147 11.8927 7.78989 11.8922 7.78874C11.8919 7.78798 11.8914 7.7867 11.8914 7.78384C11.8914 7.78098 11.8919 7.7797 11.8922 7.77894C11.8927 7.7778 11.8936 7.77622 11.8952 7.77462C11.8968 7.77302 11.8984 7.77207 11.8995 7.77159C11.9003 7.77127 11.9016 7.7708 11.9044 7.7708C11.9073 7.7708 11.9086 7.77127 11.9093 7.77159C11.9105 7.77207 11.9121 7.77302 11.9137 7.77462C11.9153 7.77622 11.9162 7.7778 11.9167 7.77894C11.917 7.7797 11.9175 7.78098 11.9175 7.78384C11.9175 7.7867 11.917 7.78798 11.9167 7.78874C11.9162 7.78989 11.9153 7.79147 11.9137 7.79306C11.9121 7.79466 11.9105 7.79561 11.9093 7.79609C11.9086 7.79642 11.9073 7.79688 11.9044 7.79688Z"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
A complete platform, built on Postgres
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
<>
|
||||
<span className="text-foreground">
|
||||
Build on powerful platform that grows with your customers.
|
||||
</span>{' '}
|
||||
Supabase offers the tools developers need to build powerful applications. Your customers
|
||||
will appreciate knowing they can start quickly with a prototype and scale to millions
|
||||
with ease.
|
||||
</>
|
||||
),
|
||||
img: (
|
||||
<svg
|
||||
width="390"
|
||||
height="160"
|
||||
viewBox="0 0 390 160"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="w-full"
|
||||
>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="0.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="0.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M15.0719 18.1621H24.9448V22.7588H15.0719V18.1621Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M14.2539 23.9102C14.2539 23.2755 14.7684 22.761 15.4031 22.761H24.5964C25.2311 22.761 25.7456 23.2755 25.7456 23.9102V26.2085C25.7456 26.8432 25.2311 27.3577 24.5964 27.3577H15.4031C14.7684 27.3577 14.2539 26.8432 14.2539 26.2085V23.9102Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M14.2539 14.7148C14.2539 14.0802 14.7684 13.5657 15.4031 13.5657H24.5964C25.2311 13.5657 25.7456 14.0802 25.7456 14.7148V17.0132C25.7456 17.6479 25.2311 18.1624 24.5964 18.1624H15.4031C14.7684 18.1624 14.2539 17.6479 14.2539 17.0132V14.7148Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M53.008 24.608H55.328C57.424 24.608 59.184 23.2 59.184 20.352C59.184 17.488 57.456 16.048 55.36 16.048H53.008V24.608ZM55.376 26H51.44V14.656H55.408C58.288 14.656 60.8 16.624 60.8 20.352C60.8 24.064 58.256 26 55.376 26ZM62.3156 23.936C62.3156 22.56 63.3236 21.792 64.6516 21.6L66.7316 21.296C67.1956 21.232 67.3236 20.992 67.3236 20.72C67.3236 19.968 66.8276 19.344 65.6596 19.344C64.6036 19.344 64.0116 20 63.9156 20.896L62.4756 20.56C62.6356 19.088 63.9636 18.064 65.6276 18.064C67.9316 18.064 68.8276 19.376 68.8276 20.88V24.736C68.8276 25.408 68.8916 25.808 68.9236 26H67.4516C67.4196 25.808 67.3716 25.52 67.3716 24.96C67.0356 25.504 66.2676 26.24 64.8916 26.24C63.3236 26.24 62.3156 25.152 62.3156 23.936ZM65.0996 24.976C66.3316 24.976 67.3236 24.384 67.3236 22.704V22.352L64.9716 22.704C64.3316 22.8 63.8516 23.168 63.8516 23.856C63.8516 24.432 64.3316 24.976 65.0996 24.976ZM73.1866 15.872V18.304H74.8506V19.664H73.1866V23.664C73.1866 24.368 73.4746 24.72 74.2586 24.72C74.4506 24.72 74.7226 24.688 74.8506 24.656V25.936C74.7226 25.984 74.3386 26.08 73.8266 26.08C72.5146 26.08 71.6826 25.28 71.6826 23.888V19.664H70.2106V18.304H70.6266C71.4586 18.304 71.8106 17.792 71.8106 17.12V15.872H73.1866ZM76.3781 23.936C76.3781 22.56 77.3861 21.792 78.7141 21.6L80.7941 21.296C81.2581 21.232 81.3861 20.992 81.3861 20.72C81.3861 19.968 80.8901 19.344 79.7221 19.344C78.6661 19.344 78.0741 20 77.9781 20.896L76.5381 20.56C76.6981 19.088 78.0261 18.064 79.6901 18.064C81.9941 18.064 82.8901 19.376 82.8901 20.88V24.736C82.8901 25.408 82.9541 25.808 82.9861 26H81.5141C81.4821 25.808 81.4341 25.52 81.4341 24.96C81.0981 25.504 80.3301 26.24 78.9541 26.24C77.3861 26.24 76.3781 25.152 76.3781 23.936ZM79.1621 24.976C80.3941 24.976 81.3861 24.384 81.3861 22.704V22.352L79.0341 22.704C78.3941 22.8 77.9141 23.168 77.9141 23.856C77.9141 24.432 78.3941 24.976 79.1621 24.976ZM86.7211 26H85.2331V14.416H86.7211V19.392C87.0891 18.704 87.9851 18.08 89.2651 18.08C91.6011 18.08 92.8011 19.872 92.8011 22.112C92.8011 24.4 91.5051 26.208 89.2171 26.208C88.0811 26.208 87.2011 25.712 86.7211 24.88V26ZM91.2651 22.112C91.2651 20.448 90.3851 19.408 88.9931 19.408C87.6651 19.408 86.7051 20.448 86.7051 22.112C86.7051 23.776 87.6651 24.864 88.9931 24.864C90.3691 24.864 91.2651 23.776 91.2651 22.112ZM94.2375 23.936C94.2375 22.56 95.2455 21.792 96.5735 21.6L98.6535 21.296C99.1175 21.232 99.2455 20.992 99.2455 20.72C99.2455 19.968 98.7495 19.344 97.5815 19.344C96.5255 19.344 95.9335 20 95.8375 20.896L94.3975 20.56C94.5575 19.088 95.8855 18.064 97.5495 18.064C99.8535 18.064 100.75 19.376 100.75 20.88V24.736C100.75 25.408 100.814 25.808 100.846 26H99.3735C99.3415 25.808 99.2935 25.52 99.2935 24.96C98.9575 25.504 98.1895 26.24 96.8135 26.24C95.2455 26.24 94.2375 25.152 94.2375 23.936ZM97.0215 24.976C98.2535 24.976 99.2455 24.384 99.2455 22.704V22.352L96.8935 22.704C96.2535 22.8 95.7735 23.168 95.7735 23.856C95.7735 24.432 96.2535 24.976 97.0215 24.976ZM102.373 24L103.733 23.52C103.829 24.32 104.437 24.96 105.525 24.96C106.373 24.96 106.837 24.48 106.837 23.936C106.837 23.456 106.485 23.088 105.845 22.944L104.533 22.656C103.333 22.4 102.613 21.584 102.613 20.496C102.613 19.184 103.845 18.064 105.349 18.064C107.461 18.064 108.117 19.44 108.277 20.128L106.949 20.624C106.885 20.224 106.565 19.344 105.349 19.344C104.581 19.344 104.069 19.84 104.069 20.368C104.069 20.832 104.357 21.168 104.949 21.296L106.197 21.568C107.589 21.872 108.325 22.72 108.325 23.856C108.325 24.944 107.413 26.24 105.509 26.24C103.397 26.24 102.501 24.88 102.373 24ZM111.225 21.36H115.433C115.401 20.256 114.681 19.392 113.321 19.392C112.057 19.392 111.289 20.368 111.225 21.36ZM115.657 23.36L116.953 23.808C116.521 25.168 115.289 26.24 113.497 26.24C111.433 26.24 109.625 24.736 109.625 22.128C109.625 19.712 111.369 18.064 113.305 18.064C115.673 18.064 117.001 19.696 117.001 22.096C117.001 22.288 116.985 22.48 116.969 22.576H111.177C111.209 23.952 112.201 24.912 113.497 24.912C114.745 24.912 115.369 24.224 115.657 23.36Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="60.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="60.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M14.9304 82.2214H20.5554M14.9304 82.2214V84.4714H20.5554V82.2214M14.9304 82.2214V79.9714H20.5554V82.2214M22.2495 76.625V74.375C22.2495 73.1324 21.2422 72.125 19.9995 72.125C18.7569 72.125 17.7495 73.1324 17.7495 74.375V76.625M14.9063 78.9233L14.9063 84.4517C14.9063 85.721 15.9353 86.75 17.2046 86.75H22.7329C24.0022 86.75 25.0313 85.721 25.0313 84.4517V78.9233C25.0313 77.654 24.0022 76.625 22.7329 76.625L17.2046 76.625C15.9353 76.625 14.9063 77.654 14.9063 78.9233Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeWidth="1.14917"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M59.296 86L58.064 82.832H53.04L51.84 86H50.16L54.672 74.656H56.48L60.992 86H59.296ZM55.536 76.288L53.6 81.376H57.504L55.536 76.288ZM67.102 85.072C66.686 85.872 65.726 86.24 64.83 86.24C63.038 86.24 61.95 84.896 61.95 83.152V78.304H63.454V82.928C63.454 83.984 63.934 84.912 65.198 84.912C66.414 84.912 67.022 84.112 67.022 82.944V78.304H68.526V84.576C68.526 85.184 68.574 85.728 68.606 86H67.166C67.134 85.824 67.102 85.392 67.102 85.072ZM73.1085 75.872V78.304H74.7725V79.664H73.1085V83.664C73.1085 84.368 73.3965 84.72 74.1805 84.72C74.3725 84.72 74.6445 84.688 74.7725 84.656V85.936C74.6445 85.984 74.2605 86.08 73.7485 86.08C72.4365 86.08 71.6045 85.28 71.6045 83.888V79.664H70.1325V78.304H70.5485C71.3805 78.304 71.7325 77.792 71.7325 77.12V75.872H73.1085ZM78.284 81.472V86H76.78V74.416H78.284V79.2C78.844 78.384 79.74 78.08 80.62 78.08C82.46 78.08 83.372 79.408 83.372 81.12V86H81.868V81.376C81.868 80.304 81.42 79.44 80.076 79.44C78.924 79.44 78.316 80.336 78.284 81.472Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="120.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="0.5"
|
||||
y="120.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M16.8056 146.151C17.7616 146.649 18.8482 146.93 20.0005 146.93C23.8279 146.93 26.9307 143.827 26.9307 140C26.9307 138.845 26.6479 137.755 26.1478 136.797M23.2356 133.87C22.2699 133.359 21.169 133.07 20.0005 133.07C16.1731 133.07 13.0703 136.173 13.0703 140C13.0703 141.179 13.365 142.29 13.8847 143.262M13.8847 143.262C13.6053 143.604 13.4377 144.04 13.4377 144.516C13.4377 145.609 14.3242 146.496 15.4178 146.496C16.5113 146.496 17.3978 145.609 17.3978 144.516C17.3978 143.422 16.5113 142.535 15.4178 142.535C14.7997 142.535 14.2478 142.819 13.8847 143.262ZM26.6007 135.477C26.6007 136.571 25.7142 137.458 24.6206 137.458C23.5271 137.458 22.6406 136.571 22.6406 135.477C22.6406 134.384 23.5271 133.497 24.6206 133.497C25.7142 133.497 26.6007 134.384 26.6007 135.477ZM24.4556 140C24.4556 142.46 22.461 144.455 20.0005 144.455C17.54 144.455 15.5454 142.46 15.5454 140C15.5454 137.54 17.54 135.545 20.0005 135.545C22.461 135.545 24.4556 137.54 24.4556 140Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeWidth="1.14917"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M58.336 146H51.44V134.656H58.336V136.112H53.008V139.6H57.84V141.072H53.008V144.544H58.336V146ZM61.1604 142.128C61.1604 143.712 61.9764 144.88 63.4164 144.88C64.7924 144.88 65.6404 143.68 65.6404 142.096C65.6404 140.512 64.8084 139.424 63.4324 139.424C62.0564 139.424 61.1604 140.544 61.1604 142.128ZM65.6564 144.96V144.832C65.2884 145.568 64.4724 146.208 63.2724 146.208C61.0164 146.208 59.6244 144.416 59.6244 142.128C59.6244 139.952 61.0964 138.096 63.2724 138.096C64.6324 138.096 65.3684 138.768 65.6244 139.392V134.416H67.1124V144.576C67.1124 145.312 67.1764 145.872 67.1924 146H65.7364C65.7044 145.824 65.6564 145.424 65.6564 144.96ZM69.1106 146.416L70.5666 146.08C70.6786 147.152 71.4946 147.968 72.6626 147.968C74.2786 147.968 75.0146 147.136 75.0146 145.472V144.368C74.6466 145.072 73.8146 145.632 72.6626 145.632C70.6146 145.632 69.1266 144.08 69.1266 141.904C69.1266 139.824 70.5506 138.16 72.6626 138.16C73.8466 138.16 74.6466 138.608 75.0306 139.376V138.304H76.5186V145.424C76.5186 147.376 75.5586 149.28 72.6626 149.28C70.7426 149.28 69.3026 148.064 69.1106 146.416ZM72.8866 144.368C74.1826 144.368 75.0786 143.392 75.0786 141.904C75.0786 140.416 74.1826 139.44 72.8866 139.44C71.5586 139.44 70.6626 140.416 70.6626 141.904C70.6626 143.408 71.5266 144.368 72.8866 144.368ZM79.8966 141.36H84.1046C84.0726 140.256 83.3526 139.392 81.9926 139.392C80.7286 139.392 79.9606 140.368 79.8966 141.36ZM84.3286 143.36L85.6246 143.808C85.1926 145.168 83.9606 146.24 82.1686 146.24C80.1046 146.24 78.2966 144.736 78.2966 142.128C78.2966 139.712 80.0406 138.064 81.9766 138.064C84.3446 138.064 85.6726 139.696 85.6726 142.096C85.6726 142.288 85.6566 142.48 85.6406 142.576H79.8486C79.8806 143.952 80.8726 144.912 82.1686 144.912C83.4166 144.912 84.0406 144.224 84.3286 143.36ZM93.3205 146H91.7525V134.656H98.6485V136.112H93.3205V139.76H98.1525V141.232H93.3205V146ZM104.758 145.072C104.342 145.872 103.382 146.24 102.486 146.24C100.694 146.24 99.6063 144.896 99.6063 143.152V138.304H101.11V142.928C101.11 143.984 101.59 144.912 102.854 144.912C104.07 144.912 104.678 144.112 104.678 142.944V138.304H106.182V144.576C106.182 145.184 106.23 145.728 106.262 146H104.822C104.79 145.824 104.758 145.392 104.758 145.072ZM110.253 141.552V146H108.749V138.304H110.221V139.408C110.781 138.448 111.693 138.08 112.589 138.08C114.429 138.08 115.341 139.408 115.341 141.12V146H113.837V141.376C113.837 140.304 113.389 139.44 112.045 139.44C110.861 139.44 110.253 140.384 110.253 141.552ZM120.965 139.456C119.749 139.456 118.629 140.352 118.629 142.144C118.629 143.904 119.733 144.848 120.981 144.848C122.421 144.848 122.949 143.872 123.125 143.264L124.453 143.84C124.085 144.944 122.981 146.24 120.981 146.24C118.741 146.24 117.093 144.48 117.093 142.144C117.093 139.744 118.773 138.064 120.965 138.064C123.013 138.064 124.069 139.344 124.389 140.512L123.029 141.088C122.837 140.336 122.277 139.456 120.965 139.456ZM128.234 135.872V138.304H129.898V139.664H128.234V143.664C128.234 144.368 128.522 144.72 129.306 144.72C129.498 144.72 129.77 144.688 129.898 144.656V145.936C129.77 145.984 129.386 146.08 128.874 146.08C127.562 146.08 126.73 145.28 126.73 143.888V139.664H125.258V138.304H125.674C126.506 138.304 126.858 137.792 126.858 137.12V135.872H128.234ZM133.393 146H131.905V138.304H133.393V146ZM131.569 135.392C131.569 134.784 132.049 134.304 132.641 134.304C133.249 134.304 133.729 134.784 133.729 135.392C133.729 135.984 133.249 136.464 132.641 136.464C132.049 136.464 131.569 135.984 131.569 135.392ZM139.248 144.896C140.528 144.896 141.648 143.936 141.648 142.144C141.648 140.368 140.528 139.408 139.248 139.408C137.968 139.408 136.848 140.368 136.848 142.144C136.848 143.936 137.968 144.896 139.248 144.896ZM139.248 138.064C141.552 138.064 143.184 139.808 143.184 142.144C143.184 144.496 141.552 146.24 139.248 146.24C136.944 146.24 135.312 144.496 135.312 142.144C135.312 139.808 136.944 138.064 139.248 138.064ZM146.612 141.552V146H145.108V138.304H146.58V139.408C147.14 138.448 148.052 138.08 148.948 138.08C150.788 138.08 151.7 139.408 151.7 141.12V146H150.196V141.376C150.196 140.304 149.748 139.44 148.404 139.44C147.22 139.44 146.612 140.384 146.612 141.552ZM153.373 144L154.733 143.52C154.829 144.32 155.437 144.96 156.525 144.96C157.373 144.96 157.837 144.48 157.837 143.936C157.837 143.456 157.485 143.088 156.845 142.944L155.533 142.656C154.333 142.4 153.613 141.584 153.613 140.496C153.613 139.184 154.845 138.064 156.349 138.064C158.461 138.064 159.117 139.44 159.277 140.128L157.949 140.624C157.885 140.224 157.565 139.344 156.349 139.344C155.581 139.344 155.069 139.84 155.069 140.368C155.069 140.832 155.357 141.168 155.949 141.296L157.197 141.568C158.589 141.872 159.325 142.72 159.325 143.856C159.325 144.944 158.413 146.24 156.509 146.24C154.397 146.24 153.501 144.88 153.373 144Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="0.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="0.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M239.627 19.4473V17.3013L235.557 13.2503H229.526C228.891 13.2503 228.377 13.7648 228.377 14.3994V17.7497M239.587 17.2825L235.555 13.25L235.555 16.1334C235.555 16.768 236.069 17.2825 236.704 17.2825L239.587 17.2825ZM229.989 17.7497H228.372C227.737 17.7497 227.223 18.2642 227.223 18.8989V24.4514C227.223 25.7207 228.252 26.7497 229.521 26.7497H238.424C239.694 26.7497 240.723 25.7207 240.723 24.4514V20.5964C240.723 19.9618 240.208 19.4473 239.573 19.4473H232.655C232.354 19.4473 232.064 19.3288 231.849 19.1173L230.795 18.0797C230.58 17.8682 230.29 17.7497 229.989 17.7497Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeWidth="1.14917"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M272.672 17.232L271.264 17.728C271.136 16.912 270.448 15.792 268.864 15.792C267.584 15.792 266.672 16.624 266.672 17.68C266.672 18.496 267.168 19.12 268.128 19.328L269.824 19.696C271.712 20.112 272.768 21.296 272.768 22.88C272.768 24.64 271.264 26.24 268.848 26.24C266.112 26.24 264.816 24.48 264.608 22.864L266.112 22.384C266.224 23.648 267.12 24.816 268.832 24.816C270.4 24.816 271.168 24 271.168 23.008C271.168 22.192 270.608 21.488 269.472 21.248L267.856 20.896C266.24 20.544 265.088 19.488 265.088 17.792C265.088 16.016 266.736 14.416 268.832 14.416C271.392 14.416 272.416 16 272.672 17.232ZM276.624 15.872V18.304H278.288V19.664H276.624V23.664C276.624 24.368 276.912 24.72 277.696 24.72C277.888 24.72 278.16 24.688 278.288 24.656V25.936C278.16 25.984 277.776 26.08 277.264 26.08C275.952 26.08 275.12 25.28 275.12 23.888V19.664H273.648V18.304H274.064C274.896 18.304 275.248 17.792 275.248 17.12V15.872H276.624ZM283.514 24.896C284.794 24.896 285.914 23.936 285.914 22.144C285.914 20.368 284.794 19.408 283.514 19.408C282.234 19.408 281.114 20.368 281.114 22.144C281.114 23.936 282.234 24.896 283.514 24.896ZM283.514 18.064C285.818 18.064 287.45 19.808 287.45 22.144C287.45 24.496 285.818 26.24 283.514 26.24C281.21 26.24 279.578 24.496 279.578 22.144C279.578 19.808 281.21 18.064 283.514 18.064ZM293.646 18.224V19.824C293.422 19.792 293.198 19.776 292.99 19.776C291.726 19.776 290.878 20.448 290.878 22.144V26H289.374V18.304H290.846V19.648C291.406 18.464 292.366 18.176 293.15 18.176C293.358 18.176 293.566 18.208 293.646 18.224ZM294.769 23.936C294.769 22.56 295.777 21.792 297.105 21.6L299.185 21.296C299.649 21.232 299.777 20.992 299.777 20.72C299.777 19.968 299.281 19.344 298.113 19.344C297.057 19.344 296.465 20 296.369 20.896L294.929 20.56C295.089 19.088 296.417 18.064 298.081 18.064C300.385 18.064 301.281 19.376 301.281 20.88V24.736C301.281 25.408 301.345 25.808 301.377 26H299.905C299.873 25.808 299.825 25.52 299.825 24.96C299.489 25.504 298.721 26.24 297.345 26.24C295.777 26.24 294.769 25.152 294.769 23.936ZM297.553 24.976C298.785 24.976 299.777 24.384 299.777 22.704V22.352L297.425 22.704C296.785 22.8 296.305 23.168 296.305 23.856C296.305 24.432 296.785 24.976 297.553 24.976ZM303.064 26.416L304.52 26.08C304.632 27.152 305.448 27.968 306.616 27.968C308.232 27.968 308.968 27.136 308.968 25.472V24.368C308.6 25.072 307.768 25.632 306.616 25.632C304.568 25.632 303.08 24.08 303.08 21.904C303.08 19.824 304.504 18.16 306.616 18.16C307.8 18.16 308.6 18.608 308.984 19.376V18.304H310.472V25.424C310.472 27.376 309.512 29.28 306.616 29.28C304.696 29.28 303.256 28.064 303.064 26.416ZM306.84 24.368C308.136 24.368 309.032 23.392 309.032 21.904C309.032 20.416 308.136 19.44 306.84 19.44C305.512 19.44 304.616 20.416 304.616 21.904C304.616 23.408 305.48 24.368 306.84 24.368ZM313.85 21.36H318.058C318.026 20.256 317.306 19.392 315.946 19.392C314.682 19.392 313.914 20.368 313.85 21.36ZM318.282 23.36L319.578 23.808C319.146 25.168 317.914 26.24 316.122 26.24C314.058 26.24 312.25 24.736 312.25 22.128C312.25 19.712 313.994 18.064 315.93 18.064C318.298 18.064 319.626 19.696 319.626 22.096C319.626 22.288 319.61 22.48 319.594 22.576H313.802C313.834 23.952 314.826 24.912 316.122 24.912C317.37 24.912 317.994 24.224 318.282 23.36Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="60.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="60.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M231.032 72.1074V74.9124M228.933 74.9124L226.536 72.4418M228.933 76.8532H226.184M236.534 82.5839L240.243 81.6607C240.774 81.5284 240.837 80.7977 240.335 80.5772L231.475 76.6811C230.996 76.4704 230.507 76.9578 230.717 77.4373L234.543 86.1868C234.762 86.687 235.489 86.6289 235.626 86.1002L236.534 82.5839Z"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeWidth="1.14917"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M271.312 86L268.72 81.36H267.024V86H265.44V74.656H269.712C271.856 74.656 273.184 76.16 273.184 78.032C273.184 79.664 272.144 80.928 270.432 81.248L273.136 86H271.312ZM267.024 79.952H269.424C270.704 79.952 271.568 79.2 271.568 78.032C271.568 76.832 270.704 76.064 269.424 76.064H267.024V79.952ZM275.85 81.36H280.058C280.026 80.256 279.306 79.392 277.946 79.392C276.682 79.392 275.914 80.368 275.85 81.36ZM280.282 83.36L281.578 83.808C281.146 85.168 279.914 86.24 278.122 86.24C276.058 86.24 274.25 84.736 274.25 82.128C274.25 79.712 275.994 78.064 277.93 78.064C280.298 78.064 281.626 79.696 281.626 82.096C281.626 82.288 281.61 82.48 281.594 82.576H275.802C275.834 83.952 276.826 84.912 278.122 84.912C279.37 84.912 279.994 84.224 280.282 83.36ZM283.066 83.936C283.066 82.56 284.074 81.792 285.402 81.6L287.482 81.296C287.946 81.232 288.074 80.992 288.074 80.72C288.074 79.968 287.578 79.344 286.41 79.344C285.354 79.344 284.762 80 284.666 80.896L283.226 80.56C283.386 79.088 284.714 78.064 286.378 78.064C288.682 78.064 289.578 79.376 289.578 80.88V84.736C289.578 85.408 289.642 85.808 289.674 86H288.202C288.17 85.808 288.122 85.52 288.122 84.96C287.786 85.504 287.018 86.24 285.642 86.24C284.074 86.24 283.066 85.152 283.066 83.936ZM285.85 84.976C287.082 84.976 288.074 84.384 288.074 82.704V82.352L285.722 82.704C285.082 82.8 284.602 83.168 284.602 83.856C284.602 84.432 285.082 84.976 285.85 84.976ZM293.425 86H291.921V74.416H293.425V86ZM297.999 75.872V78.304H299.663V79.664H297.999V83.664C297.999 84.368 298.287 84.72 299.071 84.72C299.263 84.72 299.535 84.688 299.663 84.656V85.936C299.535 85.984 299.151 86.08 298.639 86.08C297.327 86.08 296.495 85.28 296.495 83.888V79.664H295.023V78.304H295.439C296.271 78.304 296.623 77.792 296.623 77.12V75.872H297.999ZM303.159 86H301.671V78.304H303.159V86ZM301.335 75.392C301.335 74.784 301.815 74.304 302.407 74.304C303.015 74.304 303.495 74.784 303.495 75.392C303.495 75.984 303.015 76.464 302.407 76.464C301.815 76.464 301.335 75.984 301.335 75.392ZM307.206 86H305.718V78.304H307.158V79.328C307.638 78.48 308.598 78.08 309.494 78.08C310.454 78.08 311.382 78.544 311.798 79.536C312.406 78.432 313.398 78.08 314.374 78.08C315.718 78.08 317.03 78.992 317.03 81.008V86H315.542V81.168C315.542 80.16 315.046 79.408 313.91 79.408C312.854 79.408 312.134 80.24 312.134 81.344V86H310.63V81.168C310.63 80.176 310.15 79.408 308.998 79.408C307.926 79.408 307.206 80.208 307.206 81.36V86ZM320.412 81.36H324.62C324.588 80.256 323.868 79.392 322.508 79.392C321.244 79.392 320.476 80.368 320.412 81.36ZM324.844 83.36L326.14 83.808C325.708 85.168 324.476 86.24 322.684 86.24C320.62 86.24 318.812 84.736 318.812 82.128C318.812 79.712 320.556 78.064 322.492 78.064C324.86 78.064 326.188 79.696 326.188 82.096C326.188 82.288 326.172 82.48 326.156 82.576H320.364C320.396 83.952 321.388 84.912 322.684 84.912C323.932 84.912 324.556 84.224 324.844 83.36Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="120.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
fill="hsl(var(--background-alternative))"
|
||||
/>
|
||||
<rect
|
||||
x="214.5"
|
||||
y="120.5"
|
||||
width="39"
|
||||
height="39"
|
||||
rx="7.5"
|
||||
stroke="hsl(var(--border-default))"
|
||||
/>
|
||||
<path
|
||||
d="M234.001 139.586V147.3M234.001 139.586L240.807 135.633M234.001 139.586L227.195 135.633M227.195 135.633V140.364M227.195 135.633V135.592L231.272 133.224M240.808 140.405V135.592L236.731 133.224M238.296 144.958L234.001 147.452L229.707 144.958"
|
||||
stroke="hsl(var(--foreground-lighter))"
|
||||
strokeWidth="1.14917"
|
||||
strokeMiterlimit="10"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M269.248 143.984L272.704 134.656H274.352L269.984 146H268.432L264.16 134.656H265.824L269.248 143.984ZM275.897 141.36H280.105C280.073 140.256 279.353 139.392 277.993 139.392C276.729 139.392 275.961 140.368 275.897 141.36ZM280.329 143.36L281.625 143.808C281.193 145.168 279.961 146.24 278.169 146.24C276.105 146.24 274.297 144.736 274.297 142.128C274.297 139.712 276.041 138.064 277.977 138.064C280.345 138.064 281.673 139.696 281.673 142.096C281.673 142.288 281.657 142.48 281.641 142.576H275.849C275.881 143.952 276.873 144.912 278.169 144.912C279.417 144.912 280.041 144.224 280.329 143.36ZM286.825 139.456C285.609 139.456 284.489 140.352 284.489 142.144C284.489 143.904 285.593 144.848 286.841 144.848C288.281 144.848 288.809 143.872 288.985 143.264L290.312 143.84C289.945 144.944 288.841 146.24 286.841 146.24C284.601 146.24 282.953 144.48 282.953 142.144C282.953 139.744 284.633 138.064 286.825 138.064C288.873 138.064 289.929 139.344 290.249 140.512L288.889 141.088C288.697 140.336 288.137 139.456 286.825 139.456ZM294.093 135.872V138.304H295.757V139.664H294.093V143.664C294.093 144.368 294.381 144.72 295.165 144.72C295.357 144.72 295.629 144.688 295.757 144.656V145.936C295.629 145.984 295.245 146.08 294.733 146.08C293.421 146.08 292.589 145.28 292.589 143.888V139.664H291.117V138.304H291.533C292.365 138.304 292.717 137.792 292.717 137.12V135.872H294.093ZM300.982 144.896C302.262 144.896 303.382 143.936 303.382 142.144C303.382 140.368 302.262 139.408 300.982 139.408C299.702 139.408 298.582 140.368 298.582 142.144C298.582 143.936 299.702 144.896 300.982 144.896ZM300.982 138.064C303.286 138.064 304.918 139.808 304.918 142.144C304.918 144.496 303.286 146.24 300.982 146.24C298.678 146.24 297.046 144.496 297.046 142.144C297.046 139.808 298.678 138.064 300.982 138.064ZM311.115 138.224V139.824C310.891 139.792 310.667 139.776 310.459 139.776C309.195 139.776 308.347 140.448 308.347 142.144V146H306.843V138.304H308.315V139.648C308.875 138.464 309.835 138.176 310.619 138.176C310.827 138.176 311.035 138.208 311.115 138.224ZM311.998 144L313.358 143.52C313.454 144.32 314.062 144.96 315.15 144.96C315.998 144.96 316.462 144.48 316.462 143.936C316.462 143.456 316.11 143.088 315.47 142.944L314.158 142.656C312.958 142.4 312.238 141.584 312.238 140.496C312.238 139.184 313.47 138.064 314.974 138.064C317.086 138.064 317.742 139.44 317.902 140.128L316.574 140.624C316.51 140.224 316.19 139.344 314.974 139.344C314.206 139.344 313.694 139.84 313.694 140.368C313.694 140.832 313.982 141.168 314.574 141.296L315.822 141.568C317.214 141.872 317.95 142.72 317.95 143.856C317.95 144.944 317.038 146.24 315.134 146.24C313.022 146.24 312.126 144.88 311.998 144Z"
|
||||
fill="hsl(var(--foreground-light))"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
},
|
||||
branching: {
|
||||
id: 'branching',
|
||||
icon: Timer,
|
||||
heading: (
|
||||
<>
|
||||
<svg
|
||||
width="18"
|
||||
height="18"
|
||||
viewBox="0 0 18 18"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M13.5 15.75C14.7426 15.75 15.75 14.7426 15.75 13.5C15.75 12.2574 14.7426 11.25 13.5 11.25C12.2574 11.25 11.25 12.2574 11.25 13.5C11.25 14.7426 12.2574 15.75 13.5 15.75Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M4.5 6.75C5.74264 6.75 6.75 5.74264 6.75 4.5C6.75 3.25736 5.74264 2.25 4.5 2.25C3.25736 2.25 2.25 3.25736 2.25 4.5C2.25 5.74264 3.25736 6.75 4.5 6.75Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M9.75 4.5H12C12.3978 4.5 12.7794 4.65804 13.0607 4.93934C13.342 5.22064 13.5 5.60218 13.5 6V11.25"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M8.25 13.5H6C5.60218 13.5 5.22064 13.342 4.93934 13.0607C4.65804 12.7794 4.5 12.3978 4.5 12V6.75"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1.15"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
Branching
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
<>
|
||||
<span className="text-foreground">Offer production and development branches.</span>{' '}
|
||||
Enable your customers to deploy and test changes without affecting their main production
|
||||
applications.
|
||||
</>
|
||||
),
|
||||
},
|
||||
pricing: {
|
||||
id: 'pricing',
|
||||
icon: Timer,
|
||||
heading: (
|
||||
<>
|
||||
<svg
|
||||
width="18"
|
||||
height="18"
|
||||
viewBox="0 0 18 18"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M9.00391 1.67476C4.95842 1.67476 1.67891 4.95427 1.67891 8.99975C1.67891 13.0452 4.95842 16.3248 9.00391 16.3248C13.0494 16.3248 16.3289 13.0452 16.3289 8.99975C16.3289 4.95427 13.0494 1.67476 9.00391 1.67476ZM1.32891 8.99975C1.32891 4.76097 4.76512 1.32476 9.00391 1.32476C13.2427 1.32476 16.6789 4.76097 16.6789 8.99975C16.6789 13.2385 13.2427 16.6748 9.00391 16.6748C4.76512 16.6748 1.32891 13.2385 1.32891 8.99975Z"
|
||||
fill="black"
|
||||
stroke="currentColor"
|
||||
strokeWidth="1"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M5.90901 5.90877C6.33097 5.48681 6.90326 5.24976 7.5 5.24976H12C12.4142 5.24976 12.75 5.58554 12.75 5.99976C12.75 6.41397 12.4142 6.74976 12 6.74976H7.5C7.30109 6.74976 7.11032 6.82877 6.96967 6.96943C6.82902 7.11008 6.75 7.30084 6.75 7.49976C6.75 7.69867 6.82902 7.88943 6.96967 8.03009C7.11032 8.17074 7.30109 8.24976 7.5 8.24976H10.5C11.0967 8.24976 11.669 8.48681 12.091 8.90877C12.5129 9.33072 12.75 9.90302 12.75 10.4998C12.75 11.0965 12.5129 11.6688 12.091 12.0907C11.669 12.5127 11.0967 12.7498 10.5 12.7498H6C5.58579 12.7498 5.25 12.414 5.25 11.9998C5.25 11.5855 5.58579 11.2498 6 11.2498H10.5C10.6989 11.2498 10.8897 11.1707 11.0303 11.0301C11.171 10.8894 11.25 10.6987 11.25 10.4998C11.25 10.3008 11.171 10.1101 11.0303 9.96943C10.8897 9.82877 10.6989 9.74976 10.5 9.74976H7.5C6.90326 9.74976 6.33097 9.5127 5.90901 9.09075C5.48705 8.66879 5.25 8.09649 5.25 7.49976C5.25 6.90302 5.48705 6.33072 5.90901 5.90877Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M8.99609 3.75C9.41031 3.75 9.74609 4.08579 9.74609 4.5V13.5C9.74609 13.9142 9.41031 14.25 8.99609 14.25C8.58188 14.25 8.24609 13.9142 8.24609 13.5V4.5C8.24609 4.08579 8.58188 3.75 8.99609 3.75Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
Pricing
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
<>
|
||||
<span className="text-foreground">Pricing that’s designed for builders.</span> Supabase
|
||||
offers pricing options for AI Builders that enable you to build substantial businesses
|
||||
that empower your users to go into production.
|
||||
</>
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
testimonials: {
|
||||
id: 'testimonials',
|
||||
label: '',
|
||||
heading: (
|
||||
<>
|
||||
Powerful tools, <span className="text-foreground block">powered by Supabase</span>
|
||||
</>
|
||||
),
|
||||
videos: {
|
||||
lovable: {
|
||||
url: 'https://www.youtube.com/watch?v=9GQtXXERnqU',
|
||||
},
|
||||
bolt: {
|
||||
url: 'https://www.youtube.com/watch?v=LfAV5fmRybg',
|
||||
},
|
||||
},
|
||||
},
|
||||
'cta-section': {
|
||||
id: 'connect-to-supabase',
|
||||
label: '',
|
||||
heading: <>Connect your app to Supabase now</>,
|
||||
subheading:
|
||||
'Set up a Supabase OAuth app so your users can start interacting with their Supabase Project.',
|
||||
cta: {
|
||||
label: 'View docs',
|
||||
href: 'https://supabase.com/docs/guides/auth/auth-google',
|
||||
type: 'text',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default data
|
||||
114
apps/www/data/solutions/solutions.types.ts
Normal file
@@ -0,0 +1,114 @@
|
||||
import { LucideIcon } from 'lucide-react'
|
||||
import type { ComponentType, SVGProps } from 'react'
|
||||
|
||||
type HeroIcon = ComponentType<SVGProps<SVGSVGElement>>
|
||||
type IconType = LucideIcon | HeroIcon
|
||||
|
||||
interface Metadata {
|
||||
metaTitle: string
|
||||
metaDescription: string
|
||||
}
|
||||
|
||||
export interface HeroSection {
|
||||
id: string
|
||||
title: string
|
||||
h1: JSX.Element
|
||||
subheader: JSX.Element[]
|
||||
image: JSX.Element
|
||||
className?: string
|
||||
sectionContainerClassName?: string
|
||||
icon?: string
|
||||
ctas: {
|
||||
label: string
|
||||
href: string
|
||||
type: 'primary' | 'default'
|
||||
}[]
|
||||
logos: {
|
||||
name: string
|
||||
image: string
|
||||
}[]
|
||||
footer?: React.ReactNode
|
||||
footerPosition?: 'left' | 'right'
|
||||
}
|
||||
|
||||
export interface Quote {
|
||||
icon?: string
|
||||
author: string
|
||||
authorTitle?: string
|
||||
quote: JSX.Element
|
||||
avatar: string
|
||||
}
|
||||
|
||||
export interface Quotes {
|
||||
id: string
|
||||
items: Quote[]
|
||||
}
|
||||
|
||||
export interface Highlight {
|
||||
icon?: IconType
|
||||
heading: string | JSX.Element
|
||||
subheading: string | JSX.Element
|
||||
url?: string
|
||||
}
|
||||
|
||||
export interface Feature {
|
||||
icon?: IconType
|
||||
heading: string | JSX.Element
|
||||
subheading: string | JSX.Element
|
||||
img?: JSX.Element
|
||||
}
|
||||
|
||||
export interface WhySection {
|
||||
id: string
|
||||
label: string
|
||||
heading: JSX.Element
|
||||
features: Feature[]
|
||||
}
|
||||
|
||||
interface FeaturesSection {
|
||||
id: string
|
||||
heading: JSX.Element
|
||||
subheading: string
|
||||
features: {
|
||||
[key: string]: {
|
||||
id: string
|
||||
icon?: IconType
|
||||
heading: JSX.Element
|
||||
subheading: JSX.Element
|
||||
img?: JSX.Element
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface Testimonials {
|
||||
id: string
|
||||
label: string
|
||||
heading: JSX.Element
|
||||
videos: {
|
||||
[key: string]: {
|
||||
url: string
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface CTASection {
|
||||
id: string
|
||||
label: string
|
||||
heading: JSX.Element
|
||||
subheading: string
|
||||
cta: {
|
||||
label: string
|
||||
href: string
|
||||
type: string
|
||||
}
|
||||
}
|
||||
|
||||
export interface AIData {
|
||||
metadata: Metadata
|
||||
heroSection: HeroSection
|
||||
quotes: Quotes
|
||||
why: WhySection
|
||||
features: FeaturesSection
|
||||
testimonials: Testimonials
|
||||
'cta-section': CTASection
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import { NextSeo } from 'next-seo'
|
||||
import Layout from '~/components/Layouts/Default'
|
||||
import ProductHeader from '~/components/Sections/ProductHeader2'
|
||||
|
||||
import content from '~/data/enterprise/content'
|
||||
import content from '~/data/enterprise'
|
||||
import EnterpriseLogos from '../components/Enterprise/EnterpriseLogos'
|
||||
|
||||
const EnterpriseUseCases = dynamic(() => import('components/Enterprise/UseCases'))
|
||||
|
||||
49
apps/www/pages/solutions/ai-builders.tsx
Normal file
@@ -0,0 +1,49 @@
|
||||
import { NextPage } from 'next'
|
||||
import dynamic from 'next/dynamic'
|
||||
import { NextSeo } from 'next-seo'
|
||||
|
||||
import Layout from '~/components/Layouts/Default'
|
||||
import ProductHeader from '~/components/Sections/ProductHeader2'
|
||||
import AIBuildersLogos from '~/components/Solutions/AIBuildersLogos'
|
||||
import content from '~/data/solutions/ai-builders'
|
||||
|
||||
const Quotes = dynamic(() => import('components/Solutions/Quotes'))
|
||||
const WhySupabase = dynamic(() => import('~/components/Solutions/FeaturesSection'))
|
||||
const FeaturesGrid = dynamic(() => import('~/components/Solutions/FeaturesGrid'))
|
||||
const VideosSection = dynamic(() => import('~/components/Solutions/Videos'))
|
||||
const CTAForm = dynamic(() => import('~/components/Solutions/CTAForm'))
|
||||
|
||||
const Enterprise: NextPage = () => (
|
||||
<>
|
||||
<NextSeo
|
||||
title={content.metadata.metaTitle}
|
||||
description={content.metadata.metaDescription}
|
||||
openGraph={{
|
||||
title: content.metadata.metaTitle,
|
||||
description: content.metadata.metaDescription,
|
||||
url: `https://supabase.com/enterprise`,
|
||||
images: [
|
||||
{
|
||||
url: `/images/solutions/ai-builders/ai-builders-og.png`,
|
||||
},
|
||||
],
|
||||
}}
|
||||
/>
|
||||
<Layout className="overflow-visible">
|
||||
<ProductHeader
|
||||
{...content.heroSection}
|
||||
className="[&_h1]:2xl:!text-5xl bg-default border-0 lg:pb-8 [&_.ph-footer]:mt-0 [&_.ph-footer]:lg:mt-16 [&_.ph-footer]:xl:mt-32"
|
||||
sectionContainerClassName="lg:gap-4"
|
||||
footer={<AIBuildersLogos className="mt-8 lg:max-w-xs xl:max-w-none" />}
|
||||
footerPosition="left"
|
||||
/>
|
||||
<Quotes {...content['quotes']} />
|
||||
<WhySupabase {...content.why} />
|
||||
<FeaturesGrid {...content.features} />
|
||||
<VideosSection {...content.testimonials} />
|
||||
<CTAForm />
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
|
||||
export default Enterprise
|
||||
BIN
apps/www/public/images/avatars/alexander-pesant.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
apps/www/public/images/avatars/antonosika.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
apps/www/public/images/avatars/eric-simons.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
apps/www/public/images/avatars/kevin-michael.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
5
apps/www/public/images/logos/publicity/bolt.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="114" height="60" viewBox="0 0 114 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M54.241 45.2512C45.6565 45.2512 41.4556 40.3196 41.4556 34.1096C41.4556 27.8995 47.3003 20.0457 55.8848 20.0457C64.4693 20.0457 68.6702 24.9772 68.6702 31.1872C68.6702 37.3973 62.8254 45.2512 54.241 45.2512ZM54.6063 37.3973C57.5286 37.3973 59.5378 34.6575 59.5378 31.7352C59.5378 28.8128 58.0766 28.0822 55.5195 28.0822C52.9624 28.0822 50.588 30.8219 50.588 33.7443C50.588 36.6667 52.0492 37.3973 54.6063 37.3973ZM77.8026 44.7032H68.8528L76.1588 11.4612H85.1086L77.8026 44.5206V44.7032Z" fill="#7E7E7E"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.7608 45.2512C25.0211 45.2512 22.2814 44.3379 20.8202 42.1461L20.2722 44.7032L10.2266 50L11.3225 44.7032L18.6284 11.4612H27.5782L25.0211 23.1507C27.0302 20.9589 29.0394 20.0457 31.5964 20.0457C37.0759 20.0457 40.5462 23.516 40.5462 30.0913C40.5462 36.6667 36.3453 45.2512 27.7608 45.2512ZM31.2311 31.9178C31.2311 35.0228 29.0394 37.3973 26.117 37.3973C23.1946 37.3973 23.012 36.8493 22.0987 35.7534L23.5599 29.726C24.6558 28.6301 25.7517 28.0822 27.2129 28.0822C29.4047 28.0822 31.2311 29.726 31.2311 32.1005V31.9178Z" fill="#7E7E7E"/>
|
||||
<path d="M94.4135 45.2512C89.2993 45.2512 85.4637 43.4247 85.4637 39.2238C85.4637 35.0228 85.4637 37.9452 85.6463 37.3973L87.6555 28.4475H83.6372L85.4637 20.7763H89.482L90.9431 14.2009L100.989 10L99.8929 14.2009L98.4317 20.7763H103.363L101.537 28.4475H96.6052L95.3267 34.2923V35.3881C95.3267 36.484 96.0573 37.3973 97.5185 37.3973C98.9797 37.3973 98.6144 37.3973 98.797 37.2146V44.3379C97.8838 45.0685 96.24 45.2512 94.5961 45.2512H94.4135Z" fill="#7E7E7E"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
10
apps/www/public/images/logos/publicity/co-com.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg width="92" height="60" viewBox="0 0 92 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2801_860)">
|
||||
<path d="M81.6316 29.2995C81.6316 24.2485 79.2026 19.1867 75.6026 15.7104C72.5335 12.7431 68.4498 10.6194 64.1771 10.1758C60.3007 9.77944 56.4171 10.1758 52.8498 11.8085C49.536 13.3105 46.6945 15.6879 44.6315 18.6849C43.2323 20.7363 42.2227 23.0279 41.6534 25.4449C41.2897 27.0195 41.177 28.6849 40.9625 30.2922C40.8715 30.9649 40.7988 31.6413 40.6534 32.3031C40.2645 34.044 39.4482 35.6608 38.2782 37.0073C37.1082 38.3538 35.6212 39.3878 33.9515 40.0158C29.3188 41.7176 24.0097 39.7504 21.4243 35.594C20.4884 34.0886 19.9411 32.3743 19.8315 30.6051C19.722 28.8359 20.0536 27.0671 20.7966 25.4577C21.5397 23.8484 22.6708 22.4488 24.0885 21.3847C25.5062 20.3206 27.166 19.6253 28.9188 19.3613C30.2166 19.1657 31.5394 19.2113 32.8206 19.4958C33.6098 19.6702 34.3771 19.9324 35.1079 20.2776C35.2061 20.3249 35.6315 20.5976 35.7006 20.5613C35.7697 20.5249 35.8206 20.3358 35.8534 20.2813L39.6279 13.3722L40.1625 12.394C37.6827 11.0923 34.9665 10.3024 32.1754 10.0713C29.3843 9.84015 26.5753 10.1725 23.9152 11.0485C20.9746 12.0618 18.308 13.7411 16.1235 15.9551C13.9391 18.1692 12.296 20.8582 11.3224 23.8122C9.8495 28.3825 10.0818 33.3316 11.9764 37.7439C13.871 42.1561 17.2996 45.7328 21.6279 47.812C24.1957 49.016 26.9736 49.7076 29.8061 49.8484C32.5897 49.9865 35.3715 49.5422 37.9737 48.544C40.5759 47.5458 42.9413 46.0161 44.9188 44.0521C45.2825 43.6885 45.6461 43.3031 45.9843 42.9103C49.6207 47.1065 55.1153 49.8702 60.7117 49.9065C63.8647 49.9775 66.9949 49.3567 69.8826 48.0884C73.0917 46.632 75.8655 44.3633 77.9298 41.5067C80.4662 37.9523 81.7666 33.664 81.6316 29.2995ZM72.1989 31.0195C71.9189 33.7683 70.5938 36.3046 68.4975 38.1042C66.4007 39.9039 63.6931 40.8293 60.9335 40.6892C58.1738 40.5492 55.5738 39.3543 53.6702 37.3517C51.7666 35.349 50.7051 32.6916 50.7051 29.9285C50.7051 27.1655 51.7666 24.508 53.6702 22.5054C55.5738 20.5027 58.1738 19.3079 60.9335 19.1678C63.6931 19.0278 66.4007 19.9532 68.4975 21.7528C70.5938 23.5525 71.9189 26.0888 72.1989 28.8376C72.2727 29.563 72.2727 30.294 72.1989 31.0195Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_2801_860">
|
||||
<rect width="71.2727" height="40" fill="white" transform="translate(10.3643 10)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
4
apps/www/public/images/logos/publicity/gumloop.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="188" height="60" viewBox="0 0 188 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M66.8587 37.3039L67.1813 41.6568C66.4155 41.8987 65.4884 42.0599 64.2795 42.0599C61.7805 42.0599 60.2083 40.891 59.6441 38.6742C58.5561 40.6895 56.6617 42.0599 53.7998 42.0599C49.3261 42.0599 46.8271 38.8354 46.8271 34.8049V22.1088H52.3892V33.5151C52.3892 35.8125 53.5582 37.2635 55.5733 37.2635C57.8303 37.2635 59.4022 35.611 59.4022 33.1524V22.1088H64.9243V36.2962C64.9243 37.062 65.3271 37.5054 65.8917 37.5054C66.2139 37.5054 66.4155 37.4651 66.8587 37.3039ZM93.455 21.9072C97.8484 21.9072 100.186 25.0107 100.186 29.404V41.8583H94.624V30.6132C94.624 28.1142 93.3743 26.7036 91.3593 26.7036C89.1422 26.7036 87.6106 28.3561 87.6106 30.8147V41.8583H82.0889V30.6132C82.0889 28.1546 80.8796 26.7036 78.8242 26.7036C76.6075 26.7036 75.0756 28.3561 75.0756 30.8147V41.8583H69.5538V22.1088H74.8743L75.0356 24.9704C76.1639 23.1567 78.0987 21.9072 80.8392 21.9072C84.0237 21.9072 86.1194 23.5597 87.0465 26.0184C88.0542 23.6404 90.1902 21.9072 93.455 21.9072ZM111.026 37.3039L111.349 41.6568C110.583 41.8987 109.656 42.0599 108.447 42.0599C105.222 42.0599 103.57 40.1252 103.57 36.6186V13.2416H109.092V36.2962C109.092 37.062 109.494 37.5054 110.059 37.5054C110.381 37.5054 110.583 37.4651 111.026 37.3039ZM122.65 21.9072C128.776 21.9072 132.807 25.978 132.807 31.9029C132.807 37.8278 128.776 42.0599 122.65 42.0599C116.604 42.0599 112.533 38.0293 112.533 32.1044C112.533 26.1393 116.604 21.9072 122.65 21.9072ZM122.65 26.4617C119.909 26.4617 118.096 28.6785 118.096 32.0238C118.096 35.2886 119.909 37.5054 122.65 37.5054C125.471 37.5054 127.204 35.2886 127.204 32.0238C127.204 28.6785 125.471 26.4617 122.65 26.4617ZM144.545 21.9072C150.672 21.9072 154.702 25.978 154.702 31.9029C154.702 37.8278 150.672 42.0599 144.545 42.0599C138.5 42.0599 134.429 38.0293 134.429 32.1044C134.429 26.1393 138.5 21.9072 144.545 21.9072ZM144.545 26.4617C141.805 26.4617 139.991 28.6785 139.991 32.0238C139.991 35.2886 141.805 37.5054 144.545 37.5054C147.367 37.5054 149.1 35.2886 149.1 32.0238C149.1 28.6785 147.367 26.4617 144.545 26.4617ZM169.021 21.9072C174.018 21.9072 177.605 25.4138 177.605 31.6611C177.605 37.7875 174.179 42.0599 168.819 42.0599C165.917 42.0599 163.982 40.8507 162.894 39.037V50H157.372V22.0684H162.733L162.854 24.9704C163.982 23.197 166.038 21.9072 169.021 21.9072ZM167.569 37.4247C170.189 37.4247 172.003 35.2483 172.003 31.9029C172.003 28.6382 170.31 26.5424 167.61 26.5424C164.547 26.5424 162.894 29.1219 162.894 31.3387V32.5881C162.894 34.9661 164.627 37.4247 167.569 37.4247Z" fill="#7E7E7E"/>
|
||||
<path d="M21.3641 11.0381C22.118 10.7172 23.5315 10.3303 24.5586 10.1699C25.3313 10.0378 26.1888 10.0095 28.4692 10H39.465H45.4957C45.0641 15.1885 40.3391 15.2222 39.465 15.3132C38.591 15.4042 31.8145 15.3132 31.8145 15.3132C25.7648 15.3887 24.9732 15.4831 23.1357 16.257C20.5255 17.3611 18.556 19.2297 17.3122 21.7778C16.5677 23.2972 16.3981 24.005 16.3039 26.1001C16.1626 28.8558 17.0201 31.2623 18.9518 33.6028C19.9507 34.8108 21.9861 36.198 23.5692 36.7454C24.8978 37.2078 25.2465 37.2645 26.8202 37.3211C28.1771 37.3683 28.4975 37.3494 29.3456 37.1701C30.4293 36.9436 31.4187 36.5755 32.5212 35.9904C34.4529 34.9617 36.1208 33.1687 37.1008 31.0736C38.0244 29.0917 38.3636 26.3549 37.7982 25.4584C37.6757 25.2602 37.4495 25.0148 37.2987 24.911C36.6768 24.458 36.6014 24.458 31.4752 24.5052L26.66 24.5618L26.2642 24.826C26.0475 24.9676 25.7459 25.2885 25.5858 25.5244C25.2276 26.1001 25.2276 26.572 25.5763 27.2609C25.7836 27.6855 25.9156 27.8177 26.3396 28.0253L26.8579 28.2896H30.5612H34.2645V28.516C34.2645 28.7709 33.7933 29.8373 33.4258 30.413C31.9464 32.744 29.1289 34.0935 26.4338 33.7632C24.6151 33.5462 23.164 32.8478 21.939 31.6021C20.7894 30.4413 20.1203 29.1295 19.8847 27.5818C19.4795 24.9676 20.4972 22.2874 22.4761 20.7114C23.4561 19.9469 24.1346 19.5883 25.2276 19.2675L26.1134 19.0032L31.2962 19.0315C34.3116 19.041 36.7334 19.0882 37.0914 19.1542C37.883 19.2769 38.9384 19.5883 39.353 19.8243C40.2011 20.2961 40.5498 20.5132 40.7665 20.7114C40.8984 20.8341 41.0209 20.9285 41.0586 20.9285C41.1623 20.9285 41.7748 21.5419 41.9915 21.8722C42.114 22.0515 42.2459 22.2214 42.2742 22.2497C42.5569 22.5045 43.3107 24.3919 43.4709 25.2224C43.7254 26.5814 43.4521 29.6297 42.9244 31.2812C41.8879 34.5465 39.7111 37.6797 37.1857 39.5577C34.142 41.8132 30.8721 42.9172 27.2442 42.9172C24.4644 42.9172 22.1745 42.3888 19.847 41.2187C15.8516 39.2086 12.9021 35.8111 11.5735 31.687C11.1306 30.2997 11.0364 29.9034 10.8479 28.5727C10.3673 25.128 11.1212 21.3437 12.9116 18.286C14.3345 15.8417 16.4358 13.7183 18.8576 12.2838C19.8093 11.7176 19.9978 11.6233 20.6009 11.359C20.7799 11.2835 21.1286 11.1419 21.3641 11.0381Z" fill="#7E7E7E"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
6
apps/www/public/images/logos/publicity/kiki.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="106" height="60" viewBox="0 0 106 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.6372 50V12.7636H20.7463V27.8182H21.2554L32.4554 12.7636H44.2372L31.6554 29.3455L44.5281 50H32.4554L24.0918 36.0364L20.7463 40.4V50H10.6372Z" fill="#7E7E7E"/>
|
||||
<path d="M45.9327 50V22.0727H55.969V50H45.9327ZM50.9508 19.1636C49.5933 19.1636 48.4296 18.7152 47.4599 17.8182C46.4902 16.9212 46.0054 15.8424 46.0054 14.5818C46.0054 13.3212 46.4902 12.2424 47.4599 11.3455C48.4296 10.4485 49.5933 10 50.9508 10C52.3205 10 53.4842 10.4485 54.4418 11.3455C55.4115 12.2424 55.8963 13.3212 55.8963 14.5818C55.8963 15.8424 55.4115 16.9212 54.4418 17.8182C53.4842 18.7152 52.3205 19.1636 50.9508 19.1636Z" fill="#7E7E7E"/>
|
||||
<path d="M66.9008 43.3818L66.9736 31.4545H68.2827L75.0463 22.0727H86.319L74.9736 36.6909H72.1372L66.9008 43.3818ZM57.8827 50V12.7636H67.919V50H57.8827ZM75.119 50L68.719 38.9455L75.2645 31.8182L86.6099 50H75.119Z" fill="#7E7E7E"/>
|
||||
<path d="M85.7327 50V22.0727H95.769V50H85.7327ZM90.7508 19.1636C89.3933 19.1636 88.2296 18.7152 87.2599 17.8182C86.2902 16.9212 85.8054 15.8424 85.8054 14.5818C85.8054 13.3212 86.2902 12.2424 87.2599 11.3455C88.2296 10.4485 89.3933 10 90.7508 10C92.1205 10 93.2842 10.4485 94.2418 11.3455C95.2115 12.2424 95.6963 13.3212 95.6963 14.5818C95.6963 15.8424 95.2115 16.9212 94.2418 17.8182C93.2842 18.7152 92.1205 19.1636 90.7508 19.1636Z" fill="#7E7E7E"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
155
apps/www/public/images/logos/publicity/lovable.svg
Normal file
@@ -0,0 +1,155 @@
|
||||
<svg width="221" height="60" viewBox="0 0 221 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2801_869)">
|
||||
<mask id="mask0_2801_869" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="10" y="10" width="46" height="40">
|
||||
<path d="M33.0945 49.9778C32.6454 49.9778 32.1931 49.8966 31.7376 49.7341C31.2825 49.5721 30.8865 49.3226 30.5496 48.9858L27.2742 45.9725C22.8576 41.8928 18.9807 37.9534 15.6435 34.1543C12.306 30.3553 10.6372 26.3162 10.6372 22.0369C10.6372 18.6185 11.785 15.7614 14.0805 13.4655C16.3764 11.17 19.221 10.0222 22.6143 10.0222C24.5482 10.0222 26.4322 10.4682 28.2662 11.3601C30.1003 12.2524 31.7097 13.6405 33.0945 15.5243C34.6041 13.6405 36.2385 12.2524 37.9977 11.3601C39.7569 10.4682 41.6159 10.0222 43.5748 10.0222C46.9682 10.0222 49.8128 11.17 52.1087 13.4655C54.4041 15.7614 55.552 18.6185 55.552 22.0369C55.552 26.3162 53.8865 30.3585 50.5553 34.1638C47.2241 37.9694 43.3375 41.9119 38.8958 45.9916L35.6397 48.9858C35.3027 49.3226 34.9067 49.5721 34.4516 49.7341C33.9961 49.8966 33.5438 49.9778 33.0945 49.9778Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_2801_869)">
|
||||
<path d="M33.0935 49.9778C32.6445 49.9778 32.1921 49.8966 31.7366 49.7341C31.2815 49.5721 30.8855 49.3226 30.5486 48.9858L27.2732 45.9725C22.8566 41.8928 18.9797 37.9534 15.6425 34.1543C12.305 30.3553 10.6362 26.3162 10.6362 22.0369C10.6362 18.6185 11.784 15.7614 14.0795 13.4655C16.3754 11.17 19.22 10.0222 22.6133 10.0222C24.5473 10.0222 26.4313 10.4682 28.2653 11.3601C30.0993 12.2524 31.7087 13.6405 33.0935 15.5243C34.6032 13.6405 36.2376 12.2524 37.9967 11.3601C39.7559 10.4682 41.6149 10.0222 43.5739 10.0222C46.9672 10.0222 49.8118 11.17 52.1077 13.4655C54.4032 15.7614 55.551 18.6185 55.551 22.0369C55.551 26.3162 53.8855 30.3585 50.5543 34.1638C47.2231 37.9694 43.3366 41.9119 38.8948 45.9916L35.6387 48.9858C35.3017 49.3226 34.9057 49.5721 34.4507 49.7341C33.9952 49.8966 33.5428 49.9778 33.0935 49.9778Z" fill="#7E7E7E"/>
|
||||
<g filter="url(#filter0_f_2801_869)">
|
||||
<path d="M55.9838 54.3589C53.5565 45.3 44.1491 39.9498 34.9719 42.4089C25.7946 44.8679 20.3227 54.205 22.75 63.2639C25.1773 72.3227 34.5847 77.6729 43.7619 75.2139C52.9392 72.7548 58.4111 63.4177 55.9838 54.3589Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter1_f_2801_869)">
|
||||
<path d="M66.7011 51.4862C64.2738 42.4273 54.8664 37.0771 45.6891 39.5362C36.5119 41.9952 31.04 51.3323 33.4673 60.3912C35.8946 69.45 45.302 74.8003 54.4792 72.3412C63.6565 69.8822 69.1284 60.5451 66.7011 51.4862Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_f_2801_869)">
|
||||
<path d="M39.5136 35.7902C37.0863 26.7313 27.6789 21.3811 18.5016 23.8401C9.32438 26.2992 3.85245 35.6363 6.27976 44.6951C8.70708 53.754 18.1145 59.1042 27.2917 56.6452C36.469 54.1861 41.9409 44.849 39.5136 35.7902Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter3_f_2801_869)">
|
||||
<path d="M50.2314 32.9175C47.8041 23.8586 38.3967 18.5084 29.2194 20.9675C20.0421 23.4265 14.5702 32.7636 16.9975 41.8225C19.4249 50.8813 28.8322 56.2315 38.0095 53.7725C47.1868 51.3134 52.6587 41.9763 50.2314 32.9175Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter4_f_2801_869)">
|
||||
<path d="M-5.87258 37.5069C4.62475 37.9438 13.4887 29.7883 13.9257 19.2909C14.3626 8.79362 6.20706 -0.0703615 -4.29027 -0.507305C-14.7876 -0.944249 -23.6516 7.2113 -24.0885 17.7086C-24.5255 28.206 -16.3699 37.0699 -5.87258 37.5069Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter5_f_2801_869)">
|
||||
<path d="M55.3303 3.97713C50.035 -1.88388 41.6937 -2.85405 36.6994 1.81018C31.7052 6.47441 31.9492 15.0068 37.2445 20.8678C42.5398 26.7288 50.8812 27.699 55.8754 23.0348C60.8696 18.3705 60.6256 9.83814 55.3303 3.97713Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:hard-light" filter="url(#filter6_f_2801_869)">
|
||||
<path d="M65.083 12.5518C59.1137 5.94471 49.7137 4.8481 44.0876 10.1024C38.4615 15.3567 38.7398 24.9723 44.7091 31.5794C50.6785 38.1864 60.0784 39.283 65.7045 34.0287C71.3306 28.7744 71.0523 19.1588 65.083 12.5518Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M200.665 24.7195C206.749 24.7195 210.401 28.5877 210.401 35.4549V36.4982H195.405C195.71 39.5841 197.97 41.3661 201.056 41.3661C203.924 41.3661 205.924 39.7579 207.054 38.6278L209.748 42.496C207.967 44.1477 205.272 46.1035 201.056 46.1035C194.493 46.1035 190.233 41.844 190.233 35.4549C190.233 29.0659 194.362 24.7195 200.665 24.7195ZM200.404 29.0224C197.839 29.0224 195.971 30.2828 195.536 33.0645H205.011C204.837 30.5001 203.012 29.0224 200.404 29.0224Z" fill="#7E7E7E"/>
|
||||
<path d="M181.275 15.0297H186.621V45.4542H181.275V15.0297Z" fill="#7E7E7E"/>
|
||||
<path d="M168.063 46.1061C164.803 46.1061 162.63 44.7152 161.37 42.6291H161.283V45.4542H155.937V15.0297H161.283V28.1991H161.37C162.63 26.1129 164.803 24.722 168.063 24.722C173.322 24.722 177.712 28.5468 177.712 35.414C177.712 42.2813 173.322 46.1061 168.063 46.1061ZM166.715 41.0644C169.932 41.0644 172.149 38.8042 172.149 35.414C172.149 32.0239 169.932 29.7638 166.715 29.7638C163.499 29.7638 161.283 32.0239 161.283 35.414C161.283 38.8042 163.499 41.0644 166.715 41.0644Z" fill="#7E7E7E"/>
|
||||
<path d="M139.153 46.1035C133.894 46.1035 129.504 42.2787 129.504 35.4116C129.504 28.5443 133.894 24.7195 139.153 24.7195C142.413 24.7195 144.586 26.1103 145.847 28.1966H145.934V25.3714H151.236V45.4516H145.934V42.6265H145.847C144.586 44.7126 142.413 46.1035 139.153 46.1035ZM140.501 41.0618C143.717 41.0618 145.934 38.8016 145.934 35.4116C145.934 32.0214 143.717 29.7613 140.501 29.7613C137.284 29.7613 135.068 32.0214 135.068 35.4116C135.068 38.8016 137.284 41.0618 140.501 41.0618Z" fill="#7E7E7E"/>
|
||||
<path d="M118.604 39.2823L123.341 25.374H129.426L121.211 45.4541H115.996L107.825 25.374H113.866L118.604 39.2823Z" fill="#7E7E7E"/>
|
||||
<path d="M96.6468 24.7195C103.036 24.7195 107.774 29.1093 107.774 35.4116C107.774 41.7137 103.036 46.1035 96.6468 46.1035C90.2576 46.1035 85.52 41.7137 85.52 35.4116C85.52 29.1093 90.2576 24.7195 96.6468 24.7195ZM96.6468 29.7613C93.3871 29.7613 90.9966 31.9779 90.9966 35.4116C90.9966 38.8451 93.3871 41.0618 96.6468 41.0618C99.9065 41.0618 102.254 38.8451 102.254 35.4116C102.254 31.9779 99.9065 29.7613 96.6468 29.7613Z" fill="#7E7E7E"/>
|
||||
<path d="M76.5615 15.0297H81.9076V45.4542H76.5615V15.0297Z" fill="#7E7E7E"/>
|
||||
<mask id="mask1_2801_869" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="10" y="10" width="46" height="40">
|
||||
<path d="M33.0945 49.9778C32.6454 49.9778 32.1931 49.8966 31.7376 49.7341C31.2825 49.5721 30.8865 49.3226 30.5496 48.9858L27.2742 45.9725C22.8576 41.8928 18.9807 37.9534 15.6435 34.1543C12.306 30.3553 10.6372 26.3162 10.6372 22.0369C10.6372 18.6185 11.785 15.7614 14.0805 13.4655C16.3764 11.17 19.221 10.0222 22.6143 10.0222C24.5482 10.0222 26.4322 10.4682 28.2662 11.3601C30.1003 12.2524 31.7097 13.6405 33.0945 15.5243C34.6041 13.6405 36.2385 12.2524 37.9977 11.3601C39.7569 10.4682 41.6159 10.0222 43.5748 10.0222C46.9682 10.0222 49.8128 11.17 52.1087 13.4655C54.4041 15.7614 55.552 18.6185 55.552 22.0369C55.552 26.3162 53.8865 30.3585 50.5553 34.1638C47.2241 37.9694 43.3375 41.9119 38.8958 45.9916L35.6397 48.9858C35.3027 49.3226 34.9067 49.5721 34.4516 49.7341C33.9961 49.8966 33.5438 49.9778 33.0945 49.9778Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask1_2801_869)">
|
||||
<path d="M33.0935 49.9778C32.6445 49.9778 32.1921 49.8966 31.7366 49.7341C31.2815 49.5721 30.8855 49.3226 30.5486 48.9858L27.2732 45.9725C22.8566 41.8928 18.9797 37.9534 15.6425 34.1543C12.305 30.3553 10.6362 26.3162 10.6362 22.0369C10.6362 18.6185 11.784 15.7614 14.0795 13.4655C16.3754 11.17 19.22 10.0222 22.6133 10.0222C24.5473 10.0222 26.4313 10.4682 28.2653 11.3601C30.0993 12.2524 31.7087 13.6405 33.0935 15.5243C34.6032 13.6405 36.2376 12.2524 37.9967 11.3601C39.7559 10.4682 41.6149 10.0222 43.5739 10.0222C46.9672 10.0222 49.8118 11.17 52.1077 13.4655C54.4032 15.7614 55.551 18.6185 55.551 22.0369C55.551 26.3162 53.8855 30.3585 50.5543 34.1638C47.2231 37.9694 43.3366 41.9119 38.8948 45.9916L35.6387 48.9858C35.3017 49.3226 34.9057 49.5721 34.4507 49.7341C33.9952 49.8966 33.5428 49.9778 33.0935 49.9778Z" fill="#7E7E7E"/>
|
||||
<g filter="url(#filter7_f_2801_869)">
|
||||
<path d="M55.9838 54.3589C53.5565 45.3 44.1491 39.9498 34.9719 42.4089C25.7946 44.8679 20.3227 54.205 22.75 63.2639C25.1773 72.3227 34.5847 77.6729 43.7619 75.2139C52.9392 72.7548 58.4111 63.4177 55.9838 54.3589Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter8_f_2801_869)">
|
||||
<path d="M66.7011 51.4862C64.2738 42.4273 54.8664 37.0771 45.6891 39.5362C36.5119 41.9952 31.04 51.3323 33.4673 60.3912C35.8946 69.45 45.302 74.8003 54.4792 72.3412C63.6565 69.8822 69.1284 60.5451 66.7011 51.4862Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter9_f_2801_869)">
|
||||
<path d="M39.5136 35.7902C37.0863 26.7313 27.6789 21.3811 18.5016 23.8401C9.32438 26.2992 3.85245 35.6363 6.27976 44.6951C8.70708 53.754 18.1145 59.1042 27.2917 56.6452C36.469 54.1861 41.9409 44.849 39.5136 35.7902Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter10_f_2801_869)">
|
||||
<path d="M50.2314 32.9175C47.8041 23.8586 38.3967 18.5084 29.2194 20.9675C20.0421 23.4265 14.5702 32.7636 16.9975 41.8225C19.4249 50.8813 28.8322 56.2315 38.0095 53.7725C47.1868 51.3134 52.6587 41.9763 50.2314 32.9175Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter11_f_2801_869)">
|
||||
<path d="M-5.87258 37.5069C4.62475 37.9438 13.4887 29.7883 13.9257 19.2909C14.3626 8.79362 6.20706 -0.0703615 -4.29027 -0.507305C-14.7876 -0.944249 -23.6516 7.2113 -24.0885 17.7086C-24.5255 28.206 -16.3699 37.0699 -5.87258 37.5069Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g filter="url(#filter12_f_2801_869)">
|
||||
<path d="M55.3303 3.97713C50.035 -1.88388 41.6937 -2.85405 36.6994 1.81018C31.7052 6.47441 31.9492 15.0068 37.2445 20.8678C42.5398 26.7288 50.8812 27.699 55.8754 23.0348C60.8696 18.3705 60.6256 9.83814 55.3303 3.97713Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:hard-light" filter="url(#filter13_f_2801_869)">
|
||||
<path d="M65.083 12.5518C59.1137 5.94471 49.7137 4.8481 44.0876 10.1024C38.4615 15.3567 38.7398 24.9723 44.7091 31.5794C50.6785 38.1864 60.0784 39.283 65.7045 34.0287C71.3306 28.7744 71.0523 19.1588 65.083 12.5518Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M200.756 24.7195C206.841 24.7195 210.492 28.5877 210.492 35.4549V36.4982H195.497C195.801 39.5841 198.061 41.3661 201.147 41.3661C204.016 41.3661 206.015 39.7579 207.145 38.6278L209.84 42.496C208.058 44.1477 205.363 46.1035 201.147 46.1035C194.584 46.1035 190.325 41.844 190.325 35.4549C190.325 29.0659 194.454 24.7195 200.756 24.7195ZM200.495 29.0224C197.931 29.0224 196.062 30.2828 195.627 33.0645H205.102C204.928 30.5001 203.103 29.0224 200.495 29.0224Z" fill="#7E7E7E"/>
|
||||
<path d="M181.354 15.0297H186.699V45.4542H181.354V15.0297Z" fill="#7E7E7E"/>
|
||||
<path d="M168.141 46.1061C164.881 46.1061 162.708 44.7152 161.448 42.6291H161.361V45.4542H156.015V15.0297H161.361V28.1991H161.448C162.708 26.1129 164.881 24.722 168.141 24.722C173.4 24.722 177.79 28.5468 177.79 35.414C177.79 42.2813 173.4 46.1061 168.141 46.1061ZM166.794 41.0644C170.01 41.0644 172.227 38.8042 172.227 35.414C172.227 32.0239 170.01 29.7638 166.794 29.7638C163.577 29.7638 161.361 32.0239 161.361 35.414C161.361 38.8042 163.577 41.0644 166.794 41.0644Z" fill="#7E7E7E"/>
|
||||
<path d="M139.231 46.1035C133.972 46.1035 129.583 42.2787 129.583 35.4116C129.583 28.5443 133.972 24.7195 139.231 24.7195C142.491 24.7195 144.664 26.1103 145.925 28.1966H146.012V25.3714H151.314V45.4516H146.012V42.6265H145.925C144.664 44.7126 142.491 46.1035 139.231 46.1035ZM140.579 41.0618C143.795 41.0618 146.012 38.8016 146.012 35.4116C146.012 32.0214 143.795 29.7613 140.579 29.7613C137.363 29.7613 135.146 32.0214 135.146 35.4116C135.146 38.8016 137.363 41.0618 140.579 41.0618Z" fill="#7E7E7E"/>
|
||||
<path d="M118.695 39.2823L123.433 25.374H129.517L121.303 45.4541H116.087L107.916 25.374H113.958L118.695 39.2823Z" fill="#7E7E7E"/>
|
||||
<path d="M96.7381 24.7195C103.127 24.7195 107.865 29.1093 107.865 35.4116C107.865 41.7137 103.127 46.1035 96.7381 46.1035C90.349 46.1035 85.6113 41.7137 85.6113 35.4116C85.6113 29.1093 90.349 24.7195 96.7381 24.7195ZM96.7381 29.7613C93.4784 29.7613 91.0879 31.9779 91.0879 35.4116C91.0879 38.8451 93.4784 41.0618 96.7381 41.0618C99.9978 41.0618 102.345 38.8451 102.345 35.4116C102.345 31.9779 99.9978 29.7613 96.7381 29.7613Z" fill="#7E7E7E"/>
|
||||
<path d="M76.6396 15.0297H81.9857V45.4542H76.6396V15.0297Z" fill="#7E7E7E"/>
|
||||
<path d="M33.0945 49.9778C32.6454 49.9778 32.1931 49.8966 31.7376 49.7341C31.2825 49.5721 30.8865 49.3226 30.5496 48.9858L27.2742 45.9725C22.8576 41.8928 18.9807 37.9534 15.6435 34.1543C12.306 30.3553 10.6372 26.3162 10.6372 22.0369C10.6372 18.6185 11.785 15.7614 14.0805 13.4655C16.3764 11.17 19.221 10.0222 22.6143 10.0222C24.5482 10.0222 26.4322 10.4682 28.2662 11.3601C30.1003 12.2524 31.7097 13.6405 33.0945 15.5243C34.6041 13.6405 36.2385 12.2524 37.9977 11.3601C39.7569 10.4682 41.6159 10.0222 43.5748 10.0222C46.9682 10.0222 49.8128 11.17 52.1087 13.4655C54.4041 15.7614 55.552 18.6185 55.552 22.0369C55.552 26.3162 53.8865 30.3585 50.5553 34.1638C47.2241 37.9694 43.3375 41.9119 38.8958 45.9916L35.6397 48.9858C35.3027 49.3226 34.9067 49.5721 34.4516 49.7341C33.9961 49.8966 33.5438 49.9778 33.0945 49.9778Z" fill="#7E7E7E"/>
|
||||
<path d="M200.756 24.7195C206.841 24.7195 210.492 28.5877 210.492 35.4549V36.4982H195.497C195.801 39.5841 198.061 41.3661 201.147 41.3661C204.016 41.3661 206.015 39.7579 207.145 38.6278L209.84 42.496C208.058 44.1477 205.363 46.1035 201.147 46.1035C194.584 46.1035 190.325 41.844 190.325 35.4549C190.325 29.0659 194.454 24.7195 200.756 24.7195ZM200.495 29.0224C197.931 29.0224 196.062 30.2828 195.627 33.0645H205.102C204.928 30.5001 203.103 29.0224 200.495 29.0224Z" fill="#7E7E7E"/>
|
||||
<path d="M181.354 15.0297H186.699V45.4542H181.354V15.0297Z" fill="#7E7E7E"/>
|
||||
<path d="M168.141 46.1061C164.881 46.1061 162.708 44.7152 161.448 42.6291H161.361V45.4542H156.015V15.0297H161.361V28.1991H161.448C162.708 26.1129 164.881 24.722 168.141 24.722C173.4 24.722 177.79 28.5468 177.79 35.414C177.79 42.2813 173.4 46.1061 168.141 46.1061ZM166.794 41.0644C170.01 41.0644 172.227 38.8042 172.227 35.414C172.227 32.0239 170.01 29.7638 166.794 29.7638C163.577 29.7638 161.361 32.0239 161.361 35.414C161.361 38.8042 163.577 41.0644 166.794 41.0644Z" fill="#7E7E7E"/>
|
||||
<path d="M139.231 46.1035C133.972 46.1035 129.583 42.2787 129.583 35.4116C129.583 28.5443 133.972 24.7195 139.231 24.7195C142.491 24.7195 144.664 26.1103 145.925 28.1966H146.012V25.3714H151.314V45.4516H146.012V42.6265H145.925C144.664 44.7126 142.491 46.1035 139.231 46.1035ZM140.579 41.0618C143.795 41.0618 146.012 38.8016 146.012 35.4116C146.012 32.0214 143.795 29.7613 140.579 29.7613C137.363 29.7613 135.146 32.0214 135.146 35.4116C135.146 38.8016 137.363 41.0618 140.579 41.0618Z" fill="#7E7E7E"/>
|
||||
<path d="M118.695 39.2823L123.433 25.374H129.517L121.303 45.4541H116.087L107.916 25.374H113.958L118.695 39.2823Z" fill="#7E7E7E"/>
|
||||
<path d="M96.7381 24.7195C103.127 24.7195 107.865 29.1093 107.865 35.4116C107.865 41.7137 103.127 46.1035 96.7381 46.1035C90.349 46.1035 85.6113 41.7137 85.6113 35.4116C85.6113 29.1093 90.349 24.7195 96.7381 24.7195ZM96.7381 29.7613C93.4784 29.7613 91.0879 31.9779 91.0879 35.4116C91.0879 38.8451 93.4784 41.0618 96.7381 41.0618C99.9978 41.0618 102.345 38.8451 102.345 35.4116C102.345 31.9779 99.9978 29.7613 96.7381 29.7613Z" fill="#7E7E7E"/>
|
||||
<path d="M76.6396 15.0297H81.9857V45.4542H76.6396V15.0297Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_2801_869" x="6.19207" y="25.8288" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_2801_869" x="16.9094" y="22.9561" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter2_f_2801_869" x="-10.2781" y="7.26007" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter3_f_2801_869" x="0.439632" y="4.38739" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter4_f_2801_869" x="-52.5183" y="-28.9369" width="94.8736" height="94.8735" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="14.2064" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter5_f_2801_869" x="17.1257" y="-17.1229" width="58.3239" height="59.0907" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter6_f_2801_869" x="24.0612" y="-9.20221" width="61.6696" height="62.5355" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter7_f_2801_869" x="6.19207" y="25.8288" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter8_f_2801_869" x="16.9094" y="22.9561" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter9_f_2801_869" x="-10.2781" y="7.26007" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter10_f_2801_869" x="0.439632" y="4.38739" width="66.3497" height="65.9652" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter11_f_2801_869" x="-52.5183" y="-28.9369" width="94.8736" height="94.8735" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="14.2064" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter12_f_2801_869" x="17.1257" y="-17.1229" width="58.3239" height="59.0907" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<filter id="filter13_f_2801_869" x="24.0612" y="-9.20221" width="61.6696" height="62.5355" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7.99112" result="effect1_foregroundBlur_2801_869"/>
|
||||
</filter>
|
||||
<clipPath id="clip0_2801_869">
|
||||
<rect width="200" height="40" fill="white" transform="translate(10.6372 10)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 20 KiB |
20
apps/www/public/images/logos/publicity/tempo-labs.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg width="175" height="60" viewBox="0 0 175 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2801_887)">
|
||||
<path d="M10.7671 10H52.8724L49.6641 14.2857H13.9756L10.7671 10Z" fill="#7E7E7E"/>
|
||||
<path d="M15.0435 15.7144H27.8258V19.2858L17.7174 19.2858L15.0435 15.7144Z" fill="#7E7E7E"/>
|
||||
<path d="M35.4629 15.7144H48.5928L45.9191 19.2858H35.4629V15.7144Z" fill="#7E7E7E"/>
|
||||
<path d="M33.9685 10.5189L33.9348 47.1429L31.6437 50L29.3525 47.1429L29.3863 10.5L33.9685 10.5189Z" fill="#7E7E7E"/>
|
||||
<path d="M39.2667 15.7144V41.4287L35.4629 45.7144V15.7144H39.2667Z" fill="#7E7E7E"/>
|
||||
<path d="M27.8259 15.7144V45.7144L24.0073 41.4287L24.0263 15.7144H27.8259Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<path d="M67.0229 20.553V18.0454H84.5307V20.553H77.1902V41.3891H74.3634V20.553H67.0229Z" fill="#7E7E7E"/>
|
||||
<path d="M92.7129 41.7538C91.026 41.7538 89.5708 41.3815 88.3474 40.6368C87.1316 39.8845 86.1931 38.8359 85.532 37.4909C84.8785 36.1383 84.5518 34.5653 84.5518 32.772C84.5518 30.9787 84.8785 29.3981 85.532 28.0303C86.1931 26.6549 87.1126 25.5835 88.2904 24.816C89.4758 24.0409 90.8588 23.6534 92.4394 23.6534C93.3512 23.6534 94.2517 23.8053 95.1408 24.1093C96.0298 24.4132 96.8391 24.9072 97.5686 25.5911C98.2981 26.2674 98.8794 27.164 99.3125 28.2811C99.7457 29.3981 99.9622 30.7735 99.9622 32.4072V33.5471H86.4667V31.2218H97.2266C97.2266 30.234 97.0291 29.3525 96.6339 28.5774C96.2464 27.8023 95.6917 27.1906 94.9698 26.7423C94.2555 26.294 93.412 26.0698 92.4394 26.0698C91.3679 26.0698 90.4409 26.3358 89.6582 26.8677C88.8831 27.392 88.2866 28.0759 87.8686 28.9194C87.4507 29.7628 87.2417 30.6671 87.2417 31.6322V33.1823C87.2417 34.5045 87.4697 35.6254 87.9256 36.5448C88.3892 37.4567 89.0313 38.152 89.8519 38.6307C90.6726 39.1018 91.6263 39.3374 92.7129 39.3374C93.4196 39.3374 94.0579 39.2386 94.6278 39.041C95.2053 38.8359 95.7031 38.5319 96.121 38.1292C96.5389 37.7188 96.8619 37.2097 97.0899 36.6018L99.6887 37.3313C99.4151 38.2128 98.9554 38.9879 98.3095 39.6565C97.6636 40.3176 96.8657 40.8344 95.9158 41.2067C94.966 41.5715 93.8983 41.7538 92.7129 41.7538Z" fill="#7E7E7E"/>
|
||||
<path d="M103.437 41.3891V23.8813H106.036V26.6169H106.264C106.628 25.6823 107.217 24.9566 108.03 24.4398C108.844 23.9155 109.82 23.6534 110.96 23.6534C112.115 23.6534 113.076 23.9155 113.844 24.4398C114.619 24.9566 115.223 25.6823 115.656 26.6169H115.838C116.287 25.7127 116.959 24.9946 117.856 24.4626C118.752 23.9231 119.828 23.6534 121.081 23.6534C122.647 23.6534 123.927 24.1435 124.923 25.1237C125.918 26.0964 126.416 27.6124 126.416 29.6717V41.3891H123.726V29.6717C123.726 28.3799 123.373 27.4566 122.666 26.9019C121.959 26.3472 121.127 26.0698 120.17 26.0698C118.939 26.0698 117.985 26.4421 117.309 27.1868C116.632 27.9239 116.294 28.8586 116.294 29.9908V41.3891H113.559V29.3981C113.559 28.4026 113.236 27.601 112.59 26.9931C111.944 26.3776 111.112 26.0698 110.094 26.0698C109.394 26.0698 108.741 26.256 108.133 26.6283C107.533 27.0007 107.046 27.5174 106.674 28.1785C106.309 28.832 106.127 29.5881 106.127 30.4467V41.3891H103.437Z" fill="#7E7E7E"/>
|
||||
<path d="M130.717 47.9545V23.8813H133.316V26.6625H133.635C133.833 26.3586 134.106 25.971 134.456 25.4999C134.813 25.0212 135.322 24.5956 135.983 24.2233C136.652 23.8433 137.556 23.6534 138.696 23.6534C140.17 23.6534 141.469 24.0219 142.594 24.759C143.719 25.4961 144.596 26.5409 145.227 27.8935C145.858 29.2461 146.173 30.8419 146.173 32.6808C146.173 34.5349 145.858 36.1421 145.227 37.5023C144.596 38.8549 143.722 39.9035 142.605 40.6482C141.488 41.3853 140.2 41.7538 138.741 41.7538C137.617 41.7538 136.716 41.5677 136.04 41.1953C135.364 40.8154 134.843 40.386 134.478 39.9073C134.114 39.421 133.833 39.0182 133.635 38.6991H133.407V47.9545H130.717ZM133.361 32.6352C133.361 33.9574 133.555 35.1238 133.943 36.1345C134.33 37.1375 134.896 37.924 135.641 38.4939C136.386 39.0562 137.298 39.3374 138.377 39.3374C139.501 39.3374 140.44 39.041 141.192 38.4483C141.952 37.848 142.522 37.0425 142.902 36.0319C143.289 35.0137 143.483 33.8814 143.483 32.6352C143.483 31.4042 143.293 30.2948 142.913 29.3069C142.541 28.3115 141.975 27.525 141.215 26.9475C140.463 26.3624 139.516 26.0698 138.377 26.0698C137.282 26.0698 136.363 26.3472 135.618 26.9019C134.874 27.449 134.311 28.2165 133.931 29.2043C133.551 30.1846 133.361 31.3282 133.361 32.6352Z" fill="#7E7E7E"/>
|
||||
<path d="M156.772 41.7538C155.191 41.7538 153.804 41.3777 152.611 40.6254C151.426 39.8731 150.499 38.8207 149.83 37.4681C149.169 36.1155 148.838 34.5349 148.838 32.7264C148.838 30.9027 149.169 29.3107 149.83 27.9505C150.499 26.5903 151.426 25.5341 152.611 24.7818C153.804 24.0295 155.191 23.6534 156.772 23.6534C158.352 23.6534 159.735 24.0295 160.921 24.7818C162.114 25.5341 163.041 26.5903 163.702 27.9505C164.371 29.3107 164.705 30.9027 164.705 32.7264C164.705 34.5349 164.371 36.1155 163.702 37.4681C163.041 38.8207 162.114 39.8731 160.921 40.6254C159.735 41.3777 158.352 41.7538 156.772 41.7538ZM156.772 39.3374C157.972 39.3374 158.96 39.0296 159.735 38.4141C160.51 37.7986 161.084 36.9894 161.456 35.9863C161.829 34.9833 162.015 33.8966 162.015 32.7264C162.015 31.5562 161.829 30.4657 161.456 29.4551C161.084 28.4444 160.51 27.6276 159.735 27.0045C158.96 26.3814 157.972 26.0698 156.772 26.0698C155.571 26.0698 154.583 26.3814 153.808 27.0045C153.033 27.6276 152.459 28.4444 152.087 29.4551C151.715 30.4657 151.528 31.5562 151.528 32.7264C151.528 33.8966 151.715 34.9833 152.087 35.9863C152.459 36.9894 153.033 37.7986 153.808 38.4141C154.583 39.0296 155.571 39.3374 156.772 39.3374Z" fill="#7E7E7E"/>
|
||||
<defs>
|
||||
<clipPath id="clip0_2801_887">
|
||||
<rect width="42.1053" height="40" fill="white" transform="translate(10.769 10)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
11
apps/www/public/images/logos/publicity/v0.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="101" height="60" viewBox="0 0 101 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_2801_842)">
|
||||
<path d="M57.0147 10H76.0685C83.7947 10 90.0581 16.2633 90.0581 23.9895V42.161H82.2321V23.9895C82.2321 23.8033 82.2247 23.6185 82.2105 23.4353L63.1565 42.158C63.2207 42.16 63.2853 42.161 63.3499 42.161H82.2321V49.5524H63.3499C55.6237 49.5524 49.1885 43.2278 49.1885 35.5016V17.3785H57.0147V35.5016C57.0147 35.8506 57.0417 36.1954 57.0941 36.5336L76.5673 17.399C76.4031 17.3854 76.2369 17.3785 76.0685 17.3785H57.0147V10Z" fill="#7E7E7E"/>
|
||||
<path d="M37.7651 48.1913L10.2275 17.3752H21.3062L37.4737 35.4675V17.3752H45.7345V45.1493C45.7345 49.3411 40.5583 51.3169 37.7651 48.1913Z" fill="#7E7E7E"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_2801_842">
|
||||
<rect width="80" height="40" fill="white" transform="translate(10.2275 10)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 879 B |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 260 KiB |
BIN
apps/www/public/images/solutions/ai-builders/ai-builders-og.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
@@ -63,7 +63,7 @@ h6 { */
|
||||
.h4:not(.prose *):not(.overwrite),
|
||||
.h5:not(.prose *):not(.overwrite),
|
||||
.h6:not(.prose *):not(.overwrite) {
|
||||
@apply text-foreground;
|
||||
/* @apply text-foreground; */
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"EMAIL_ABUSE_SERVICE_KEY",
|
||||
"HUBSPOT_PORTAL_ID",
|
||||
"HUBSPOT_ENTERPRISE_FORM_GUID",
|
||||
"HUBSPOT_PARTNERSHIP_FORM_GUID",
|
||||
"OPENAI_API_KEY",
|
||||
"EMAIL_REPORT_SLACK_WEBHOOK",
|
||||
"npm_lifecycle_event",
|
||||
|
||||