Combining best parts of Mailchimp, Kalviyo's automation, Substack's newsletter and Typeform for surveys.
Bespoke's mission is to gather information about the customer and do personalized targetting.
We gather customer data through various means, including API's, behavioral intent, surveys and integrations with platforms for data ingestion. Recommendations are delivered via Automations and Campaigns.
- Automations
- Newsletter
- Sign-up Forms
- Design Emails
- Lists
- Segmentation
- Campaigns
- Analytics Dashboard
- Transactional Emails & Webhooks
- Surveys
- Behavioral Intent API
- API Reference for Bespoke REST API
- Details about Bespoke's Suppression process
- Suggest Feature and Integration Requests.
- Open a GitHub issue to report a bug.
Experience seamless integration with Bespoke's OpenAPI and Postman. Explore our latest OpenAPI specification.
For quick and convenient interaction with our APIs, import the OpenAPI spec into your preferred API tool, such as Postman. This will enable you to immediately begin working with our new APIs.
To further simplify your workflow, we have created a dedicated Postman Workspace. By visiting our Postman Workspace, you will have access to our latest collection of requests, along with the comprehensive API definitions.
-
Clone this repository
-
Initial setup
~/bespoke$: yarn setup
-
Run both
web
andserver
using turbo repo in parallel mode:~/bespoke$: yarn dev
ℹ️ we recommed not running it parallel.
~/bespoke/apps/web$: yarn dev
~/bespoke/packages/server$: yarn dev
Do not forget to fill the env variables in
web
andserver
folder
This starts your app in development mode.
Bespoke comes with a GitHub Action that handles automatically deploying your app to production environments.
Prior to your first deployment, you'll need to do a few things:
-
Install, sign up and login to Fly
-
Create two apps on Fly, one for web and one for server:
fly apps create [your-app-name]-web fly apps create [your-app-name]-server
-
Add a
FLY_API_TOKEN
to your GitHub repo. To do this, go to your user settings on Fly and create a new token, then add it to your repo secrets with the nameFLY_API_TOKEN
. -
Dealing with Bespoke Web
-
Add the following secrets to your fly app secrets, to do this you can run the following commands:
fly secrets set FRONTEND_HOST= BACKEND_HOST= FLY_BACKEND_HOST= SENTRY_DSN= POSTHOG_TOKEN= POSTHOG_ORGANISATION= POSTHOG_PROJECT_ID= CLOUDINARY_UPLOAD_IMAGE_URL= CLOUDINARY_PRESET= UNLAYER_PROJECT_ID= OPEN_SOURCE=true --app [your-app-name]-web
-
Add
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
,AWS_S3_BUCKET_REGION
,AWS_S3_BUCKET
,CLOUDFRONT
,SENTRY_AUTH_TOKEN
,SENTRY_ORG
,SENTRY_PROJECT
to your repo secrets in Gihub. This is used during docker container build. -
For the initial
fly deploy
you can use:~/bespoke$: yarn deploy:web
-
-
Dealing with Bespoke Server
-
Add to your fly app secrets, to do this you can run the following commands:
fly secrets set HOST= FRONTEND_HOST= FRONTEND_HOST_PROTOCOL= SESSION_SECRET=$(openssl rand -hex 32) AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= SES_REGION= SES_SENDING_RATE= REDIS_PORT= REDIS_HOST= REDIS_PASSWORD= UNLAYER_SECRET= OPEN_SOURCE=true EMAIL_DOMAIN= SUPPORT_EMAIL= SENTRY_DSN= POSTHOG_KEY= --app [your-app-name]-server
-
Create a Fly Postgres Cluster
-
Attach Postgres Cluster to Bespoke Server
-
We recommend
not using
Redis by Upstash in Fly. -
Before deploying please read AWS SES & SNS setup
-
For the initial
fly deploy
you can use:~/bespoke$: yarn deploy:server
-
To receive Hard bounce, Open, Delivery events etc, let's setup AWS SES with AWS SNS
We need to create a new subscription and confirm the https endpoint.
-
Create a new Subscription
-
Add Topic name and select
HTTPS
protocol -
Add your endpoint i.e
[server-hostname]/user/sns-webhook
-
console.log()
the data in yoursns-webhook
under user controller -
Before deploying add and confirm a localhost endpoint
-
Deploy the server and confirm your production endpoint
We need to create a new configuration set and add the SNS subscription as the destination for events.
-
Create a new configuration set with default values
-
Add a new Event Destination
-
Select all event types except
Redering failures
& also select open and click tracking -
Under destination option, select
Amazon SNS
and select the SNS topic you created
For the SES_SENDING_RATE
env variable, you can get the value from the SES dashboard.
To get unlimited contacts and to send emails with no restriction and to create unlimited signup-forms, please set OPEN_SOURCE=true
Let's setup Unlayer for Signup-Forms and Email templates to work
-
Login or Signup to Unlayer embed
-
Create a project and get the project id from the url
-
Use project id for
UNLAYER_PROJECT_ID
env variabe for bespoke web -
Go to the
Security
tab and enforce identity verification. -
Copy secret and add to
UNLAYER_SECRET
env varaible for bespoke server
Now that everything is set up you can commit and push your changes to your repo. Every commit to your main branch will trigger a deployment to your production environment.
- Create a new branch
git checkout -b my-new-branch
- Commit your changes
git commit -a -m 'Description of the changes'
- There are many ways of doing this and this is just a suggestion
- Push your branch to GitHub
git push origin my-new-branch
- Go to the repository page in GitHub and click on "Compare & pull request"
Bespoke engineers are checking this regularly.
Bespoke is AGPL-3.0 license