-
+
+
{feature}
diff --git a/apps/formbricks-com/components/shared/UseCaseCTA.tsx b/apps/formbricks-com/components/shared/UseCaseCTA.tsx
new file mode 100644
index 0000000000..e753afddcf
--- /dev/null
+++ b/apps/formbricks-com/components/shared/UseCaseCTA.tsx
@@ -0,0 +1,29 @@
+import { Button } from "@formbricks/ui";
+import { useRouter } from "next/router";
+
+interface UseCaseCTAProps {
+ href: string;
+}
+
+export default function UseCaseHeader({ href }: UseCaseCTAProps) {
+ /* const plausible = usePlausible(); */
+ const router = useRouter();
+ return (
+
+
+ Step-by-step manual
+
+
+
{
+ router.push("https://app.formbricks.com/auth/signup");
+ /* plausible("BestPractice_SubPage_CTA_TryItNow"); */
+ }}>
+ Try it now
+
+
It's free
+
+
+ );
+}
diff --git a/apps/formbricks-com/components/shared/UseCaseHeader.tsx b/apps/formbricks-com/components/shared/UseCaseHeader.tsx
new file mode 100644
index 0000000000..6d76a40b55
--- /dev/null
+++ b/apps/formbricks-com/components/shared/UseCaseHeader.tsx
@@ -0,0 +1,24 @@
+interface UseCaseHeaderProps {
+ title: string;
+
+ difficulty: string;
+ setupMinutes: string;
+}
+
+export default function UseCaseHeader({ title, difficulty, setupMinutes }: UseCaseHeaderProps) {
+ return (
+
+
+
+ {title}
+
+
+ {difficulty}
+
+
+ {setupMinutes} minutes
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/lib/cleanHtml.ts b/apps/formbricks-com/lib/cleanHtml.ts
new file mode 100644
index 0000000000..c7b47ba052
--- /dev/null
+++ b/apps/formbricks-com/lib/cleanHtml.ts
@@ -0,0 +1,79 @@
+/*!
+ * Sanitize an HTML string
+ * (c) 2021 Chris Ferdinandi, MIT License, https://gomakethings.com
+ * @param {String} str The HTML string to sanitize
+ * @return {String} The sanitized string
+ */
+export function cleanHtml(str: string): string {
+ /**
+ * Convert the string to an HTML document
+ * @return {Node} An HTML document
+ */
+ function stringToHTML() {
+ let parser = new DOMParser();
+ let doc = parser.parseFromString(str, "text/html");
+ return doc.body || document.createElement("body");
+ }
+
+ /**
+ * Remove
+Go to the âAudienceâ tab, find the âWhen to sendâ card and choose âAdd Actionâ. We will now use our super cool No-Code User Action Tracker:
-
-```
+
-Afterwards you need to embed the feedback box into your app. The standard ways are either a
pop-over on button click or
inline inserted into a div.
+
+ You can also create [Code Actions](/docs/actions/code) using `formbricks.track("Eventname")` - they will
+ automatically appear in your Actions overview as long as the SDK is embedded.
+
-For example for a pop-over on button click you need to add the following code to your app:
+We have two options to track the Feedback Button in your application: innerText and CSS-Selector:
-```html
-
Feedback
-```
+1. **innerText:** This means that whenever a user clicks any HTML item in your app which has an `innerText` of `Feedback` the Feedback Box will be displayed.
+2. **CSS-Selector:** This means that when an element with a specific CSS-Selector like `#feedback-button` is clicked, your Feedback Box is triggered.
-### 3. Configure Feedback Box
+
+
+
+
-You can change the content behaviour of the Feedback Box with the config object.
+### 4. Select action in the âWhen to askâ card
-**Basic config**
+
-Add your Formbricks form ID and the formbricks server address to the config object.
+### 5. Set Recontact Options correctly
-```html
-
-```
+Scroll down to âRecontact Optionsâ. Here you have to choose the right settings so that the Feedback Box pops up every time the user action is performed. (Our default is that every user sees every survey only once):
-**Personalizing**
+
-Add your name, position and image link to give users the impression that you care about their feedback :)
+### 7. Youâre ready publish your survey!
-```javascript
-window.formbricks = {
- ...window.formbricks,
- config: {
- // ...
- contact: {
- name: "Matti",
- position: "Co-Founder",
- imgUrl: "https://avatars.githubusercontent.com/u/675065?s=128&v=4",
- },
- },
-};
-```
+
-
**Sending user data with feedback**
+## Setting up the Widget
-The feedback box is built for in-app experiences. We assume that you already have user properties stored in a session object.
+
+ You need to have the Formbricks Widget installed to display the Feedback Box in your app. Please follow
+ [this tutorial (Step 4 onwards)](/docs/getting-started/quickstart) to install the widget.
+
-Here is an example of how to pass it to Formbricks. However, it might differ in your specific case.
+###
-```javascript
-window.formbricks = {
- ...window.formbricks,
- config: {
- // ...
- customer: {
- email: "", // fill dynamically
- name: "", // fill dynamically
- },
- };
-},
-```
-
-Note: the `email` field must be present in the customer object
-
-**Styling**
-
-You can style the Feedback Box to match your UI. We recommend to at least replace the brand color with your main color.
-
-```javascript
-window.formbricks = {
- ...window.formbricks,
- config: {
- // ...
- style: {
- brandColor: "#00c4b8",
- },
- };
-},
-```
-
-Here are all variables you can set with the current defaults:
-
-```javascript
-style: {
- brandColor: "#00c4b8",
- borderRadius: "0.4rem",
- headerBGColor: "#1e293b",
- headerTitleColor: "#111111",
- boxBGColor: "#cbd5e1",
- textColor: "#0f172a",
- buttonHoverColor: "#e2e8f0",
-},
-```
-
-### Example config
-
-Here is an example of a full config object:
-
-```javascript
-window.formbricks = {
- ...window.formbricks,
- config: {
- formbricksUrl: "https://app.formbricks.com",
- formId: "cldipcgat0000mn0g31a8pdse",
- containerId: "formbricks-feedback-box", // only needed for modal & inline
- contact: {
- name: "Johannes",
- position: "Co-Founder",
- imgUrl: "https://avatars.githubusercontent.com/u/72809645?v=4",
- },
- customer: {
- id: "", // fill dynamically
- name: "", // fill dynamically
- email: "", // fill dynamically
- },
- style: {
- brandColor: "#0E1420",
- headerBGColor: "#E5E7EB",
- headerTitleColor: "#4B5563",
- boxBGColor: "#F9FAFB",
- textColor: "#374151",
- buttonHoverColor: "#F3F4F6",
- },
- },
-};
-```
-
-### 4. Render survey in your app
-
-To add the Feedback Box to your UI, you can use different wrappers. Please follow the instructions linked below:
-
-1.
In-app Pop-over
-2.
Modal
-3.
Inline
+# Thatâs it! đ
export default ({ children }) =>
{children} ;
diff --git a/apps/formbricks-com/pages/docs/best-practices/feedback-box/publish-survey.png b/apps/formbricks-com/pages/docs/best-practices/feedback-box/publish-survey.png
new file mode 100644
index 0000000000..87123d2a2f
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/feedback-box/publish-survey.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/feedback-box/select-feedback-button-action.png b/apps/formbricks-com/pages/docs/best-practices/feedback-box/select-feedback-button-action.png
new file mode 100644
index 0000000000..2aaa423fb9
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/feedback-box/select-feedback-button-action.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/feedback-box/set-recontact-options.png b/apps/formbricks-com/pages/docs/best-practices/feedback-box/set-recontact-options.png
new file mode 100644
index 0000000000..d8a7ff132a
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/feedback-box/set-recontact-options.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-innertext.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-innertext.png
new file mode 100644
index 0000000000..8699e8f385
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-innertext.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-pageurl.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-pageurl.png
new file mode 100644
index 0000000000..cd5caf14e4
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/action-pageurl.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/change-text.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/change-text.png
new file mode 100644
index 0000000000..2febaed9cc
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/change-text.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/create-survey.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/create-survey.png
new file mode 100644
index 0000000000..1cfb3c44db
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/create-survey.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/index.mdx b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/index.mdx
new file mode 100644
index 0000000000..1bd6296ffa
--- /dev/null
+++ b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/index.mdx
@@ -0,0 +1,114 @@
+import { Layout } from "@/components/docs/Layout";
+import { Fence } from "@/components/shared/Fence";
+import { Callout } from "@/components/shared/Callout";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import Image from "next/image";
+
+import ActionText from "./action-innertext.png";
+import ActionPageurl from "./action-pageurl.png";
+import ChangeText from "./change-text.png";
+import CreateSurvey from "./create-survey.png";
+import Publish from "./publish.png";
+import RecontactOptions from "./recontact-options.png";
+import SelectAction from "./select-action.png";
+
+export const meta = {
+ title: "Improve Trial Conversion",
+ description: "Understand how to improve the trial conversions to get more paying customers.",
+};
+
+When a user doesn't convert, you want to know why. A micro-survey displayed at exactly the right time gives you a window into understanding the most relevant question: To pay or not to pay?
+
+## Purpose
+
+The better you understand why free users donât convert to paid users, the higher your revenue. You can make an informed decision about what to change in your offering to make more people pay for your service.
+
+## Preview
+
+
+
+## Formbricks Approach
+
+- Ask at exactly the right point in time
+- Ask to understand the problem, donât ask for solutions
+
+## Installation
+
+To display the Trial Conversion Survey in your app you want to proceed as follows:
+
+1. Create new Trial Conversion Survey at [app.formbricks.com](http://app.formbricks.com/)
+2. Set up the user action to display survey at right point in time
+3. Print that đ¸
+
+
+ We assume that you have already installed the Formbricks Widget in your web app. Itâs required to display
+ messages and surveys in your app. If not, please follow the [Quick Start Guide (takes 15mins
+ max.)](/docs/getting-started/quickstart)
+
+
+### 1. Create new Trial Conversion Survey
+
+If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup)
+
+Click on "Create Survey" and choose the template âImprove Trial Conversionâ:
+
+
+
+### 2. Update questions (if you like)
+
+Youâre free to update the questions and answer options. However, based on our experience, we suggest giving the provided template a go đ
+
+
+
+_Want to change the button color? You can do so in the product settings!_
+
+Save, and move over to the âAudienceâ tab.
+
+### 3. Pre-segment your audience (coming soon)
+
+
+ We're working on pre-segmenting users by attributes. We will update this manual in the next days.
+
+
+Pre-segmentation isn't relevant for this survey because you likely want to solve all people who cancel their trial. You probably have a specific user action e.g. clicking on "Cancel Trial" you can use to only display the survey to users trialing your product.
+
+### 4. Set up a trigger for the Trial Conversion Survey:
+
+How you trigger your survey depends on your product. There are two options:
+
+1. **Trigger by pageURL:** Letâs say you have a page under â/trial-cancelledâ where you forward users once they cancelled the trial subscription. You can then create an user Action with the type `pageURL` with the following settings:
+
+
+
+Whenever a user visits this page, the survey will be displayed â
+
+2. **Trigger by Button Click:** In a different case, you have a âCancel Trial button in your app. You can setup a user Action with the according `innerText` like so:
+
+
+
+Please have a look at our complete [Actions manual](/docs/actions/why) if you have questions.
+
+### 5. Select Action in the âWhen to askâ card
+
+
+
+### 6. Last step: Set Recontact Options correctly
+
+Lastly, scroll down to âRecontact Optionsâ. Here you have to choose the correct settings to make sure you gather as many insights as possible. You want to make sure that this survey is always displayed, no matter if the user has already seen a survey in the past days:
+
+
+
+### 7. Congrats! Youâre ready to publish your survey đ
+
+
+
+
+ You need to have the Formbricks Widget installed to display the Improve Trial Conversion Survey in your app.
+ Please follow [this tutorial (Step 4 onwards)](/docs/getting-started/quickstart) to install the widget.
+
+
+###
+
+# Go get 'em đ
+
+export default ({ children }) =>
{children} ;
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/publish.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/publish.png
new file mode 100644
index 0000000000..a63538d6ee
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/publish.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/recontact-options.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/recontact-options.png
new file mode 100644
index 0000000000..cf0dcfb5b1
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/recontact-options.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/select-action.png b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/select-action.png
new file mode 100644
index 0000000000..ec3f22bec9
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/improve-trial-cr/select-action.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-css.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-css.png
new file mode 100644
index 0000000000..143c7a03e6
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-css.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-innertext.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-innertext.png
new file mode 100644
index 0000000000..7fb947ff8e
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-innertext.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-pageurl.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-pageurl.png
new file mode 100644
index 0000000000..791a6ab321
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/action-pageurl.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/add-action.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/add-action.png
new file mode 100644
index 0000000000..50306cece0
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/add-action.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/change-text.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/change-text.png
new file mode 100644
index 0000000000..e015f420d1
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/change-text.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/create-prompt.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/create-prompt.png
new file mode 100644
index 0000000000..a524548d42
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/create-prompt.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/index.mdx b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/index.mdx
index d14af19c70..8d05b0af03 100644
--- a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/index.mdx
+++ b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/index.mdx
@@ -1,14 +1,133 @@
import { Layout } from "@/components/docs/Layout";
import { Fence } from "@/components/shared/Fence";
import { Callout } from "@/components/shared/Callout";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import Image from "next/image";
+
+import ActionCSS from "./action-css.png";
+import ActionInner from "./action-innertext.png";
+import ActionPageurl from "./action-pageurl.png";
+import AddAction from "./add-action.png";
+import ChangeText from "./change-text.png";
+import CreatePrompt from "./create-prompt.png";
+import InterviewExample from "./interview-example.png";
+import Publish from "./publish-survey.png";
+import RecontactOptions from "./recontact-options.png";
+import SelectAction from "./select-action.png";
export const meta = {
title: "In-app Interview Prompt",
+ description: "Invite only power users to schedule an interview with your product team.",
};
-
- In-app interview prompts are only available in closed beta. Want to become a design partner? Reach out at
- hola@formbricks.com
+The Interview Prompt allows you to pick a specific user segment (e.g. Power Users) and invite them to a user interview. Bye, bye spammy email invites, benefit from up to 6x more respondents.
+
+## Purpose
+
+Product analytics and in-app surveys are incomplete without user interviews. Set the scheduling on autopilot for a continuous stream of interviews.
+
+## Preview
+
+
+
+## Formbricks Approach
+
+- Pre-segment users with custom attributes. Only invite highly relevant users.
+- In-app prompts have a 6x higher conversion rate than email invites.
+- Set scheduling user interviews on auto pilot.
+- Soon: Integrate directly with your [Cal.com](http://Cal.com) account.
+
+## Installation
+
+To display an Interview Prompt in your app you want to proceed as follows:
+
+1. Create new Interview Prompt at [app.formbricks.com](http://app.formbricks.com/)
+2. Adjust content and settings
+3. Thatâs it! đ
+
+
+ We assume that you have already installed the Formbricks Widget in your web app. Itâs required to display
+ messages and surveys in your app. If not, please follow the [Quick Start Guide
+ (15mins).](/docs/getting-started/quickstart)
+### 1. Create new Interview Prompt
+
+If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup)
+
+Click on "Create Survey" and choose the template âInterview Promptâ:
+
+
+
+### 2. Update prompt and CTA
+
+Update the prompt, description and button text to match your products tonality. You can also update the button color in the Product Settings.
+
+
+
+In the button settings you have to make sure it is set to âExternal URLâ. In the URL field, copy your booking link (e.g. https://cal.com/company/user-interview). If you donât have a booking link yet, head over to [cal.com](http://cal.com) and get one - they have the best free plan out there!
+
+
+
+Save, and move over to the âAudienceâ tab.
+
+### 3. Pre-segment your audience (coming soon)
+
+
+ We're working on pre-segmenting users by attributes. We will update this manual in the next few days.
+
+
+Once you clicked over to the âAudienceâ tab you can change the settings. In the **Who To Send** card, select âFilter audience by attributeâ. This allows you to only show the prompt to a specific segment of your user base.
+
+In our case, we want to select users who we have assigned the attribute âPower Userâ. To learn how to assign attributes to your users, please [follow this guide](/docs/attributes/why).
+
+Great, now only the âPower Userâ segment will see our Interview Prompt. But when will they see it?
+
+### 4. Set up a trigger for the Interview Prompt:
+
+To create the trigger to show your Interview Prompt, go to the âAudienceâ tab, find the âWhen to sendâ card and choose âAdd Actionâ. We will now use our super cool No-Code User Action Tracker:
+
+
+
+
+ You can also create [Code Actions](/docs/actions/code) using `formbricks.track("Eventname")` - they will
+ automatically appear in your Actions overview as long as the SDK is embedded.
+
+
+Generally, we have two types of user actions: Page views and clicks. The Interview Prompt, youâll likely want to display on a page visit since you already filter who sees the prompt by attributes.
+
+1. **pageURL:** Whenever a user visits a page the survey will be displayed, as long as the other conditions match. Other conditions are pre-segmentation, if this user has seen a survey in the past 2 weeks, etc.
+
+
+
+2. **innerText & CSS-Selector:** When a user clicks an element (like a button) with a specific text content or CSS selector, the prompt will be displayed as long as the other conditions also match.
+
+
+
+
+
+
+### 5. Select action in the âWhen to askâ card
+
+
+
+### 6. Set Recontact Options correctly
+
+Scroll down to âRecontact Optionsâ. Here you have to choose the correct settings to strike the right balance between asking for user feedback and preventing survey fatigue. Your settings also depend on the size of your user base or segment. If you e.g. have thousands of âPower Usersâ you can easily afford to only display the prompt once. If you have a smaller user base you might want to ask twice to get a sufficient amount of bookings:
+
+
+
+### 7. Congrats! Youâre ready to publish your survey đ đ¤¸
+
+
+
+
+ You need to have the Formbricks Widget installed to display the Interview Prompt in your app. Please follow
+ [this tutorial (Step 4 onwards)](/docs/getting-started/quickstart) to install the widget.
+
+
+###
+
+# Learn about them users! đ
+
export default ({ children }) => {children} ;
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/interview-example.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/interview-example.png
new file mode 100644
index 0000000000..eaf773d974
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/interview-example.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/publish-survey.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/publish-survey.png
new file mode 100644
index 0000000000..3c05657fa1
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/publish-survey.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/recontact-options.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/recontact-options.png
new file mode 100644
index 0000000000..5d5d0b568d
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/recontact-options.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/interview-prompt/select-action.png b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/select-action.png
new file mode 100644
index 0000000000..f6967aa760
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/interview-prompt/select-action.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-css.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-css.png
new file mode 100644
index 0000000000..143c7a03e6
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-css.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-pageurl.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-pageurl.png
new file mode 100644
index 0000000000..791a6ab321
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/action-pageurl.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/change-text.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/change-text.png
new file mode 100644
index 0000000000..3fbf0184c4
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/change-text.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/create-survey.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/create-survey.png
new file mode 100644
index 0000000000..9fe5db384a
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/create-survey.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/index.mdx b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/index.mdx
index b5d815fceb..0d8d99f31f 100644
--- a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/index.mdx
+++ b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/index.mdx
@@ -1,175 +1,116 @@
import { Layout } from "@/components/docs/Layout";
import { Fence } from "@/components/shared/Fence";
-import Link from "next/link";
+import { Callout } from "@/components/shared/Callout";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
import Image from "next/image";
-import NewPMF from "@/images/docs/new-pmf.png";
-import ID from "@/images/docs/copy-id.png";
+
+import ActionCSS from "./action-css.png";
+import ActionPageurl from "./action-pageurl.png";
+import ChangeText from "./change-text.png";
+import CreateSurvey from "./create-survey.png";
+import Publish from "./publish.png";
+import RecontactOptions from "./recontact-options.png";
+import SelectAction from "./select-action.png";
export const meta = {
title: "Product-Market Fit Survey",
+ description: "The Product-Market Fit survey helps you measure, well, Product-Market Fit (PMF).",
};
-The Product-Market Fit survey (or Sean Ellis Test) is a method to measure Product-Market Fit.
-
## Purpose
-By assessing how disappointed users would be if they could no longer use your service you get a good idea of how well your current product fits your target market.
-
-Measuring it allows you to optimize it.
-
-## Formbricks Approach
-
-- Higher conversion: In-app surveys **convert significantly better** than email surveys
-
-- **Pre-segment** user base: Only ask users who experienced the value of your product
-
-- **Specific** dashboard: Understand your data right, separate signal from noise by design
-
-- Targeted approach: **Personally address** users with their name (if you have it)
-
-- Measure continuously: Feel the pulse of your user base **consistently**
-
-- No UI clutter: **Natively embed** the survey for best possible UX
-
-- **Never** ask twice: Assure to not survey users twice
+Measuring and understanding your PMF is essential to build a large, successful business. It helps you understand what users like, what theyâre missing and what to build next. This survey is perfectly suited to measure PMF like [Superhuman](https://review.firstround.com/how-superhuman-built-an-engine-to-find-product-market-fit).
## Preview
-
+
-## Installation
+## Formbricks Approach
-To add the Product-Market Fit Survey to your app, you need to perform these steps:
+- Pre-segment users to only survey users who have experienced your products value
+- Never ask twice, keep your data clean
+- Run on autopilot: Set up once, keep surveying users continuously
-1. Create new survey at app.formbricks.com
-2. Embed JS snippet in ``
-3. Configure survey
-4. Render in-app
+## Overview
-### 1. Create new survey
+To display the Product-Market Fit survey in your app you want to proceed as follows:
-Create an account at [app.formbricks.com](https://app.formbricks.com/auth/signup)
+1. Create new Product-Market Fit survey at [app.formbricks.com](http://app.formbricks.com/)
+2. Setup pre-segmentation to assure high data quality
+3. Setup the user action to display survey at good point in time
-Then, create a new Product-Market Fit Survey:
+
+ We assume that you have already installed the Formbricks Widget in your web app. Itâs required to display
+ messages and surveys in your app. If not, please follow the [Quick Start Guide (takes 15mins
+ max.)](/docs/getting-started/quickstart)
+
-
+### 1. Create new PMF survey
-Go to the "Setup instructions" tab and locate your survey ID. You'll need it in a minute:
+If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup)
-
+Click on "Create Survey" and choose one of the PMF survey templates. The first one is rather short, the latter builds on the ["Product-Market Fit Engine"](https://review.firstround.com/how-superhuman-built-an-engine-to-find-product-market-fit) developed by Superhuman:
-### 2. Embed Formbricks snippet in ``
+
-Embed the following Product-Market Fit Survey script in your HTML `` tag.
+### 2. Update questions (if you like)
-Replace the `formId` with survey Id from the Formbricks dashboard:
+Youâre free to update the question and answer options. However, based on our experience, we suggest giving the provided template a go đ Here is a very [detailed description](https://coda.io/@rahulvohra/superhuman-product-market-fit-engine) of what to do with the data youâre collecting.
-```tsx
-
+
-
-```
+_Want to change the button color? You can do so in the product settings!_
-All you have to do now is assigning the `containerId` to the div where you want to render your survey (detailed instructions linked at the bottom):
+Save, and move over to where the magic happens: The âAudienceâ tab.
-```html
-
-```
+### 3. Pre-segment your audience (coming soon)
-### 3. Configure survey
+
+ We're working on pre-segmenting users by attributes. We will update this manual in the next days.
+
-**Sending user metadata with submission**
+To run this survey properly, you should pre-segment your user base. As touched upon earlier: if you ask every user youâll get lots of opinions which are often misleading. You only want to gather feedback from people who invested the time to get to know and use your product:
-The Product-Market Fit Survey is built for in-app experiences. We assume that you already have user properties stored in a session object. It makes sense to send them to Formbricks to enrich the user profile in the user view. Later on, you will be able to create cohorts to survey based on user properties.
+**Filter by attribute**: You can keep the logic to decide if a user has (or has not) experienced value in your application. This makes most sense if you want to use historic usage data to decide if a user qualifies or not. Create your logic and if it applies, send an attribute to Formbricks by e.g. `formbricks.setAttribute("Loyalty", "Experienced Value");` Here is the full manual on how to [set attributes](/docs/attributes/custom-attributes).
-Here is an example of how to take metadata from the next.js Session Object and pass it to Formbricks:
+**Filter by actions (coming soon)**: Later, you can also segment users based on events tracked with Formbricks. However, this makes it impossible to use historic usage data (pre Formbricks usage). Here we will have a few options to achieve that:
-```javascript
-window.formbricksPmf = {
- ...window.formbricksPmf,
- config: {
- // ...
- customer: {
- email: "", // fill dynamically
- name: "", // fill dynamically
- },
- };
-},
-```
+- Check the time passed since sign-up (e.g. signed up 4 weeks ago)
+- User has performed a specific action a certain number of times or (e.g. created 5 reports)
+- User has performed a combination of actions (e.g. created a report **and** invited a team member)
-Note: the `email` field must be present in the customer object
+This way you make sure that you separate potentially misleading opinions from valuable insights.
-**Styling**
+### 4. Set up a trigger for the Product-Market Fit survey:
-You can style the Product-Market Fit Survey to match your UI. We recommend to at least replace the brand color with your main color.
+You need a trigger to display the survey but in this case, the filtering does all the work. Itâs up to you to decide to display the survey after the user viewed a specific subpage (pageURL) or after clicking an element. Have a look at the [Actions manual](/docs/actions/why) if you are not sure how to set them up:
-```javascript
-window.formbricksPmf = {
- ...window.formbricksPmf,
- config: {
- // ...
- style: {
- brandColor: "#00c4b8",
- },
- };
-},
-```
+
+
+
+
-Here are all variables you can set with the current defaults:
+### 5. Select Action in the âWhen to askâ card
-```javascript
-style: {
- brandColor: "#00c4b8",
- borderRadius: "0.4rem",
- containerBgColor: "#f8fafc",
- textColor: "#0f172a",
- buttonTextColor: "#ffffff",
- textareaBorderColor: "#e2e8f0",
-},
-```
+
-### Example config
+### 6. Last step: Set Recontact Options correctly
-Here is an example of a full config object:
+Lastly, scroll down to âRecontact Optionsâ. Here you have to choose the correct settings to make sure your data remains of high quality. You want to make sure that this survey is only responded to once per user. It is up to you to decide if you want to display it several times until the user responds:
-```javascript
-window.formbricksPmf = {
- ...window.formbricksPmf,
- config: {
- formbricksUrl: "https://app.formbricks.com",
- formId: "cldetkpre0000nr0hku986hio",
- containerId: "formbricks-pmf-survey", // always needed
- customer: {
- id: "", // fill dynamically
- name: "", // fill dynamically
- email: "", // fill dynamically
- },
- style: {
- brandColor: "#00c4b8",
- borderRadius: "0.4rem",
- containerBgColor: "#f8fafc",
- textColor: "#0f172a",
- buttonTextColor: "#ffffff",
- textareaBorderColor: "#e2e8f0",
- },
- },
-};
-```
+
-### 4. Render survey in your app
+### 7. Congrats! Youâre ready to publish your survey đ
-To add the Product-Market Fit Survey to your UI, you can use different wrappers. Please follow the instructions linked below:
+
-1. Modal
-2. Inline
+
+ You need to have the Formbricks Widget installed to display the PMF Survey in your app. Please follow [this
+ tutorial (Step 4 onwards)](/docs/getting-started/quickstart) to install the widget.
+
+
+###
+
+# Get those insights!
export default ({ children }) => {children} ;
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/publish.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/publish.png
new file mode 100644
index 0000000000..42bbc5f2bd
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/publish.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/recontact-options.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/recontact-options.png
new file mode 100644
index 0000000000..5d5d0b568d
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/recontact-options.png differ
diff --git a/apps/formbricks-com/pages/docs/best-practices/pmf-survey/select-action.png b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/select-action.png
new file mode 100644
index 0000000000..f6967aa760
Binary files /dev/null and b/apps/formbricks-com/pages/docs/best-practices/pmf-survey/select-action.png differ
diff --git a/apps/formbricks-com/pages/feature-chaser/index.tsx b/apps/formbricks-com/pages/feature-chaser/index.tsx
new file mode 100644
index 0000000000..78c578c31e
--- /dev/null
+++ b/apps/formbricks-com/pages/feature-chaser/index.tsx
@@ -0,0 +1,43 @@
+import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+
+export default function FeatureChaserPage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ You don't always know how well a feature works. Product analytics don't tell you why it
+ is used - and why not. Especially in complex products it can be difficult to gather reliable
+ experience data. The Feature Chaser allows you to granularly survey users at exactly the right
+ point in the user journey.
+
+
+ How to get started:
+
+
+ Once you've embedded the Formbricks Widget in your application, you can start following user
+ actions. Simply use our No-Code Action wizard to keep track of different actions users perfrom -
+ 100% GPDR compliant.
+
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/pages/feedback-box/index.tsx b/apps/formbricks-com/pages/feedback-box/index.tsx
index 6f22406d45..215ad6fa02 100644
--- a/apps/formbricks-com/pages/feedback-box/index.tsx
+++ b/apps/formbricks-com/pages/feedback-box/index.tsx
@@ -1,14 +1,42 @@
import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
export default function FeedbackBoxPage() {
return (
-
- {/*
-
*/}
+
+
+
+
+ Why is it useful?
+
+
+ Offering a direct channel for feedback helps you build a better product. Users feel heared and
+ with Formbricks automations, you'll be able to react to feedback rapidly. Lastly, critical
+ feedback can be acted upon quickly so that it doesn't end up on social media.
+
+
+ How to get started:
+
+
+ Setting up a Feedback Widget with Formbricks takes just a few minutes. Create an account,
+ customize your widget and choose the right settings so that it always pops up when a user hits
+ "Feedback".
+
+
+
+
+
+
+ Other Best Practices
+
+
);
}
diff --git a/apps/formbricks-com/pages/improve-trial-conversion/index.tsx b/apps/formbricks-com/pages/improve-trial-conversion/index.tsx
new file mode 100644
index 0000000000..cd35cc4b45
--- /dev/null
+++ b/apps/formbricks-com/pages/improve-trial-conversion/index.tsx
@@ -0,0 +1,41 @@
+import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+
+export default function MissedTrialPagePage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ People who tried your product have the problem you're solving. That's good!
+ Understanding why they didn't convert to a paying user is crucial to improve your conversion
+ rate - and grow the bottom line of your company.
+
+
+ How to get started:
+
+
+ Once a user signed up for a trial, you can pass this info as an attribute to Formbricks. This
+ allows you to pre-segment your user base and only survey users in the trial stage. This granular
+ segmentation leads to better data and minimal survey fatigue.
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/pages/interview-prompt/index.tsx b/apps/formbricks-com/pages/interview-prompt/index.tsx
new file mode 100644
index 0000000000..e2527a069b
--- /dev/null
+++ b/apps/formbricks-com/pages/interview-prompt/index.tsx
@@ -0,0 +1,41 @@
+import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+
+export default function InterviewPromptPage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ Interviews are the best way to understand your customers needs. But there is so much overhead
+ involved, especially when your team and customer base grow. Automate scheduling interviews with
+ Formbricks with ease.
+
+
+ How to get started:
+
+
+ Once you have setup the Formbricks Widget, you have two ways to pre-segment your user base: Based
+ on events and based on attributes. Soon, you will also be able to import cohorts from PostHog with
+ just a few clicks.
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/pages/learn-from-churn/index.tsx b/apps/formbricks-com/pages/learn-from-churn/index.tsx
new file mode 100644
index 0000000000..b986369566
--- /dev/null
+++ b/apps/formbricks-com/pages/learn-from-churn/index.tsx
@@ -0,0 +1,41 @@
+import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+
+export default function LearnFromChurnPage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ Churn is hard. Users decided to pay for your service and changed their mind. Don't let them
+ get away with these knowledge nuggets about the shortcomings of your product! Find out to prevent
+ churn in the future.
+
+
+ How to get started:
+
+
+ Once you've setup Formbricks, you have two ways to run this survey: Before users cancel or
+ after. If you guide them through the survey before they can cancel, you might add to their
+ frustration. But getting feedback from every user gets you there faster.
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/pages/measure-product-market-fit/index.tsx b/apps/formbricks-com/pages/measure-product-market-fit/index.tsx
new file mode 100644
index 0000000000..f9df4a45ff
--- /dev/null
+++ b/apps/formbricks-com/pages/measure-product-market-fit/index.tsx
@@ -0,0 +1,164 @@
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+import BreakerCTA from "@/components/shared/BreakerCTA";
+import Layout from "@/components/shared/Layout";
+import UseCaseCTA from "@/components/shared/UseCaseCTA";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+import DashboardMockupDark from "@/images/dashboard-mockup-dark.png";
+import DashboardMockup from "@/images/dashboard-mockup.png";
+import PipelinesDark from "@/images/pipelines-dark.png";
+import Pipelines from "@/images/pipelines.png";
+import PreSegmentationDark from "@/images/pre-segmentation-dark.png";
+import PreSegmentation from "@/images/pre-segmentation.png";
+import Image from "next/image";
+
+export default function MeasurePMFPage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ The Product-Market Fit survey is a proven method to get a continuous understanding of how users
+ value your product. This helps you prioritize features to increase your PMF. To run it properly,
+ you need granular control over who to ask when. Formbricks makes this possible.
+
+
+ How to get started:
+
+
+ In a nutshell: Decide what constitutes a "Power User" in your product. Set and send the
+ corresponding attribute to Formbricks and use it to pre-segment your user base. Formbricks
+ automatically asks a predetermined amount of users weekly, bi-weekly or monthly. The continuous
+ stream of insights help you develop your product with the core user needs front and center.
+
+
+
+
+
+ {/* Steps */}
+
+
+
+
+
Step 1
+
+ 1. Pre-Segmentation
+
+
+ Signed up for more than 4 weeks? Used a specific feature? Set up a custom condition to{" "}
+ only survey the right subset of your user base.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Step 2
+
+ Survey users in-app
+
+
+ On average, in-app surveys convert 6x better than email surveys. Get significant results even
+ from smaller user bases.
+
+
+
+
+
+
+
+
+
+
Step 3
+
+ Loop in your team
+
+
+ Pipe insights to where your team works: Slack, Discord, Email. Use the webhook and Zapier to
+ pipe survey data where you want it.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Step 4
+
+ Make better decisions
+
+
+ Down the line we will allow you to build a custom dashboard specifically to gauge
+ Product-Market Fit. Beat confirmation bias and
+ build conviction for the next product decision.
+
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/formbricks-com/pages/onboarding-segmentation/index.tsx b/apps/formbricks-com/pages/onboarding-segmentation/index.tsx
new file mode 100644
index 0000000000..1f9388fd65
--- /dev/null
+++ b/apps/formbricks-com/pages/onboarding-segmentation/index.tsx
@@ -0,0 +1,41 @@
+import DemoPreview from "@/components/dummyUI/DemoPreview";
+import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation";
+import Layout from "@/components/shared/Layout";
+import UseCaseHeader from "@/components/shared/UseCaseHeader";
+
+export default function OnboardingSegmentationPage() {
+ return (
+
+
+
+
+
+ Why is it useful?
+
+
+ In your Onboarding you likely want to ask two or three questions to be able to segment your users
+ best. These attributes can be used to create cohorts and survey users down the line. You can
+ identify who uses your product most and use Formbricks to gather relevant qualitative data on
+ scale.
+
+
+ How to get started:
+
+
+ Onboardings are unique to every product. Formbricks does not help you build the right onboarding.
+ Currently, you can use the Formbricks API to send survey data to Formbricks for later usage. Down
+ the line, we might offer a simple way to add survey questions to your Onboarding.
+
+
+
+
+
+
+ Other Best Practices
+
+
+
+ );
+}
diff --git a/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx b/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx
index 98c6c1d669..1c215f214d 100644
--- a/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx
+++ b/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx
@@ -87,7 +87,7 @@ export default function PricingTable({ environmentId, session }: PricingTablePro
))}
- Always free
+ Always free
{session.user?.plan === "free" ? (
diff --git a/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts b/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
index fc1c2271a6..c2f01c9d7f 100644
--- a/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
+++ b/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
@@ -32,13 +32,54 @@ const thankYouCardDefault = {
export const templates: Template[] = [
{
- name: "Product Market Fit Survey",
+ name: "Product Market Fit Survey (short)",
icon: PMFIcon,
category: "Product Experience",
- objectives: ["increase_user_adoption", "increase_conversion"],
+
description: "Measure PMF by assessing how disappointed users would be if your product disappeared.",
preset: {
- name: "Product Market Fit Survey",
+ name: "Product Market Fit Survey (short)",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ headline: "How disappointed would you be if you could no longer use {{productName}}?",
+ subheader: "Please select one of the following options:",
+ required: true,
+ choices: [
+ {
+ id: createId(),
+ label: "Not at all disappointed",
+ },
+ {
+ id: createId(),
+ label: "Somewhat disappointed",
+ },
+ {
+ id: createId(),
+ label: "Very disappointed",
+ },
+ ],
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "How can we improve {{productName}} for you?",
+ subheader: "Please be as specific as possible.",
+ required: true,
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Product Market Fit (Superhuman)",
+ icon: PMFIcon,
+ category: "Product Experience",
+
+ description: "Measure PMF by assessing how disappointed users would be if your product disappeared.",
+ preset: {
+ name: "Product Market Fit (Superhuman)",
questions: [
{
id: createId(),
@@ -93,7 +134,19 @@ export const templates: Template[] = [
{
id: createId(),
type: "openText",
- headline: "How can we improve our service for you?",
+ headline: "What type of people do you think would most benefit from {{productName}}?",
+ required: true,
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "What is the main benefit your receive from {{productName}}?",
+ required: true,
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "How can we improve {{productName}} for you?",
subheader: "Please be as specific as possible.",
required: true,
},
@@ -354,7 +407,7 @@ export const templates: Template[] = [
{
id: createId(),
type: "openText",
- headline: "Is there something we can do to win you back?",
+ headline: "How can we win you back?",
subheader: "Feel free to speak your mind, we do too.",
required: false,
},
@@ -363,19 +416,19 @@ export const templates: Template[] = [
},
},
{
- name: "Missed Trial Conversion",
+ name: "Improve Trial Conversion",
icon: BaseballIcon,
category: "Increase Revenue",
objectives: ["increase_user_adoption", "increase_conversion", "improve_user_retention"],
description: "Find out why people stopped their trial. These insights help you improve your funnel.",
preset: {
- name: "Missed Trial Conversion",
+ name: "Improve Trial Conversion",
questions: [
{
id: createId(),
type: "multipleChoiceSingle",
headline: "Why did you stop your trial?",
- subheader: "Help us understand you better. Choose one option:",
+ subheader: "Help us understand you better:",
required: true,
choices: [
{
@@ -403,7 +456,14 @@ export const templates: Template[] = [
{
id: createId(),
type: "openText",
- headline: "Did you find a better alternative? Please name it:",
+ headline: "Any details to share?",
+ required: false,
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "How are you solving your problem now?",
+ subheader: "Please name alternative tools:",
required: false,
},
],
@@ -500,6 +560,16 @@ export const templates: Template[] = [
},
],
},
+ {
+ id: createId(),
+ type: "rating",
+ headline: "How easy was it to achieve your goal?",
+ required: true,
+ lowerLabel: "Very difficult",
+ upperLabel: "Very easy",
+ range: 5,
+ scale: "number",
+ },
{
id: createId(),
type: "openText",
@@ -559,31 +629,13 @@ export const templates: Template[] = [
questions: [
{
id: createId(),
- type: "multipleChoiceSingle",
+ type: "rating",
headline: "How easy was it to achieve your goal?",
required: true,
- choices: [
- {
- id: createId(),
- label: "Extremely difficult",
- },
- {
- id: createId(),
- label: "It took a while, but I got it",
- },
- {
- id: createId(),
- label: "It was alright",
- },
- {
- id: createId(),
- label: "Quite easy",
- },
- {
- id: createId(),
- label: "Very easy, love it!",
- },
- ],
+ lowerLabel: "Very difficult",
+ upperLabel: "Very easy",
+ range: 5,
+ scale: "number",
},
{
id: createId(),
@@ -607,23 +659,13 @@ export const templates: Template[] = [
questions: [
{
id: createId(),
- type: "multipleChoiceSingle",
+ type: "rating",
headline: "How important is this feature for you?",
required: true,
- choices: [
- {
- id: createId(),
- label: "Very important",
- },
- {
- id: createId(),
- label: "Not so important",
- },
- {
- id: createId(),
- label: "I was just looking around",
- },
- ],
+ lowerLabel: "Not important",
+ upperLabel: "Very important",
+ range: 5,
+ scale: "number",
},
],
thankYouCard: thankYouCardDefault,
@@ -813,7 +855,8 @@ export const templates: Template[] = [
{
id: createId(),
type: "cta",
- headline: "Wanna do a short 15m interview with Charly?",
+ headline: "Do you have 15 min to talk to us? đ",
+ html: "You're one of our power users. We would love to interview you briefly!",
buttonLabel: "Book slot",
buttonUrl: "https://cal.com/johannes",
buttonExternal: true,
diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx
index a6e776e0ea..25c04dfbb9 100644
--- a/apps/web/app/layout.tsx
+++ b/apps/web/app/layout.tsx
@@ -2,7 +2,7 @@ import "./globals.css";
export const metadata = {
title: "Formbricks",
- description: "In-Product Survey Platform",
+ description: "Open-Source In-Product Survey Platform",
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
diff --git a/packages/types/template.ts b/packages/types/template.ts
deleted file mode 100644
index 4e0e7a0dc0..0000000000
--- a/packages/types/template.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface Template {
- name: string;
- icon: any;
- description: string;
- preset: {
- name: string;
- questions: any[];
- audience: any;
- };
-}
diff --git a/packages/ui/components/Button.tsx b/packages/ui/components/Button.tsx
index 8502deda98..a8fa17e2df 100644
--- a/packages/ui/components/Button.tsx
+++ b/packages/ui/components/Button.tsx
@@ -98,7 +98,7 @@ export const Button: React.ForwardRefExoticComponent<
variant === "darkCTA" &&
(disabled
? "text-slate-400 dark:text-slate-500 bg-slate-200 dark:bg-slate-800"
- : "text-slate-100 hover:text-slate-50 bg-slate-800 hover:bg-slate-700 dark:bg-slate-700 dark:text-slate-300 dark:hover:bg-slate-600 focus:outline-none focus:ring-2 focus:ring-offset-1 focus:bg-slate-700 focus:ring-neutral-500"),
+ : "text-slate-100 hover:text-slate-50 bg-slate-800 hover:bg-slate-700 dark:bg-slate-200 dark:text-slate-700 dark:hover:bg-slate-300 focus:outline-none focus:ring-2 focus:ring-offset-1 focus:bg-slate-700 focus:ring-neutral-500"),
// set not-allowed cursor if disabled
loading ? "cursor-wait" : disabled ? "cursor-not-allowed" : "",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2539a5dc3f..0fe2b6d3ed 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -77,6 +77,12 @@ importers:
'@docsearch/react':
specifier: ^3.3.3
version: 3.3.3(@algolia/client-search@4.14.2)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0)
+ '@formbricks/lib':
+ specifier: workspace:*
+ version: link:../../packages/lib
+ '@formbricks/types':
+ specifier: workspace:*
+ version: link:../../packages/types
'@formbricks/ui':
specifier: workspace:*
version: link:../../packages/ui