- {template.category}
+
+
+ {template.category}
+
+ {template.preset.questions.some(
+ (question) => question.logic && question.logic.length > 0
+ ) && (
+
+
+
+
+
+
+
+ This survey uses branching logic.
+
+
+ )}
-
{template.name}
{template.description}
{activeTemplate?.name === template.name && (
diff --git a/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts b/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
index eb85d4b88d..bc2598941b 100644
--- a/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
+++ b/apps/web/app/environments/[environmentId]/surveys/templates/templates.ts
@@ -1,86 +1,32 @@
import type { Template } from "@formbricks/types/templates";
-import {
- AppPieChartIcon,
- ArrowRightCircleIcon,
- ArrowUpRightIcon,
- BaseballIcon,
- CancelSubscriptionIcon,
- CashCalculatorIcon,
- CheckMarkIcon,
- CodeBookIcon,
- DashboardIcon,
- DogChaserIcon,
- DoorIcon,
- FeedbackIcon,
- GaugeSpeedFastIcon,
- HeartCommentIcon,
- InterviewPromptIcon,
- LoadingBarIcon,
- OnboardingIcon,
- PMFIcon,
- TaskListSearchIcon,
- UserSearchGlasIcon,
- VideoTabletAdjustIcon,
-} from "@formbricks/ui";
import { createId } from "@paralleldrive/cuid2";
const thankYouCardDefault = {
enabled: true,
headline: "Thank you!",
- subheader: "We appreciate your time and insight.",
+ subheader: "We appreciate your feedback.",
};
export const templates: Template[] = [
- {
- name: "Product Market Fit Survey (short)",
- icon: PMFIcon,
- category: "Product Experience",
-
- description: "Measure PMF by assessing how disappointed users would be if your product disappeared.",
- preset: {
- 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(),
+ html: '
We would love to understand your user experience better. Sharing your insight helps a lot!
',
+ type: "cta",
+ logic: [{ condition: "skipped", destination: "end" }],
+ headline: "You are one of our power users! Do you have 5 minutes?",
+ required: false,
+ buttonLabel: "Happy to help!",
+ buttonExternal: false,
+ dismissButtonLabel: "No, thanks.",
+ },
{
id: createId(),
type: "multipleChoiceSingle",
@@ -156,7 +102,6 @@ export const templates: Template[] = [
},
{
name: "Onboarding Segmentation",
- icon: OnboardingIcon,
category: "Product Experience",
objectives: ["increase_user_adoption", "improve_user_retention"],
description: "Learn more about who signed up to your product and why.",
@@ -254,9 +199,404 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
+ {
+ name: "Churn Survey",
+
+ category: "Increase Revenue",
+ objectives: ["sharpen_marketing_messaging", "improve_user_retention"],
+ description: "Find out why people cancel their subscriptions. These insights are pure gold!",
+ preset: {
+ name: "Churn Survey",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [
+ { value: "Difficult to use", condition: "equals", destination: "sxwpskjgzzpmkgfxzi15inif" },
+ { value: "It's too expensive", condition: "equals", destination: "mao94214zoo6c1at5rpuz7io" },
+ {
+ value: "I am missing features",
+ condition: "equals",
+ destination: "l054desub14syoie7n202vq4",
+ },
+ {
+ value: "Poor customer service",
+ condition: "equals",
+ destination: "hdftsos1odzjllr7flj4m3j9",
+ },
+ { value: "I just didn't need it anymore", condition: "equals", destination: "end" },
+ ],
+ choices: [
+ { id: createId(), label: "Difficult to use" },
+ { id: createId(), label: "It's too expensive" },
+ { id: createId(), label: "I am missing features" },
+ { id: createId(), label: "Poor customer service" },
+ { id: createId(), label: "I just didn't need it anymore" },
+ ],
+ headline: "Why did you cancel your subscription?",
+ required: true,
+ subheader: "We're sorry to see you leave. Help us do better:",
+ },
+ {
+ id: "sxwpskjgzzpmkgfxzi15inif",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What would have made {{productName}} easier to use?",
+ required: true,
+ subheader: "",
+ buttonLabel: "Send",
+ },
+ {
+ id: "mao94214zoo6c1at5rpuz7io",
+ html: '
We\'d love to keep you as a customer. Happy to offer a 30% discount for the next year.
',
+ type: "cta",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Get 30% off for the next year!",
+ required: true,
+ buttonUrl: "https://formbricks.com",
+ buttonLabel: "Get 30% off",
+ buttonExternal: true,
+ dismissButtonLabel: "Skip",
+ },
+ {
+ id: "l054desub14syoie7n202vq4",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What features are you missing?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: "hdftsos1odzjllr7flj4m3j9",
+ html: '
We aim to provide the best possible customer service. Please email our CEO and she will personally handle your issue.
',
+ type: "cta",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "So sorry to hear 😔 Talk to our CEO directly!",
+ required: true,
+ buttonUrl: "mailto:ceo@company.com",
+ buttonLabel: "Send email to CEO",
+ buttonExternal: true,
+ dismissButtonLabel: "Skip",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Earned Advocacy Score (EAS)",
+ category: "Growth",
+ objectives: ["support_sales", "sharpen_marketing_messaging"],
+ description:
+ "The EAS is a riff off the NPS but asking for actual past behaviour instead of lofty intentions.",
+ preset: {
+ name: "Earned Advocacy Score (EAS)",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [{ value: "No", condition: "equals", destination: "duz2qp8eftix9wty1l221x1h" }],
+ choices: [
+ { id: createId(), label: "Yes" },
+ { id: createId(), label: "No" },
+ ],
+ headline: "Have you actively recommended {{productName}} to others?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "yhfew1j3ng6luy7t7qynwj79" }],
+ headline: "Great to hear! Why did you recommend us?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "duz2qp8eftix9wty1l221x1h",
+ type: "openText",
+ headline: "So sad. Why not?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "yhfew1j3ng6luy7t7qynwj79",
+ type: "multipleChoiceSingle",
+ logic: [{ value: "No", condition: "equals", destination: "end" }],
+ choices: [
+ { id: createId(), label: "Yes" },
+ { id: createId(), label: "No" },
+ ],
+ headline: "Have you actively discouraged others from choosing {{produtName}}?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "What made you discourage them?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Improve Trial Conversion",
+ 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: "Improve Trial Conversion",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [
+ {
+ value: "I didn't get much value out of it",
+ condition: "equals",
+ destination: "aew2ymg51mffnt9db7duz9t3",
+ },
+ {
+ value: "I expected something else",
+ condition: "equals",
+ destination: "rnrfydttavtsf2t2nfx1df7m",
+ },
+ {
+ value: "It's too expensive for what it does",
+ condition: "equals",
+ destination: "x760wga1fhtr1i80cpssr7af",
+ },
+ {
+ value: "I am missing a feature",
+ condition: "equals",
+ destination: "rbhww1pix03r6sl4xc511wqg",
+ },
+ { value: "I was just looking around", condition: "equals", destination: "end" },
+ ],
+ choices: [
+ { id: createId(), label: "I didn't get much value out of it" },
+ { id: createId(), label: "I expected something else" },
+ { id: createId(), label: "It's too expensive for what it does" },
+ { id: createId(), label: "I am missing a feature" },
+ { id: createId(), label: "I was just looking around" },
+ ],
+ headline: "Why did you stop your trial?",
+ required: true,
+ subheader: "Help us understand you better:",
+ },
+ {
+ id: "aew2ymg51mffnt9db7duz9t3",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "bqiyml1ym74ggx6htwdo7rlu" }],
+ headline: "Sorry to hear. What was the biggest problem using {{productName}}?",
+ required: true,
+ buttonLabel: "Next",
+ },
+ {
+ id: "rnrfydttavtsf2t2nfx1df7m",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "bqiyml1ym74ggx6htwdo7rlu" }],
+ headline: "What did you expect {{productName}} would do for you?",
+ required: true,
+ buttonLabel: "Next",
+ },
+ {
+ id: "x760wga1fhtr1i80cpssr7af",
+ html: '
We\'re happy to offer you a 20% discount on a yearly plan.
',
+ type: "cta",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Sorry to hear! Get 20% off the first year.",
+ required: true,
+ buttonUrl: "https://formbricks.com/github",
+ buttonLabel: "Get 20% off",
+ buttonExternal: true,
+ dismissButtonLabel: "Skip",
+ },
+ {
+ id: "rbhww1pix03r6sl4xc511wqg",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "bqiyml1ym74ggx6htwdo7rlu" }],
+ headline: "Which features are you missing?",
+ required: true,
+ subheader: "What would you like to achieve?",
+ buttonLabel: "Next",
+ },
+ {
+ id: "bqiyml1ym74ggx6htwdo7rlu",
+ type: "openText",
+ logic: [
+ { condition: "submitted", destination: "end" },
+ { condition: "skipped", destination: "end" },
+ ],
+ headline: "How are you solving your problem now?",
+ required: false,
+ subheader: "Please name alternative solutions:",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Review Prompt",
+
+ category: "Growth",
+ objectives: ["support_sales"],
+ description: "Invite users who love your product to review it publicly.",
+ preset: {
+ name: "Review Prompt",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: 3, condition: "lessEqual", destination: "tk9wpw2gxgb8fa6pbpp3qq5l" }],
+ range: 5,
+ scale: "star",
+ headline: "How do you like {{productName}}?",
+ required: true,
+ subheader: "",
+ lowerLabel: "",
+ upperLabel: "",
+ },
+ {
+ id: createId(),
+ html: '
This helps us a lot.
',
+ type: "cta",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Happy to hear 🙏 Please write a review for us!",
+ required: true,
+ buttonUrl: "https://formbricks.com/github",
+ buttonLabel: "Write review",
+ buttonExternal: true,
+ },
+ {
+ id: "tk9wpw2gxgb8fa6pbpp3qq5l",
+ type: "openText",
+ headline: "Sorry to hear! What is ONE thing we can do better?",
+ required: true,
+ subheader: "Help us improve your experience.",
+ buttonLabel: "Send",
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Interview Prompt",
+
+ category: "Exploration",
+ objectives: ["improve_user_retention"],
+ description: "Invite a specific subset of your users to schedule an interview with your product team.",
+ preset: {
+ name: "Interview Prompt",
+ questions: [
+ {
+ id: createId(),
+ type: "cta",
+ 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,
+ required: false,
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Reduce Onboarding Drop-Off",
+ category: "Product Experience",
+ objectives: ["increase_user_adoption", "increase_conversion"],
+ description: "Identify weaknesses in your onboarding flow to increase user activation.",
+ preset: {
+ name: "Onboarding Drop-Off Reasons",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [
+ {
+ value: "Difficult to set up or use",
+ condition: "equals",
+ destination: "r0zvi3vburf4hm7qewimzjux",
+ },
+ {
+ value: "Lacked features/functionality",
+ condition: "equals",
+ destination: "rbwz3y6y9avzqcfj30nu0qj4",
+ },
+ {
+ value: "Just haven't had the time",
+ condition: "equals",
+ destination: "gn6298zogd2ipdz7js17qy5i",
+ },
+ { value: "Something else", condition: "equals", destination: "c0exdyri3erugrv0ezkyseh6" },
+ ],
+ choices: [
+ { id: createId(), label: "Didn't seem useful to me" },
+ { id: createId(), label: "Difficult to set up or use" },
+ { id: createId(), label: "Lacked features/functionality" },
+ { id: createId(), label: "Just haven't had the time" },
+ { id: createId(), label: "Something else" },
+ ],
+ headline: "What's the main reason why you haven't finished setting up {{productName}}?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What made you think {{productName}} wouldn't be useful?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "r0zvi3vburf4hm7qewimzjux",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What was difficult about setting up or using {{productName}}?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "rbwz3y6y9avzqcfj30nu0qj4",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What features or functionality were missing?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "gn6298zogd2ipdz7js17qy5i",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "How could we make it easier for you to get started?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "c0exdyri3erugrv0ezkyseh6",
+ type: "openText",
+ logic: [],
+ headline: "What was it? Please explain:",
+ required: false,
+ subheader: "We're eager to fix it asap.",
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
{
name: "Uncover Strengths & Weaknesses",
- icon: TaskListSearchIcon,
category: "Growth",
objectives: ["sharpen_marketing_messaging", "improve_user_retention"],
description: "Find out what users like and don't like about your product or offering.",
@@ -266,59 +606,75 @@ export const templates: Template[] = [
{
id: createId(),
type: "multipleChoiceSingle",
- headline: "What do you value most about our service?",
- subheader: "Please select one of the following options:",
- required: true,
choices: [
- {
- id: createId(),
- label: "Ease of use",
- },
- {
- id: createId(),
- label: "Good value for money",
- },
- {
- id: createId(),
- label: "It's open-source",
- },
- {
- id: createId(),
- label: "The founders are pretty",
- },
+ { id: createId(), label: "Ease of use" },
+ { id: createId(), label: "Good value for money" },
+ { id: createId(), label: "It's open-source" },
+ { id: createId(), label: "The founders are cute" },
+ { id: "other", label: "Other" },
],
+ headline: "What do you value most about {{productName}}?",
+ required: true,
+ subheader: "",
},
{
id: createId(),
type: "multipleChoiceSingle",
+ choices: [
+ { id: createId(), label: "Documentation" },
+ { id: createId(), label: "Customizability" },
+ { id: createId(), label: "Pricing" },
+ { id: "other", label: "Other" },
+ ],
headline: "What should we improve on?",
+ required: true,
+ subheader: "Please select one of the following options:",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "Would you like to add something?",
+ required: false,
+ subheader: "Feel free to speak your mind, we do too.",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Product Market Fit Survey (Short)",
+ category: "Product Experience",
+ description: "Measure PMF by assessing how disappointed users would be if your product disappeared.",
+ preset: {
+ 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: "Documentation",
+ label: "Not at all disappointed",
},
{
id: createId(),
- label: "Customizability",
+ label: "Somewhat disappointed",
},
{
id: createId(),
- label: "Pricing",
- },
- {
- id: createId(),
- label: "Humbleness of founders",
+ label: "Very disappointed",
},
],
},
{
id: createId(),
type: "openText",
- headline: "Would you like to add something?",
- subheader: "Feel free to speak your mind, we do too.",
- required: false,
+ headline: "How can we improve {{productName}} for you?",
+ subheader: "Please be as specific as possible.",
+ required: true,
},
],
thankYouCard: thankYouCardDefault,
@@ -326,7 +682,7 @@ export const templates: Template[] = [
},
{
name: "Marketing Attribution",
- icon: AppPieChartIcon,
+
category: "Growth",
objectives: ["increase_conversion", "sharpen_marketing_messaging"],
description: "How did you first hear about us?",
@@ -366,113 +722,9 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
- {
- name: "Churn Survey",
- icon: CancelSubscriptionIcon,
- category: "Increase Revenue",
- objectives: ["sharpen_marketing_messaging", "improve_user_retention"],
- description: "Find out why people cancel their subscriptions. These insights are pure gold!",
- preset: {
- name: "Churn Survey",
- questions: [
- {
- id: createId(),
- type: "multipleChoiceSingle",
- headline: "Why did you cancel your subscription?",
- subheader: "We're sorry to see you leave. Please help us do better:",
- required: true,
- choices: [
- {
- id: createId(),
- label: "I didn't get much value out of it",
- },
- {
- id: createId(),
- label: "It's too expensive",
- },
- {
- id: createId(),
- label: "I am missing a feature",
- },
- {
- id: createId(),
- label: "Poor customer service",
- },
- {
- id: createId(),
- label: "I just didn't need it anymore",
- },
- ],
- },
- {
- id: createId(),
- type: "openText",
- headline: "How can we win you back?",
- subheader: "Feel free to speak your mind, we do too.",
- required: false,
- },
- ],
- thankYouCard: thankYouCardDefault,
- },
- },
- {
- 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: "Improve Trial Conversion",
- questions: [
- {
- id: createId(),
- type: "multipleChoiceSingle",
- headline: "Why did you stop your trial?",
- subheader: "Help us understand you better:",
- required: true,
- choices: [
- {
- id: createId(),
- label: "I didn't get much value out of it",
- },
- {
- id: createId(),
- label: "I expected something else",
- },
- {
- id: createId(),
- label: "It's too expensive for what it does",
- },
- {
- id: createId(),
- label: "I am missing a feature",
- },
- {
- id: createId(),
- label: "I was just looking around",
- },
- ],
- },
- {
- id: createId(),
- type: "openText",
- 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,
- },
- ],
- thankYouCard: thankYouCardDefault,
- },
- },
{
name: "Changing subscription experience",
- icon: CashCalculatorIcon,
+
category: "Increase Revenue",
objectives: ["increase_conversion", "improve_user_retention"],
description: "Find out what goes through peoples minds when changing their subscriptions.",
@@ -531,58 +783,10 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
- {
- name: "Measure Task Accomplishment",
- icon: CheckMarkIcon,
- category: "Product Experience",
- objectives: ["increase_user_adoption", "improve_user_retention"],
- description: "See if people get their 'Job To Be Done' done. Successful people are better customers.",
- preset: {
- name: "Measure Task Accomplishment",
- questions: [
- {
- id: createId(),
- type: "multipleChoiceSingle",
- headline: "Were you able to accomplish what you came here to do today?",
- required: true,
- choices: [
- {
- id: createId(),
- label: "Yes",
- },
- {
- id: createId(),
- label: "Working on it, boss",
- },
- {
- id: createId(),
- label: "No",
- },
- ],
- },
- {
- 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",
- headline: "What did you come here to do today?",
- required: false,
- },
- ],
- thankYouCard: thankYouCardDefault,
- },
- },
+
{
name: "Identify Customer Goals",
- icon: ArrowRightCircleIcon,
+
category: "Product Experience",
objectives: ["increase_user_adoption", "sharpen_marketing_messaging", "improve_user_retention"],
description:
@@ -620,7 +824,7 @@ export const templates: Template[] = [
},
{
name: "Feature Chaser",
- icon: DogChaserIcon,
+
category: "Product Experience",
objectives: ["improve_user_retention"],
description: "Follow up with users who just used a specific feature.",
@@ -630,19 +834,25 @@ 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",
+ headline: "How important is [ADD FEATURE] for you?",
+ required: true,
+ lowerLabel: "Not important",
+ upperLabel: "Very important",
},
{
id: createId(),
- type: "openText",
- headline: "Wanna add something?",
- subheader: "This really helps us do better!",
- required: false,
+ type: "multipleChoiceSingle",
+ choices: [
+ { id: createId(), label: "Aspect 1" },
+ { id: createId(), label: "Aspect 2" },
+ { id: createId(), label: "Aspect 3" },
+ { id: createId(), label: "Aspect 4" },
+ ],
+ headline: "Which aspect is most important?",
+ required: true,
+ subheader: "",
},
],
thankYouCard: thankYouCardDefault,
@@ -650,7 +860,7 @@ export const templates: Template[] = [
},
{
name: "Fake Door Follow-Up",
- icon: DoorIcon,
+
category: "Exploration",
objectives: ["increase_user_adoption"],
description: "Follow up with users who ran into one of your Fake Door experiments.",
@@ -667,13 +877,37 @@ export const templates: Template[] = [
range: 5,
scale: "number",
},
+ {
+ id: createId(),
+ type: "multipleChoiceMulti",
+ headline: "What should be definitely include building this?",
+ required: false,
+ choices: [
+ {
+ id: createId(),
+ label: "Aspect 1",
+ },
+ {
+ id: createId(),
+ label: "Aspect 2",
+ },
+ {
+ id: createId(),
+ label: "Aspect 3",
+ },
+ {
+ id: createId(),
+ label: "Aspect 4",
+ },
+ ],
+ },
],
thankYouCard: thankYouCardDefault,
},
},
{
name: "Feedback Box",
- icon: FeedbackIcon,
+
category: "Product Experience",
objectives: ["improve_user_retention"],
description: "Give your users the chance to seamlessly share what's on their minds.",
@@ -683,86 +917,100 @@ export const templates: Template[] = [
{
id: createId(),
type: "multipleChoiceSingle",
- headline: "What's on your mind, boss?",
- subheader: "Thanks for sharing. We'll get back to you asap.",
- required: true,
- choices: [
- {
- id: createId(),
- label: "Bug report 🐞",
- },
- {
- id: createId(),
- label: "Feature Request 💡",
- },
+ logic: [
+ { value: "Bug report 🐞", condition: "equals", destination: "dnbiuq4l33l7jypcf2cg6vhh" },
+ { value: "Feature Request 💡", condition: "equals", destination: "en9nuuevbf7g9oa9rzcs1l50" },
],
+ choices: [
+ { id: createId(), label: "Bug report 🐞" },
+ { id: createId(), label: "Feature Request 💡" },
+ ],
+ headline: "What's on your mind, boss?",
+ required: true,
+ subheader: "Thanks for sharing. We'll get back to you asap.",
},
{
- id: createId(),
+ id: "dnbiuq4l33l7jypcf2cg6vhh",
type: "openText",
- headline: "Give us the juicy details:",
+ logic: [{ condition: "submitted", destination: "a6c76m5oocw6xp9agf3d2tam" }],
+ headline: "What's broken?",
required: true,
+ subheader: "The more detail, the better :)",
+ },
+ {
+ id: "a6c76m5oocw6xp9agf3d2tam",
+ html: '
We will fix this as soon as possible. Do you want to be notified when we did?
',
+ type: "cta",
+ logic: [
+ { condition: "submitted", destination: "end" },
+ { condition: "skipped", destination: "end" },
+ ],
+ headline: "Want to stay in the loop?",
+ required: false,
+ buttonLabel: "Yes, notify me",
+ buttonExternal: false,
+ dismissButtonLabel: "No, thanks",
+ },
+ {
+ id: "en9nuuevbf7g9oa9rzcs1l50",
+ type: "openText",
+ headline: "Lovely, tell us more!",
+ required: true,
+ subheader: "What problem do you want us to solve?",
+ buttonLabel: "Request feature",
+ placeholder: "Type your answer here...",
},
],
thankYouCard: thankYouCardDefault,
},
},
{
- name: "Integration usage survey",
- icon: DashboardIcon,
+ name: "Integration Setup Survey",
+
category: "Product Experience",
- objectives: ["increase_user_adoption", "improve_user_retention"],
+ objectives: ["increase_user_adoption"],
description: "Evaluate how easily users can add integrations to your product. Find blind spots.",
preset: {
name: "Integration Usage Survey",
questions: [
{
- id: createId(),
- type: "multipleChoiceSingle",
+ id: "s6ss6znzxdwjod1hv16fow4w",
+ type: "rating",
+ logic: [{ value: 4, condition: "greaterEqual", destination: "ef0qo3l8iisd517ikp078u1p" }],
+ range: 5,
+ scale: "number",
headline: "How easy was it to set this integration up?",
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!",
- },
- ],
+ subheader: "",
+ lowerLabel: "Not easy",
+ upperLabel: "Very easy",
},
{
- id: createId(),
+ id: "mko13ptjj6tpi5u2pl7a5drz",
type: "openText",
- headline: "Which product would you like to integrate next?",
- subheader: "We keep building integrations. Yours can be next:",
+ headline: "Why was it hard?",
required: false,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "ef0qo3l8iisd517ikp078u1p",
+ type: "openText",
+ headline: "What other tools would you like to use with {{productName}}?",
+ required: false,
+ subheader: "We keep building integrations, yours can be next:",
},
],
thankYouCard: thankYouCardDefault,
},
},
{
- name: "New integration survey",
- icon: DashboardIcon,
+ name: "New Integration Survey",
+
category: "Exploration",
objectives: ["increase_user_adoption", "increase_conversion"],
description: "Find out which integrations your users would like to see next.",
preset: {
- name: "New integration survey",
+ name: "New Integration Survey",
questions: [
{
id: createId(),
@@ -786,25 +1034,16 @@ export const templates: Template[] = [
id: createId(),
label: "Twilio",
},
- {
- id: createId(),
- label: "Other",
- },
+ { id: "other", label: "Other" },
],
},
- {
- id: createId(),
- type: "openText",
- headline: "If you chose other, please clarify:",
- required: false,
- },
],
thankYouCard: thankYouCardDefault,
},
},
{
name: "Docs Feedback",
- icon: CodeBookIcon,
+
category: "Product Experience",
objectives: ["increase_user_adoption", "improve_user_retention"],
description: "Measure how clear each page of your developer documentation is.",
@@ -843,54 +1082,9 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
- {
- name: "Interview Prompt",
- icon: InterviewPromptIcon,
- category: "Exploration",
- objectives: ["improve_user_retention"],
- description: "Invite a specific subset of your users to schedule an interview with your product team.",
- preset: {
- name: "Interview Prompt",
- questions: [
- {
- id: createId(),
- type: "cta",
- 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,
- required: false,
- },
- ],
- thankYouCard: thankYouCardDefault,
- },
- },
- {
- name: "Review Prompt",
- icon: HeartCommentIcon,
- category: "Growth",
- objectives: ["increase_conversion", "support_sales"],
- description: "Invite users who love your product to review it publicly.",
- preset: {
- name: "Review Prompt",
- questions: [
- {
- id: createId(),
- type: "cta",
- headline: "You're one of our most valued customers! Please write a review for us.",
- buttonLabel: "Write review",
- buttonUrl: "https://formbricks.com/github",
- buttonExternal: true,
- required: false,
- },
- ],
- thankYouCard: thankYouCardDefault,
- },
- },
{
name: "Net Promoter Score (NPS)",
- icon: GaugeSpeedFastIcon,
+
category: "Customer Success",
objectives: ["support_sales"],
description: "Measure the Net Promoter Score of your product.",
@@ -905,13 +1099,59 @@ export const templates: Template[] = [
lowerLabel: "Not likely",
upperLabel: "Very likely",
},
+ {
+ id: createId(),
+ type: "openText",
+ headline: "What made you give that rating?",
+ required: false,
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Customer Satisfaction Score (CSAT)",
+
+ category: "Customer Success",
+ objectives: ["support_sales"],
+ description: "Measure the Customer Satisfaction Score of your product.",
+ preset: {
+ name: "{{productName}} CSAT",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: 3, condition: "lessEqual", destination: "vyo4mkw4ln95ts4ya7qp2tth" }],
+ range: 5,
+ scale: "smiley",
+ headline: "How satisfied are you with your {{productName}} experience?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not satisfied",
+ upperLabel: "Very satisfied",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Lovely! Is there anything we can do to improve your experience?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "vyo4mkw4ln95ts4ya7qp2tth",
+ type: "openText",
+ headline: "Ugh, sorry! Is there anything we can do to improve your experience?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
],
thankYouCard: thankYouCardDefault,
},
},
{
name: "Identify upsell opportunities",
- icon: ArrowUpRightIcon,
+
category: "Increase Revenue",
objectives: ["support_sales", "sharpen_marketing_messaging"],
description: "Find out how much time your product saves your user. Use it to upsell.",
@@ -946,30 +1186,49 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
+
{
- name: "Build Product Roadmap",
- icon: LoadingBarIcon,
- category: "Product Experience",
- objectives: ["increase_user_adoption", "improve_user_retention"],
- description: "Ask how users rate your product. Identify blind spots to build your roadmap.",
+ name: "Prioritize Features",
+
+ category: "Exploration",
+ objectives: ["increase_user_adoption"],
+ description: "Identify features your users need most and least.",
preset: {
- name: "Build Product Roadmap",
+ name: "Feature Prioritization",
questions: [
{
id: createId(),
- type: "rating",
- headline: "How satisfied are you with the features of {{productName}}?",
+ type: "multipleChoiceSingle",
+ logic: [],
+ choices: [
+ { id: createId(), label: "Feature 1" },
+ { id: createId(), label: "Feature 2" },
+ { id: createId(), label: "Feature 3" },
+ { id: "other", label: "Other" },
+ ],
+ headline: "Which of these features would be MOST valuable to you?",
required: true,
- lowerLabel: "Not satisfied",
- upperLabel: "Very satisfied",
- scale: "number",
- range: 5,
+ subheader: "",
+ },
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [],
+ choices: [
+ { id: createId(), label: "Feature 1" },
+ { id: createId(), label: "Feature 2" },
+ { id: createId(), label: "Feature 3" },
+ ],
+ headline: "Which of these features would be LEAST valuable to you?",
+ required: true,
+ subheader: "",
},
{
id: createId(),
type: "openText",
- headline: "What's the #1 thing you'd like to change in {{productName}}?",
- required: false,
+ headline: "How else could we improve you experience with {{productName}}?",
+ required: true,
+ placeholder: "Type your answer here...",
},
],
thankYouCard: thankYouCardDefault,
@@ -977,7 +1236,7 @@ export const templates: Template[] = [
},
{
name: "Gauge Feature Satisfaction",
- icon: UserSearchGlasIcon,
+
category: "Product Experience",
objectives: ["increase_user_adoption", "improve_user_retention"],
description: "Evaluate the satisfaction of specific features of your product.",
@@ -1006,7 +1265,7 @@ export const templates: Template[] = [
},
{
name: "Marketing Site Clarity",
- icon: VideoTabletAdjustIcon,
+
category: "Growth",
objectives: ["increase_conversion", "sharpen_marketing_messaging"],
description: "Identify users dropping off your marketing site. Improve your messaging.",
@@ -1052,12 +1311,685 @@ export const templates: Template[] = [
thankYouCard: thankYouCardDefault,
},
},
+ {
+ name: "Customer Effort Score (CES)",
+
+ category: "Product Experience",
+ objectives: ["increase_user_adoption", "improve_user_retention"],
+ description: "Determine how easy it is to use a feature.",
+ preset: {
+ name: "Customer Effort Score (CES)",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ range: 5,
+ scale: "number",
+ headline: "{{productName}} makes it easy for me to [ADD GOAL]",
+ required: true,
+ subheader: "",
+ lowerLabel: "Disagree strongly",
+ upperLabel: "Agree strongly",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "Thanks! How could we make it easier for you to [ADD GOAL]?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+
+ {
+ name: "Rate Checkout Experience",
+
+ category: "Increase Revenue",
+ objectives: ["increase_conversion"],
+ description: "Let customers rate the checkout experience to tweak conversion.",
+ preset: {
+ name: "Rate Checkout Experience",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: 4, condition: "greaterEqual", destination: "lpof3d9t9hmnqvyjlpksmxd7" }],
+ range: 5,
+ scale: "number",
+ headline: "How easy or difficult was it to complete the checkout?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Very difficult",
+ upperLabel: "Very easy",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Sorry about that! What would have made it easier for you?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "lpof3d9t9hmnqvyjlpksmxd7",
+ type: "openText",
+ headline: "Lovely! Is there anything we can do to improve your experience?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Measure Search Experience",
+
+ category: "Product Experience",
+ objectives: ["improve_user_retention"],
+ description: "Measure how relevant your search results are.",
+ preset: {
+ name: "Measure Search Experience",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: 4, condition: "greaterEqual", destination: "adcs3d9t9hmnqvyjlpksmxd7" }],
+ range: 5,
+ scale: "number",
+ headline: "How relevant are these search results?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not at all relevant",
+ upperLabel: "Very relevant",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Ugh! What makes the results irrelevant for you?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "adcs3d9t9hmnqvyjlpksmxd7",
+ type: "openText",
+ headline: "Lovely! Is there anything we can do to improve your experience?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Evaluate Content Quality",
+
+ category: "Growth",
+ objectives: ["increase_conversion"],
+ description: "Measure if your content marketing pieces hit right.",
+ preset: {
+ name: "Evaluate Content Quality",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: 4, condition: "greaterEqual", destination: "adcs3d9t9hmnqvyjlpkswi38" }],
+ range: 5,
+ scale: "number",
+ headline: "How well did this article address what you were hoping to learn?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not at all well",
+ upperLabel: "Extremely well",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Hmpft! What were you hoping for?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "adcs3d9t9hmnqvyjlpkswi38",
+ type: "openText",
+ headline: "Lovely! Is there anything else you would like us to cover?",
+ required: true,
+ placeholder: "Topics, trends, tutorials...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Measure Task Accomplishment",
+
+ category: "Customer Success",
+ objectives: ["increase_user_adoption", "improve_user_retention"],
+ description: "See if people get their 'Job To Be Done' done. Successful people are better customers.",
+ preset: {
+ name: "Measure Task Accomplishment",
+ questions: [
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [
+ { value: "Working on it, boss", condition: "equals", destination: "nq88udm0jjtylr16ax87xlyc" },
+ { value: "Yes", condition: "equals", destination: "rjeac33gd13h3nnbrbid1fb2" },
+ { value: "No", condition: "equals", destination: "u83zhr66knyfozccoqojx7bc" },
+ ],
+ choices: [
+ { id: createId(), label: "Yes" },
+ { id: createId(), label: "Working on it, boss" },
+ { id: createId(), label: "No" },
+ ],
+ headline: "Were you able to accomplish what you came here to do today?",
+ required: true,
+ },
+ {
+ id: "rjeac33gd13h3nnbrbid1fb2",
+ type: "rating",
+ logic: [{ value: 4, condition: "greaterEqual", destination: "nq88udm0jjtylr16ax87xlyc" }],
+ range: 5,
+ scale: "number",
+ headline: "How easy was it to achieve your goal?",
+ required: true,
+ lowerLabel: "Very difficult",
+ upperLabel: "Very easy",
+ },
+ {
+ id: "s0999bhpaz8vgf7ps264piek",
+ type: "openText",
+ logic: [
+ { condition: "submitted", destination: "end" },
+ { condition: "skipped", destination: "end" },
+ ],
+ headline: "What made it hard?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "nq88udm0jjtylr16ax87xlyc",
+ type: "openText",
+ logic: [
+ { condition: "skipped", destination: "end" },
+ { condition: "submitted", destination: "end" },
+ ],
+ headline: "Great! What did you come here to do today?",
+ required: false,
+ buttonLabel: "Send",
+ },
+ {
+ id: "u83zhr66knyfozccoqojx7bc",
+ type: "openText",
+ headline: "What stopped you?",
+ required: true,
+ buttonLabel: "Send",
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Identify Sign Up Barriers",
+
+ category: "Growth",
+ objectives: ["increase_conversion"],
+ description: "Offer a discount to gather insights about sign up barriers.",
+ preset: {
+ name: "{{productName}} Sign Up Barriers",
+ questions: [
+ {
+ id: createId(),
+ html: '
You seem to be considering signing up. Answer four questions and get 10% on any plan.
',
+ type: "cta",
+ logic: [{ condition: "skipped", destination: "end" }],
+ headline: "Answer this short survey, get 10% off!",
+ required: false,
+ buttonLabel: "Get 10% discount",
+ buttonExternal: false,
+ dismissButtonLabel: "No, thanks",
+ },
+ {
+ id: createId(),
+ type: "rating",
+ logic: [{ value: "5", condition: "equals", destination: "end" }],
+ range: 5,
+ scale: "number",
+ headline: "How likely are you to sign up for {{productName}}?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not at all likely",
+ upperLabel: "Very likely",
+ },
+ {
+ id: createId(),
+ type: "multipleChoiceSingle",
+ logic: [
+ {
+ value: "May not have what I'm looking for",
+ condition: "equals",
+ destination: "atiw0j1oykb77zr0b7q4tixu",
+ },
+ {
+ value: "Still comparing options",
+ condition: "equals",
+ destination: "j7jkpolm5xl7u0zt3g0e4z7d",
+ },
+ { value: "Seems complicated", condition: "equals", destination: "t5gvag2d7kq311szz5iyiy79" },
+ { value: "Pricing is a concern", condition: "equals", destination: "or0yhhrof753sq9ug4mdavgz" },
+ { value: "Something else", condition: "equals", destination: "v0pq1qcnm6ohiry5ywcd91qq" },
+ ],
+ choices: [
+ { id: createId(), label: "May not have what I'm looking for" },
+ { id: createId(), label: "Still comparing options" },
+ { id: createId(), label: "Seems complicated" },
+ { id: createId(), label: "Pricing is a concern" },
+ { id: createId(), label: "Something else" },
+ ],
+ headline: "What is holding you back from trying {{productName}}?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: "atiw0j1oykb77zr0b7q4tixu",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "k3q0vt1ko0bzbsq076p7lnys" }],
+ headline: "What do you need but {{productName}} does not offer?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "j7jkpolm5xl7u0zt3g0e4z7d",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "k3q0vt1ko0bzbsq076p7lnys" }],
+ headline: "What options are you looking at?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "t5gvag2d7kq311szz5iyiy79",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "k3q0vt1ko0bzbsq076p7lnys" }],
+ headline: "What seems complicated to you?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "or0yhhrof753sq9ug4mdavgz",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "k3q0vt1ko0bzbsq076p7lnys" }],
+ headline: "What are you concerned about regarding pricing?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "v0pq1qcnm6ohiry5ywcd91qq",
+ type: "openText",
+ headline: "Please explain:",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "k3q0vt1ko0bzbsq076p7lnys",
+ html: '
Thanks a lot for taking the time to share feedback 🙏
',
+ type: "cta",
+ headline: "Thanks! Here is your code: SIGNUPNOW10",
+ required: false,
+ buttonUrl: "https://app.formbricks.com/auth/signup",
+ buttonLabel: "Sign Up",
+ buttonExternal: true,
+ dismissButtonLabel: "Skip for now",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Build Product Roadmap",
+
+ category: "Exploration",
+ objectives: ["increase_user_adoption"],
+ description: "Identify the ONE thing your users want the most and build it.",
+ preset: {
+ name: "{{productName} Roadmap Input",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ range: 5,
+ scale: "number",
+ headline: "How satisfied are you with the features and functionality of {{productName}}?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not at all satisfied",
+ upperLabel: "Extremely satisfied",
+ },
+ {
+ id: createId(),
+ type: "openText",
+ headline: "What's ONE change we could make to improve your {{productName}} experience most?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Understand Purchase Intention",
+
+ category: "Increase Revenue",
+ objectives: ["increase_conversion", "increase_user_adoption"],
+ description: "Find out how close your visitors are to buy or subscribe.",
+ preset: {
+ name: "Purchase Intention Survey",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [
+ { value: "2", condition: "lessEqual", destination: "y19mwcmstlc7pi7s4izxk1ll" },
+ { value: "3", condition: "equals", destination: "zm1hs8qkeuidh3qm0hx8pnw7" },
+ { value: "4", condition: "equals", destination: "zm1hs8qkeuidh3qm0hx8pnw7" },
+ { value: "5", condition: "equals", destination: "end" },
+ ],
+ range: 5,
+ scale: "number",
+ headline: "How likely are you to subscribe to {{productName}} today?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not at all likely",
+ upperLabel: "Extremely likely",
+ },
+ {
+ id: "y19mwcmstlc7pi7s4izxk1ll",
+ type: "openText",
+ logic: [
+ { condition: "submitted", destination: "end" },
+ { condition: "skipped", destination: "end" },
+ ],
+ headline: "Got it. What's your primary reason for visiting today?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "zm1hs8qkeuidh3qm0hx8pnw7",
+ type: "openText",
+ headline: "What, if anything, is holding you back from making a purchase today?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Improve Newsletter Content",
+
+ category: "Growth",
+ objectives: ["increase_conversion", "sharpen_marketing_messaging"],
+ description: "Find out how your subscribers like your newsletter content.",
+ preset: {
+ name: "Improve Newsletter Content",
+ questions: [
+ {
+ id: createId(),
+ type: "rating",
+ logic: [
+ { value: "5", condition: "equals", destination: "l2q1chqssong8n0xwaagyl8g" },
+ { value: "5", condition: "lessThan", destination: "k3s6gm5ivkc5crpycdbpzkpa" },
+ ],
+ range: 5,
+ scale: "smiley",
+ headline: "How would you rate this weeks newsletter?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Meh",
+ upperLabel: "Great",
+ },
+ {
+ id: "k3s6gm5ivkc5crpycdbpzkpa",
+ type: "openText",
+ logic: [
+ { condition: "submitted", destination: "end" },
+ { condition: "skipped", destination: "end" },
+ ],
+ headline: "What would have made this weeks newsletter more helpful?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "l2q1chqssong8n0xwaagyl8g",
+ html: '
Who thinks like you? You\'d do us a huge favor if you\'d share this weeks episode with your brain friend!
',
+ type: "cta",
+ headline: "Thanks! ❤️ Spread the love with ONE friend.",
+ required: false,
+ buttonUrl: "https://formbricks.com",
+ buttonLabel: "Happy to help!",
+ buttonExternal: true,
+ dismissButtonLabel: "Find your own friends",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Evaluate a Product Idea",
+
+ category: "Exploration",
+ objectives: ["improve_user_retention", "increase_user_adoption"],
+ description: "Survey users about product or feature ideas. Get feedback rapidly.",
+ preset: {
+ name: "Evaluate a Product Idea",
+ questions: [
+ {
+ id: createId(),
+ html: '
We respect your time and kept it short 🤸
',
+ type: "cta",
+ headline:
+ "We love how you use {{productName}}! We'd love to pick your brain on a feature idea. Got a minute?",
+ required: true,
+ buttonLabel: "Let's do it!",
+ buttonExternal: false,
+ dismissButtonLabel: "Skip",
+ },
+ {
+ id: createId(),
+ type: "rating",
+ logic: [
+ { value: "3", condition: "lessEqual", destination: "ndacjg9lqf5jcpq9w8ote666" },
+ { value: "4", condition: "greaterEqual", destination: "jmzgbo73cfjswlvhoynn7o0q" },
+ ],
+ range: 5,
+ scale: "number",
+ headline: "Thanks! How difficult or easy is it for you to [PROBLEM AREA] today?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Very difficult",
+ upperLabel: "Very easy",
+ },
+ {
+ id: "ndacjg9lqf5jcpq9w8ote666",
+ type: "openText",
+ headline: "What's most difficult for you when it comes to [PROBLEM AREA]?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "jmzgbo73cfjswlvhoynn7o0q",
+ html: '
Read the text below, then answer 2 questions:
Insert concept brief here. Add neccessary details but keep it concise and easy to understand.
',
+ type: "cta",
+ headline: "We're working on an idea to help with [PROBLEM AREA].",
+ required: true,
+ buttonLabel: "Next",
+ buttonExternal: false,
+ dismissButtonLabel: "Skip",
+ },
+ {
+ id: createId(),
+ type: "rating",
+ logic: [
+ { value: "3", condition: "lessEqual", destination: "mmiuun3z4e7gk4ufuwh8lq8q" },
+ { value: "4", condition: "greaterEqual", destination: "gvzevzw4hkqd6dmlkcly6kd1" },
+ ],
+ range: 5,
+ scale: "number",
+ headline: "How valuable would this feature be to you?",
+ required: true,
+ subheader: "",
+ lowerLabel: "Not valuable",
+ upperLabel: "Very valuable",
+ },
+ {
+ id: "mmiuun3z4e7gk4ufuwh8lq8q",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "bqmnpyku9etsgbtb322luzb2" }],
+ headline: "Got it. Why wouldn't this feature be valuable to you?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "gvzevzw4hkqd6dmlkcly6kd1",
+ type: "openText",
+ headline: "Got it. What would be most valuable to you in this feature?",
+ required: true,
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "bqmnpyku9etsgbtb322luzb2",
+ type: "openText",
+ headline: "Anything else we should keep in mind?",
+ required: false,
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+ {
+ name: "Understand Low Engagement",
+
+ category: "Product Experience",
+ objectives: ["improve_user_retention", "increase_user_adoption"],
+ description: "Identify reasons for low engagement to improve user adoption.",
+ preset: {
+ name: "Reasons for Low Engagement",
+ questions: [
+ {
+ id: "aq9dafe9nxe0kpm67b1os2z9",
+ type: "multipleChoiceSingle",
+ logic: [
+ { value: "Difficult to use", condition: "equals", destination: "r0zvi3vburf4hm7qewimzjux" },
+ {
+ value: "Found a better alternative",
+ condition: "equals",
+ destination: "g92s5wetp51ps6afmc6y7609",
+ },
+ {
+ value: "Just haven't had the time",
+ condition: "equals",
+ destination: "gn6298zogd2ipdz7js17qy5i",
+ },
+ {
+ value: "Lacked features I need",
+ condition: "equals",
+ destination: "rbwz3y6y9avzqcfj30nu0qj4",
+ },
+ { value: "Other", condition: "equals", destination: "c0exdyri3erugrv0ezkyseh6" },
+ ],
+ choices: [
+ { id: "xoqb0wjjsk4t0lx0i7jrhx26", label: "Difficult to use" },
+ { id: "p768nlw47ndehtgzx6m82dr6", label: "Found a better alternative" },
+ { id: "izt28ma5ep3s92531owxj1vg", label: "Just haven't had the time" },
+ { id: "dhkp2wb9e1tv7kfu8csjhzbh", label: "Lacked features I need" },
+ { id: "other", label: "Other" },
+ ],
+ headline: "What's the main reason you haven't been back to {{productName}} recently?",
+ required: true,
+ subheader: "",
+ },
+ {
+ id: "r0zvi3vburf4hm7qewimzjux",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "What's difficult about using {{productName}}?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "g92s5wetp51ps6afmc6y7609",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Got it. Which alternative are you using instead?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "gn6298zogd2ipdz7js17qy5i",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Got it. How could we make it easier for you to get started?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "rbwz3y6y9avzqcfj30nu0qj4",
+ type: "openText",
+ logic: [{ condition: "submitted", destination: "end" }],
+ headline: "Got it. What features or functionality were missing?",
+ required: true,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ {
+ id: "c0exdyri3erugrv0ezkyseh6",
+ type: "openText",
+ logic: [],
+ headline: "Please add more details:",
+ required: false,
+ subheader: "",
+ placeholder: "Type your answer here...",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ },
+
+ /* {
+ name: "TEMPLATE MASTER",
+
+ category: "X",
+ objectives: ["X"],
+ description: "X",
+ preset: {
+ name: "X",
+ questions: [
+ {
+ id: createId(),
+ type: "X",
+ headline: "X",
+ required: false,
+ lowerLabel: "Not likely",
+ upperLabel: "Very likely",
+ },
+ ],
+ thankYouCard: thankYouCardDefault,
+ },
+ }, */
];
export const customSurvey: Template = {
name: "Start from scratch",
description: "Create a survey without template.",
- icon: null,
preset: {
name: "New Survey",
questions: [
diff --git a/apps/web/app/s/[surveyId]/LinkSurvey.tsx b/apps/web/app/s/[surveyId]/LinkSurvey.tsx
index 84121d0450..a32a8340d2 100644
--- a/apps/web/app/s/[surveyId]/LinkSurvey.tsx
+++ b/apps/web/app/s/[surveyId]/LinkSurvey.tsx
@@ -72,13 +72,13 @@ export default function LinkSurvey({ survey }: LinkSurveyProps) {
case "notEquals":
return answerValue !== logic.value;
case "lessThan":
- return answerValue < logic.value;
+ return logic.value !== undefined && answerValue < logic.value;
case "lessEqual":
- return answerValue <= logic.value;
+ return logic.value !== undefined && answerValue <= logic.value;
case "greaterThan":
- return answerValue > logic.value;
+ return logic.value !== undefined && answerValue > logic.value;
case "greaterEqual":
- return answerValue >= logic.value;
+ return logic.value !== undefined && answerValue >= logic.value;
case "includesAll":
return (
Array.isArray(answerValue) &&
diff --git a/apps/web/components/auth/SigninForm.tsx b/apps/web/components/auth/SigninForm.tsx
index 9893daa405..4a75a96c68 100644
--- a/apps/web/components/auth/SigninForm.tsx
+++ b/apps/web/components/auth/SigninForm.tsx
@@ -11,6 +11,7 @@ import { GithubButton } from "./GithubButton";
export const SigninForm = () => {
const searchParams = useSearchParams();
+ const emailRef = useRef
(null);
const handleSubmit = async (e) => {
setLoggingIn(true);
@@ -48,6 +49,7 @@ export const SigninForm = () => {
Email address
{
if (!showLogin) {
setShowLogin(true);
setButtonEnabled(false);
+ // Add a slight delay before focusing the input field to ensure it's visible
+ setTimeout(() => emailRef.current?.focus(), 100);
} else if (formRef.current) {
formRef.current.requestSubmit();
}
diff --git a/apps/web/components/auth/SignupForm.tsx b/apps/web/components/auth/SignupForm.tsx
index 73bfc769d7..5be7152c89 100644
--- a/apps/web/components/auth/SignupForm.tsx
+++ b/apps/web/components/auth/SignupForm.tsx
@@ -14,6 +14,7 @@ export const SignupForm = () => {
const router = useRouter();
const [error, setError] = useState("");
const [signingUp, setSigningUp] = useState(false);
+ const nameRef = useRef(null);
const handleSubmit = async (e: any) => {
setSigningUp(true);
@@ -78,6 +79,7 @@ export const SignupForm = () => {
{
if (!showLogin) {
setShowLogin(true);
setButtonEnabled(false);
+ // Add a slight delay before focusing the input field to ensure it's visible
+ setTimeout(() => nameRef.current?.focus(), 100);
} else if (formRef.current) {
formRef.current.requestSubmit();
}
diff --git a/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx b/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx
index dffe7e9063..407075304b 100644
--- a/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx
+++ b/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx
@@ -1,10 +1,10 @@
-import { useState, useEffect } from "react";
+import { Input } from "@/../../packages/ui";
+import SubmitButton from "@/components/preview/SubmitButton";
import { cn } from "@formbricks/lib/cn";
import type { MultipleChoiceMultiQuestion } from "@formbricks/types/questions";
+import { useEffect, useState } from "react";
import Headline from "./Headline";
import Subheader from "./Subheader";
-import SubmitButton from "@/components/preview/SubmitButton";
-import { Input } from "@/../../packages/ui";
interface MultipleChoiceMultiProps {
question: MultipleChoiceMultiQuestion;
@@ -46,7 +46,7 @@ export default function MultipleChoiceMultiQuestion({
};
onSubmit(data);
- // console.log(data);
+
setSelectedChoices([]); // reset value
setShowOther(false);
setOtherSpecified("");
@@ -103,10 +103,9 @@ export default function MultipleChoiceMultiQuestion({
{choice.id === "other" && showOther && (
setOtherSpecified(e.currentTarget.value)}
aria-labelledby={`${choice.id}-label`}
diff --git a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx
index c06aae7a5e..af6edaffac 100644
--- a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx
+++ b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx
@@ -1,11 +1,10 @@
+import { Input } from "@/../../packages/ui";
+import SubmitButton from "@/components/preview/SubmitButton";
import { cn } from "@formbricks/lib/cn";
import type { MultipleChoiceSingleQuestion } from "@formbricks/types/questions";
import { useState } from "react";
import Headline from "./Headline";
import Subheader from "./Subheader";
-import SubmitButton from "@/components/preview/SubmitButton";
-import { Input } from "@/../../packages/ui";
-import { useRef } from "react";
interface MultipleChoiceSingleProps {
question: MultipleChoiceSingleQuestion;
@@ -21,19 +20,15 @@ export default function MultipleChoiceSingleQuestion({
brandColor,
}: MultipleChoiceSingleProps) {
const [selectedChoice, setSelectedChoice] = useState
(null);
- const otherSpecify = useRef(null);
return (