2
0

📄 Add Commercial License for ee folder (#1532)

This commit is contained in:
Baptiste Arnaud
2024-05-23 10:42:23 +02:00
committed by GitHub
parent 5680829906
commit 0eacbebbbe
246 changed files with 1472 additions and 1588 deletions

View File

@ -0,0 +1,64 @@
import { Flex, Stack, Heading, Box, Text, Button } from '@chakra-ui/react'
import React from 'react'
import Image from 'next/image'
import builderDndSrc from 'public/images/builder-dnd.png'
import { ArrowRight } from 'assets/icons/ArrowRight'
import { Flare } from 'assets/illustrations/Flare'
import Link from 'next/link'
export const EasyBuildingExperience = () => {
return (
<Flex as="section" justify="center" pos="relative">
<Flare
color="blue"
pos="absolute"
left="-200px"
top="-50px"
data-aos="fade"
data-aos-delay="500"
/>
<Stack
style={{ maxWidth: '1000px' }}
pt={'52'}
w="full"
px="4"
spacing={12}
direction={['column', 'row-reverse']}
justifyContent="space-between"
alignItems="center"
>
<Stack spacing="6" maxW="300px" minW={[0, '300px']}>
<Heading as="h1" data-aos="fade">
Easy building experience
</Heading>
<Text
color="gray.400"
fontSize={{ base: 'lg', xl: 'xl' }}
data-aos="fade"
>
All you have to do is drag and drop blocks to create your app. Even
if you have custom needs, you can always add custom code.
</Text>
<Flex>
<Button
as={Link}
rightIcon={<ArrowRight />}
href={`https://app.typebot.io/register`}
variant="ghost"
data-aos="fade"
>
Try it now
</Button>
</Flex>
</Stack>
<Box rounded="md" data-aos="fade">
<Image
src={builderDndSrc}
alt="incomplete results illustration"
placeholder="blur"
/>
</Box>
</Stack>
</Flex>
)
}

View File

@ -0,0 +1,65 @@
import { Flex, Stack, Heading, Box, Text, Button } from '@chakra-ui/react'
import React from 'react'
import Image from 'next/image'
import nativeFeelingSrc from 'public/images/native-feeling.png'
import { ArrowRight } from 'assets/icons/ArrowRight'
import { Flare } from 'assets/illustrations/Flare'
import Link from 'next/link'
export const EasyEmbed = () => {
return (
<Flex as="section" justify="center" pos="relative">
<Flare
color="orange"
pos="absolute"
right="-200px"
top="100px"
data-aos="fade"
data-aos-delay="500"
/>
<Stack
style={{ maxWidth: '1000px' }}
pt={32}
w="full"
px="4"
spacing={12}
direction={['column', 'row']}
justifyContent="space-between"
alignItems="center"
>
<Stack spacing="6" maxW="300px" minW={[0, '300px']}>
<Heading as="h1" data-aos="fade">
Embed it in a click
</Heading>
<Text
color="gray.400"
fontSize={{ base: 'lg', xl: 'xl' }}
data-aos="fade"
>
Embedding your typebot in your applications is a walk in the park.
Typebot gives you several step-by-step platform-specific
instructions. Your typebot will always feel &quot;native&quot;.
</Text>
<Flex data-aos="fade">
<Button
as={Link}
rightIcon={<ArrowRight />}
href={`https://app.typebot.io/register`}
variant="ghost"
colorScheme="orange"
>
Try it now
</Button>
</Flex>
</Stack>
<Box rounded="md" data-aos="fade">
<Image
src={nativeFeelingSrc}
alt="incomplete results illustration"
placeholder="blur"
/>
</Box>
</Stack>
</Flex>
)
}

View File

@ -0,0 +1,69 @@
'use client'
import {
Heading,
Button,
Text,
Flex,
VStack,
StackProps,
} from '@chakra-ui/react'
import Link from 'next/link'
import React from 'react'
import { BackgroundPolygons } from './Hero/BackgroundPolygons'
type Props = {
heading?: string
polygonsBaseTop?: string
} & StackProps
export const EndCta = ({ heading, polygonsBaseTop, ...props }: Props) => {
return (
<VStack
as="section"
py={32}
pos="relative"
bgGradient="linear(to-b, gray.900, gray.800)"
height="100vh"
justifyContent="center"
{...props}
>
<BackgroundPolygons baseTop={polygonsBaseTop} />
<VStack
spacing="6"
maxW="3xl"
mx="auto"
px={{ base: '6', lg: '8' }}
py={{ base: '16', sm: '20' }}
textAlign="center"
>
{heading ? (
<Heading
fontWeight="extrabold"
letterSpacing="tight"
data-aos="fade-up"
>
{heading}
</Heading>
) : null}
<Flex>
<Button
as={Link}
href="https://app.typebot.io/register"
size="lg"
colorScheme="orange"
height="4rem"
data-aos="fade-up"
data-aos-delay="300"
>
Create a typebot
</Button>
</Flex>
<Text color="gray.400" data-aos="fade-up" data-aos-delay="400">
No trial. Generous <strong>free</strong> plan.
</Text>
</VStack>
</VStack>
)
}

View File

@ -0,0 +1,46 @@
import { IconProps, Text, Flex, VStack } from '@chakra-ui/react'
import React, { useState } from 'react'
type FeatureCardProps = {
Icon: (props: IconProps) => JSX.Element
title: string
content: string
}
export const FeatureCard = ({ Icon, title, content }: FeatureCardProps) => {
const [isHovered, setIsHovered] = useState(false)
return (
<VStack
p="6"
bgColor="gray.800"
pos="relative"
rounded="lg"
spacing="4"
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
<Flex
boxSize="50px"
bgColor="blue.500"
rounded="lg"
color="white"
justify="center"
align="center"
pos="absolute"
top="-25px"
shadow="lg"
transform={isHovered ? 'translateY(-5px)' : 'translateY(0px)'}
transition="transform 300ms ease-out"
>
<Icon boxSize="25px" />
</Flex>
<Text textAlign="center" fontWeight="semibold" fontSize="lg">
{title}
</Text>
<Text textAlign="center" color="gray.500">
{content}
</Text>
</VStack>
)
}

View File

@ -0,0 +1,84 @@
import React from 'react'
import {
Flex,
Heading,
SimpleGrid,
Stack,
Text,
VStack,
} from '@chakra-ui/react'
import { FeatureCard } from './FeatureCard'
import { FolderIcon } from 'assets/icons/FolderIcon'
import { AccessibilityIcon } from 'assets/icons/AccessibilityIcon'
import { CalculatorIcon } from 'assets/icons/CaluclatorIcon'
import { ConditionIcon } from 'assets/icons/ConditionIcon'
import { PersonAddIcon } from 'assets/icons/PersonAddIcon'
import { ShareIcon } from 'assets/icons/ShareIcon'
const features = [
{
Icon: AccessibilityIcon,
title: 'Hidden fields',
content:
'Include data in your form URL to segment your user and use its data directly in your form.',
},
{
Icon: PersonAddIcon,
title: 'Team collaboration',
content: 'Invite your teammates to work on your typebots with you',
},
{
Icon: ConditionIcon,
title: 'Link to sub typebots',
content: 'Reuse your typebots in different parent bots.',
},
{
Icon: CalculatorIcon,
title: 'Custom code',
content: 'Customize everything with your own Javascript & CSS code',
},
{
Icon: ShareIcon,
title: 'Custom domain',
content: 'Connect your typebot to the custom URL of your choice',
},
{
Icon: FolderIcon,
title: 'Folder management',
content:
'Organize your typebots in specific folders to keep it clean and work with multiple clients',
},
]
export const Features = () => {
return (
<Flex justifyContent="center">
<Stack
style={{ maxWidth: '1200px' }}
pt={'52'}
w="full"
px="4"
spacing={12}
>
<VStack>
<Heading as="h1" textAlign="center" data-aos="fade">
And many more features
</Heading>
<Text
color="gray.500"
fontSize={['lg', 'xl']}
textAlign="center"
data-aos="fade"
>
Typebot makes form building easy and comes with powerful features
</Text>
</VStack>
<SimpleGrid columns={[1, 3]} spacing="10" pt="10" data-aos="fade">
{features.map((feature, idx) => (
<FeatureCard key={idx} {...feature} />
))}
</SimpleGrid>
</Stack>
</Flex>
)
}

View File

@ -0,0 +1 @@
export { Features } from './Features'

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,133 @@
import {
Box,
Button,
Flex,
Heading,
SimpleGrid,
Stack,
Text,
VStack,
} from '@chakra-ui/react'
import * as React from 'react'
import { Header } from '../../common/Header/Header'
import { BackgroundPolygons } from './BackgroundPolygons'
import * as Logos from './Brands'
import Link from 'next/link'
import Image from 'next/image'
import builderScreenshotSrc from 'public/images/builder-screenshot.png'
export const Hero = () => {
return (
<Box as="section" overflow="hidden">
<Header />
<Stack mx="auto" py="10" pos="relative" pb="32" px={[4, 0]}>
<BackgroundPolygons />
<VStack mb="20" spacing={20} alignItems="center">
<VStack pt={['10', '20']} spacing="6" w="full">
<Heading
as="h1"
fontSize={['4xl', '4xl', '5xl', '7xl']}
textAlign="center"
maxW="1000px"
bgGradient="linear(to-r, blue.300, purple.300)"
bgClip="text"
data-aos="fade-up"
>
Build advanced chatbots visually
</Heading>
<Text
fontSize={['lg', 'xl']}
maxW="800px"
textAlign="center"
data-aos="fade-up"
data-aos-delay="100"
>
Typebot gives you powerful blocks to create unique chat
experiences. Embed them anywhere on your web/mobile apps and start
collecting results like magic.
</Text>
<Stack
direction={['column-reverse', 'row']}
data-aos="fade-up"
data-aos-delay="200"
>
<Button
as={Link}
href="https://app.typebot.io/register"
colorScheme="orange"
size="lg"
height="4rem"
px="2rem"
>
Create a typebot for free
</Button>
</Stack>
</VStack>
<Box maxW="1200px" pos="relative">
<Box
pos="absolute"
left="-40px"
bgColor="orange.500"
boxSize={['150px', '150px', '300px', '600px']}
rounded="full"
filter="blur(40px)"
opacity="0.7"
className="animated-blob"
data-aos="fade"
data-aos-delay="1200"
/>
<Box
pos="absolute"
right="-40px"
bgColor="blue.500"
boxSize={['150px', '150px', '300px', '600px']}
rounded="full"
filter="blur(40px)"
opacity="0.7"
className="animated-blob animation-delay-5000"
data-aos="fade"
data-aos-delay="1200"
/>
<Box
as="figure"
shadow="lg"
data-aos="zoom-out-up"
data-aos-delay="800"
>
<Image
src={builderScreenshotSrc}
alt="Builder screenshot"
placeholder="blur"
style={{ borderRadius: '10px' }}
/>
</Box>
</Box>
</VStack>
</Stack>
<Flex justify="center" bgGradient="linear(to-b, gray.900, gray.800)">
<VStack spacing="12" pb="32" maxW="7xl" px={4}>
<Heading fontSize="25px" fontWeight="semibold" data-aos="fade">
Loved by teams and creators from all around the world
</Heading>
<SimpleGrid
columns={{ base: 2, md: 4 }}
color="gray.400"
alignItems="center"
spacing={12}
fontSize="4xl"
data-aos="fade"
>
<Logos.IbanFirst />
<Logos.Lemlist />
<Logos.MakerLead />
<Logos.Webisharp />
<Logos.SocialHackrs />
<Logos.PinpointInteractive />
<Logos.Obole />
<Logos.Awwwsome />
</SimpleGrid>
</VStack>
</Flex>
</Box>
)
}

View File

@ -0,0 +1 @@
export { Hero } from './Hero'

View File

@ -0,0 +1,121 @@
import { Flex, Heading, HStack, Stack, Text } from '@chakra-ui/react'
import {
GmailLogo,
MailChimpLogo,
NotionLogo,
WebflowLogo,
WordpressLogo,
SlackLogo,
AirtableLogo,
GoogleSheetLogo,
ZapierLogo,
SalesforceLogo,
CalendlyLogo,
GoogleCalendarLogo,
ShopifyLogo,
GoogleDriveLogo,
N8nLogo,
} from 'assets/logos'
import React from 'react'
const firstRowIcons = [
GmailLogo,
MailChimpLogo,
NotionLogo,
WebflowLogo,
WordpressLogo,
GoogleCalendarLogo,
N8nLogo,
GoogleDriveLogo,
]
const secondRowIcons = [
SlackLogo,
ShopifyLogo,
AirtableLogo,
GoogleSheetLogo,
ZapierLogo,
CalendlyLogo,
SalesforceLogo,
]
export const Integrations = () => (
<Flex as="section" justify="center">
<Stack w="full" align="center" spacing={12} pt={'52'}>
<Stack pos="relative" width="1400px" spacing={[4, 12]}>
<Flex
pos="absolute"
left="0"
w="33%"
h="full"
bgGradient="linear(to-r, rgba(23,25,35,1), rgba(23,25,35,0))"
pointerEvents="none"
zIndex={100}
/>
<Flex
pos="absolute"
right="0"
w="33%"
h="full"
bgGradient="linear(to-l, rgba(23,25,35,1), rgba(23,25,35,0))"
pointerEvents="none"
zIndex={100}
/>
<HStack w="full" spacing={[4, 16]}>
{firstRowIcons.map((Icon, idx) => (
<Flex
_hover={{ borderColor: 'gray.500' }}
transition="border 1s ease"
key={idx}
rounded="md"
p="8"
bgColor="gray.800"
boxSize="120px"
justifyContent="center"
align="center"
borderWidth="1px"
data-aos="fade"
data-aos-delay={idx * 200}
>
<Icon w="full" h="full" />
</Flex>
))}
</HStack>
<HStack w="full" spacing={[4, 16]} pl={['10', '20']}>
{secondRowIcons.map((Icon, idx) => (
<Flex
key={idx}
_hover={{ borderColor: 'gray.500' }}
transition="border 1s ease"
rounded="md"
p="8"
bgColor="gray.800"
boxSize="120px"
justifyContent="center"
align="center"
borderWidth="1px"
data-aos="fade"
data-aos-delay={(secondRowIcons.length - idx) * 200}
>
<Icon w="full" h="full" />
</Flex>
))}
</HStack>
</Stack>
<Stack w="full" maxWidth="1200px" px="4">
<Heading fontSize={['3xl', '4xl']} data-aos="fade-up">
Integrate with any platform
</Heading>
<Text
color="gray.400"
maxW="700px"
fontSize={['lg', 'xl']}
data-aos="fade-up"
>
Typebot offers several native integrations blocks as well as
instructions on how to embed typebot on particular platforms
</Text>
</Stack>
</Stack>
</Flex>
)

View File

@ -0,0 +1,143 @@
import {
Button,
Flex,
Heading,
Stack,
Text,
FormControl,
FormLabel,
Input,
Checkbox,
Textarea,
} from '@chakra-ui/react'
import React, { useEffect, useState } from 'react'
import { PublicTypebot } from '@typebot.io/schemas'
import { sendRequest } from '@typebot.io/lib'
import { DontIcon } from 'assets/icons/DontIcon'
import { DoIcon } from 'assets/icons/DoIcon'
import { HandDrawnArrow } from 'assets/illustrations/HandDrawnArrow'
import { Standard } from '@typebot.io/nextjs'
export const IntroducingChatApps = () => {
const [typebot, setTypebot] = useState<PublicTypebot>()
useEffect(() => {
fetchTemplate()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
const fetchTemplate = async () => {
const { data, error } = await sendRequest(`/typebots/lead-gen-lp.json`)
if (error) return
setTypebot(data as PublicTypebot)
}
return (
<Flex as="section" justify="center">
<Stack
style={{ maxWidth: '1200px' }}
pt={32}
w="full"
px="4"
spacing={16}
justifyContent="space-between"
alignItems="center"
>
<Stack spacing={6} w="full">
<Heading
fontSize={{ base: '3xl', lg: '5xl', xl: '6xl' }}
textAlign="center"
data-aos="fade"
>
Replace your old school forms with chatbots
</Heading>
<Text
textAlign="center"
fontSize={{ base: 'lg', xl: 'xl' }}
color="gray.400"
data-aos="fade"
>
Typebot is a better way to ask for information. It leads to an
increase in customer satisfaction and retention and multiply by 3
your conversion rate compared to classical forms.
</Text>
</Stack>
<Stack
direction={['column', 'row']}
w="full"
spacing="6"
data-aos="fade"
>
<Stack spacing={6} flex="1" align={['flex-start', 'center']}>
<DontIcon />
<FakeLeadGenForm />
</Stack>
<Stack
spacing={6}
flex="1"
h="full"
pos="relative"
align={['flex-start', 'center']}
>
<DoIcon />
{typebot && (
<Standard
typebot={typebot}
style={{
borderRadius: '0.375rem',
borderWidth: '1px',
height: '562px',
}}
/>
)}
<Flex top="-20px" right="40px" pos="absolute">
<Text fontFamily="'Indie Flower'" fontSize="2xl">
Try it out!
</Text>
<HandDrawnArrow
transform="rotate(30deg)"
boxSize="100px"
top="15px"
right="-60px"
pos="absolute"
/>
</Flex>
</Stack>
</Stack>
</Stack>
</Flex>
)
}
const FakeLeadGenForm = () => (
<Stack borderWidth="1px" spacing="4" padding="6" rounded="md" w="full">
<FormControl isRequired>
<FormLabel htmlFor="full-name">Full name</FormLabel>
<Input id="full-name" placeholder="Full name" />
</FormControl>
<FormControl isRequired>
<FormLabel htmlFor="email">Email</FormLabel>
<Input id="email" placeholder="Email" />
</FormControl>
<FormControl isRequired>
<FormLabel htmlFor="services">
What services are you interested in?
</FormLabel>
<Stack>
<Checkbox>Website Dev</Checkbox>
<Checkbox>Content Marketing</Checkbox>
<Checkbox>Social Media</Checkbox>
<Checkbox>UX/UI Design</Checkbox>
</Stack>
</FormControl>
<FormControl isRequired>
<FormLabel htmlFor="info">Additional Information</FormLabel>
<Textarea id="info" placeholder="Additional Information" />
</FormControl>
<Flex>
<Button>Submit</Button>
</Flex>
</Stack>
)

View File

@ -0,0 +1,134 @@
import { Flex, Stack, Heading, Text, Button, VStack } from '@chakra-ui/react'
import { Standard } from '@typebot.io/nextjs'
import { ArrowRight } from 'assets/icons/ArrowRight'
import { HandDrawnArrow } from 'assets/illustrations/HandDrawnArrow'
import { PublicTypebot, Typebot } from '@typebot.io/schemas'
import Link from 'next/link'
import React, { useEffect, useRef, useState } from 'react'
import { sendRequest } from '@typebot.io/lib'
const nameBlockId = 'shuUtMDMw9P4iAHbz7B5SqJ'
const messageBlockId = 'sqvXpT1YXE3Htp6BCPvVGv3'
export const RealTimeResults = () => {
const iframeRef = useRef<HTMLIFrameElement | null>(null)
const [typebot, setTypebot] = useState<PublicTypebot>()
const fetchTemplate = async () => {
const { data, error } = await sendRequest(
`/typebots/realtime-airtable.json`
)
if (error) return
const typebot = data as Typebot
setTypebot({ ...typebot, typebotId: typebot.id } as PublicTypebot)
}
useEffect(() => {
fetchTemplate()
}, [])
const refreshIframeContent = () => {
if (!iframeRef.current) return
iframeRef.current.src += ''
}
const handleAnswer = ({ blockId }: { blockId: string }) => {
if ([nameBlockId, messageBlockId].includes(blockId))
setTimeout(refreshIframeContent, 1000)
}
return (
<Flex as="section" justify="center">
<Stack
style={{ maxWidth: '1200px' }}
pt={'52'}
w="full"
px="4"
spacing={16}
justifyContent="space-between"
alignItems="center"
>
<VStack spacing={6}>
<Heading
fontSize={{ base: '4xl', xl: '6xl' }}
textAlign="center"
data-aos="fade"
>
Collect results in real-time
</Heading>
<Text
textAlign="center"
color="gray.400"
maxW="1000px"
fontSize={{ base: 'lg', xl: 'xl' }}
data-aos="fade"
>
One of the main advantage of a chat application is that you collect
the user&apos;s responses on each question.{' '}
<strong>You won&apos;t lose any valuable data.</strong>
</Text>
<Flex>
<Button
as={Link}
rightIcon={<ArrowRight />}
href={`https://app.typebot.io/register`}
variant="ghost"
colorScheme="blue"
data-aos="fade"
>
Try it now
</Button>
</Flex>
</VStack>
<Stack
w="full"
direction={['column', 'row']}
spacing="4"
pos="relative"
data-aos="fade"
>
{typebot && (
<Standard
typebot="airtable-real-time"
onAnswer={handleAnswer}
style={{
borderRadius: '0.375rem',
borderWidth: '1px',
height: '533px',
}}
/>
)}
<iframe
ref={iframeRef}
src="https://airtable.com/embed/shr8nkV6DVN88LVIv?backgroundColor=blue"
width="100%"
height="533"
style={{
borderRadius: '0.5rem',
border: 'none',
backgroundColor: 'white',
}}
/>
<Flex
top="-60px"
right="-30px"
pos="absolute"
display={{ base: 'none', xl: 'flex' }}
>
<Text fontFamily="'Indie Flower'" fontSize="2xl">
It&apos;s a real Airtable view!
</Text>
<HandDrawnArrow
transform="rotate(30deg)"
boxSize="100px"
top="15px"
right="-60px"
pos="absolute"
/>
</Flex>
</Stack>
</Stack>
</Flex>
)
}

View File

@ -0,0 +1,80 @@
import { Avatar, Flex, HStack, Stack, Text } from '@chakra-ui/react'
import * as React from 'react'
import Image from 'next/image'
import { TestimonialData } from './Testimonials'
import {
CapterraIcon,
EmailIcon,
ProductHuntIcon,
RedditIcon,
} from 'assets/icons'
export const Testimonial = ({
avatarSrc,
content,
name,
role,
provider,
}: TestimonialData) => (
<Stack
p="6"
rounded="lg"
bgColor="gray.800"
color="white"
shadow="lg"
spacing="4"
data-aos="fade"
>
<Flex justifyContent="space-between">
<HStack spacing="4">
{avatarSrc ? (
<Image
src={avatarSrc}
alt={name}
placeholder="blur"
width={40}
height={40}
className="rounded-full"
/>
) : (
<Avatar name={name} />
)}
<Stack spacing={1}>
<Text
as="cite"
fontStyle="normal"
fontWeight="extrabold"
color="white"
>
{name}
</Text>
<Text fontSize="sm" color={'gray.100'}>
{role}
</Text>
</Stack>
</HStack>
<ProviderIcon provider={provider} />
</Flex>
<Text mt="3" maxW="38rem" color="gray.400">
{content}
</Text>
</Stack>
)
const ProviderIcon = ({
provider,
}: {
provider: TestimonialData['provider']
}): JSX.Element => {
switch (provider) {
case 'email':
return <EmailIcon fontSize="20px" />
case 'productHunt':
return <ProductHuntIcon fontSize="20px" />
case 'capterra':
return <CapterraIcon fontSize="20px" />
case 'reddit':
return <RedditIcon fontSize="20px" />
}
}

View File

@ -0,0 +1,222 @@
import { Flex, Heading, SimpleGrid, Stack, VStack } from '@chakra-ui/react'
import * as React from 'react'
import joshuaPictureSrc from 'public/images/joshua.jpg'
import julienPictureSrc from 'public/images/julien.jpeg'
import nicolaiPictureSrc from 'public/images/nicolai.jpg'
import annaFilouPictureSrc from 'public/images/annaFilou.jpeg'
import theoPictureSrc from 'public/images/theo.jpeg'
import abhayPictureSrc from 'public/images/abhay.jpeg'
import lucasPictureSrc from 'public/images/lucas.png'
import oscarPictureSrc from 'public/images/oscar.jpeg'
import invictuzPictureSrc from 'public/images/invictuz.png'
import laszloPictureSrc from 'public/images/laszlo.jpeg'
import kurniaPictureSrc from 'public/images/kurnia.jpeg'
import stevePictureSrc from 'public/images/steve.jpg'
import { Testimonial } from './Testimonial'
import { StaticImageData } from 'next/image'
export type TestimonialData = {
name: string
avatarSrc?: StaticImageData
provider: 'email' | 'productHunt' | 'capterra' | 'reddit'
role?: string
content: string | React.ReactNode
}
const testimonials: TestimonialData[][] = [
[
{
name: 'Joshua Lim',
role: 'Growth Strategist @ Socialhackrs Media',
avatarSrc: joshuaPictureSrc,
provider: 'email',
content:
'I upgraded my typeforms to typebots and saw a conversion rate increase from 14% to 43% on my marketing campaigns. I noticed the improvement on day one. That was a game-changer.',
},
{
name: 'Laszlo Csömör',
role: 'Digital Marketing Expert',
provider: 'email',
avatarSrc: laszloPictureSrc,
content: (
<>
Typebot is one of the best chatbot builders with its intelligent
features and drag-and-drop simplicity. Its UI/UX is an earthly
paradise...
<br />
What&apos;s even more important is the person who stands behind it. He
guarantees that the platform will work and progress for a long time.
</>
),
},
{
name: 'Mario Barretta',
role: 'Customer Care Manager',
provider: 'email',
content: (
<>
Thanks to typebot I can finally make site forms much more modern and I
can collect information that I would have missed before. Also ,thanks
to Baptiste, the service is always evolving and has excellent
assistance not only in solving but also in listening to suggestions
and putting it into action.
<br />
<br />
Thank you thank you and thank you again .
</>
),
},
{
name: 'Lucas Barp',
provider: 'email',
avatarSrc: lucasPictureSrc,
role: 'Founder at Barp Digital',
content:
'The result of your work is incredible and can make life easier for many people.',
},
{
name: 'Igor T.',
role: 'CTO',
provider: 'capterra',
content:
'Nice work. The developer promptly makes changes, which is quite rare. There was a suggestion for improvement and improvement, in 2 days it was implemented. Amazing! Good luck and thanks a lot',
},
],
[
{
name: 'Oscar',
role: 'CEO',
provider: 'capterra',
avatarSrc: oscarPictureSrc,
content:
'Within 5 minutes of signing up you can already have your bot running thanks to the templates it comes with. I have used many tools to make bots but none as simple, easy and powerful as Typebot.',
},
{
name: 'Julien Muratot',
role: 'Growth Manager @ Hornetwork',
avatarSrc: julienPictureSrc,
provider: 'email',
content:
'I run Google ads all year long on our landing page that contains a typebot. I saw a 2x increase on our conversation rate compared to our old WordPress form.',
},
{
name: '_Invictuz',
provider: 'reddit',
avatarSrc: invictuzPictureSrc,
content:
"This is the sickest open-source project I've ever seen and demoed. The use case is so cool and modern and I can't believe how easy this is to get started using. The feature richness and polish in this project is incredible, it feel like a mature product. Unbelievable that this was built by one person. This is better than the demos of chatbot builders I've seen from full-fledged companies. I'm going to learn Typescript so that I can contribute to this someday. Mind-blowing stuff...",
},
{
name: 'Theo Marechal',
provider: 'productHunt',
avatarSrc: theoPictureSrc,
role: 'Nocode expert and content creator',
content: (
<>
Amazing product! I&apos;m using Typebot for everything when it&apos;s
about talking with customers.
<br />
<br />
What&apos;s amazing with Typebot is that it makes a &quot;chat
interface effect&quot; without the hassle of being behind my computer
all day responding to customers. Highly recommend !
</>
),
},
{
name: 'Abhay Kulkarni',
provider: 'productHunt',
avatarSrc: abhayPictureSrc,
role: 'Founder at Webisharp',
content:
'Using this tool for the last 2 hours & built a full lead capture bot. Pretty good experience till now. @baptiste_arnaud All the best for future :)',
},
],
[
{
name: 'Steve de Jong',
provider: 'email',
avatarSrc: stevePictureSrc,
role: 'CEO at Stillio',
content: (
<>
We built our own onboarding template last December for all signups for
Stillio and it works fantastic and reliably.
<br />
<br />
We send the collected data to a Make-com webhook and from there,
post-process and send to Encharge (email drip campaigns) and Pipedrive
(CRM).
<br />
We are now working on personalizing the email templates based on the
answers (user industry and role) given in the typebot. We are big fan!
</>
),
},
{
name: 'Goran Milic',
role: 'General Manager, Beefii',
provider: 'email',
content: (
<>
I used Typebot at my company and was impressed with how it cut our
customer service workload in half. I was able to create a fully
functional chatbot in minutes. <br /> You can create a bot to answer
frequently asked questions about your business or create a bot that
helps promote your business on social media or any other platform.,
</>
),
},
{
name: 'Kurnia Kwik',
role: 'Founder at DigitalPointer.ID',
provider: 'email',
avatarSrc: kurniaPictureSrc,
content: (
<>
I have several chatbot builders, but Typebot is the one I use the
most. It is simple to construct and very intuitive. <br />
Integration with third-party applications is simple, and you can
create the most sophisticated bots with its simplicity.
</>
),
},
{
name: 'Nicolai Grut',
role: 'CEO @ EcommerceNotebook.com',
avatarSrc: nicolaiPictureSrc,
provider: 'email',
content:
'I am really loving using Typebot! So good. I have used all the top bots and yours is definitely the most user friendly, and yet still so powerful.',
},
{
name: 'Anna Filou',
provider: 'productHunt',
avatarSrc: annaFilouPictureSrc,
role: 'Geek, Designer, Illustrator, Web Dev',
content:
"Seems like the product I've been waiting for Typeform to make! 😝",
},
],
]
export const Testimonials = () => {
return (
<Flex as="section" justify="center">
<VStack spacing={12} pt={'52'} px="4" maxW="1400px">
<Heading textAlign={'center'} data-aos="fade">
They&apos;ve tried, they never looked back. 💙
</Heading>
<SimpleGrid columns={[1, 2, 3]} spacing="6">
{testimonials.map((testimonialGroup, index) => (
<Stack key={index} spacing="6">
{testimonialGroup.map((testimonial, index) => (
<Testimonial key={index} {...testimonial} />
))}
</Stack>
))}
</SimpleGrid>
</VStack>
</Flex>
)
}

View File

@ -0,0 +1 @@
export { Testimonials } from './Testimonials'