diff --git a/apps/formbricks-com/app/docs/getting-started/framework-guides/page.mdx b/apps/formbricks-com/app/docs/getting-started/framework-guides/page.mdx index aa85099413..e7a076b4bd 100644 --- a/apps/formbricks-com/app/docs/getting-started/framework-guides/page.mdx +++ b/apps/formbricks-com/app/docs/getting-started/framework-guides/page.mdx @@ -130,7 +130,7 @@ The app initializes 'formbricks' when it's loaded in a browser environment (due In app survey in React app for micro surveys diff --git a/apps/formbricks-com/app/docs/getting-started/quickstart-in-app-survey/page.mdx b/apps/formbricks-com/app/docs/getting-started/quickstart-in-app-survey/page.mdx index 3fde98feda..03d7e31ada 100644 --- a/apps/formbricks-com/app/docs/getting-started/quickstart-in-app-survey/page.mdx +++ b/apps/formbricks-com/app/docs/getting-started/quickstart-in-app-survey/page.mdx @@ -1,5 +1,6 @@ import Image from "next/image"; +import ReactApp from "../framework-guides/react-in-app-survey-app-popup-form.webp"; import I1 from "./1-in-app-survey-or-popup-survey-setup.webp"; import I2 from "./2-settings-for-survey-popup-in-app-for-feedback.webp"; import I3 from "./3-web-app-survey-settings-for-in-app-survey-popup.webp"; @@ -8,7 +9,6 @@ import I5 from "./5-options-survey-popup-in-app-for-feedback.webp"; import I6 from "./6-setup-in-app-survey-popup-feedback-box.webp"; import I7 from "./7-in-app-survey-popup-for-feedback.webp"; import I8 from "./8-pop-up-form-in-web-app-survey.webp"; -import ReactApp from "../framework-guides/react-in-app-survey-app-popup-form.webp"; export const metadata = { title: "Formbricks Quickstart Guide: In-App Surveys Made Simple", @@ -20,7 +20,7 @@ export const metadata = { # Quickstart -In app surveys have 6-10x better conversion rates than emailed out surveys. This tutorial explains how to run an in app survey in your web app in 10 to 15 minutes. Let’s go! +In-app surveys have 6-10x better conversion rates than emailed out surveys. This tutorial explains how to run an in-app survey in your web app in 10 to 15 minutes. Let’s go! ## Create a free Formbricks Cloud account @@ -28,7 +28,7 @@ While you can [self-host](/docs/self-hosting/deployment) Formbricks, the quickes Choose in app survey template @@ -59,7 +59,7 @@ Scroll down to Survey Trigger and choose “New Session”. This will cause this In app survey trigger for feedback popup micro survey @@ -68,7 +68,7 @@ In **Recontact Options** we choose the following settings, so that we can play a Options for survey popup in app micro survey @@ -88,7 +88,7 @@ On the Setup Checklist you have two elements. At the top you find the Widget Sta feedback popup in app survey @@ -100,7 +100,7 @@ In the manual below, this code snippet contains all the information you need: settings for in app survey popping up @@ -122,7 +122,7 @@ Now, restart your app in your terminal to make sure the widget is loaded. Once i In app survey in React app for micro surveys diff --git a/apps/formbricks-com/app/docs/getting-started/troubleshooting/page.mdx b/apps/formbricks-com/app/docs/getting-started/troubleshooting/page.mdx index 270c7704d4..455a525119 100644 --- a/apps/formbricks-com/app/docs/getting-started/troubleshooting/page.mdx +++ b/apps/formbricks-com/app/docs/getting-started/troubleshooting/page.mdx @@ -22,7 +22,7 @@ Go back to [app.formbricks.com](http://app.formbricks.com) or your self-hosted i setup checklist ui of survey popup for in app surveys @@ -39,7 +39,7 @@ If your app is connected with Formbricks Cloud, the survey might have not been l survey logs for in app survey pop up micro @@ -50,7 +50,7 @@ The widget only loads surveys which are **public** and **in progress**. Go to Fo ui of survey popup for in app micro surveys diff --git a/apps/formbricks-com/components/demo/HeaderLight.tsx b/apps/formbricks-com/components/demo/HeaderLight.tsx deleted file mode 100644 index 211bcda620..0000000000 --- a/apps/formbricks-com/components/demo/HeaderLight.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Popover } from "@headlessui/react"; -import { usePlausible } from "next-plausible"; -import Link from "next/link"; -import { useRouter } from "next/router"; - -import { Button } from "@formbricks/ui/Button"; - -import { FooterLogo } from "../shared/Logo"; - -export default function HeaderLight() { - const plausible = usePlausible(); - const router = useRouter(); - return ( - -
-
- - Formbricks - - -
- -
- - -
-
-
- ); -} diff --git a/apps/formbricks-com/components/home/Faq.tsx b/apps/formbricks-com/components/home/Faq.tsx index 2d17949383..833f86cb54 100644 --- a/apps/formbricks-com/components/home/Faq.tsx +++ b/apps/formbricks-com/components/home/Faq.tsx @@ -1,87 +1,66 @@ import HeadingCentered from "@/components/shared/HeadingCentered"; -import { FAQPageJsonLd } from "next-seo"; +import SeoFaq from "@/components/shared/Seo/SeoFaq"; -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@formbricks/ui/Accordion"; - -const FAQ_DATA = [ +const FAQs = [ { question: "What is Formbricks?", - answer: () => ( - <> - Formbricks is an open-source Experience Management tool that helps businesses understand what - customers think and feel about their products. It integrates natively into your platform to conduct - user research with a focus on data privacy and minimal development intervention. - - ), + answer: + "Formbricks is an experience management platform built on top of the fastest growing open source survey infrastructure out there. It aims to assist businesses in capturing and understanding customer insights and emotions towards their products and services. Designed to integrate seamlessly with various platforms, Formbricks focuses on user research, emphasizing data privacy and requiring minimal development effort for integration.", }, { question: "How do I integrate Formbricks into my application?", - answer: () => ( - <> - Integrating Formbricks is a breeze. Simply copy a script tag to your HTML head, or use NPM to install - Formbricks for platforms like React, Vue, Svelte, etc. Once installed, initialize Formbricks with your - environment details. Learn more with our framework guides{" "} - - here - - . - - ), + answer: + "Integrating Formbricks into an application is effortless. For web applications, it involves adding a simple script tag to the HTML head. For applications built with modern frameworks such as React, Vue, or Svelte, Formbricks can be installed via NPM. Initialization with specific environment details completes the setup. Detailed instructions and framework guides are readily available in the detailed Formbricks documentation.", }, { question: "Is Formbricks GDPR compliant?", - answer: () => ( - <> - Yes, Formbricks is fully GDPR compliant. Whether you use our cloud solution or decide to self-host, we - ensure compliance with all data privacy regulations. - - ), + answer: + "Indeed, Formbricks ensures full GDPR compliance, emphasizing the protection of user data privacy. It offers both cloud-based solutions and self-hosting options, adhering to data privacy regulations and making it a trusted choice for secure open source survey tool deployment.", }, { question: "Can I self-host Formbricks?", - answer: () => ( - <> - Absolutely! We provide an option for users to host Formbricks on their own server, ensuring even more - control over data and compliance. And the best part? Self-hosting is available for free, always. For - documentation on self hosting, click{" "} - - here - - . - - ), + answer: + "Certainly! Formbricks encourages self-hosting, providing users with greater control over their data and compliance. This option underscores Formbricks' commitment to offering versatile and free open source experience management software, ensuring users can adapt the platform to their unique requirements. Detailed self-hosting documentation is available for users seeking to leverage this capability.", }, { question: "How does Formbricks pricing work?", - answer: () => ( - <> - Formbricks offers a Free forever plan on the cloud that includes unlimited surveys, in-product - surveys, and more. We also provide a self-hosting option which includes all free features and more, - available at no cost. If you require additional features or responses, check out our pricing section - above for more details. - - ), + answer: + "Formbricks introduces a 'Free forever' plan, showcasing its commitment to making open source survey platforms universally accessible. This plan features unlimited surveys and in-product surveys, among other functionalities. Self-hosting users can enjoy all the benefits of the free plan with additional features at no extra cost. For those seeking advanced features Formbricks invites you to explore the pricing section for more information.", + }, + { + question: "How does Formbricks make money?", + answer: + "Formbricks employs the 'Open Core' business model. The core of the Formbricks application is offered for free. Formbricks monetizes by providing advanced features and services, typically catering to the needs of larger clients, thereby generating revenue.", + }, + { + question: "What is the best open source survey software available?", + answer: + "Identifying the best open source survey software requires evaluating features, flexibility, and support. Formbricks is a noteworthy contender, offering comprehensive experience management solutions. This platform excels in enabling businesses to delve into customer insights and feedback, offering versatility and ease of system integration.", + }, + { + question: "Can open source survey platforms be customized for my business needs?", + answer: + "Definitely. Platforms like Formbricks exemplify the customizability of open source survey tools, allowing for extensive tailoring to meet specific business requirements. Access to the source code enables deep customization, from branding adjustments to complex integrations with existing systems, underscoring the flexibility of open source experience management solutions.", + }, + { + question: + "What advantages does using an experience management platform offer over traditional survey tools?", + answer: + "Experience management platforms, especially those built on open source foundations, offer a more holistic view of customer interactions compared to traditional survey tools. They enable real-time collection, analysis, and application of customer feedback, ensuring a thorough understanding of the customer journey. This comprehensive insight facilitates informed decision-making and boosts customer satisfaction.", }, ]; -const faqJsonLdData = FAQ_DATA.map((faq) => ({ - questionName: faq.question, - acceptedAnswerText: faq.answer(), -})); - export default function FAQ() { return ( -
- - - - {FAQ_DATA.map((faq, index) => ( - - {faq.question} - {faq.answer()} - - ))} - +
+ +
); } diff --git a/apps/formbricks-com/components/home/Features.tsx b/apps/formbricks-com/components/home/Features.tsx index 57826d440e..a97e4bb258 100644 --- a/apps/formbricks-com/components/home/Features.tsx +++ b/apps/formbricks-com/components/home/Features.tsx @@ -24,42 +24,39 @@ const features = [ ]; export const Features: React.FC = () => { return ( -
-
- +
+ -
    - {features.map((feature) => { - const IconComponent: React.ElementType = feature.icon; +
      + {features.map((feature) => { + const IconComponent: React.ElementType = feature.icon; - return ( -
    • -
      -
      - -
      + return ( +
    • +
      +
      +
      -
      -

      - {feature.name} -

      -
      -
      Description
      -
      {feature.description}
      -
      -
      -
    • - ); - })} -
    -
+
+
+

+ {feature.name} +

+
+
Description
+
{feature.description}
+
+
+ + ); + })} +
); }; diff --git a/apps/formbricks-com/components/home/Hero.tsx b/apps/formbricks-com/components/home/Hero.tsx index e04495c54b..e0f0c509eb 100644 --- a/apps/formbricks-com/components/home/Hero.tsx +++ b/apps/formbricks-com/components/home/Hero.tsx @@ -1,13 +1,9 @@ -import CalLogoDark from "@/images/clients/cal-logo-dark.svg"; import CalLogoLight from "@/images/clients/cal-logo-light.svg"; -import CrowdLogoDark from "@/images/clients/crowd-logo-dark.svg"; import CrowdLogoLight from "@/images/clients/crowd-logo-light.svg"; import FlixbusLogo from "@/images/clients/flixbus-white.svg"; import NILogoDark from "@/images/clients/niLogoDark.svg"; -import NILogoLight from "@/images/clients/niLogoWhite.svg"; import OptimoleLogo from "@/images/clients/optimole-logo.svg"; import ThemeisleLogo from "@/images/clients/themeisle-logo.webp"; -import AnimationFallback from "@/public/animations/opensource-xm-platform-formbricks-fallback.png"; import { ShieldCheckIcon, StarIcon } from "lucide-react"; import { usePlausible } from "next-plausible"; import Image from "next/image"; @@ -15,14 +11,12 @@ import { useRouter } from "next/router"; import { Button } from "@formbricks/ui/Button"; -import HeroAnimation from "./HeroAnimation"; - export const Hero: React.FC = ({}) => { const plausible = usePlausible(); const router = useRouter(); return (
-
+

Privacy-first @@ -46,9 +40,8 @@ export const Hero: React.FC = ({}) => { know what your customers need.

- -
-
+
+
Flixbus Flix Flixtrain Logo { width={200} /> Cal Logo - Cal Logo - Neverinstall Logo - + ThemeIsle Logo Crowd.dev Logo - Crowd.dev Logo - Neverinstall Logo + Optimole Logo Neverinstall Logo - Neverinstall Logo - Neverinstall Logo
+
-
- -
); }; diff --git a/apps/formbricks-com/components/home/HeroAnimation.tsx b/apps/formbricks-com/components/home/HeroAnimation.tsx index 8b27b45f7c..87312b46bd 100644 --- a/apps/formbricks-com/components/home/HeroAnimation.tsx +++ b/apps/formbricks-com/components/home/HeroAnimation.tsx @@ -30,7 +30,7 @@ export const HeroAnimation: React.FC = ({ fallbackImage, ...props }) => { }, [lottie]); return ( -
+
{!loaded && (
diff --git a/apps/formbricks-com/components/home/Highlights.tsx b/apps/formbricks-com/components/home/Highlights.tsx index 4b7196e1e5..863d83d3d4 100644 --- a/apps/formbricks-com/components/home/Highlights.tsx +++ b/apps/formbricks-com/components/home/Highlights.tsx @@ -6,62 +6,43 @@ import Image from "next/image"; export const Highlights: React.FC = ({}) => { return ( - <> -
-
-
-
-

- Ask at the right moment, -
- get the data you need. -

-

- Follow up emails are so 2010. Ask users as they experience your product - and leverage a - significantly higher conversion rate. -

-
-
- react library - react library -
-
+
+
+
+

+ Ask at the right moment, +
+ get the data you need. +

+

+ Follow up emails are so 2010. Ask users as they experience your product - and leverage a + significantly higher conversion rate. +

+
+
+ react library + react library
-
-
-
-
- react library - react library -
-
-

- Don't ‘Spray and pray’. -
- Pre-segment granularly. -

-

- Pre-segment who sees your survey based on custom attributes. Keep the signal, cancel out the - noise. -

-
-
+ +
+
+ react library + react library +
+
+

+ Don't ‘Spray and pray’. +
+ Pre-segment granularly. +

+

+ Pre-segment who sees your survey based on custom attributes. Keep the signal, cancel out the + noise. +

- +
); }; diff --git a/apps/formbricks-com/components/home/Steps.tsx b/apps/formbricks-com/components/home/Steps.tsx index 9f8377680b..dc527adea6 100644 --- a/apps/formbricks-com/components/home/Steps.tsx +++ b/apps/formbricks-com/components/home/Steps.tsx @@ -3,142 +3,121 @@ import DashboardMockupDark from "@/images/dashboard-mockup-dark.png"; import DashboardMockup from "@/images/dashboard-mockup.png"; import { MousePointerClickIcon } from "lucide-react"; import Image from "next/image"; -import { useState } from "react"; import { Button } from "@formbricks/ui/Button"; import AddEventDummy from "../dummyUI/AddEventDummy"; -import AddNoCodeEventModalDummy from "../dummyUI/AddNoCodeEventModalDummy"; import HeadingCentered from "../shared/HeadingCentered"; import SetupTabs from "./SetupTabs"; export const Steps: React.FC = () => { - const [isAddEventModalOpen, setAddEventModalOpen] = useState(false); - return ( - <> +
-
-
-
-
-

Step 1

-

- Copy + Paste -

-

- Simply copy a <script> tag to your HTML head - that’s about it. Or use NPM to install - Formbricks for React, Vue, Svelte, etc. -

-
-
- -
+
+
+
+

Step 1

+

+ Copy + Paste +

+

+ Simply copy a <script> tag to your HTML head - that’s about it. Or use NPM to install + Formbricks for React, Vue, Svelte, etc. +

+
+
+
-
-
-
-
-
-
- -
-
-
-

Step 2

-

- No-Code: Track User Actions -

-

- Set up user actions which can trigger your survey without writing a single line of code. - Surveys can be triggered on specific pages or after an element is clicked. -

-
-
-
-
-
-
-
-
-

Step 3

-

- Create your survey -

-

- Start from a template - or from scratch. Ask what you want, in any language. You can also - adjust the look and feel of your survey. -

-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-

Step 4

-

- Set segment and trigger -

-

- Create a custom segment for each survey. Use attributes and past user actions to only survey - the people who have answers. Trigger your survey on any user action in your app. -

-
-
-
-
-
-
-
-
-

Step 5

-

- Make better decisions -

-

- Gather all insights you can - including partial submissions. Build conviction for the next - product decision. Better data, better business. -

-
-
- Data Pipelines - Data Pipelines -
-
-
-
- - +
+
+
+ +
+
+
+

Step 2

+

+ No-Code: Track User Actions +

+

+ Set up user actions which can trigger your survey without writing a single line of code. Surveys + can be triggered on specific pages or after an element is clicked. +

+
+
+ +
+
+

Step 3

+

+ Create your survey +

+

+ Start from a template - or from scratch. Ask what you want, in any language. You can also adjust + the look and feel of your survey. +

+
+
+ +
+
+ +
+
+
+ +
+
+
+

Step 4

+

+ Set segment and trigger +

+

+ Create a custom segment for each survey. Use attributes and past user actions to only survey the + people who have answers. Trigger your survey on any user action in your app. +

+
+
+ +
+
+

Step 5

+

+ Make better decisions +

+

+ Gather all insights you can - including partial submissions. Build conviction for the next + product decision. Better data, better business. +

+
+
+ Data Pipelines + Data Pipelines +
+
+
+
); }; diff --git a/apps/formbricks-com/components/salespage/FeatureCard.tsx b/apps/formbricks-com/components/salespage/FeatureCard.tsx new file mode 100644 index 0000000000..ca7df8a51f --- /dev/null +++ b/apps/formbricks-com/components/salespage/FeatureCard.tsx @@ -0,0 +1,19 @@ +interface TestimonialProps { + title: string; + text: string; + Icon: React.ElementType; +} + +export default function SalesTestimonial({ title, text, Icon }: TestimonialProps) { + return ( +
+
+ +
+
+

{title}

+

{text}

+
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/HeaderLight.tsx b/apps/formbricks-com/components/salespage/HeaderLight.tsx new file mode 100644 index 0000000000..d9b3a00190 --- /dev/null +++ b/apps/formbricks-com/components/salespage/HeaderLight.tsx @@ -0,0 +1,101 @@ +import { Popover, Transition } from "@headlessui/react"; +import { Menu, X } from "lucide-react"; +import { usePlausible } from "next-plausible"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import { Fragment } from "react"; + +import { Button } from "@formbricks/ui/Button"; + +import { FooterLogo } from "../shared/Logo"; + +const mainNav = [ + { name: "Link Surveys", href: "/open-source-form-builder", status: true }, + { name: "Website Surveys", href: "/website-survey", status: true }, + { name: "In-app Surveys", href: "/in-app-survey", status: true }, +]; + +export default function HeaderLight() { + const plausible = usePlausible(); + const router = useRouter(); + return ( +
+ + Formbricks + + + +
+ {mainNav.map((item) => ( + + {item.name} + + ))} +
+ + + + + Open menu +
+ ); +} diff --git a/apps/formbricks-com/components/demo/LayoutLight.tsx b/apps/formbricks-com/components/salespage/LayoutLight.tsx similarity index 61% rename from apps/formbricks-com/components/demo/LayoutLight.tsx rename to apps/formbricks-com/components/salespage/LayoutLight.tsx index 8bfe85e840..1ee05e9bbf 100644 --- a/apps/formbricks-com/components/demo/LayoutLight.tsx +++ b/apps/formbricks-com/components/salespage/LayoutLight.tsx @@ -8,16 +8,14 @@ interface LayoutProps { description: string; } -export default function Layout({ title, description, children }: LayoutProps) { +export default function LayoutLight({ title, description, children }: LayoutProps) { return (
- { -
- {children} -
- } +
+ {children} +
); diff --git a/apps/formbricks-com/components/salespage/LogoBar.tsx b/apps/formbricks-com/components/salespage/LogoBar.tsx new file mode 100644 index 0000000000..180bb9e64b --- /dev/null +++ b/apps/formbricks-com/components/salespage/LogoBar.tsx @@ -0,0 +1,37 @@ +import CalLogoLight from "@/images/clients/cal-logo-light.svg"; +import CrowdLogoLight from "@/images/clients/crowd-logo-light.svg"; +import FlixbusLogo from "@/images/clients/flixbus-white.svg"; +import NILogoDark from "@/images/clients/niLogoDark.svg"; +import OptimoleLogo from "@/images/clients/optimole-logo.svg"; +import ThemeisleLogo from "@/images/clients/themeisle-logo.webp"; +import Image from "next/image"; + +export default function LogoBar() { + return ( +
+

+ 10,000+ teams at the world’s best companies trust Formbricks +

+
+
+ Flixbus Flix Flixtrain Logo + Cal Logo + ThemeIsle Logo + Crowd.dev Logo + Optimole Logo + Neverinstall Logo +
+
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/SalesBreaker.tsx b/apps/formbricks-com/components/salespage/SalesBreaker.tsx new file mode 100644 index 0000000000..798232f7fe --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesBreaker.tsx @@ -0,0 +1,25 @@ +import SalesCTA from "@/components/salespage/SalesCTA"; + +interface Props { + headline: string; + subheadline: string; +} + +export default function SalesBreaker({ headline, subheadline }: Props) { + return ( +
+
+
+ +
+

{headline}

+

+ {subheadline} +

+
+ +
+
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/SalesCTA.tsx b/apps/formbricks-com/components/salespage/SalesCTA.tsx new file mode 100644 index 0000000000..530ff3b699 --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesCTA.tsx @@ -0,0 +1,20 @@ +import { usePlausible } from "next-plausible"; +import { useRouter } from "next/router"; + +import { Button } from "@formbricks/ui/Button"; + +export default function SalesCTA() { + const plausible = usePlausible(); + const router = useRouter(); + return ( + + ); +} diff --git a/apps/formbricks-com/components/salespage/SalesPageFeature.tsx b/apps/formbricks-com/components/salespage/SalesPageFeature.tsx new file mode 100644 index 0000000000..8213ef9b8b --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesPageFeature.tsx @@ -0,0 +1,36 @@ +import SalesCTA from "@/components/salespage/SalesCTA"; +import Image, { StaticImageData } from "next/image"; + +interface SalesPageFeatureProps { + imgSrc: StaticImageData; + imgAlt: string; + headline: string; + subheadline: string; + imgLeft?: boolean; +} + +export default function SalesPageFeature({ + imgSrc, + imgAlt, + headline, + subheadline, + imgLeft, +}: SalesPageFeatureProps) { + return ( +
+
+

{headline}

+

{subheadline}

+ +
+
+ {imgAlt} +
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/SalesPageHero.tsx b/apps/formbricks-com/components/salespage/SalesPageHero.tsx new file mode 100644 index 0000000000..732f34bdd8 --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesPageHero.tsx @@ -0,0 +1,28 @@ +import SalesCTA from "@/components/salespage/SalesCTA"; +import Image, { StaticImageData } from "next/image"; + +interface SalesPageHeroProps { + imgSrc: StaticImageData; + imgAlt: string; + headline: React.ReactNode; + subheadline: string; +} + +export default function SalesPageHero({ imgSrc, imgAlt, headline, subheadline }: SalesPageHeroProps) { + return ( +
+
+

{headline}

+

{subheadline}

+ +
+
+ {imgAlt} +
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/SalesSteps.tsx b/apps/formbricks-com/components/salespage/SalesSteps.tsx new file mode 100644 index 0000000000..aa32f34344 --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesSteps.tsx @@ -0,0 +1,32 @@ +interface SalesStepsProps { + steps: Array<{ id: string; name: string; description: string }>; +} + +export default function SalesSteps({ steps }: SalesStepsProps) { + return ( +
+
    + {steps.map((step) => { + return ( +
  • +
    +
    + {step.id} +
    +
    +
    +

    {step.name}

    +
    +
    Description
    +
    {step.description}
    +
    +
    +
  • + ); + })} +
+
+ ); +} diff --git a/apps/formbricks-com/components/salespage/SalesTestimonial.tsx b/apps/formbricks-com/components/salespage/SalesTestimonial.tsx new file mode 100644 index 0000000000..c584c33792 --- /dev/null +++ b/apps/formbricks-com/components/salespage/SalesTestimonial.tsx @@ -0,0 +1,28 @@ +import Image, { StaticImageData } from "next/image"; + +interface TestimonialProps { + quote: string; + author: string; + imgSrc: StaticImageData; + imgAlt: string; + textSize: "base" | "large"; +} + +export default function SalesTestimonial({ + quote, + author, + imgAlt, + imgSrc, + textSize = "base", +}: TestimonialProps) { + return ( +
+

+ {quote} +

+

{author}

+ {imgAlt} +
+ ); +} diff --git a/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx b/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx index 07adc9617c..636d938871 100644 --- a/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx +++ b/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx @@ -79,15 +79,6 @@ export default function BestPracticeNavigation() { description: "Give users the chance to share feedback in a single click.", category: "Boost Retention", }, - - { - name: "Improve Newsletter Content", - href: "/improve-newsletter-content", - status: true, - icon: FeedbackIcon, - description: "Improve your newsletter content by showing this survey to your readers.", - category: "Boost Retention", - }, ]; return ( diff --git a/apps/formbricks-com/components/shared/BestPractices.tsx b/apps/formbricks-com/components/shared/BestPractices.tsx index 756cf3883c..f2cd18b543 100644 --- a/apps/formbricks-com/components/shared/BestPractices.tsx +++ b/apps/formbricks-com/components/shared/BestPractices.tsx @@ -1,20 +1,14 @@ +import HeadingCentered from "@/components/shared/HeadingCentered"; + import BestPracticeNavigation from "./BestPracticeNavigation"; export default function InsightOppos() { return ( -
-
-

- Get started with{" "} - - Best Practices - -

-

- Run battle-tested approaches for qualitative user research in minutes. -

-
- +
+
); diff --git a/apps/formbricks-com/components/shared/BreakerCTA.tsx b/apps/formbricks-com/components/shared/BreakerCTA.tsx index 7e58507137..dfbdccad64 100644 --- a/apps/formbricks-com/components/shared/BreakerCTA.tsx +++ b/apps/formbricks-com/components/shared/BreakerCTA.tsx @@ -22,7 +22,7 @@ export default function BreakerCTA({ inverted = false, teaser, headline, subhead inverted ? "from-slate-800 via-slate-800 to-slate-700 dark:from-slate-200 dark:to-slate-300" : "from-slate-200 to-slate-300 dark:from-slate-800 dark:via-slate-800 dark:to-slate-700", - "xs:mx-auto xs:w-full mx-4 my-4 mt-28 max-w-6xl rounded-xl bg-gradient-to-br md:mb-0 " + "mx-auto w-full max-w-6xl rounded-xl bg-gradient-to-br " )}>
diff --git a/apps/formbricks-com/components/shared/CTA.tsx b/apps/formbricks-com/components/shared/CTA.tsx index 7b3439152a..a2068cd98b 100644 --- a/apps/formbricks-com/components/shared/CTA.tsx +++ b/apps/formbricks-com/components/shared/CTA.tsx @@ -9,7 +9,7 @@ export default function CTA() { return ( <>
- +
diff --git a/apps/formbricks-com/components/shared/Footer.tsx b/apps/formbricks-com/components/shared/Footer.tsx index 54e237d12b..cf6fb438aa 100644 --- a/apps/formbricks-com/components/shared/Footer.tsx +++ b/apps/formbricks-com/components/shared/Footer.tsx @@ -4,13 +4,39 @@ import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6"; import { FooterLogo } from "./Logo"; const navigation = { - other: [ + products: [ + { name: "Link Surveys", href: "/open-source-form-builder", status: true }, + { name: "Website Surveys", href: "/website-survey", status: true }, + { name: "In-app Surveys", href: "/in-app-survey", status: true }, + ], + comparisons: [ + { name: "vs. Google Forms", href: "/vs-google-forms", status: true }, + { name: "vs. Formspree", href: "/vs-formspree", status: true }, + { name: "vs. OhMyForm", href: "/vs-ohmyform", status: true }, + ], + footernav: [ { name: "Community", href: "/community", status: true }, + { name: "Pricing", href: "/pricing", status: true }, { name: "Blog", href: "/blog", status: true }, - { name: "OSS Friends", href: "/oss-friends", status: true }, + { name: "Docs", href: "/blog", status: true }, + ], + legal: [ + { name: "Imprint", href: "/imprint", status: true }, + { name: "Privacy Policy", href: "/privacy", status: true }, + { name: "Terms", href: "/terms", status: true }, { name: "GDPR FAQ", href: "/gdpr", status: true }, { name: "GDPR Guide", href: "/gdpr-guide", status: true }, ], + bestPractices: [ + { name: "Interview Prompt", href: "/interview-prompt", status: true }, + { name: "PMF Survey", href: "/measure-product-market-fit", status: true }, + { name: "Onboarding Segments", href: "/onboarding-segmentation", status: true }, + { name: "Learn from Churn", href: "/learn-from-churn", status: true }, + { name: "Improve Trial CR", href: "/improve-trial-conversion", status: true }, + { name: "Docs Feedback", href: "/docs-feedback", status: true }, + { name: "Feature Chaser", href: "/feature-chaser", status: true }, + { name: "Feedback Box", href: "/feedback-box", status: true }, + ], social: [ { name: "Twitter", @@ -39,27 +65,84 @@ export default function Footer() { -
- - Formbricks - - -

Privacy-first Experience Management

-
-

- Formbricks GmbH © {currentYear}. All rights reserved. -
- Imprint | Privacy Policy |{" "} - Terms | OSS Friends -

+
+
+ + Formbricks + + +

Privacy-first Experience Management

+
+

+ Formbricks GmbH © {currentYear}. All rights reserved. +
+ Imprint | Privacy Policy |{" "} + Terms | OSS Friends +

+
+
+ {navigation.social.map((item) => ( + + {item.name} +
-
- {navigation.social.map((item) => ( - - {item.name} -
diff --git a/apps/formbricks-com/components/shared/Header.tsx b/apps/formbricks-com/components/shared/Header.tsx index c722c85ddc..4157569620 100644 --- a/apps/formbricks-com/components/shared/Header.tsx +++ b/apps/formbricks-com/components/shared/Header.tsx @@ -268,12 +268,6 @@ export default function Header() { )} - {/* - Community - - */} @@ -294,11 +288,6 @@ export default function Header() { className="text-sm font-medium text-slate-400 hover:text-slate-700 lg:text-base dark:hover:text-slate-300"> Blog {/*

1

*/} - {/* - Careers

1

- */}
- {/* */} -