📝 Add v2.22 newsletter
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 4.2 MiB |
BIN
apps/builder/public/images/emails/V2dot22Update/newblocks.jpg
Normal file
BIN
apps/builder/public/images/emails/V2dot22Update/newblocks.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
apps/builder/public/images/logo.png
Normal file
BIN
apps/builder/public/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
19
packages/transactional/package.json
Normal file
19
packages/transactional/package.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "transactional",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "SKIP_ENV_CHECK=true dotenv -e ./.env -e ../../.env -- email dev --port=3005 --dir=templates"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "Baptiste Arnaud",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@react-email/components": "0.0.14",
|
||||||
|
"react-email": "2.0.0",
|
||||||
|
"@typebot.io/env": "workspace:*"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"dotenv-cli": "7.2.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
248
packages/transactional/templates/marketing/V2dot22Update.tsx
Normal file
248
packages/transactional/templates/marketing/V2dot22Update.tsx
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
import {
|
||||||
|
Body,
|
||||||
|
Container,
|
||||||
|
Head,
|
||||||
|
Html,
|
||||||
|
Img,
|
||||||
|
Link,
|
||||||
|
Preview,
|
||||||
|
Text,
|
||||||
|
Hr,
|
||||||
|
Heading,
|
||||||
|
Button,
|
||||||
|
Section,
|
||||||
|
} from '@react-email/components'
|
||||||
|
import * as React from 'react'
|
||||||
|
import { env } from '@typebot.io/env'
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
firstName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const imagesBaseUrl = `${env.NEXTAUTH_URL}/images/emails/V2dot22Update`
|
||||||
|
|
||||||
|
export const V2dot22Update = ({}: Props) => (
|
||||||
|
<Html>
|
||||||
|
<Head />
|
||||||
|
<Preview>January hottest new features on Typebot 🔥</Preview>
|
||||||
|
<Body style={main}>
|
||||||
|
<Container style={container}>
|
||||||
|
<Img
|
||||||
|
src={`${env.NEXTAUTH_URL}/images/logo.png`}
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
alt="Typebot's Logo"
|
||||||
|
style={{
|
||||||
|
margin: '24px 0',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Text style={text}>
|
||||||
|
Hi, <br />
|
||||||
|
<br />
|
||||||
|
We started 2024 on fire. What a productive month! Some of it has been
|
||||||
|
possible thanks to the new in-house framework to build new blocks:{' '}
|
||||||
|
<Link
|
||||||
|
href="https://docs.typebot.io/contribute/guides/create-block"
|
||||||
|
target="_blank"
|
||||||
|
style={{ ...link }}
|
||||||
|
>
|
||||||
|
The Forge
|
||||||
|
</Link>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
So I want to thank all new contributors for their work this month. 🙏
|
||||||
|
</Text>
|
||||||
|
<Button
|
||||||
|
href="https://app.typebot.io"
|
||||||
|
style={{
|
||||||
|
backgroundColor: '#0042DA',
|
||||||
|
padding: '10px 16px',
|
||||||
|
borderRadius: '4px',
|
||||||
|
color: 'white',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '15px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
margin: '20px 0',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Try the new features
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Section style={featureSection}>
|
||||||
|
<Heading style={heading}>New graph gestures</Heading>
|
||||||
|
<Text style={text}>
|
||||||
|
At last! You can select multiple groups, move them together, and
|
||||||
|
duplicate them, accross all typebots.
|
||||||
|
</Text>
|
||||||
|
<Img
|
||||||
|
src={`${imagesBaseUrl}/groupSelection.gif`}
|
||||||
|
alt="Group selection demo"
|
||||||
|
style={image}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
|
||||||
|
<Section style={featureSection}>
|
||||||
|
<Heading style={heading}>3 new blocks in town</Heading>
|
||||||
|
<Text style={text}>
|
||||||
|
We've added 3 new blocks to the library:
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<span style={{ fontWeight: 'bold' }}>QR Code</span>: generate a QR
|
||||||
|
code image URL on the fly to use in your chat. Super useful for
|
||||||
|
typebots displayed on physical devices in a store or at an event.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<span style={{ fontWeight: 'bold' }}>Mistral</span>: an alternative
|
||||||
|
to the OpenAI block. It uses the same parameters. This block allows
|
||||||
|
you to consume Mistral AI models.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<span style={{ fontWeight: 'bold' }}>Dify.AI</span>: craft your own
|
||||||
|
AI agent on Dify and consume it directly on Typebot to have the best
|
||||||
|
of both worlds.
|
||||||
|
</Text>
|
||||||
|
<Img
|
||||||
|
src={`${imagesBaseUrl}/newblocks.jpg`}
|
||||||
|
width="550"
|
||||||
|
alt="3 new blocks"
|
||||||
|
style={image}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
|
||||||
|
<Section style={featureSection}>
|
||||||
|
<Heading style={heading}>OpenAI block: Ask assistant</Heading>
|
||||||
|
<Text style={text}>
|
||||||
|
Probably the easiest way to use OpenAI's new Assistant features.
|
||||||
|
Drag and drop a block, plug a few things and you're good to go ✨
|
||||||
|
</Text>
|
||||||
|
<Img
|
||||||
|
src={`${imagesBaseUrl}/openaiAssistantGif.gif`}
|
||||||
|
width="550"
|
||||||
|
alt="OpenAI Assistant demo"
|
||||||
|
style={image}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
|
||||||
|
<Section style={featureSection}>
|
||||||
|
<Heading style={heading}>Other notable improvements</Heading>
|
||||||
|
<Text style={text}>
|
||||||
|
⏰ You can now select a time window in the Analytics graph for a
|
||||||
|
finer analysis.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
⌨️ Improved typing emulation settings. You can now set a global wait
|
||||||
|
time between each messages.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
🧠 Tools / functions support in OpenAI block
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
🔒 New "Allowed origins" typebot settings to make sure your typebot
|
||||||
|
can only be ran from your domain.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
🗄️ New visibility option in the File upload block. You can now set
|
||||||
|
your uploaded file URL as private.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
👨💻 You can now use the `setVariable` function in any custom code to
|
||||||
|
set the value of a specific variable.
|
||||||
|
</Text>
|
||||||
|
</Section>
|
||||||
|
|
||||||
|
<Hr style={hr} />
|
||||||
|
|
||||||
|
<Text style={{ ...text, marginBottom: '60px' }}>
|
||||||
|
Feel free to reply to this email, I read and answer all of them. ❤️
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
Baptiste.
|
||||||
|
</Text>
|
||||||
|
<Img
|
||||||
|
src={`${env.NEXTAUTH_URL}/images/logo.png`}
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
alt="Typebot's Logo"
|
||||||
|
style={{
|
||||||
|
marginTop: '24px',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Text style={footer}>Typebot.io - Powering Conversations at Scale</Text>
|
||||||
|
<Link
|
||||||
|
href="{{unsubscribe}}"
|
||||||
|
target="_blank"
|
||||||
|
style={{ ...link, color: '#898989', fontSize: '12px' }}
|
||||||
|
>
|
||||||
|
Unsubscribe
|
||||||
|
</Link>
|
||||||
|
</Container>
|
||||||
|
</Body>
|
||||||
|
</Html>
|
||||||
|
)
|
||||||
|
|
||||||
|
V2dot22Update.PreviewProps = {
|
||||||
|
firstName: 'John',
|
||||||
|
}
|
||||||
|
|
||||||
|
export default V2dot22Update
|
||||||
|
|
||||||
|
const main = {
|
||||||
|
backgroundColor: '#ffffff',
|
||||||
|
}
|
||||||
|
|
||||||
|
const image = {
|
||||||
|
maxWidth: '100%',
|
||||||
|
borderRadius: '8px',
|
||||||
|
}
|
||||||
|
|
||||||
|
const container = {
|
||||||
|
paddingLeft: '12px',
|
||||||
|
paddingRight: '12px',
|
||||||
|
margin: '0 auto',
|
||||||
|
}
|
||||||
|
|
||||||
|
const link = {
|
||||||
|
color: '#2754C5',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '15px',
|
||||||
|
textDecoration: 'underline',
|
||||||
|
}
|
||||||
|
|
||||||
|
const text = {
|
||||||
|
color: '#333',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '15px',
|
||||||
|
marginBottom: '24px',
|
||||||
|
}
|
||||||
|
|
||||||
|
const footer = {
|
||||||
|
color: '#898989',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '14px',
|
||||||
|
lineHeight: '22px',
|
||||||
|
marginTop: '12px',
|
||||||
|
marginBottom: '24px',
|
||||||
|
}
|
||||||
|
|
||||||
|
const heading = {
|
||||||
|
color: '#333',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '18.5px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
margin: '32px 0 14px 0',
|
||||||
|
padding: '0',
|
||||||
|
}
|
||||||
|
|
||||||
|
const featureSection = {
|
||||||
|
marginBottom: '32px',
|
||||||
|
}
|
||||||
|
|
||||||
|
const hr = {
|
||||||
|
margin: '60px 0',
|
||||||
|
}
|
||||||
130
packages/transactional/templates/transactional/MagicLink.tsx
Normal file
130
packages/transactional/templates/transactional/MagicLink.tsx
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
import {
|
||||||
|
Body,
|
||||||
|
Container,
|
||||||
|
Head,
|
||||||
|
Heading,
|
||||||
|
Html,
|
||||||
|
Img,
|
||||||
|
Link,
|
||||||
|
Preview,
|
||||||
|
Text,
|
||||||
|
} from '@react-email/components'
|
||||||
|
import * as React from 'react'
|
||||||
|
import { env } from '@typebot.io/env'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
magicLinkUrl: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const imagesBaseUrl = `${env.NEXTAUTH_URL}/images`
|
||||||
|
|
||||||
|
export const MagicLink = ({ magicLinkUrl }: Props) => (
|
||||||
|
<Html>
|
||||||
|
<Head />
|
||||||
|
<Preview>Log in with this magic link</Preview>
|
||||||
|
<Body style={main}>
|
||||||
|
<Container style={container}>
|
||||||
|
<Img
|
||||||
|
src={`${imagesBaseUrl}/logo.png`}
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
alt="Typebot's Logo"
|
||||||
|
style={{
|
||||||
|
margin: '24px 0',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Heading style={heading}>Your magic link</Heading>
|
||||||
|
<Link
|
||||||
|
href={magicLinkUrl}
|
||||||
|
target="_blank"
|
||||||
|
style={{
|
||||||
|
...clickLink,
|
||||||
|
display: 'block',
|
||||||
|
marginBottom: '24px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
👉 Click here to sign in 👈
|
||||||
|
</Link>
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
...text,
|
||||||
|
color: '#ababab',
|
||||||
|
marginTop: '14px',
|
||||||
|
marginBottom: '16px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
If you didn't try to login, you can safely ignore this email.
|
||||||
|
</Text>
|
||||||
|
<Text style={footer}>
|
||||||
|
<Link
|
||||||
|
href="https://notion.so"
|
||||||
|
target="_blank"
|
||||||
|
style={{ ...link, color: '#898989' }}
|
||||||
|
>
|
||||||
|
Typebot.io
|
||||||
|
</Link>
|
||||||
|
- Powering Conversations at Scale
|
||||||
|
</Text>
|
||||||
|
</Container>
|
||||||
|
</Body>
|
||||||
|
</Html>
|
||||||
|
)
|
||||||
|
|
||||||
|
MagicLink.PreviewProps = {
|
||||||
|
magicLinkUrl: 'http://localhost:3000',
|
||||||
|
} as Props
|
||||||
|
|
||||||
|
export default MagicLink
|
||||||
|
|
||||||
|
const main = {
|
||||||
|
backgroundColor: '#ffffff',
|
||||||
|
}
|
||||||
|
|
||||||
|
const container = {
|
||||||
|
paddingLeft: '12px',
|
||||||
|
paddingRight: '12px',
|
||||||
|
margin: '0 auto',
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickLink = {
|
||||||
|
color: '#2754C5',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '18px',
|
||||||
|
}
|
||||||
|
|
||||||
|
const link = {
|
||||||
|
color: '#2754C5',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '14px',
|
||||||
|
textDecoration: 'underline',
|
||||||
|
}
|
||||||
|
|
||||||
|
const heading = {
|
||||||
|
color: '#333',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '24px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
margin: '32px 0',
|
||||||
|
padding: '0',
|
||||||
|
}
|
||||||
|
|
||||||
|
const text = {
|
||||||
|
color: '#333',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '14px',
|
||||||
|
margin: '24px 0',
|
||||||
|
}
|
||||||
|
|
||||||
|
const footer = {
|
||||||
|
color: '#898989',
|
||||||
|
fontFamily:
|
||||||
|
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
||||||
|
fontSize: '12px',
|
||||||
|
lineHeight: '22px',
|
||||||
|
marginTop: '12px',
|
||||||
|
marginBottom: '24px',
|
||||||
|
}
|
||||||
2004
pnpm-lock.yaml
generated
2004
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -5,3 +5,4 @@ packages:
|
|||||||
- 'packages/forge/*'
|
- 'packages/forge/*'
|
||||||
- 'packages/forge/blocks/*'
|
- 'packages/forge/blocks/*'
|
||||||
- 'apps/*'
|
- 'apps/*'
|
||||||
|
- 'packages/transactional/.react-email'
|
||||||
|
|||||||
Reference in New Issue
Block a user