diff --git a/.env.example b/.env.example
index 2a8ba5eebb..1d3dd9e019 100644
--- a/.env.example
+++ b/.env.example
@@ -167,9 +167,9 @@ ENTERPRISE_LICENSE_KEY=
# DEFAULT_ORGANIZATION_ID=
# DEFAULT_ORGANIZATION_ROLE=owner
-# Send new users to customer.io
-# CUSTOMER_IO_API_KEY=
-# CUSTOMER_IO_SITE_ID=
+# Send new users to Brevo
+# BREVO_API_KEY=
+# BREVO_LIST_ID=
# Ignore Rate Limiting across the Formbricks app
# RATE_LIMITING_DISABLED=1
diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml
deleted file mode 100644
index b9f8fb7b64..0000000000
--- a/.github/workflows/build-docs.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Build Docs
-on:
- workflow_call:
-
-permissions:
- contents: read
-
-jobs:
- build:
- name: Build Docs
- runs-on: ubuntu-latest
- timeout-minutes: 30
-
- steps:
- - uses: actions/checkout@v3
- - uses: ./.github/actions/dangerous-git-checkout
-
- - name: Setup Node.js 20.x
- uses: actions/setup-node@v3
- with:
- node-version: 20.x
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
-
- - name: Install dependencies
- run: pnpm install --config.platform=linux --config.architecture=x64
- shell: bash
-
- - run: |
- pnpm build --filter=@formbricks/docs...
- shell: bash
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
new file mode 100644
index 0000000000..abc3199b35
--- /dev/null
+++ b/.github/workflows/scorecard.yml
@@ -0,0 +1,73 @@
+# This workflow uses actions that are not certified by GitHub. They are provided
+# by a third-party and are governed by separate terms of service, privacy
+# policy, and support documentation.
+
+name: Scorecard supply-chain security
+on:
+ # For Branch-Protection check. Only the default branch is supported. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
+ branch_protection_rule:
+ # To guarantee Maintained check is occasionally updated. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
+ schedule:
+ - cron: '17 17 * * 6'
+ push:
+ branches: [ "main" ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ runs-on: ubuntu-latest
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+ # Needed to publish results and get a badge (see publish_results below).
+ id-token: write
+ # Uncomment the permissions below if installing in a private repository.
+ # contents: read
+ # actions: read
+
+ steps:
+ - name: "Checkout code"
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ with:
+ persist-credentials: false
+
+ - name: "Run analysis"
+ uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecard on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
+ # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Public repositories:
+ # - Publish results to OpenSSF REST API for easy access by consumers
+ # - Allows the repository to include the Scorecard badge.
+ # - See https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories:
+ # - `publish_results` will always be set to `false`, regardless
+ # of the value entered here.
+ publish_results: true
+
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
+ - name: "Upload artifact"
+ uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20
+ with:
+ name: SARIF file
+ path: results.sarif
+ retention-days: 5
+
+ # Upload the results to GitHub's code scanning dashboard (optional).
+ # Commenting out will disable upload of results to your repo's Code Scanning dashboard
+ - name: "Upload to code-scanning"
+ uses: github/codeql-action/upload-sarif@v3
+ with:
+ sarif_file: results.sarif
diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml
index 8903418c61..1104dbbd0f 100644
--- a/.github/workflows/sonarqube.yml
+++ b/.github/workflows/sonarqube.yml
@@ -1,11 +1,11 @@
name: SonarQube
on:
workflow_dispatch:
-# push:
-# branches:
-# - main
-# pull_request:
-# types: [opened, synchronize, reopened]
+ push:
+ branches:
+ - main
+ pull_request:
+ types: [opened, synchronize, reopened]
permissions:
contents: read
jobs:
@@ -16,6 +16,35 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
+
+ - name: Setup Node.js 20.x
+ uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
+ with:
+ node-version: 20.x
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2
+
+ - name: Install dependencies
+ run: pnpm install --config.platform=linux --config.architecture=x64
+
+ - name: create .env
+ run: cp .env.example .env
+
+ - name: Generate Random ENCRYPTION_KEY, CRON_SECRET & NEXTAUTH_SECRET and fill in .env
+ run: |
+ RANDOM_KEY=$(openssl rand -hex 32)
+ sed -i "s/ENCRYPTION_KEY=.*/ENCRYPTION_KEY=${RANDOM_KEY}/" .env
+ sed -i "s/CRON_SECRET=.*/CRON_SECRET=${RANDOM_KEY}/" .env
+ sed -i "s/NEXTAUTH_SECRET=.*/NEXTAUTH_SECRET=${RANDOM_KEY}/" .env
+
+ - name: Run tests with coverage
+ run: |
+ cd apps/web
+ pnpm test:coverage
+ cd ../../
+ # The Vitest coverage config is in your vite.config.mts
+
- name: SonarQube Scan
uses: SonarSource/sonarqube-scan-action@bfd4e558cda28cda6b5defafb9232d191be8c203
env:
diff --git a/.github/workflows/tolgee-missing-key-check.yml b/.github/workflows/tolgee-missing-key-check.yml
new file mode 100644
index 0000000000..869cd3965b
--- /dev/null
+++ b/.github/workflows/tolgee-missing-key-check.yml
@@ -0,0 +1,39 @@
+name: Check Missing Translations
+
+permissions:
+ contents: read
+
+on:
+ workflow_dispatch:
+ pull_request:
+ types: [opened, synchronize, reopened]
+
+jobs:
+ check-missing-translations:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 18
+
+ - name: Install Tolgee CLI
+ run: npm install -g @tolgee/cli
+
+ - name: Compare Tolgee Keys
+ id: compare
+ run: |
+ tolgee compare --api-key ${{ secrets.TOLGEE_API_KEY }} > compare_output.txt
+ cat compare_output.txt
+
+ - name: Check for Missing Translations
+ run: |
+ if grep -q "new key found" compare_output.txt; then
+ echo "New keys found that may require translations:"
+ exit 1
+ else
+ echo "No new keys found."
+ fi
diff --git a/.github/workflows/tolgee.yml b/.github/workflows/tolgee.yml
new file mode 100644
index 0000000000..c356c75981
--- /dev/null
+++ b/.github/workflows/tolgee.yml
@@ -0,0 +1,42 @@
+name: Tolgee Tagging on PR Merge
+permissions:
+ contents: read
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ tag-production-keys:
+ name: Tag Production Keys
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 18 # Ensure compatibility with your project
+
+ - name: Install Tolgee CLI
+ run: npm install -g @tolgee/cli
+
+ - name: Tag Production Keys
+ run: |
+ BRANCH_NAME=${GITHUB_REF##*/}
+ npx tolgee tag \
+ --api-key ${{ secrets.TOLGEE_API_KEY }} \
+ --filter-extracted \
+ --filter-tag "draft: ${BRANCH_NAME}" \
+ --tag production \
+ --untag "draft: ${BRANCH_NAME}"
+
+ - name: Tag Deprecated Keys
+ run: |
+ npx tolgee tag \
+ --api-key ${{ secrets.TOLGEE_API_KEY }} \
+ --filter-not-extracted --filter-tag production \
+ --tag deprecated --untag production
diff --git a/.gitignore b/.gitignore
index da9df0ff90..7060b9683f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,4 +58,5 @@ packages/lib/uploads
# js compiled assets
apps/web/public/js
+
packages/database/migrations
\ No newline at end of file
diff --git a/.husky/post-checkout b/.husky/post-checkout
new file mode 100644
index 0000000000..6f71e4bb57
--- /dev/null
+++ b/.husky/post-checkout
@@ -0,0 +1 @@
+echo "{\"branchName\": \"$(git rev-parse --abbrev-ref HEAD)\"}" > ../branch.json
\ No newline at end of file
diff --git a/.husky/post-commit b/.husky/post-commit
new file mode 100644
index 0000000000..6f71e4bb57
--- /dev/null
+++ b/.husky/post-commit
@@ -0,0 +1 @@
+echo "{\"branchName\": \"$(git rev-parse --abbrev-ref HEAD)\"}" > ../branch.json
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
index e02c24e2b5..09809e56ab 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1 +1,5 @@
-pnpm lint-staged
\ No newline at end of file
+pnpm lint-staged
+pnpm tolgee-pull || true
+echo "{\"branchName\": \"main\"}" > ../branch.json
+git add branch.json packages/lib/messages/*.json
+
diff --git a/.tolgeerc.json b/.tolgeerc.json
new file mode 100644
index 0000000000..2538f88177
--- /dev/null
+++ b/.tolgeerc.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://docs.tolgee.io/cli-schema.json",
+ "format": "JSON_TOLGEE",
+ "patterns": ["./apps/web/**/*.ts?(x)"],
+ "projectId": 10304,
+ "pull": {
+ "path": "./packages/lib/messages"
+ },
+ "push": {
+ "files": [
+ {
+ "language": "en-US",
+ "path": "./packages/lib/messages/en-US.json"
+ },
+ {
+ "language": "de-DE",
+ "path": "./packages/lib/messages/de-DE.json"
+ },
+ {
+ "language": "fr-FR",
+ "path": "./packages/lib/messages/fr-FR.json"
+ },
+ {
+ "language": "pt-BR",
+ "path": "./packages/lib/messages/pt-BR.json"
+ }
+ ],
+ "forceMode": "OVERRIDE"
+ },
+ "strictNamespace": false
+}
diff --git a/apps/demo-react-native/.env.example b/apps/demo-react-native/.env.example
index 3a2d97bdc4..340aecb341 100644
--- a/apps/demo-react-native/.env.example
+++ b/apps/demo-react-native/.env.example
@@ -1,2 +1,2 @@
-EXPO_PUBLIC_API_HOST=http://192.168.178.20:3000
-EXPO_PUBLIC_FORMBRICKS_ENVIRONMENT_ID=clzr04nkd000bcdl110j0ijyq
+EXPO_PUBLIC_APP_URL=http://192.168.0.197:3000
+EXPO_PUBLIC_FORMBRICKS_ENVIRONMENT_ID=cm5p0cs7r000819182b32j0a1
\ No newline at end of file
diff --git a/apps/demo-react-native/app.json b/apps/demo-react-native/app.json
index 66cd17cbb8..31d6cb2a53 100644
--- a/apps/demo-react-native/app.json
+++ b/apps/demo-react-native/app.json
@@ -18,6 +18,7 @@
},
"jsEngine": "hermes",
"name": "react-native-demo",
+ "newArchEnabled": true,
"orientation": "portrait",
"slug": "react-native-demo",
"splash": {
diff --git a/apps/demo-react-native/package.json b/apps/demo-react-native/package.json
index 4dc5955136..acd06c3451 100644
--- a/apps/demo-react-native/package.json
+++ b/apps/demo-react-native/package.json
@@ -13,16 +13,17 @@
"dependencies": {
"@formbricks/js": "workspace:*",
"@formbricks/react-native": "workspace:*",
- "expo": "52.0.18",
- "expo-status-bar": "2.0.0",
+ "@react-native-async-storage/async-storage": "2.1.0",
+ "expo": "52.0.28",
+ "expo-status-bar": "2.0.1",
"react": "18.3.1",
"react-dom": "18.3.1",
- "react-native": "0.76.5",
+ "react-native": "0.76.6",
"react-native-webview": "13.12.5"
},
"devDependencies": {
"@babel/core": "7.26.0",
- "@types/react": "19.0.1",
+ "@types/react": "18.3.18",
"typescript": "5.7.2"
},
"private": true
diff --git a/apps/demo-react-native/src/app.tsx b/apps/demo-react-native/src/app.tsx
index 28e0f50552..a4816481e3 100644
--- a/apps/demo-react-native/src/app.tsx
+++ b/apps/demo-react-native/src/app.tsx
@@ -1,7 +1,14 @@
import { StatusBar } from "expo-status-bar";
import React, { type JSX } from "react";
import { Button, LogBox, StyleSheet, Text, View } from "react-native";
-import Formbricks, { track } from "@formbricks/react-native";
+import Formbricks, {
+ logout,
+ setAttribute,
+ setAttributes,
+ setLanguage,
+ setUserId,
+ track,
+} from "@formbricks/react-native";
LogBox.ignoreAllLogs();
@@ -10,35 +17,92 @@ export default function App(): JSX.Element {
throw new Error("EXPO_PUBLIC_FORMBRICKS_ENVIRONMENT_ID is required");
}
- if (!process.env.EXPO_PUBLIC_API_HOST) {
- throw new Error("EXPO_PUBLIC_API_HOST is required");
+ if (!process.env.EXPO_PUBLIC_APP_URL) {
+ throw new Error("EXPO_PUBLIC_APP_URL is required");
}
- const config = {
- environmentId: process.env.EXPO_PUBLIC_FORMBRICKS_ENVIRONMENT_ID as string,
- apiHost: process.env.EXPO_PUBLIC_API_HOST as string,
- userId: "random-user-id",
- attributes: {
- language: "en",
- testAttr: "attr-test",
- },
- };
-
return (
Formbricks React Native SDK Demo
-
);
}
diff --git a/apps/docs/.env.example b/apps/docs/.env.example
deleted file mode 100644
index 223df0abfd..0000000000
--- a/apps/docs/.env.example
+++ /dev/null
@@ -1,10 +0,0 @@
-NEXT_PUBLIC_FORMBRICKS_COM_API_HOST=http://localhost:3000
-NEXT_PUBLIC_FORMBRICKS_COM_ENVIRONMENT_ID=
-NEXT_PUBLIC_FORMBRICKS_COM_DOCS_FEEDBACK_SURVEY_ID=
-
-# Strapi API Key
-STRAPI_API_KEY=
-
-NEXT_PUBLIC_DOCSEARCH_APP_ID=
-NEXT_PUBLIC_DOCSEARCH_API_KEY=
-NEXT_PUBLIC_DOCSEARCH_INDEX_NAME=
diff --git a/apps/docs/.eslintrc.js b/apps/docs/.eslintrc.js
deleted file mode 100644
index 8e930ff596..0000000000
--- a/apps/docs/.eslintrc.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
- root: true,
- extends: ["@formbricks/eslint-config/next.js"],
- parserOptions: {
- project: "tsconfig.json",
- tsconfigRootDir: __dirname,
- },
- rules: {
- "@typescript-eslint/restrict-template-expressions": "off",
- "import/no-cycle": "off",
- },
- settings: {
- "import/resolver": {
- typescript: {
- project: "tsconfig.json",
- },
- },
- },
-};
diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore
deleted file mode 100644
index aeb7219b23..0000000000
--- a/apps/docs/.gitignore
+++ /dev/null
@@ -1,38 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-
-public/sitemap*.xml
-public/robots.txt
\ No newline at end of file
diff --git a/apps/docs/LICENSE.md b/apps/docs/LICENSE.md
deleted file mode 100644
index 3a28c7d33e..0000000000
--- a/apps/docs/LICENSE.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# Tailwind UI License
-
-## Personal License
-
-Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.
-
-The license grants permission to **one individual** (the Licensee) to access and use the Components and Templates.
-
-You **can**:
-
-- Use the Components and Templates to create unlimited End Products.
-- Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.
-- Use the Components and Templates to create unlimited End Products for unlimited Clients.
-- Use the Components and Templates to create End Products where the End Product is sold to End Users.
-- Use the Components and Templates to create End Products that are open source and freely available to End Users.
-
-You **cannot**:
-
-- Use the Components and Templates to create End Products that are designed to allow an End User to build their own End Products using the Components and Templates or derivatives of the Components and Templates.
-- Re-distribute the Components and Templates or derivatives of the Components and Templates separately from an End Product, neither in code or as design assets.
-- Share your access to the Components and Templates with any other individuals.
-- Use the Components and Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.
-
-### Example usage
-
-Examples of usage **allowed** by the license:
-
-- Creating a personal website by yourself.
-- Creating a website or web application for a client that will be owned by that client.
-- Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.
-- Creating a commercial self-hosted web application that is sold to end users for a one-time fee.
-- Creating a web application where the primary purpose is clearly not to simply re-distribute the components (like a conference organization app that uses the components for its UI for example) that is free and open source, where the source code is publicly available.
-
-Examples of usage **not allowed** by the license:
-
-- Creating a repository of your favorite Tailwind UI components or templates (or derivatives based on Tailwind UI components or templates) and publishing it publicly.
-- Creating a React or Vue version of Tailwind UI and making it available either for sale or for free.
-- Create a Figma or Sketch UI kit based on the Tailwind UI component designs.
-- Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind UI.
-- Creating a theme, template, or project starter kit using the components or templates and making it available either for sale or for free.
-- Creating an admin panel tool (like [Laravel Nova](https://nova.laravel.com/) or [ActiveAdmin](https://activeadmin.info/)) that is made available either for sale or for free.
-
-In simple terms, use Tailwind UI for anything you like as long as it doesn't compete with Tailwind UI.
-
-### Personal License Definitions
-
-Licensee is the individual who has purchased a Personal License.
-
-Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind UI license.
-
-End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.
-
-End User is a user of an End Product.
-
-Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.
-
-## Team License
-
-Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.
-
-The license grants permission for **up to 25 Employees and Contractors of the Licensee** to access and use the Components and Templates.
-
-You **can**:
-
-- Use the Components and Templates to create unlimited End Products.
-- Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.
-- Use the Components and Templates to create unlimited End Products for unlimited Clients.
-- Use the Components and Templates to create End Products where the End Product is sold to End Users.
-- Use the Components and Templates to create End Products that are open source and freely available to End Users.
-
-You **cannot**:
-
-- Use the Components or Templates to create End Products that are designed to allow an End User to build their own End Products using the Components or Templates or derivatives of the Components or Templates.
-- Re-distribute the Components or Templates or derivatives of the Components or Templates separately from an End Product.
-- Use the Components or Templates to create End Products that are the property of any individual or entity other than the Licensee or Clients of the Licensee.
-- Use the Components or Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.
-
-### Example usage
-
-Examples of usage **allowed** by the license:
-
-- Creating a website for your company.
-- Creating a website or web application for a client that will be owned by that client.
-- Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.
-- Creating a commercial self-hosted web application that is sold to end users for a one-time fee.
-- Creating a web application where the primary purpose is clearly not to simply re-distribute the components or templates (like a conference organization app that uses the components or a template for its UI for example) that is free and open source, where the source code is publicly available.
-
-Examples of use **not allowed** by the license:
-
-- Creating a repository of your favorite Tailwind UI components or template (or derivatives based on Tailwind UI components or templates) and publishing it publicly.
-- Creating a React or Vue version of Tailwind UI and making it available either for sale or for free.
-- Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind UI.
-- Creating a theme or template using the components or templates and making it available either for sale or for free.
-- Creating an admin panel tool (like [Laravel Nova](https://nova.laravel.com/) or [ActiveAdmin](https://activeadmin.info/)) that is made available either for sale or for free.
-- Creating any End Product that is not the sole property of either your company or a client of your company. For example your employees/contractors can't use your company Tailwind UI license to build their own websites or side projects.
-
-### Team License Definitions
-
-Licensee is the business entity who has purchased a Team License.
-
-Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind UI license.
-
-End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.
-
-End User is a user of an End Product.
-
-Employee is a full-time or part-time employee of the Licensee.
-
-Contractor is an individual or business entity contracted to perform services for the Licensee.
-
-Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.
-
-## Enforcement
-
-If you are found to be in violation of the license, access to your Tailwind UI account will be terminated, and a refund may be issued at our discretion. When license violation is blatant and malicious (such as intentionally redistributing the Components or Templates through private warez channels), no refund will be issued.
-
-The copyright of the Components and Templates is owned by Tailwind Labs Inc. You are granted only the permissions described in this license; all other rights are reserved. Tailwind Labs Inc. reserves the right to pursue legal remedies for any unauthorized use of the Components or Templates outside the scope of this license.
-
-## Liability
-
-Tailwind Labs Inc.’s liability to you for costs, damages, or other losses arising from your use of the Components or Templates — including third-party claims against you — is limited to a refund of your license fee. Tailwind Labs Inc. may not be held liable for any consequential damages related to your use of the Components or Templates.
-
-This Agreement is governed by the laws of the Province of Ontario and the applicable laws of Canada. Legal proceedings related to this Agreement may only be brought in the courts of Ontario. You agree to service of process at the e-mail address on your original order.
-
-## Questions?
-
-Unsure which license you need, or unsure if your use case is covered by our licenses?
-
-Email us at [support@tailwindui.com](mailto:support@tailwindui.com) with your questions.
diff --git a/apps/docs/app/[survey-type]/global/add-image-or-video-question/page.mdx b/apps/docs/app/[survey-type]/global/add-image-or-video-question/page.mdx
deleted file mode 100644
index ca588519b0..0000000000
--- a/apps/docs/app/[survey-type]/global/add-image-or-video-question/page.mdx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import AddImageOrVideoToQuestionImage from "./images/add-image-or-video-to-question-image.webp";
-import AddImageOrVideoToQuestionVideo from "./images/add-image-or-video-to-question-video.webp";
-import AddImageOrVideoToQuestion from "./images/add-image-or-video-to-question.webp";
-
-# Add Image or Video to a Question
-
-Enhance your questions by adding images or videos. This makes instructions clearer and the survey more engaging.
-
-## How to Add Images
-
-Click the icon on the right side of the question to add an image or video:
-
-
-
-Upload an image by clicking the upload icon or dragging the file:
-
-
-
-## How to Add Videos
-
-Toggle to add a video via link:
-
-
-
-### Supported Video Platforms
-
-We support YouTube, Vimeo, and Loom URLs.
-
-
- **YouTube Privacy Mode**: This option reduces tracking by converting YouTube URLs to no-cookie URLs. It only works with YouTube.
-
diff --git a/apps/docs/app/[survey-type]/global/conditional-logic/page.mdx b/apps/docs/app/[survey-type]/global/conditional-logic/page.mdx
deleted file mode 100644
index d4952e1011..0000000000
--- a/apps/docs/app/[survey-type]/global/conditional-logic/page.mdx
+++ /dev/null
@@ -1,169 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import ActionCalculateOperators from "./images/action-calculate-operators.webp";
-import ActionCalculateValue from "./images/action-calculate-value.webp";
-import ActionCalculateVariables from "./images/action-calculate-variables.webp";
-import ActionCalculate from "./images/action-calculate.webp";
-import ActionJump from "./images/action-jump.webp";
-import ActionOptions from "./images/action-options.webp";
-import ActionRequire from "./images/action-require.webp";
-import AddLogic from "./images/add-logic.webp";
-import ConditionChaining from "./images/condition-chaining.webp";
-import ConditionOperators from "./images/condition-operators.webp";
-import ConditionOptions from "./images/condition-options.webp";
-import ConditionValue from "./images/condition-value.webp";
-import Conditions from "./images/conditions.webp";
-import Editor from "./images/editor.webp";
-import QuestionLogic from "./images/question-logic.webp";
-
-export const metadata = {
- title: "Conditional Logic",
- description:
- "Create complex survey logic with the Logic Editor. Use conditions, actions, and variables to create a personalized survey experience.",
-};
-
-# Conditional Logic
-
-Create complex survey logic with the Logic Editor. Use conditions, actions, and variables to create a personalized survey experience.
-
-
-
-## Terminology
-
-- **Condition**: A rule that determines when an action should be executed.
-- **Action**: A task that is executed when a condition is met.
-
-## **Creating Logic**
-
-1. **Add a Logic Block**: Click the `Add logic +` button to add a new logic block.
-
-
-
- You can add multiple logic blocks to a survey. Logic blocks are executed in the order they are added. You can rearrange the order of logic blocks.
-
-
-2. **Add Conditions**: Add conditions to the logic block. Conditions are rules that determine when an action should be executed.
-
-
-
-Conditons can be based on:
-
-- **Question**: The answer to a question.
-- **Variable**: A variable value.
-- **Hidden Field**: The value of a hidden field.
-
- 2.a **Condition Options**: Choose from a list of available conditions.
-
-
-
- 2.b **Condition Operators**: Choose an operator to compare the condition value.
-
-
-
- 2.c **Condition Value**: Enter a value to compare the condition against.
- Comparisons can be made against a fixed value or a dynamic value.
- Dynamic values can be based on a question, variable, or hidden field.
-
-
-
-
- - Conditions can be grouped. - Conditions can be combined using AND or OR operators. You can add multiple conditions to a logic block. Conditions are evaluated in the order they are added.
-
-
-
-
-3. **Add Actions**: Add actions to the logic block. Actions are tasks that are executed when a condition is met.
-
-You can add multiple actions to a logic block. Actions are executed in the order they are added.
-
-- 3.a **Action Options**: Choose from a list of available actions.
-
-
-
- Action is of the following types:
-
- - **Calculate**: Perform a calculation. These variables are then available for use in other questions.
-
- - Calculations can be performed on variables.
- - Calculations can be based on fixed values or dynamic values.
-
-
-
-
-
- - **Require Answer**: Make a question required. Only the optional questions can be marked as required while filling the survey.
-
- - **Jump to Question**: Skip to a specific question. The user will be redirected to the specified question based on the condition.
-
-
-4. **Save Logic**: Click the `Save` button to save the logic block.
-
-# Question Logic
-
-This logic is executed when the user answers the question. Logic can be as simple as showing a follow-up question based on the answer or as complex as calculating a score based on multiple answers.
-
-
diff --git a/apps/docs/app/[survey-type]/global/email-customization/page.mdx b/apps/docs/app/[survey-type]/global/email-customization/page.mdx
deleted file mode 100644
index 8622caa771..0000000000
--- a/apps/docs/app/[survey-type]/global/email-customization/page.mdx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import EmailCustomizationSettings from "./email-customization-card.webp";
-import EmailSample from "./email-sample.webp";
-import UpdatedLogo from "./updated-logo.webp";
-
-export const metadata = {
- title: "Email Customization",
- description: "Customize the email that is sent to your users!",
-};
-
-# Email Customization
-
-Email customization is a white-label feature that allows you to customize the email that is sent to your users. You can upload a logo of your company and use it in the email.
-
-
- This feature is a white-label feature. It is only available for users on paid plans or have an enterprise license.
-
-
-## How to Upload a Logo
-
-1. Go to the Organization Settings page.
-2. You will see a card called **Email Customization** under the **General** section.
-
-
-
-3. Upload a logo of your company.
-4. Click on the **Save** button.
-
-
-
-## Viewing the Logo in the Email
-
-You can click on the **Send test email** button to get a test email with the logo.
-
-
-
-Only the owner and managers of the organization can modify the logo.
-
-## Use Cases
-
-- **White-labeling**: You can use this feature to white-label your emails to your users.
-- **Branding**: You can use this feature to add your logo to your emails to increase brand recognition.
diff --git a/apps/docs/app/[survey-type]/global/hidden-fields/page.mdx b/apps/docs/app/[survey-type]/global/hidden-fields/page.mdx
deleted file mode 100644
index f2e3ba1f07..0000000000
--- a/apps/docs/app/[survey-type]/global/hidden-fields/page.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import FilledHiddenFields from "./filled-hidden-fields.webp";
-import HiddenFieldResponses from "./hidden-field-responses.webp";
-import HiddenFields from "./hidden-fields.webp";
-import InputHiddenFields from "./input-hidden-fields.webp";
-
-export const metadata = {
- title: "Hidden Fields",
- description: "Add hidden fields to your surveys to capture additional data without requiring user inputs!",
-};
-
-# Hidden Fields
-
-Hidden fields are a powerful feature in Formbricks that allows you to add data to a submission without asking the user to type it in. This feature is especially useful when you already have information about a user that you want to use in the analysis of the survey results (e.g. `payment plan` or `email`)
-
-## How to Add Hidden Fields
-
-### Enable Hidden Fields
-
-1. Edit the survey you want to add hidden fields to & switch to the Questions tab and scroll down to the bottom of the page. You will see a section called **Hidden Fields**. Make sure to enable it by toggling the switch.
-
-
-
-### Add Hidden Field IDs
-
-2. Now click on it to add a new hidden field ID. You can add as many hidden fields as you want.
-
-
-
-
-
-## Set Hidden Field in Responses
-
-### Link Surveys
-
-Single Hidden Field:
-
-
-
-
-```sh
-https://formbricks.com/clin3dxja02k8l80hpwmx4bjy?screen=landing_page&job=Founder
-```
-
-
-
-
-### App & Website Surveys
-
-For in-product surveys, you can set hidden fields in the response by adding them to the `formbricks.track` call:
-
-
-
-
-```sh
-formbricks.track("my event", {
- hiddenFields: {
- screen: "landing_page",
- job: "Founder"
- },
-});
-```
-
-
-
-
-## View Hidden Fields in Responses
-
-These hidden fields will now be visible in the responses tab just like other fields in the Summary as well as the Response Cards, and you can use them to filter and analyze your responses.
-
-
-
-## Use Cases
-
-- **Tracking Source**: You can add a hidden field to track the source of the survey. For a detailed guide on Source Tracking, check out the [Source Tracking](/link-surveys/source-tracking) guide.
-- **User Metadata**: You can add hidden fields to capture user metadata such as user ID, email, or any other user-specific information.
-- **Survey Metadata**: You can add hidden fields to capture other metadata, e.g. the screen from which the survey was filled, or any other app specific information.
diff --git a/apps/docs/app/[survey-type]/global/limit-submissions/page.mdx b/apps/docs/app/[survey-type]/global/limit-submissions/page.mdx
deleted file mode 100644
index f59b3cc858..0000000000
--- a/apps/docs/app/[survey-type]/global/limit-submissions/page.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import StepOne from "./images/step-one.webp";
-import StepThree from "./images/step-three.webp";
-import StepTwo from "./images/step-two.webp";
-
-export const metadata = {
- title: "Set a Maximum Number of Submissions for Surveys",
- description: "Limit the number of responses your survey can receive.",
-};
-
-# Limit by Number of Submissions
-
-Automatically close your survey after a specific number of responses with Formbricks. This feature is perfect for limited offers, exclusive surveys, or when you need a precise sample size for statistical significance.
-
-- **How to**: Open the Survey Editor, switch to the Settings tab. Scroll down to Response Options, Toggle the “Close survey on response limit”.
- {" "}
-
-- **Details**: Set a specific number of responses after which the survey automatically closes.
-- **Use Case**: Perfect for limited offers, exclusive surveys, or when you need a precise sample size for statistical significance.
-
----
diff --git a/apps/docs/app/[survey-type]/global/metadata/page.mdx b/apps/docs/app/[survey-type]/global/metadata/page.mdx
deleted file mode 100644
index e3249ff5df..0000000000
--- a/apps/docs/app/[survey-type]/global/metadata/page.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import { TellaVideo } from "@/components/tella-video";
-
-import Filters from "./filters.webp";
-import MetadataCard from "./metadata-card.webp";
-
-export const metadata = {
- title: "User Metadata | Formbricks",
- description:
- "Understand the metadata of your users when they fill a Formbricks survey (all website, app & link). We currently capture the user's source information, URL, browser, and device details, along with the country & the action that triggered.",
-};
-
-# User Metadata
-
-Formbricks captures metadata of your users for you when they fill a survey.
-
-This metadata is useful for understanding the context in which the user filled the survey. For example, if you are running a marketing campaign, you can understand which source is driving the most responses. Or if you are running a survey on a specific page, you can understand the user's behavior on that page.
-
-
-
-## Metadata Captured
-
-- **Source**: The source from where the user filled the survey. This could be an App, Link, or a Webpage.
-- **URL**: The URL of the page where the user filled the survey.
-- **Browser**: The browser used by the user to fill the survey.
-- **OS**: The operating system of the device used by the user to fill the survey.
-- **Device**: The device used by the user to fill the survey.
-- **Country**: The country of the user.
-- **Action**: The action that triggered the survey. This is only available for App surveys.
-
-## View Response Metadata
-
-1. Go to the Responses tab of your survey.
-2. Hover over the profile icon of the user on the response card & you should see a tooltip opening up with the metadata details.
-
-
-
-## Filter Responses by Metadata
-
-1. Go to the Responses tab of your survey.
-2. Click on the Filter button.
-3. Scroll down & Select the metadata field you want to filter by.
-4. Select the condition & the value you want to filter by.
-
-
-
-5. Now you should see the responses filtered based on the metadata you selected. If you want to see a walkthrough, view the video above to see how you can view & filter responses by metadata.
-
-## Export Metadata
-
-You can export the metadata of your responses along with the response data. When you export responses, you will see the metadata fields in the exported CSV file.
-
----
-
-**Can’t figure it out?**: **[Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/app/[survey-type]/global/multi-language-surveys/page.mdx b/apps/docs/app/[survey-type]/global/multi-language-surveys/page.mdx
deleted file mode 100644
index 3e572dcd7f..0000000000
--- a/apps/docs/app/[survey-type]/global/multi-language-surveys/page.mdx
+++ /dev/null
@@ -1,166 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import { ResponsiveVideo } from "@/components/responsive-video";
-import AddLanguageInSurvey from "./add-language-in-survey.webp";
-import AddLanguages from "./add-languages.webp";
-import EditMultiLang from "./edit-multi-lang.webp";
-import EnableMultiLang from "./enable-multi-lang.webp";
-import SeeSurveyInLanguage from "./see-survey-in-language.webp";
-import SurveyLanguagesFromHome from "./survey-languages-from-home.webp";
-import SurveyLanguageSettings from "./survey-languague-settings.webp";
-import SurveySharing from "./survey-sharing.webp";
-import SurveysHome from "./surveys-home.webp";
-import TranslateAsPerLanguage from "./translate-as-per-language.webp";
-
-export const metadata = {
- title: "Multi-language Surveys | Formbricks",
- description:
- "Create multi-language link & app surveys with Formbricks. Get feedback from your users in their preferred language without writing a single line of code.",
-};
-
-# Multi-language Surveys
-
-Multi-Language Surveys allow you to create surveys that support multiple languages using translations. This makes it easier to reach a diverse audience without creating separate surveys for each language. This feature simplifies the creation, delivery, and analysis of surveys for a multilingual audience.
-
-How to deliver a specific language depends on the survey type (app or link survey):
-
-- App & Website survey: Set a `language` attribute for the user. [See the guide below for App Surveys](#app-surveys-configuration)
-- Link survey: Add a `lang` parameter in the survey URL. [See the guide below for Link Surveys](#link-surveys-configuration)
-
-
-
----
-
-## Creating a Multi-language Survey
-
-1. Open the **Survey Languages** page in the Formbricks settings via the top-right menu:
-
-
-
-2. Click on the **Edit languages** button, to add a new language to your survey
-
-
-
-3. Select the preferred language from the dropdown and assign an identifier Alias. Click the **Add language** button to add the language to your project.
-
-
-You can come back to this page anytime to add more languages or remove existing ones.
-
-4. Now, return to the dashboard to create a new survey or edit an existing one.
-
-
-
-5. In the survey editor, scroll down to the **Multiple Languages** section at the bottom and enable the toggle next to it.
-
-
-
-6. Now choose a **Default Language** for your survey. This is the language that will be shown to users who have not selected a preferred language.
-
-Changing the default language will reset all the translations you have made for the survey.
-
-7. Now, add the languages from the dropdown that you want to support in your survey.
-
-
-
-8. You can now see the survey in the selected language by clicking on the language dropdown in any of the questions.
-
-
-
-9. You can now translate all survey content, including questions, options, and button placeholders, into the selected language.
-
-
-
-10. Once you are done, click on the **Publish** button to save the survey.
-
-## App Surveys Configuration
-
-1. When you initialise the Formbricks SDK for your user, you can pass a `language` attribute with the language code. This can be either the ISO identifier or the Alias you set when creating the language. The `language` attribute makes sure that this user only sees surveys with a translation in this specific language available.
-
-
-
-
-```js
-Formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "",
- attributes: {
- language: "de", // ISO identifier or Alias set when creating language
- },
-});
-```
-
-
-
-
-
- If a user has a language assigned, a survey has multi-language activate and it is missing a translation in the language of the user, the survey will not be displayed.
-
-
-2. That's it! Now, users with the language attribute set will see the survey in their preferred language. You can start collecting responses in multiple languages and filter them by language on the summary page.
-
----
-
-## Link Surveys Configuration
-
-For link surveys, the translation delivery is dependent on the `land` URL parameter.
-
-After publishing the survey, just copy the survey link and append the `lang` query parameter with the language alias you have set.
-
-For example, if you have set the alias for French as `fr`, you can share the survey link as
-
-`https://your-survey-url.com?lang=fr`
-
-Here are two examples:
-
-- English: https://app.Formbricks.com/s/clptfos2i1pj516pvhxqyu3bn?lang=en
-- German: https://app.Formbricks.com/s/clptfos2i1pj516pvhxqyu3bn?lang=de
-
-Without the `lang` parameter, Formbricks will show the survey in the default language you have set.
-
-You can now start collecting responses in multiple languages!
-
-**Can’t figure it out?**: **[Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/app/[survey-type]/global/overwrite-styling/page.mdx b/apps/docs/app/[survey-type]/global/overwrite-styling/page.mdx
deleted file mode 100644
index 284c01d1ea..0000000000
--- a/apps/docs/app/[survey-type]/global/overwrite-styling/page.mdx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import StepEleven from "./images/step-eleven.webp";
-import StepNine from "./images/step-nine.webp";
-import StepTen from "./images/step-ten.webp";
-
-import Doggo from "./images/doggo.webp";
-import HipsterLiving from "./images/hipster-living.webp";
-import Mario from "./images/mario.webp";
-import WindowsXp from "./images/windows-xp.webp";
-
-export const metadata = {
- title: "Overwrite Styling Theme on Individual Surveys",
- description:
- "Overwrite the global styling theme for individual surveys to create unique styles for each survey.",
-};
-
-# Overwrite Styling Theme on Individual Surveys
-
-Overwrite the global styling theme for individual surveys to create unique styles for each survey.
-
-
- To set a styling theme for all surveys, please see the [Styling Theme](/core-features/global/styling-theme) manual.
-
-
-### Overwrite Styling Theme
-
-1. In the Survey Editor of the survey you want to style, navigate to the **Styling** tab:
-
-
-
-2. Activate the **Add Custom Styles** toggle to override the default project styling:
-
-
-
-3. Customize your survey's style as needed:
-
-
-
-Voila! just hit the save button to apply your changes. Your survey is now ready to impress with its unique look!
-
-## Overwrite CSS Styles for App & Website Surveys
-
-You can overwrite the default CSS styles for the app & website surveys by adding the following CSS to your global CSS file (eg. `globals.css`):
-
-Make sure that you do not change the CSS variable names as they are used by Formbricks to identify the CSS variables. You can change the values to your liking. We have filled in some sample values for you to change according to your desired appearance.
-
-
-
-
-```css
-/* Formbricks CSS */
---fb-brand-color: red;
---fb-brand-text-color: white;
---fb-border-color: green;
---fb-border-color-highlight: rgb(13, 13, 12);
---fb-focus-color: red;
---fb-heading-color: yellow;
---fb-subheading-color: green;
---fb-info-text-color: orange;
---fb-signature-text-color: blue;
---fb-survey-background-color: black;
---fb-accent-background-color: rgb(13, 13, 12);
---fb-accent-background-color-selected: red;
---fb-placeholder-color: white;
---fb-shadow-color: var(--fb-brand-color);
---fb-rating-fill: rgb(13, 13, 12);
---fb-rating-hover: green;
---fb-back-btn-border: blue;
---fb-submit-btn-border: transparent;
---fb-rating-selected: black;
-```
-
-
-
-
-We have an example of this in our [Demo project](https://github.com/formbricks/formbricks/blob/main/apps/demo/styles/globals.css) here.
-
-## Funky Survey Examples
-
-- **Super Mario:** I guess he won't let himself be limited by radio buttons and do all three things
-
-
-
-- **Hipster Living**: Does your monstera get enough water?
-
-
-
-- **Windows XP**: Hach, nostalgia. Made us wanna play Mafia.
-
-
-
-- **Whosagooooodbooooy**: Things you've likely said to your dog.
-
-
-
----
diff --git a/apps/docs/app/[survey-type]/global/question-type/address/page.mdx b/apps/docs/app/[survey-type]/global/question-type/address/page.mdx
deleted file mode 100644
index 4561280954..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/address/page.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Address from "./images/address.webp";
-
-#### Question Type
-
-# Address
-
-The Address question type allows respondents to input their address details, including multiple fields such as address lines, city, state, and country. You can configure the question by adding a title, an optional description, and toggling specific fields to be required.
-
-
-
-## Elements
-
-
-
-### Question
-
-Provide a question to describe the address information you are requesting.
-
-### Description
-
-Optionally, add a description to guide the user.
-
-### Toggle Fields
-
-You can choose to show and require any or all of the following fields in the form:
-
-- Address Line 1
-- Address Line 2
-- City
-- State
-- Zip Code
-- Country
diff --git a/apps/docs/app/[survey-type]/global/question-type/consent/page.mdx b/apps/docs/app/[survey-type]/global/question-type/consent/page.mdx
deleted file mode 100644
index b94bb9ae9b..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/consent/page.mdx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Consent from "./images/consent.webp";
-
-#### Question Type
-
-# Consent
-
-The Consent card is used to obtain user agreement regarding a product, service, or policy. It features a bold statement or question as the title, followed by a brief description. At the end of the card, users can confirm their consent by checking a checkbox to indicate their agreement.
-
-
-
-## Elements
-
-
-
-### Title
-
-A bold statement or question asking for user consent, displayed prominently at the top of the card.
-
-### Description
-
-A short explanation or additional context for the consent request, displayed below the title. The text can be formatted, and hyperlinks are allowed within the description.
-
-### Checkbox
-
-At the bottom of the card, users can confirm their agreement by checking the box, indicating their consent to the question or statement above. The label for the checkbox is also editable.
diff --git a/apps/docs/app/[survey-type]/global/question-type/contact/page.mdx b/apps/docs/app/[survey-type]/global/question-type/contact/page.mdx
deleted file mode 100644
index 59cc2273c4..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/contact/page.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Contact from "./images/contact.webp";
-
-#### Question Type
-
-# Contact Info
-
-The Contact Info question type allows respondents to provide their basic contact information such as name, email, and phone number. You can customize the form with a title, an optional description, and control which fields to display and require.
-
-
-
-## Elements
-
-
-
-### Title
-
-Specify a title to describe the information you're collecting.
-
-### Description
-
-Optionally, add a description to give additional context.
-
-### Toggle Fields
-
-You can choose to show and require any or all of the following fields:
-
-- First Name
-- Last Name
-- Email
-- Phone Number
-- Company
diff --git a/apps/docs/app/[survey-type]/global/question-type/date/page.mdx b/apps/docs/app/[survey-type]/global/question-type/date/page.mdx
deleted file mode 100644
index 03bf5c74d5..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/date/page.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Date from "./images/date.webp";
-
-#### Question Type
-
-# Date
-
-The Date question type allows respondents to provide a date, such as when they are available or when an event is scheduled. It features a title to guide the respondent on what date to enter, and an optional description to provide further details or context.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what date you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Date Format
-
-Choose from multiple date formats for the input:
-
-- MM-DD-YYYY
-- DD-MM-YYYY
-- YYYY-MM-DD
diff --git a/apps/docs/app/[survey-type]/global/question-type/file-upload/page.mdx b/apps/docs/app/[survey-type]/global/question-type/file-upload/page.mdx
deleted file mode 100644
index 7c804b2e38..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/file-upload/page.mdx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import FileUpload from "./images/file-upload.webp";
-
-#### Questions Type
-
-# File Upload
-
-The File Upload question type allows respondents to upload files related to your survey, such as production documents or requirement specifications. It features a title to guide the user on what to upload and an optional description to provide additional context.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title that informs the respondent about the purpose of the file upload.
-
-### Description
-
-Provide an optional description to give respondents more details or instructions about what files they need to upload.
-
-### Allow Multiple Files
-
-Enable this option to allow respondents to upload multiple files at once.
-
-### Max File Size
-
-You can set a maximum file size limit, and an input box will appear to specify the size in MB.
-
-### File Type Restrictions
-
-You can restrict the allowed file types. An input box will appear where you can specify the file formats, such as `.pdf`, `.jpg`, `.docx`, etc.
diff --git a/apps/docs/app/[survey-type]/global/question-type/matrix/page.mdx b/apps/docs/app/[survey-type]/global/question-type/matrix/page.mdx
deleted file mode 100644
index 5b6ba5c937..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/matrix/page.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Matrix from "./images/matrix.webp";
-
-#### Question Type
-
-# Matrix
-
-Matrix questions allow respondents to select a value for each option presented in rows. The values range from 0 to a user-defined maximum (e.g., 0 to X). The selection is made using radio buttons, and users can choose any value within the defined range, including 0.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Rows
-
-Define the options shown on the left side of the matrix. These represent the items for which users will select a value.
-
-### Columns
-
-Represent the range of values from 0 to X (right side of the screen). Users can choose any value, including 0, using radio buttons.
-
-### Select ordering
-
-- Keep current order: This will keep the order of options the same for all respondents.
-- Randomize all: This will randomize the options for each respondent.
diff --git a/apps/docs/app/[survey-type]/global/question-type/multi-select/page.mdx b/apps/docs/app/[survey-type]/global/question-type/multi-select/page.mdx
deleted file mode 100644
index 6e1e73e4d7..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/multi-select/page.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import MultiSelect from "./images/multi-select.webp";
-
-export const metadata = {
- title: "Multi Select",
- description: "Multi select questions allow respondents to select several answers from a list",
-};
-
-#### Question Type
-
-# Multi Select
-
-Multi select questions allow respondents to select several answers from a list. Displays a title and a list of checkboxes for the respondent to choose from.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Options
-
-Define the options shown in the list. These represent the items for which users will select.
-
-Other than the fact that respondents can select multiple options, multi select questions are similar to [single select](/global/question-types/single-select) questions.
diff --git a/apps/docs/app/[survey-type]/global/question-type/net-promoter-score/page.mdx b/apps/docs/app/[survey-type]/global/question-type/net-promoter-score/page.mdx
deleted file mode 100644
index 21731ff322..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/net-promoter-score/page.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import NetPromoterScore from "./images/net-promoter-score.webp";
-
-#### Question Type
-
-# Net Promoter Score
-
-Net Promoter Score questions allow respondents to rate a question on a scale from 0 to 10. Displays a title and a list of radio buttons for the respondent to choose from.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Labels
-
-Add labels for the lower and upper bounds of the score. The default is "Not at all likely" and "Extremely likely".
-
-### Add color coding
-
-Add color coding to the score. This will show a color bar above the score.
diff --git a/apps/docs/app/[survey-type]/global/question-type/picture-selection/page.mdx b/apps/docs/app/[survey-type]/global/question-type/picture-selection/page.mdx
deleted file mode 100644
index a1c64a46b9..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/picture-selection/page.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import PictureSelection from "./images/picture-selection.webp";
-
-export const metadata = {
- title: "Picture Selection",
- description: "Picture selection questions allow respondents to select one or more images from a list",
-};
-
-#### Question Type
-
-# Picture Selection
-
-Picture selection questions allow respondents to select one or more images from a list. Displays a title and a list of images for the respondent to choose from.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Images
-
-Images can be uploaded via click or drag and drop. At least two images are required.
-
-### Allow Multi Select
-
-This option allows user to select more than one image.
diff --git a/apps/docs/app/[survey-type]/global/question-type/ranking/page.mdx b/apps/docs/app/[survey-type]/global/question-type/ranking/page.mdx
deleted file mode 100644
index a5d74893f5..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/ranking/page.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import Ranking from "./images/ranking.webp";
-
-#### Question Type
-
-# Ranking
-
-Ranking questions let respondents select options in order from 1 to the total number of options. As they make their choices, the list is automatically rearranged in numerical order.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Options
-
-You need to add at least two options so that users can rearrange them in numerical order based on their selection.
-
-### Select ordering
-
-- Keep current order: This will keep the order of options the same for all respondents.
-- Randomize all: This will randomize the options for each respondent.
diff --git a/apps/docs/app/[survey-type]/global/question-type/schedule/page.mdx b/apps/docs/app/[survey-type]/global/question-type/schedule/page.mdx
deleted file mode 100644
index d5abd856e2..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/schedule/page.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import ScheduleCall from "./images/schedule-call.webp";
-
-#### Question Type
-
-# Schedule A Meeting
-
-The Schedule A Meeting question type allows respondents to book a meeting by selecting a date and time. It includes a title to guide the respondent, along with an optional description to provide additional context for the meeting setup.
-
-
-
-## Elements
-
-
-
-### Title
-
-Add a clear title to inform the respondent what information you are asking for.
-
-### Description
-
-Provide an optional description with further instructions.
-
-### Cal.com Username/Event
-
-Add an input box where users can enter their [`cal.com`](https://cal.com/) username and event URL (e.g., `username/event`).
-
-### Custom Hostname (Optional)
-
-Enable an input box for adding a custom hostname, which is necessary if using a self-hosted instance of [`cal.com`](https://cal.com/docs/self-hosting/installation).
diff --git a/apps/docs/app/[survey-type]/global/question-type/statement-cta/page.mdx b/apps/docs/app/[survey-type]/global/question-type/statement-cta/page.mdx
deleted file mode 100644
index f5da195606..0000000000
--- a/apps/docs/app/[survey-type]/global/question-type/statement-cta/page.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import StatementCTA from "./images/statement-cta.webp";
-
-#### Question Type
-
-# Statement (Call to Action)
-
-The Statement question type allows you to display descriptive information in your survey, such as a message or instruction. It consists of a title (can be Question or Short Note) and a description, which can be a brief note(realted to CTA) or guideline. Instead of collecting input, this type includes a call to action button for further steps, such as booking an interview call.
-
-
-
-## Elements
-
-
-
-### Title
-
-This is the main question or heading that appears at the top of the card.
-
-### Description
-
-A brief note or instruction displayed under the title, typically used to provide context or instructions for the next step.
-
-### Button Options
-
-- Button to continue in survey: This will continue respondent with the survey, form or fillups.
-- Button to link to external URL: Selecting this option will open-up URL input box below when us set URL the button will redirect to your setted link.
diff --git a/apps/docs/app/[survey-type]/global/recall/page.mdx b/apps/docs/app/[survey-type]/global/recall/page.mdx
deleted file mode 100644
index d141a88fb9..0000000000
--- a/apps/docs/app/[survey-type]/global/recall/page.mdx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import SurveyEmbed from "@/components/survey-embed";
-import StepOne from "./images/step-one.webp";
-import StepThree from "./images/step-three.webp";
-import StepTwo from "./images/step-two.webp";
-
-export const metadata = {
- title: "Recall Data in Formbricks Surveys",
- description:
- "Personalize your surveys by dynamically inserting data from URL parameters or previous answers into questions and descriptions. The Recall Data feature helps create engaging, adaptive survey experiences tailored to each respondent.",
-};
-
-# Recall Data
-
-Personalize your surveys by dynamically inserting data from URL parameters or previous answers into questions and descriptions. The Recall Data feature helps create engaging, adaptive survey experiences tailored to each respondent.
-
-## Recall Sources
-
-You can recall data from the following sources:
-
-- From a previous question
-- From a [Hidden Field](/docs/link-surveys/global/hidden-fields)
-- From a [Variable](/docs/link-surveys/global/variables)
-
-## Recalling from a previous question
-
-
- The recall functionality is disabled on the first question of the survey since there’s no preceding question to recall data from.
-
-
-### **Pre-requisite**
-
-Ensure the answer you wish to recall precedes the question in which it will be recalled. Here’s an example of setting up the first question:
-
-
-
-### **Step 1: Recall Data**
-
-Type **`@`** in the question or description field where you want to insert a recall. This triggers a dropdown menu listing all preceding questions. Select the question you want to recall data from.
-
-
-
-### **Step 2: Set a Fallback**
-
-To ensure the survey remains coherent when a response is missing (or the question is optional), you should set a fallback option.
-
-
-
-## Recalling from the URL
-
-1. Create a hidden field, [here is how →](/docs/global/hidden-fields)
-2. Use the `@` symbol in a question or description to recall the value of the hidden field
-3. Set a fallback in case the hidden field is not being filled by a URL parameter
-4. Use [Data Prefilling](/docs/link-surveys/data-prefilling) to set the hidden field value when the survey is accessed
-
-## Recalling from a Variable
-
-1. Create a variable, [here is how →](/docs/link-surveys/global/variables)
-2. Use the `@` symbol in a question or description to recall the value of the variable
-3. Set a fallback in case the variable is not being filled by a URL parameter
-
-## Live Demo
-
-
-
-## **Conclusion**
-
-Recall Data in Formbricks surveys allows for a conversational and customized survey experience that enhances engagement and improves the quality of feedback. By integrating previous responses into new questions, you create a more interactive and relevant environment for respondents.
diff --git a/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-one.webp b/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-one.webp
deleted file mode 100644
index 1ceaa74231..0000000000
Binary files a/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-one.webp and /dev/null differ
diff --git a/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-three.webp b/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-three.webp
deleted file mode 100644
index 33f01ed624..0000000000
Binary files a/apps/docs/app/[survey-type]/global/schedule-start-end-dates/images/step-three.webp and /dev/null differ
diff --git a/apps/docs/app/[survey-type]/global/shareable-dashboards/page.mdx b/apps/docs/app/[survey-type]/global/shareable-dashboards/page.mdx
deleted file mode 100644
index 097caad745..0000000000
--- a/apps/docs/app/[survey-type]/global/shareable-dashboards/page.mdx
+++ /dev/null
@@ -1,74 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import StepOne from "./images/1-publish-to-web.webp";
-import StepTwo from "./images/2-warning-publish.webp";
-import StepThree from "./images/3-share-link.webp";
-
-export const metadata = {
- title: "Shareable Dashboards",
- description: "Create shareable links to dashboards of specific surveys.",
-};
-
-# Shareable Dashboards
-
-Formbricks allows you to create public, shareable versions of your survey results dashboards. This feature enables you to easily share survey results with stakeholders, team members, or the public without granting access to your Formbricks account.
-
-## How To Publish Survey Results
-
-1. **Go to survey summary**: Choose the survey for which you want to create a shareable dashboard and go to its summary page.
-
-2. **Share results**: Click the "Share results" and then "Publish to web".
-
-
-
-3. **Confirm**: Click "Publish to public web" (it's public).
-
-
-
-4. **Share link**: Formbricks has generated a unique URL for your public dashboard. Share it around.
-
-
-
-Whoever has access to the link can access the survey results.
-
-## How To Unpublish Survey Results
-
-Unpublish is very simple: Go to "Share results" -> "Unpublish from web" -> "Unpublish".
-
-
-
-## Key Features
-
-- **Read-only access**: Viewers can see survey results but cannot modify data or settings.
-- **Real-time updates**: The shared dashboard reflects current survey data in real-time.
-- **Filters included**: Visitors can access all filters to dissect the data.
-- **Revocable access**: You can disable the shared link at any time to restrict access.
-
-## Use Cases
-
-- Share results with clients or stakeholders
-- Publish survey findings to your website or blog
-- Collaborate with team members without sharing account credentials
-- Create transparency by making certain survey results public
-
-Shareable dashboards provide a simple yet powerful way to disseminate survey insights while maintaining control over your Formbricks account and data.
diff --git a/apps/docs/app/api-docs/components/api-docs.tsx b/apps/docs/app/api-docs/components/api-docs.tsx
deleted file mode 100644
index 29a4bc3bb0..0000000000
--- a/apps/docs/app/api-docs/components/api-docs.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-"use client";
-
-import { useTheme } from "next-themes";
-import { useState } from "react";
-import { RedocStandalone } from "redoc";
-import { LoadingSpinner } from "@/components/icons/loading-spinner";
-import { Button } from "@/components/button";
-import "./style.css";
-
-export function ApiDocs() {
- const { resolvedTheme } = useTheme();
-
- const redocTheme = {
- hideDownloadButton: true,
- hideLoading: true,
- nativeScrollbars: true,
- theme: {
- sidebar: {
- backgroundColor: "transparent",
- textColor: resolvedTheme === "dark" ? "rgb(203, 213, 225)" : "rgb(51, 51, 51)",
- activeTextColor: "#2dd4bf",
- },
- rightPanel: {
- backgroundColor: "transparent",
- },
- colors: {
- primary: { main: "#2dd4bf" },
- text: {
- primary: resolvedTheme === "dark" ? "#ffffff" : "rgb(51, 51, 51)",
- },
- responses: {
- success: { color: "#22c55e" },
- error: { color: "#ef4444" },
- info: { color: "#3b82f6" },
- },
- },
- typography: {
- fontSize: "16px",
- lineHeight: "2rem",
- fontFamily: "Jost, system-ui, -apple-system, sans-serif",
- headings: {
- fontFamily: "Jost, system-ui, -apple-system, sans-serif",
- fontWeight: "600",
- },
- code: {
- fontSize: "16px",
- fontFamily: "ui-monospace, monospace",
- },
- },
- codeBlock: {
- backgroundColor: "rgb(24, 35, 58)",
- },
- spacing: { unit: 5 },
- },
- };
-
- const [loading, setLoading] = useState(true);
-
- return (
-
-
- Back to docs
-
- { setLoading(false); }} options={redocTheme} />
- {loading ? : null}
-
- );
-}
diff --git a/apps/docs/app/api-docs/components/style.css b/apps/docs/app/api-docs/components/style.css
deleted file mode 100644
index c5463636c3..0000000000
--- a/apps/docs/app/api-docs/components/style.css
+++ /dev/null
@@ -1,86 +0,0 @@
-:root[data-theme="light"] {
- --text-color: rgb(51, 65, 85);
-}
-
-:root[data-theme="dark"] {
- --text-color: rgb(203, 213, 225);
-}
-
-h5,
-.sc-dhCplO,
-.sc-dpBQxM {
- color: var(--text-color) !important;
-}
-
-.tab-success,
-.react-tabs__tab,
-.tab-error {
- background-color: transparent !important;
- border: 1px solid var(--text-color) !important;
- margin: 10px 5px !important;
-}
-
-.sc-dwGkES,
-.sc-ePpfBx {
- background-color: rgb(24, 24, 27) !important;
- border: 1px solid var(--text-color) !important;
-}
-.sc-ePpfBx,
-.corVrN {
- background-color: rgb(24, 24, 27) !important;
- border: none !important;
-}
-.cqdCbT {
- display: none !important;
-}
-.kiMaJz, .iZNUDY {
- align-items: center !important;
-}
-
-.react-tabs__tab-panel > div {
- padding: 0 !important;
- border-radius: 8px !important;
- overflow: hidden !important;
-}
-.sc-Rjrgp {
- background-color: rgb(15, 23, 42) !important;
- display: flex !important;
- justify-content: center !important;
- flex-direction: column !important;
- padding: 8px 16px !important;
-}
-.cugBNu {
- position: static !important;
-}
-.daIHdK {
- padding: 0 !important;
-}
-.kqHNPM {
- margin-top: 0px !important;
-}
-.sc-iwXfZk,
-.redoc-json {
- padding: 1rem !important;
- background-color: rgb(24, 35, 58) !important;
-}
-.sc-uYFMi {
- background-color: rgb(24, 35, 58) !important;
- padding: 0.5rem 0 !important;
- color: #2dd4bf !important;
- font-weight: 600 !important;
-}
-.token {
- color: #2dd4bf !important;
-}
-
-.property {
- color: rgb(203, 213, 225) !important;
-}
-.sc-iPHsxv {
- background-color: rgb(15, 23, 42) !important;
- border-radius: 8px !important;
-}
-
-.sc-hSyjfr {
- background-color: rgb(15, 23, 42) !important;
-}
diff --git a/apps/docs/app/api-docs/page.tsx b/apps/docs/app/api-docs/page.tsx
deleted file mode 100644
index 8ae8c9d144..0000000000
--- a/apps/docs/app/api-docs/page.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ApiDocs } from "./components/api-docs";
-
-export default function ApiDocsPage() {
- return ;
-}
diff --git a/apps/docs/app/app-surveys/advanced-targeting/germans-gpt.webp b/apps/docs/app/app-surveys/advanced-targeting/germans-gpt.webp
deleted file mode 100644
index a36ec28252..0000000000
Binary files a/apps/docs/app/app-surveys/advanced-targeting/germans-gpt.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/advanced-targeting/hni.webp b/apps/docs/app/app-surveys/advanced-targeting/hni.webp
deleted file mode 100644
index ad56505d05..0000000000
Binary files a/apps/docs/app/app-surveys/advanced-targeting/hni.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/advanced-targeting/page.mdx b/apps/docs/app/app-surveys/advanced-targeting/page.mdx
deleted file mode 100644
index e7a62f609d..0000000000
--- a/apps/docs/app/app-surveys/advanced-targeting/page.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
-export const metadata = {
- title: "Advanced Targeting for App Surveys | Formbricks",
- description:
- "Advanced Targeting allows you to show surveys to just the right group of people. You can target surveys based on user attributes, metadata, and other segments. This helps you get more relevant feedback and make data-driven decisions.",
-};
-
-# Advanced Targeting
-
-Advanced Targeting allows you to show surveys to the right group of people. You can target surveys based on user attributes, device type, and more instead of spraying and praying. This helps you get more relevant feedback and make data-driven decisions. All of this without writing a single line of code.
-
-## How to setup Advanced Targeting
-
-Advanced Targeting is only available on the Pro plan!
-
-1. On the Formbricks dashboard, click on **People** tab from the top navigation bar.
-
-2. Switch to the **Segments** tab & click on **Create Segment**.
-
-3. Give your segment a title & a description to help you remember what this segment is about.
-
-4. Now click on the **Add Filter** button to add a filter. You can filter based on user attributes, other segments, devices, and more.
-
-5. To group a set of filters together, click on the Three Dots icon on the right side of the filter and click on **Create Group**.
-
-6. Try playing around with different filters & conditions that we have provided to see how the segment size changes.
-
-7. Once you are happy with the segment, click on **Save Segment**.
-
-8. Now, when you create a survey, you can select this segment to target your survey to.
diff --git a/apps/docs/app/app-surveys/advanced-targeting/power-users.webp b/apps/docs/app/app-surveys/advanced-targeting/power-users.webp
deleted file mode 100644
index 4c1bb564a1..0000000000
Binary files a/apps/docs/app/app-surveys/advanced-targeting/power-users.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/advanced-targeting/ride-hailing.webp b/apps/docs/app/app-surveys/advanced-targeting/ride-hailing.webp
deleted file mode 100644
index 694cd90790..0000000000
Binary files a/apps/docs/app/app-surveys/advanced-targeting/ride-hailing.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/advanced-targeting/upsell-miro.webp b/apps/docs/app/app-surveys/advanced-targeting/upsell-miro.webp
deleted file mode 100644
index 8da20d2c9e..0000000000
Binary files a/apps/docs/app/app-surveys/advanced-targeting/upsell-miro.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/framework-guides/components/libraries.tsx b/apps/docs/app/app-surveys/framework-guides/components/libraries.tsx
deleted file mode 100644
index f3c0597516..0000000000
--- a/apps/docs/app/app-surveys/framework-guides/components/libraries.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import Image from "next/image";
-import { Button } from "@/components/button";
-import logoHtml from "@/images/frameworks/html5.svg";
-import logoNextjs from "@/images/frameworks/nextjs.svg";
-import logoReactJs from "@/images/frameworks/reactjs.svg";
-import logoVueJs from "@/images/frameworks/vuejs.svg";
-
-const libraries = [
- {
- href: "#html",
- name: "HTML",
- description: "All you need to do is add 3 lines of code to your HTML script and thats it, you're done!",
- logo: logoHtml as string,
- },
- {
- href: "#react-js",
- name: "React.js",
- description: "Load the our Js library with your environment ID and you're ready to go!",
- logo: logoReactJs as string,
- },
- {
- href: "#next-js",
- name: "Next.js",
- description:
- "Natively add us to your NextJs project with support for both App as well as Pages project structure!",
- logo: logoNextjs as string,
- },
- {
- href: "#vue-js",
- name: "Vue.js",
- description: "Simply add us to your router change and sit back!",
- logo: logoVueJs as string,
- },
- {
- href: "#react-native",
- name: "React Native",
- description: "Easily integrate our SDK with your React Native app for seamless survey support!",
- logo: logoReactJs as string,
- },
-];
-
-export function Libraries() {
- return (
-
- );
-}
diff --git a/apps/docs/app/app-surveys/framework-guides/images/env-id.webp b/apps/docs/app/app-surveys/framework-guides/images/env-id.webp
deleted file mode 100644
index 1c148f2e64..0000000000
Binary files a/apps/docs/app/app-surveys/framework-guides/images/env-id.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/framework-guides/images/react-in-app-survey-app-popup-form.webp b/apps/docs/app/app-surveys/framework-guides/images/react-in-app-survey-app-popup-form.webp
deleted file mode 100644
index ae74a5d73b..0000000000
Binary files a/apps/docs/app/app-surveys/framework-guides/images/react-in-app-survey-app-popup-form.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/framework-guides/images/widget-connected.webp b/apps/docs/app/app-surveys/framework-guides/images/widget-connected.webp
deleted file mode 100644
index 90b82de9f4..0000000000
Binary files a/apps/docs/app/app-surveys/framework-guides/images/widget-connected.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/framework-guides/images/widget-not-connected.webp b/apps/docs/app/app-surveys/framework-guides/images/widget-not-connected.webp
deleted file mode 100644
index 2cd15d007c..0000000000
Binary files a/apps/docs/app/app-surveys/framework-guides/images/widget-not-connected.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/framework-guides/page.mdx b/apps/docs/app/app-surveys/framework-guides/page.mdx
deleted file mode 100644
index deca5bbcf8..0000000000
--- a/apps/docs/app/app-surveys/framework-guides/page.mdx
+++ /dev/null
@@ -1,453 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import { Libraries } from "./components/libraries";
-
-import ReactApp from "./images/react-in-app-survey-app-popup-form.webp";
-import WidgetConnected from "./images/widget-connected.webp";
-import WidgetNotConnected from "./images/widget-not-connected.webp";
-
-export const metadata = {
- title: "Integrate Formbricks: Comprehensive Framework Guide & Integration Tutorial",
- description:
- "Master the integration of Formbricks into your application with our detailed guides. From HTML to ReactJS, NextJS, and VueJS, get step-by-step instructions and ensure seamless setup.",
-};
-
-# Framework Guides
-
-One can integrate Formbricks App Survey SDK into their app using multiple options! Checkout the options below that we provide! If you are looking
-for something else, please [open a new Github Discussion](https://github.com/formbricks/formbricks/discussions) and we would be glad to help.
-
-
-
----
-
-## Prerequisites
-
-Before getting started, make sure you have:
-
-1. A web application (behind your user authentication system) in your desired framework is set up and running.
-2. A Formbricks account with access to your environment ID and API host. You can find these in the **Setup Checklist** in the Settings.
-
----
-
-## HTML
-
-All you need to do is copy a `
-
-```
-
-
-### Required customizations to be made
-
-
-
- Formbricks Environment ID.
-
-
- URL of the hosted Formbricks instance.
-
-
-
-Now visit the [Validate your Setup](#validate-your-setup) section to verify your setup!
-
----
-
-## ReactJS
-
-Install the Formbricks SDK using one of the package managers ie `npm`,`pnpm`,`yarn`. Note that zod is required as a peer dependency must also be installed in your project.
-
-
-
-
-```js
-// other imports
-import formbricks from "@formbricks/js";
-
-if (typeof window !== "undefined") {
- formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "", //optional
- });
-}
-
-function App() {
- // your own app
-}
-
-export default App;
-```
-
-
-
-### Required customizations to be made
-
-
-
- Formbricks Environment ID.
-
-
- URL of the hosted Formbricks instance.
-
-
-
-Now visit the [Validate your Setup](#validate-your-setup) section to verify your setup!
-
----
-
-## NextJS
-
-NextJs projects typically follow two main conventions: the App Directory and the Pages Directory.
-To ensure smooth integration with the Formbricks SDK, which operates solely on the client side, follow the
-guidelines for each convention below:
-
-- App directory: You will have to define a new component in `app/formbricks.tsx` file and call it in your `app/layout.tsx` file.
-- Pages directory: You will have to visit your `_app.tsx` and just initialise Formbricks there.
-
-Code snippets for the integration for both conventions are provided to further assist you.
-
-
-
-
-```tsx {{ title: 'Typescript' }}
-// other import
-import { useRouter } from "next/router";
-import { useEffect } from "react";
-import formbricks from "@formbricks/js";
-
-if (typeof window !== "undefined") {
- formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "", //optional
- });
-}
-
-export default function App({ Component, pageProps }: AppProps) {
- const router = useRouter();
-
- useEffect(() => {
- // Connect next.js router to Formbricks
- const handleRouteChange = formbricks?.registerRouteChange;
- router.events.on("routeChangeComplete", handleRouteChange);
-
- return () => {
- router.events.off("routeChangeComplete", handleRouteChange);
- };
- }, []);
- return ;
-}
-```
-
-
-
-
-### Required customizations to be made
-
-
-
- Formbricks Environment ID.
-
-
- URL of the hosted Formbricks instance.
-
-
-
-First we initialize the Formbricks SDK, ensuring that it only runs on the client side.
-To connect the Next.js router to Formbricks and ensure the SDK can keep track of every page change, we are registering the route change event.
-
-Now visit the [Validate your Setup](#validate-your-setup) section to verify your setup!
-
----
-
-## VueJs
-
-Integrating the Formbricks SDK with Vue.js is a straightforward process.
-We will make sure the SDK is only loaded and used on the client side, as it's not intended for server-side usage.
-
-
-
-```shell {{ title: 'npm' }}
-npm install @formbricks/js
-````
-
-```shell {{ title: 'pnpm' }}
-pnpm add @formbricks/js
-```
-
-```shell {{ title: 'yarn' }}
-yarn add @formbricks/js
-```
-
-
-
-
-
-```js
-import formbricks from "@formbricks/js";
-
-if (typeof window !== "undefined") {
- formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "", //optional
- });
-}
-
-export default formbricks;
-```
-
-
-
-
-
-```js
-// other imports
-import formbricks from "@/formbricks";
-
-const app = createApp(App);
-
-app.use(router);
-
-app.mount("#app");
-
-router.afterEach((to, from) => {
- if (typeof formbricks !== "undefined") {
- formbricks.registerRouteChange();
- }
-});
-```
-
-
-
-### Required customizations to be made
-
-
-
- Formbricks Environment ID.
-
-
-
-
- URL of the hosted Formbricks instance.
-
-
-
-Now visit the [Validate your Setup](#validate-your-setup) section to verify your setup!
-
-## React Native
-
-Install the Formbricks React Native SDK using one of the package managers, i.e., npm, pnpm, or yarn.
-
-
-
-
-```js
-// other imports
-import Formbricks from "@formbricks/react-native";
-
-const config = {
- environmentId: "",
- apiHost: "",
- userId: "", // optional
-};
-
-export default function App() {
- return (
- <>
- {/* Your app content */}
-
- >
- );
-}
-```
-
-
-
-### Required customizations to be made
-
-
-
- Formbricks Environment ID.
-
-
- URL of the hosted Formbricks instance.
-
-
-
----
-
-## Validate your setup
-
-Once you have completed the steps above, you can validate your setup by checking the **Setup Checklist** in the Settings. Your widget status indicator should go from this:
-
-
-
-To this:
-
-
-
-## Debugging Formbricks Integration
-
-Enabling Formbricks debug mode in your browser is a useful troubleshooting step for identifying and resolving complex issues. This section outlines how to activate debug mode, covers common use cases, and provides insights into specific debug log messages.
-
-### Activate Debug Mode
-
-To activate Formbricks debug mode:
-
-1. **Via URL Parameter:**
-
- - Enable debug mode mode by adding `?formbricksDebug=true` to your application's URL (e.g. `https://example.com?formbricksDebug=true` or `https://example.com?page=123&formbricksDebug=true`). This parameter will enable debugging for the current page.
-
-2. **View Debug Logs:**
-
- - Open your browser's developer tools by pressing `F12` or right-clicking and selecting "Inspect."
- - Navigate to the "Console" tab to view Formbricks debugging information.
-
- **How to Open Browser Console:**
-
- - **Google Chrome:** Press `F12` or right-click, select "Inspect," and go to the "Console" tab.
- - **Firefox:** Press `F12` or right-click, select "Inspect Element," and go to the "Console" tab.
- - **Safari:** Press `Option + Command + C` to open the developer tools and navigate to the "Console" tab.
- - **Edge:** Press `F12` or right-click, select "Inspect Element," and go to the "Console" tab.
-
-### Common Use Cases
-
-Debug mode is beneficial for scenarios such as:
-
-- Verifying Formbricks initialization.
-- Identifying survey trigger issues.
-- Troubleshooting unexpected behavior.
-
-### Debug Log Messages
-
-Debug log messages provide insights into:
-
-- API calls and responses.
-- Event tracking, survey triggers and form interactions.
-- Initialization errors.
-
-**Can’t figure it out?**: **[Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions)**
-
----
diff --git a/apps/docs/app/app-surveys/quickstart/images/i1.webp b/apps/docs/app/app-surveys/quickstart/images/i1.webp
deleted file mode 100644
index 0714f4a19a..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i1.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i2.webp b/apps/docs/app/app-surveys/quickstart/images/i2.webp
deleted file mode 100644
index 66b2db4cca..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i2.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i3.webp b/apps/docs/app/app-surveys/quickstart/images/i3.webp
deleted file mode 100644
index 76b9658d5d..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i3.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i3_1.webp b/apps/docs/app/app-surveys/quickstart/images/i3_1.webp
deleted file mode 100644
index 15b7efe1c0..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i3_1.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i4.webp b/apps/docs/app/app-surveys/quickstart/images/i4.webp
deleted file mode 100644
index f7bae96938..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i4.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i5.webp b/apps/docs/app/app-surveys/quickstart/images/i5.webp
deleted file mode 100644
index 1962df70a8..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i5.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i6.webp b/apps/docs/app/app-surveys/quickstart/images/i6.webp
deleted file mode 100644
index a24c2af56d..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i6.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i7.webp b/apps/docs/app/app-surveys/quickstart/images/i7.webp
deleted file mode 100644
index 4a3a352d2d..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i7.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/images/i8.webp b/apps/docs/app/app-surveys/quickstart/images/i8.webp
deleted file mode 100644
index e5c0ab7442..0000000000
Binary files a/apps/docs/app/app-surveys/quickstart/images/i8.webp and /dev/null differ
diff --git a/apps/docs/app/app-surveys/quickstart/page.mdx b/apps/docs/app/app-surveys/quickstart/page.mdx
deleted file mode 100644
index 7a0f32db1b..0000000000
--- a/apps/docs/app/app-surveys/quickstart/page.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import I1 from "./images/i1.webp";
-import I2 from "./images/i2.webp";
-import I3 from "./images/i3.webp";
-import I3_1 from "./images/i3_1.webp";
-import I4 from "./images/i4.webp";
-import I5 from "./images/i5.webp";
-import I6 from "./images/i6.webp";
-import I7 from "./images/i7.webp";
-import I8 from "./images/i8.webp";
-
-export const metadata = {
- title: "Formbricks Quickstart Guide: App Surveys Made Easier & Faster",
- description:
- "Formbricks is the easiest way to create and manage app surveys. This quickstart guide will show you how to create your first app survey in under 5 minutes.",
-};
-
-# Quickstart
-
-App surveys have 6-10x better conversion rates than emailed surveys. This tutorial explains how to run a survey in both your web app and mobile app (React Native) in just 10 to 15 minutes. Let’s go!
-
-1. **Create a free Formbricks Cloud account**: While you can [self-host](/self-hosting/deployment) Formbricks, but the quickest and easiest way to get started is with the free Cloud plan. Just [sign up here](https://app.formbricks.com/auth/signup) and you'll be guided to our onboarding like below, choose the "Formbricks Surveys" option:
-
-
-
-2. **Choose your Project Channel**: On this step, you have to choose between the various channels that you want your project to be created in, you can create both app and link surveys from all the channels, but for the onboarding, please choose between the app surveys or the public website options, upon doing this, you'll be prompted to connect your app / website to formbricks.
-
-
-
-3. **Connect your App/Website**: Once you get through a couple of onboarding steps, you’ll be asked to connect your app or website. This is where you’ll find the code snippet for both HTML as well as the npm package which you need to embed in your app:
-
-
-
-Paste the code snippet in your app and reload the page. You should now see a message being displayed that your app or website is now connected with formbricks.
-
-
-
-Onboarding is complete! Now let’s create our first survey as you should see templates to choose from after clicking on **Next**:
-
-
-
-4. **Create your first survey**: To be able to see a survey in your app, you need to create one. We’ll choose one of the templates and head over to the survey settings:
-
-Pick the Survey Type as **App Survey**.
-
-
-
-5. **Set Trigger for the Survey**: Scroll down to Survey Trigger and click on **+ Add action**, choose **New Session**. This will cause this survey to appear when the Formbricks Widget tracks a new user session:
-
-
-
-6. **Set Recontact Options for debugging**: In Recontact Options we choose the following settings, so that we can play around with the survey more easily. By default, each survey will be shown only once to each user to prevent survey fatigue:
-
-
- Please change this setting later on after testing your survey to prevent survey fatigue for your users.
-
-
-
-
-7. **Publish your survey**: Now hit **Publish** and you’ll be forwarded to the Summary Page. This is where you’ll find the responses to this survey.
-
-
-
----
-
-- We offer framework guides for various frontend tech, head over to the the [App Survey Framework Guides](/app-surveys/framework-guides) to get started with your app survey.
-- Head over to our JS SDK documentation to get started with the [JS SDK](/developer-docs/js-sdk).
-
-Still struggling or something not working as expected? [Join us in Github Discussions](https://github.com/formbricks/formbricks/discussions) and we'd be glad to assist you!
diff --git a/apps/docs/app/app-surveys/user-identification/page.mdx b/apps/docs/app/app-surveys/user-identification/page.mdx
deleted file mode 100644
index 9fb7ccb67b..0000000000
--- a/apps/docs/app/app-surveys/user-identification/page.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
-export const metadata = {
- title: "Identifying Users in Formbricks App Surveys",
- description:
- "Dive into the importance of user identification in surveys. Boost your survey response rates and target the right users with Formbricks.",
-};
-
-# User Identification
-
-User Identification helps you to not only segment your users but also to see more information about the user who responded to a survey. This helps you to target surveys to specific user segments and see more information about the user who responded to a survey.
-
-### Understanding Identified vs Unidentified Users
-
-In Formbricks, understanding the distinction between identified and unidentified users is crucial for effective survey segmentation and targeted feedback collection.
-
-| Feature | Unidentified Users | Identified Users |
-| -------------------------------------------------------- | ------------------ | ---------------- |
-| Show surveys based on **trigger** actions | ✅ | ✅ |
-| Set **recontact details** to avoid survey fatique | ✅ | ✅ |
-| Target a subset of users using **attributes & segments** | ❌ | ✅ |
-| Collect **user information** in Formbricks | ❌ | ✅ |
-| Track **custom attributes** | ❌ | ✅ |
-| Counts towards your **monthly tacked user (MTU)** limit | ❌ | ✅ |
-| Recommended for **public-facing websites** | ✅ | ❌ |
-| Recommended for **web apps after login** | ❌ | ✅ |
-
-## Identified Users
-
-Identified users are those for whom specific information has been set, notably the userId. This identification allows for more precise targeting of surveys and a deeper understanding of the feedback provided. When enabled, all information specified by you and all actions are sent to Formbricks.
-
-This method is recommended for applications where users are required to log in and will often return.
-
-### Setting User ID
-
-To enable the User identification feature you need to set the `userId` in the init() call of Formbricks. Only when the `userId` is set the person will be visible in the Formbricks dashboard. The `userId` can be any string and it's best to use the default identifier you use in your app (e.g. unique id from database or the email address if it's unique) but you can also anonymize these as long as they are unique for every user.
-
-
-
-
-```javascript
-formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "",
-});
-```
-
-
-
-
-### Enhanced Initialization with User Attributes
-
-In addition to setting the `userId`, Formbricks allows you to set user attributes right at the initialization. This ensures that your user data is seamlessly integrated from the start. Here's how you can include user attributes in the `init()` function:
-
-
-
-
-```javascript
-formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "",
- attributes: {
- // your custom attributes
- Plan: "premium",
- },
-});
-```
-
-
-
-
-## Setting Custom User Attributes
-
-You can use the setAttribute function to set any custom attribute for the user (e.g. name, plan, etc.):
-
-
- Please note that the number of different attribute classes (e.g., "Plan," "First Name," etc.) is currently limited to 150 attributes per environment.
-
-
-
-
-
-```javascript
-formbricks.setAttribute("Plan", "free");
-```
-
-
-
-
-Generally speaking, the setAttribute function works like this:
-
-
-
-
-```javascript
-formbricks.setAttribute("attribute_key", "attribute_value");
-```
-
-
-
-Where `attributeName` is the name of the attribute you want to set, and `attributeValue` is the value of the attribute you want to set.
-
-### Logging Out Users
-
-When a user logs out of your webpage, make sure to log them out of Formbricks as well. This will prevent new activity from being associated with an incorrect user. Use the logout function:
-
-
-
-
-```javascript
-formbricks.logout();
-```
-
-
-
diff --git a/apps/docs/app/best-practices/cancel-subscription/page.mdx b/apps/docs/app/best-practices/cancel-subscription/page.mdx
deleted file mode 100644
index 8aa9958afa..0000000000
--- a/apps/docs/app/best-practices/cancel-subscription/page.mdx
+++ /dev/null
@@ -1,155 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ChangeText from "./change-text.webp";
-import CreateChurnFlow from "./create-cancel-flow.webp";
-import PublishSurvey from "./publish-survey.webp";
-import RecontactOptions from "./recontact-options.webp";
-import SelectAction from "./select-action.webp";
-import TriggerCSS from "./trigger-css-selector.webp";
-import TriggerInnerText from "./trigger-inner-text.webp";
-import TriggerPageUrl from "./trigger-page-url.webp";
-
-export const metadata = {
- title: "Mastering Churn Surveys with Formbricks | Essential Tips & Steps",
- description:
- "Learn how to effectively utilize Formbricks' Churn Surveys to gain deeper insights into user departures. Dive into a step-by-step guide to craft, trigger, and optimize your churn surveys, ensuring you capture invaluable feedback at critical junctures",
-};
-
-#### Best Practices
-
-# Learn from Churn
-
-Churn is hard, but can teach you a lot. Whenever a user decides that your product isn’t worth it anymore, you have a unique opportunity to get deep insights. These insights are pure gold to reduce churn.
-
-## Purpose
-
-The Churn Survey is among the most effective ways to identify weaknesses in your offering. People were willing to pay but now are not anymore: What changed? Let’s find out!
-
-## Formbricks Approach
-
-- Ask at exactly the right point in time
-- Follow-up to prevent bad reviews
-- Coming soon: Make survey mandatory
-
-## Overview
-
-To run the Churn Survey in your app you want to proceed as follows:
-
-1. Create new Churn Survey at [app.formbricks.com](https://app.formbricks.com/)
-2. Set up the user action to display survey at right point in time
-3. Choose correct recontact options to never miss a feedback
-4. Prevent that churn!
-
-
- ## Formbricks Widget running? 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.)](/app-surveys/quickstart)
-
-
-### 1. Create new Churn 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 “Churn Survey”:
-
-
-
-### 2. Update questions (if you like)
-
-You’re free to update the question 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 project settings._
-
-Save, and move over to the “Audience” tab.
-
-### 3. Pre-segment your audience
-
-In this case, you don’t really need to pre-segment your audience. You likely want to ask everyone who hits the “Cancel subscription” button.
-
-### 4. Set up a trigger
-
-To create the trigger for your Churn Survey, you have three options to choose from:
-
-1. **Trigger by Inner Text:** You likely have a “Cancel Subscription” button in your app. You can setup a user Action with the according `Inner Text` to trigger the survey, like so:
-
-
-
-2. **Trigger by CSS Selector:** In case you have more than one button saying “Cancel Subscription” in your app and only want to display the survey when one of them is clicked, you want to be more specific. The best way to do that is to give this button the HTML `id=“cancel-subscription”` and set your user action up like so:
-
-
-
-1. **Trigger by page view filters:** Lastly, you could also display your survey on a subpage “/subscription-cancelled” where you forward users once they cancelled the trial subscription. You can then create a user Action with the type `Page View` and add select `Limit to specific pages` to add url filters, with the following settings:
-
-
-
-Whenever a user visits this page, matches the filter conditions above and the recontact options (below) the survey will be displayed ✅
-
-Here is our complete [Actions manual](/app-surveys/actions/) covering [No-Code](/app-surveys/actions#setting-up-no-code-actions) and [Code](/app-surveys/actions#setting-up-code-actions) Actions.
-
-
- ## Pre-churn flow coming soon We’re currently building full-screen survey pop-ups. You’ll be able to prevent users from closing the survey unless they respond to it. It’s certainly debatable if you want that but you could force them to click through the survey before letting them cancel 🤷
-
-
-### 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 milk these super valuable insights. 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:
-
-
-
-These settings make sure the survey is always displayed, when a user wants to Cancel their subscription.
-
-### 7. Congrats! You’re ready to publish your survey 💃
-
-
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Churn Survey in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# Get those insights! 🎉
diff --git a/apps/docs/app/best-practices/contact-form/page.mdx b/apps/docs/app/best-practices/contact-form/page.mdx
deleted file mode 100644
index d932e0898d..0000000000
--- a/apps/docs/app/best-practices/contact-form/page.mdx
+++ /dev/null
@@ -1,174 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import AddQuestion from "./images/add-question.webp";
-import EmailField from "./images/email-field.webp";
-import EmbedImage from "./images/embed.webp";
-import MessageField from "./images/message-field.webp";
-import NameField from "./images/name-field.webp";
-import QueryImage from "./images/query-form.webp";
-import SingleSelect from "./images/single-select-questionare.webp";
-import ToggleButton from "./images/welcome1.webp";
-
-export const metadata = {
- title: "Creating a Contact Form with Formbricks: A Step-by-Step Guide",
- description:
- "Learn how to easily create a professional contact form using Formbricks, perfect for beginners and experts alike.",
-};
-
-# Creating a Contact Form with Formbricks: A Step-by-Step Guide
-
-Welcome to this comprehensive guide on creating a contact form using Formbricks. Whether you're just starting out or you're a seasoned developer, this tutorial will walk you through every step of building an engaging and effective contact form.
-
-## What We’ll Build
-
-By the end of this tutorial, you'll have created a simple contact form featuring:
-
-1. A welcoming introduction.
-2. Fields for collecting the user's name and email.
-3. A question to find out why they’re contacting you.
-4. A message field for users to share their queries.
-
-### Setting Up Your Form
-
-First, let's lay the groundwork for your form:
-
-1. Head to the Surveys page and click on **New Survey**.
-2. Select **Start from Scratch** to create a new form.
-3. In the form editor, click the three dots next to a question, then select **Change Question Type** and choose **Statement (Call to Action)**.
-
-
-
-4. Add a welcoming statement to greet your users and explain the form's purpose.
-5. Personalize the greeting to make it inviting and encourage engagement.
-
-A warm welcome sets the tone for your form. Make it friendly to encourage users to participate.
-
-### Adding the Name Field
-
-Next, let's capture the user's name:
-
-1. Click **Add Question**.
-
-2. Enter the prompts for the name field.
-3. Turn off the **Long Answer** option at the bottom right.
-4. Adjust any **settings**, such as making the field required.
-
-
-
-### Adding the Email Field
-
-Now, let’s add a field to collect the user's email address:
-
-1. Click **Add Question** again.
-2. Select Email as the input type.
-3. Enter a prompt for the email field.
-
-
-
-### Adding a Reason for Contact
-
-Let’s now understand why the user is contacting you:
-
-1. Click **Add Question** once again.
-2. Select **Change Question** Type and choose **Single Select**.
-3. Add the question "Why are you contacting us today?"
-
-
-
-Predefined options help categorize inquiries, making it easier for you to respond appropriately.
-
-4. Add options like "General Inquiry," "Support," and "Feedback."
-
-
-
-### Adding a Message Field
-
-Finally, let’s provide a space for the user’s message:
-
-1. Click **Add Question** for the last time.
-2. Add the question: "Your Message."
-3. Set the placeholder text to something like "Please write your message here."
-
-
-
-4. Consider setting a minimum character count to ensure detailed messages.
-
-### Finalizing Your Form
-
-Once your form is complete, follow these final steps:
-
-1. Review and rearrange the questions if necessary.
-2. Test the form by filling it out as a user.
-3. Customize the **Thank You** message for submissions.
-4. Publish the form to get a shareable link.
-5. Enable submission notifications:
- - Go to your Formbricks account settings.
- - Verify your email address.
- - Ensure that **Survey** notifications are enabled.
-
-### Integrating the Contact Form into Your Website
-
-After publishing the form, follow these steps to integrate it into your site:
-
-1. **Copy the Shareable Link**
-
- - Find your form in the Formbricks dashboard, and click Share.
- - Select Embed in a Web Page.
-
-
-
-2. **Embed the Code**
- - Copy the provided code and paste it into your website where you want the form to appear.
-
-
- Note: There is an options toggle button called "Embed Mode." When enabled, it updates the `src` to `"?embed=true"` and displays your survey in a minimalist design, removing padding and background for a cleaner look.
-
-
-3. **Test the Integration**
- - Check if the form displays correctly on your site.
- - Submit a test entry to ensure everything works and notifications are received.
-
-## Conclusion
-
-Congratulations! You’ve successfully created and integrated a professional contact form using Formbricks. This form will help you collect valuable information from your visitors in an efficient, user-friendly way.
-
-A great contact form strikes the balance between collecting necessary details and being simple enough to encourage submissions. **You’ve achieved just that!**
diff --git a/apps/docs/app/best-practices/feature-chaser/page.mdx b/apps/docs/app/best-practices/feature-chaser/page.mdx
deleted file mode 100644
index 3b33d14607..0000000000
--- a/apps/docs/app/best-practices/feature-chaser/page.mdx
+++ /dev/null
@@ -1,128 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ActionCSS from "./action-css.webp";
-import ActionText from "./action-innertext.webp";
-import ChangeText from "./change-text.webp";
-import CreateSurvey from "./create-survey.webp";
-import Publish from "./publish.webp";
-import RecontactOptions from "./recontact-options.webp";
-import SelectAction from "./select-action.webp";
-
-export const metadata = {
- title: "Setting Up Feature Chaser Surveys with Formbricks: A Comprehensive Guide",
- description:
- "Learn how to harness the power of Formbricks to gather targeted user feedback on specific features. Dive deep into creating, triggering, and publishing the Feature Chaser survey to enhance your product with actionable insights for specific users.",
-};
-
-#### Best Practices
-
-# Feature Chaser
-
-Following up on specific features only makes sense with very targeted surveys. Formbricks is built for that.
-
-## Purpose
-
-Product analytics never tell you why a feature is used - and why not. Following up on specific features with highly relevant questions is a great way to gather feedback and improve your product.
-
-## Formbricks Approach
-
-- Trigger survey at exactly the right point in the user journey
-- Never ask twice, keep your data clean
-- Prevent survey fatigue with global waiting period
-
-## Overview
-
-To run the Feature Chaser survey in your app you want to proceed as follows:
-
-1. Create new Feature Chaser survey at [app.formbricks.com](https://app.formbricks.com/)
-2. Setup a user action to display survey at the right point in time
-
-
- ## Formbricks Widget running? 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.)](/app-surveys/quickstart)
-
-
-### 1. Create new Feature Chaser
-
-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 “Feature Chaser”:
-
-
-
-### 2. Update questions
-
-The questions you want to ask are dependent on your feature and can be very specific. In the template, we suggest a high-level check on how easy it was for the user to achieve their goal. We also add an opportunity to provide context:
-
-
-
-Save, and move over to where the magic happens: The “Audience” tab.
-
-### 3. Set up a trigger for the Feature Chaser survey:
-
-Before setting the right trigger, you need to identify a user action in your app which signals, that they have just used the feature you want to understand better. In most cases, it is clicking a specific button in your product.
-
-You can create [Code Actions](/app-surveys/actions#setting-up-code-actions) and [No Code Actions](/app-surveys/actions#setting-up-no-code-actions) to follow users through your app. In this example, we will create a No Code Action.
-
-There are two ways to track a button:
-
-1. **Trigger by Inner Text:** You might have a button with a unique text at the end of your feature e.g. "Export Report". You can setup a user Action with the according `Inner Text` to trigger the survey, like so:
-
-
-
-2. **Trigger by CSS Selector:** In case you have more than one button saying “Export Report” in your app and only want to display the survey when one of them is clicked, you want to be more specific. The best way to do that is to give this button the HTML `id=“export-report-featurename”` and set your user action up like so:
-
-
-
-Please follow our [Actions manual](/actions/why) for an in-depth description of how Actions work.
-
-### 4. Select Action in the “When to ask” card
-
-
-
-### 5. Last step: Set Recontact Options correctly
-
-Lastly, scroll down to “Recontact Options”. Here you have full freedom to decide who you want to ask. Generally, you only want to ask every user once and prevent survey fatigue. It's up to you to decide if you want to ask again, when the user did not yet reply:
-
-
-
-### 7. Congrats! You’re ready to publish your survey 💃
-
-
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Feature Chaser in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# Get those insights! 🎉
diff --git a/apps/docs/app/best-practices/feedback-box/page.mdx b/apps/docs/app/best-practices/feedback-box/page.mdx
deleted file mode 100644
index 6b71242e23..0000000000
--- a/apps/docs/app/best-practices/feedback-box/page.mdx
+++ /dev/null
@@ -1,118 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import Link from "next/link";
-
-import ActionCSS from "./action-css.webp";
-import ActionText from "./action-innertext.webp";
-import AddAction from "./add-action.webp";
-import ChangeTextContent from "./change-text-content.webp";
-import CreateFeedbackBox from "./create-feedback-box-by-template.webp";
-import PublishSurvey from "./publish-survey.webp";
-import SelectAction from "./select-action.webp";
-import RecontactOptions from "./set-recontact-options.webp";
-
-export const metadata = {
- title: "Implementing the Feedback Box with Formbricks: A Step-by-Step Tutorial",
- description:
- "Unlock user insights effortlessly! Discover how to set up the Feedback Box in your app using Formbricks, allowing your users to provide real-time feedback. Follow our comprehensive guide to enhance user experience and respond rapidly to feedback",
-};
-
-#### Best Practices
-
-# Feedback Box
-
-The Feedback Box gives your users a direct channel to share their feedback and feel heard.
-
-## Purpose
-
-A low friction way to gather feedback helps catching even the smallest points of frustration in user experiences. Use automations to react rapidly and make users feel heard.
-
-## Formbricks Approach
-
-- Make it easy: 2 clicks to share feedback
-- Pipe insights where team can see them and react quickly
-
-## Installation
-
-To add the Feedback Box to your app, you need to perform these steps:
-
-1. Create new Feedback Box at app.formbricks.com
-2. Add user action to trigger Feedback Box
-3. Update recontact settings to display correctly
-
-### 1. Create new Feedback Box
-
-If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup)
-
-Then, create a new survey and look for the "Feedback Box" template:
-
-
-
-### 2. Update question content
-
-Change the questions and answer options according to your preference:
-
-
-
-### 3. Create user action to trigger Feedback Box:
-
-Go to the “Audience” tab, find the “When to send” card and choose “Add Action”. We will now use our super cool User Action Tracker:
-
-
-
-We have two options to track the Feedback Button in your application: innerText and CSS-Selector:
-
-1. **Inner Text:** This means that whenever a user clicks any HTML item in your app which has an `Inner Text` 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.
-
-
-### 4. Select action in the “When to ask” card
-
-
-
-### 5. Set Recontact Options correctly
-
-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):
-
-
-
-### 6. You’re ready publish your survey!
-
-
-
-## Setting up the Widget
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Feedback Box in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# That’s it! 🎉
diff --git a/apps/docs/app/best-practices/improve-email-content/page.mdx b/apps/docs/app/best-practices/improve-email-content/page.mdx
deleted file mode 100644
index 3a63d68ebe..0000000000
--- a/apps/docs/app/best-practices/improve-email-content/page.mdx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import NewsletterSurveyType from "./choose-survey-type.webp";
-import NewsletterSurveyEmbedCode from "./embed-survey-code-in-your-email.webp";
-import NewsletterSurveyEmbedPrompt from "./embed-survey-prompt.webp";
-import NewsletterSurveyEditor from "./improve-newsletter-content-editor-formbricks.webp";
-import NewsletterSurvey from "./improve-newsletter-content-survey-location.webp";
-
-export const metadata = {
- title: "Measure email content quality with Formbricks",
- description:
- "Measuring the content quality of both transactional and marketing email is a key element for improving customer communication.",
-};
-
-#### Best Practices
-
-# Improve Email Content
-
-Email remains the predominant way to communicate with your customers. Measure the effectiveness to improve your offering.
-
-## Purpose
-
-Measuring the content quality of both transactional and marketing email is a key element for improving customer communication.
-
-## Formbricks Approach
-
-- Embed the survey into your email so it’s part of the newsletter.
-- Use link prefilling to store the answer users clicked on in the email.
-- Dynamic user identification to append reader's email for personalized profiles and follow ups.
-
-## Installation
-
-To embed the newsletter survey into your email, follow these steps:
-
-1. Create new 'Improve Newsletter Content' survey at [app.formbricks.com](https://app.formbricks.com/)
-2. Select how you where you want to display the survey.
-3. Copy the embed code anywhere you want in your newsletter.
-
-### 1. Create new 'Improve Newsletter Content' Survey
-
-If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup)
-
-Then, create a new survey and look for the "Improve Newsletter Content" template:
-
-
-
-### 2. Customize Survey questions
-
-Customize survey questions, emojis or stars however you like:
-
-
-
-### 3. Configure Survey Settings
-
-When you are done customizing your survey questions, navigate to the Settings tab and choose the type of survey you want. You need to choose Link Survey:
-
-
-
-### 4. Choose how you want to embed your survey
-
-After publishing your survey, a modal that prompts you to embed your survey will pop up.
-
-
-
-Select the Embed Survey card and you will be directed to another modal, where the first embed option displayed will be to embed the survey in an email.
-
-### 5. Copy code to embed the survey in your newsletter
-
-Click the button with the “View Embed Code” text at the top right corner of the modal and simply paste the HTML code for your survey anywhere you want it in your newsletter. You can see the preview in the below image:
-
-
-
-And you're done! Send a test email to yourself and try it out 🤓
-
-## Learn about data prefilling
-
-
- ## How does data prefilling work? Learn about how link prefilling and user identification maximize your insights in [this detailed guide](/blog/how-smart-writers-use-formbricks-open-source-tool-to-measure-the-quality-of-their-newsletter-content).
-
-
-###
-
-# That’s it! 🎉
diff --git a/apps/docs/app/best-practices/improve-trial-cr/page.mdx b/apps/docs/app/best-practices/improve-trial-cr/page.mdx
deleted file mode 100644
index b704e500a3..0000000000
--- a/apps/docs/app/best-practices/improve-trial-cr/page.mdx
+++ /dev/null
@@ -1,136 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ActionText from "./action-innertext.webp";
-import ActionPageurl from "./action-pageurl.webp";
-import ChangeText from "./change-text.webp";
-import CreateSurvey from "./create-survey.webp";
-import Publish from "./publish.webp";
-import RecontactOptions from "./recontact-options.webp";
-import SelectAction from "./select-action.webp";
-
-export const metadata = {
- title: "Boost Your Trial Conversion Rates with Formbricks: Comprehensive Guide",
- description:
- "Unlock the secret to converting more trial users into paying customers using Formbricks. Understand insights behind trial cancellations and tailor your offering to fit user needs. Dive into our step-by-step tutorial and improve your conversion strategy today",
-};
-
-#### Best Practices
-
-# Improve Trial Conversion
-
-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.
-
-## 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](https://app.formbricks.com/)
-2. Set up the user action to display survey at right point in time
-3. Print that 💸
-
-
- ## Formbricks Widget running? 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.)](/app-surveys/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 project settings!_
-
-Save, and move over to the “Audience” tab.
-
-### 3. Pre-segment your audience (coming soon)
-
-
- ## Filter by attribute 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 Page view:** 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 `Page View` and add select `Limit to specific pages` to add url filters, 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 `Inner Text` like so:
-
-
-
-Please have a look at our complete [Actions manual](/app-surveys/actions/) 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 💃
-
-
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Feedback Box in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# Go get 'em 🎉
diff --git a/apps/docs/app/best-practices/interview-prompt/page.mdx b/apps/docs/app/best-practices/interview-prompt/page.mdx
deleted file mode 100644
index e32e3dd36c..0000000000
--- a/apps/docs/app/best-practices/interview-prompt/page.mdx
+++ /dev/null
@@ -1,150 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ActionCSS from "./action-css.webp";
-import ActionInner from "./action-innertext.webp";
-import ActionPageurl from "./action-pageurl.webp";
-import AddAction from "./add-action.webp";
-import ChangeText from "./change-text.webp";
-import CreatePrompt from "./create-prompt.webp";
-import InterviewExample from "./interview-example.webp";
-import Publish from "./publish-survey.webp";
-import RecontactOptions from "./recontact-options.webp";
-import SelectAction from "./select-action.webp";
-
-export const metadata = {
- title: "Maximize User Interview Participation with App Interview Prompts",
- description:
- "Engage with your power users seamlessly using Formbricks' App Interview Prompt. Ditch traditional email invites and experience way more more respondents. Dive into our comprehensive guide on setting up auto-scheduled interviews today and enhance your user understanding",
-};
-
-#### Best Practices
-
-# App Interview Prompt
-
-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 app surveys are incomplete without user interviews. Set the scheduling on autopilot for a continuous stream of interviews.
-
-## Formbricks Approach
-
-- Pre-segment users with custom attributes. Only invite highly relevant users.
-- In-app prompts (app surveys or website surveys) 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](https://app.formbricks.com/)
-2. Adjust content and settings
-3. That’s it! 🎉
-
-
- ## Formbricks Widget running? 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)](/app-surveys/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 Project 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)
-
-
- ## Filter by attribute 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](/app-surveys/user-identification).
-
-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 User Action Tracker:
-
-
-
-Generally, we have two types of user actions: Page views and clicks. The Interview Prompt, you’ll likely want to display it on a page visit since you already filter who sees the prompt by attributes.
-
-1. **Page view:** 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. **Click(Inner Text & 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 💃 🤸
-
-
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Feedback Box in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# Learn about them users! 🎉
diff --git a/apps/docs/app/best-practices/pmf-survey/page.mdx b/apps/docs/app/best-practices/pmf-survey/page.mdx
deleted file mode 100644
index bf61a0405e..0000000000
--- a/apps/docs/app/best-practices/pmf-survey/page.mdx
+++ /dev/null
@@ -1,128 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ActionCSS from "./action-css.webp";
-import ActionPageurl from "./action-pageurl.webp";
-import ChangeText from "./change-text.webp";
-import CreateSurvey from "./create-survey.webp";
-import Publish from "./publish.webp";
-import RecontactOptions from "./recontact-options.webp";
-import SelectAction from "./select-action.webp";
-
-export const metadata = {
- title: "How to Set Up a Product-Market Fit Survey Using Formbricks - Step-by-Step Guide",
- description:
- "Learn to leverage Formbricks to create and implement a Product-Market Fit survey in your web app. Follow our detailed step-by-step guide to measure and understand your PMF effectively. Ensure high data quality, efficient triggers, and actionable insights.",
-};
-
-#### Best Practices
-
-# Product-Market Fit Survey
-
-## Purpose
-
-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).
-
-## Formbricks Approach
-
-- 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
-
-## Overview
-
-To display the Product-Market Fit survey in your app you want to proceed as follows:
-
-1. Create new Product-Market Fit survey at [app.formbricks.com](https://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
-
-
- ## Formbricks Widget running? 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)](/app-surveys/quickstart)
-
-
-### 1. Create new PMF 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 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. Update questions (if you like)
-
-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.
-
-
-
-_Want to change the button color? You can do so in the project settings!_
-
-Save, and move over to where the magic happens: The “Audience” tab.
-
-### 3. Pre-segment your audience
-
-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:
-
-**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](/app-surveys/user-identification).
-
-### 4. Set up a trigger for the Product-Market Fit survey:
-
-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](/app-surveys/actions/) if you are not sure how to set them up:
-
-
-
-
-
-
-
-
-### 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 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:
-
-
-
-### 7. Congrats! You’re ready to publish your survey 💃
-
-
-
-
- ## Formbricks Widget running? You need to have the Formbricks Widget installed to display the Feedback Box in your app. Please follow [this tutorial (Step 4 onwards)](/app-surveys/quickstart) to install the widget.
-
-
-###
-
-# Get those insights!
diff --git a/apps/docs/app/developer-docs/api-sdk/page.mdx b/apps/docs/app/developer-docs/api-sdk/page.mdx
deleted file mode 100644
index 9675c9136d..0000000000
--- a/apps/docs/app/developer-docs/api-sdk/page.mdx
+++ /dev/null
@@ -1,224 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-export const metadata = {
- title: "Formbricks API SDK",
- description:
- "An overview of all available methods & how to integrate Formbricks API for backend developers in web applications. Learn the key methods, configuration settings, and best practices.",
-};
-
-#### Developer Docs
-
-# SDK: Formbricks API
-
-### Overview
-
-The Formbricks Client API Wrapper is a lightweight package designed to simplify the integration of Formbricks API endpoints into your JavaScript (JS) or TypeScript (TS) projects. With this wrapper, you can easily interact with Formbricks API endpoints without the need for complex setup or manual HTTP requests.
-
-### Install
-
-
-
-
-```js {{ title: 'npm' }}
-npm install @formbricks/api
-```
-
-```js {{ title: 'yarn' }}
-yarn add @formbricks/api
-```
-
-```js {{ title: 'pnpm' }}
-pnpm add @formbricks/api
-```
-
-
-
-
-## Methods
-
-### Initialize Formbricks
-
-Initialize the Formbricks API Client for backend developers to interact with Formbricks API endpoints:
-
-
-
-
-```javascript
-import { FormbricksAPI } from "@formbricks/api";
-
-const api = new FormbricksAPI({
- apiHost: `https://app.formbricks.com`, // If you have self-hosted Formbricks, change this to your self hosted instance's URL
- environmentId: "", // Replace this with your Formbricks environment ID
-});
-```
-
-
-
-
-The API client is now ready to be used across your project. It can be used to interact with the following models:
-
-## Displays
-
-- Create Display
-
-
-
-
-```javascript {{ title: 'Upload Method Call'}}
-await api.client.storage.uploadFile(
- file: File, // required (of interface File of the browser's File API)
- {
- allowedFileTypes: ["file-type-allowed", "for-example", "image/jpeg"],
- surveyId: "",
- }
-);
-```
-
-```javascript {{ title: 'Upload Method Return Type' }}
-Promise
-```
-
-
-
-
----
-
-If you have any questions or need help, feel free to reach out to us in **[Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/app/developer-docs/contributing/codespaces/images/loading.webp b/apps/docs/app/developer-docs/contributing/codespaces/images/loading.webp
deleted file mode 100644
index 89b3ceef2b..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/codespaces/images/loading.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/codespaces/images/new.webp b/apps/docs/app/developer-docs/contributing/codespaces/images/new.webp
deleted file mode 100644
index e415ffb87b..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/codespaces/images/new.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/codespaces/images/ports.webp b/apps/docs/app/developer-docs/contributing/codespaces/images/ports.webp
deleted file mode 100644
index 766a3b396d..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/codespaces/images/ports.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/codespaces/page.mdx b/apps/docs/app/developer-docs/contributing/codespaces/page.mdx
deleted file mode 100644
index 164db7fc22..0000000000
--- a/apps/docs/app/developer-docs/contributing/codespaces/page.mdx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import GithubCodespaceLoading from "./images/loading.webp";
-import GithubCodespaceNew from "./images/new.webp";
-import GithubCodespacePorts from "./images/ports.webp";
-
-export const metadata = {
- title: "Formbricks Open Source Contribution Guide: How to Enhance yourself and Contribute to Formbricks",
- description:
- "Join the Formbricks community and learn how to effectively contribute. From raising issues and feature requests to creating PRs, discover the best practices and communicate with our responsive team on Github Discussions",
-};
-
-#### Contributing
-
-# Github Codespaces Guide
-
-1. After clicking the one-click setup button, you will be redirected to the Github Codespaces page. Review the configuration and click on the 'Create Codespace' button to create a new Codespace.
-
-
-
-2. This will start loading the Codespace. Keep in mind this might take a few minutes to complete depending on your internet connection and the instance availability.
-
-
-
-3. Once the Codespace is loaded, you will be redirected to the VSCode editor. You can start working on your project in this environment.
-
-4. Monitor the logs in the terminal and once you see the following, you are good to go!
-
-
-
-
-```bash
-@formbricks/web:dev: ▲ Next.js 13.5.6
-@formbricks/web:dev: - Local: http://localhost:3000
-@formbricks/web:dev: - Environments: .env
-@formbricks/web:dev: - Experiments (use at your own risk):
-@formbricks/web:dev: · serverActions
-@formbricks/web:dev:
-@formbricks/web:dev: ✓ Ready in 9.4s
-```
-
-
-
-
-5. Right next to the Terminal, you will see a **Ports** tab, click on it to see the ports and their respective URLs. Now access the Forwarded Address for port 3000 and you should be able to visit your Formbricks App!
-
-
-
-Now make the changes you want to and see them live in action!
diff --git a/apps/docs/app/developer-docs/contributing/get-started/page.mdx b/apps/docs/app/developer-docs/contributing/get-started/page.mdx
deleted file mode 100644
index 594070e69e..0000000000
--- a/apps/docs/app/developer-docs/contributing/get-started/page.mdx
+++ /dev/null
@@ -1,177 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-export const metadata = {
- title: "Formbricks Open Source Contribution Guide: How to Enhance yourself and Contribute to Formbricks",
- description:
- "Join the Formbricks community and learn how to effectively contribute. From raising issues and feature requests to creating PRs, discover the best practices and communicate with our responsive team on Github Discussions",
-};
-
-#### Contributing
-
-# Get started
-
-We are so happy that you are interested in contributing to Formbricks 🤗 There are many ways to contribute to Formbricks like writing issues, fixing bugs, building new features or updating the docs.
-
-- **Issues**: Spotted a bug? Has deployment gone wrong? Do you have user feedback? [Raise an issue](https://github.com/formbricks/formbricks/issues/new/choose) for the fastest response.
-- **Feature requests**: Raise an issue for these and tag it as an Enhancement. We love every idea. Please [open a feature request](https://github.com/formbricks/formbricks/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.yml&title=%5BFEATURE%5D) clearly describing the problem you want to solve.
-- **Creating a PR**: Please fork the repository, make your changes and create a new pull request if you want to make an update. Please talk to us first before starting development of more complex features. Small fixes are always welcome!
-
-## Talk to us first
-
-We highly recommend connecting with us on [Github Discussions](https://github.com/formbricks/formbricks/discussions) before you ship a contribution. This will increase the likelihood of your PR being merged. And it will decrease the likelihood of you wasting your time :)
-
-## Contributor License Agreement (CLA)
-
-To be able to keep working on Formbricks over the coming years, we need to collect a CLA from all relevant contributors.
-
-Once you open a PR, you will get a message from the CLA bot to fill out the form. Please note that we can only get your contribution merged when we have a CLA signed by you.
-
-## Setup Dev Environment
-
-We currently officially support the below methods to set up your development environment for Formbricks:
-
-- [Gitpod](https://gitpod.io)
-- [GitHub Codespaces](https://github.com/features/codespaces)
-- [Local Machine Setup](#local-machine-setup)
-
-Both Gitpod and GitHub Codespaces have a **generous free tier** to explore and develop. For junior developers we suggest using either of these, because you can dive into coding within minutes, not hours.
-
-## Local Machine Setup
-
-
-The below only works for **Mac**, **Linux** & **WSL2** on Windows (not on pure Windows)!
-
-This method is recommended **only for advanced users** & we won't be able to provide official support for this.
-
-
-
-To get the project running locally on your machine you need to have the following development tools installed:
-
-- Node.JS (we recommend v20)
-- [pnpm](https://pnpm.io/)
-- [Docker](https://www.docker.com/) (to run PostgreSQL / MailHog)
-
-1. Clone the project & move into the directory:
-
-
-
-
-```bash
-nvm install && nvm use
-```
-
-
-
-
-3. Install Node.JS packages via pnpm. Don't have pnpm? Get it [here](https://pnpm.io/installation)
-
-
-
-
-```bash
-pnpm install
-```
-
-
-
-
-4. Create a `.env` file based on `.env.example`. It's already preset to work with the local development setup but you can also change values if needed.
-
-
-
-
-```bash
-cp .env.example .env
-```
-
-
-
-
-5. Generate & set some secret values mandatory for the `ENCRYPTION_KEY`, `NEXTAUTH_SECRET` and `CRON_SECRET` in the .env file. You can use the following command to generate the random string of required length:
-
-- For Linux
-
-
-
-
-```bash
-sed -i '' '/^ENCRYPTION_KEY=/s|.*|ENCRYPTION_KEY='$(openssl rand -hex 32)'|' .env
-sed -i '' '/^NEXTAUTH_SECRET=/s|.*|NEXTAUTH_SECRET='$(openssl rand -hex 32)'|' .env
-sed -i '' '/^CRON_SECRET=/s|.*|CRON_SECRET='$(openssl rand -hex 32)'|' .env
-```
-
-
-
-
-6. Make sure you have [`Docker`](https://docs.docker.com/compose/) & [`docker-compose`](https://docs.docker.com/compose/) installed and running on your machine. Then run the following command to start the Formbricks dev setup:
-
-
-
-
-```bash
-pnpm go
-```
-
-
-
- This starts the Formbricks main app (plus all its dependencies) as well as the following services using Docker:
-
-- A `postgres` container for hosting your database,
-- A `mailhog` container that acts as a mock SMTP server and shows received mails in a web UI (forwarded to your host's `localhost:8025`)
-- Demo App at [http://localhost:3002](http://localhost:3002)
-- Landing Page at [http://localhost:3001](http://localhost:3001)
-
-
- **WSL2 users**: If you encounter connection issues with Prisma, ensure your WSL2 instance's PostgreSQL
- service is stopped before running `pnpm go`. Use the command `sudo systemctl stop postgresql` to stop the service.
-
-
-**You can now access the Formbricks app on [http://localhost:3000](http://localhost:3000)**. You will be automatically redirected to the login. To use your local installation of formbricks, create a new account.
-
-{" "}
-
-
- A fresh setup does not have a default account. Please create a new account and proceed accordingly.
-
-
-For viewing the emails sent by the system, you can access mailhog at [http://localhost:8025](http://localhost:8025)
-
-### Build
-
-To build all apps and packages and check for build errors, run the following command:
-
-
-
-
-```bash
-pnpm build
-```
-
-
-
diff --git a/apps/docs/app/developer-docs/contributing/troubleshooting/images/clear-app-data.webp b/apps/docs/app/developer-docs/contributing/troubleshooting/images/clear-app-data.webp
deleted file mode 100644
index 240e97981b..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/troubleshooting/images/clear-app-data.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/troubleshooting/images/logout.webp b/apps/docs/app/developer-docs/contributing/troubleshooting/images/logout.webp
deleted file mode 100644
index f706ba643a..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/troubleshooting/images/logout.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/troubleshooting/images/uncaught-promise.webp b/apps/docs/app/developer-docs/contributing/troubleshooting/images/uncaught-promise.webp
deleted file mode 100644
index b698bca34b..0000000000
Binary files a/apps/docs/app/developer-docs/contributing/troubleshooting/images/uncaught-promise.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/contributing/troubleshooting/page.mdx b/apps/docs/app/developer-docs/contributing/troubleshooting/page.mdx
deleted file mode 100644
index d6b7298ed1..0000000000
--- a/apps/docs/app/developer-docs/contributing/troubleshooting/page.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import ClearAppData from "./images/clear-app-data.webp";
-import Logout from "./images/logout.webp";
-import UncaughtPromise from "./images/uncaught-promise.webp";
-
-export const metadata = {
- title: "Formbricks Open Source Contribution Guide: How to Enhance yourself and Contribute to Formbricks",
- description:
- "Join the Formbricks community and learn how to effectively contribute. From raising issues and feature requests to creating PRs, discover the best practices and communicate with our responsive team on Github Discussions",
-};
-
-#### Contributing
-
-# Troubleshooting
-
-Here you'll find help with frequently recurring problems
-
-## "The app doesn't work after doing a prisma migration"
-
-This can happen but fear not, the fix is easy: Delete the application storage of your browser and reload the page. This will force the app to re-fetch the data from the server:
-
-
-
-## "I ran 'pnpm i' but there seems to be an error with the packages"
-
-If nothing helps, run `pnpm clean` and then `pnpm i` again. This solves a lot.
-
-## "I get a full-screen error with cryptic strings"
-
-This usually happens when the Formbricks Widget wasn't correctly or completely built.
-
-
-
-
-```bash
-pnpm build --filter=@formbricks/js
-
-// Run the app again
-pnpm dev
-```
-
-
-
-## My machine struggles with the repository
-
-Since we're working with a monorepo structure, the repository can get quite big. If you're having trouble working with the repository, try the following:
-
-
-
-
-```bash {{ title: 'Formbricks Web-App' }}
-pnpm dev --filter=@formbricks/web...
-```
-
-```bash {{ title: 'Formbricks Docs' }}
-pnpm dev --filter=@formbricks/docs...
-```
-
-```bash {{ title: 'Formbricks Demo App' }}
-pnpm dev --filter=@formbricks/demo...
-```
-
-
-
-However, in our experience it's better to run `pnpm dev` than having two terminals open (one with the Formbricks app and one with the demo).
-
-## Uncaught (in promise) SyntaxError: Unexpected token !DOCTYPE ... is not valid JSON
-
-
-
-This happens when you're using the Demo App and delete the Person within the Formbricks app which the widget is currently connected with. We're fixing it, but you can also just logout your test person and reload the page to get rid of it.
-
-
diff --git a/apps/docs/app/developer-docs/integrations/make/page.mdx b/apps/docs/app/developer-docs/integrations/make/page.mdx
deleted file mode 100644
index 39def46c7a..0000000000
--- a/apps/docs/app/developer-docs/integrations/make/page.mdx
+++ /dev/null
@@ -1,153 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import AddModule from "./add-module.webp";
-import CreateNewScenario from "./create-new-scenario.webp";
-import CreateWebhook from "./create-webhook.webp";
-import DuplicateSurvey from "./duplicate-survey.webp";
-import EnterApiKeyAndHost from "./enter-api-key-and-host.webp";
-import Result from "./result.webp";
-import SearchFormbricks from "./search-formbricks.webp";
-import SelectAction from "./select-action.webp";
-import SelectFields from "./select-fields.webp";
-import SelectSurvey from "./select-survey.webp";
-import SelectTriggers from "./select-trigger.webp";
-import SubmitTestResponse from "./submit-test-response.webp";
-import UpdateQuestionId from "./update-question-id.webp";
-
-export const metadata = {
- title: "Formbricks Integration with Make.com: A Step-by-Step Guide",
- description:
- "Discover how to seamlessly integrate Formbricks with Make.com. Dive into our comprehensive guide to set up scenarios, connect with a plethora of apps, and send your survey data to more than 1000 platforms.",
-};
-
-#### Integrations
-
-# Make.com Setup
-
-Make is a powerful tool to send information between Formbricks and thousands of apps. Here's how to set it up.
-
-
- Nailed down your survey?? Any changes in the survey cause additional work in the _Scenario_. It makes sense to first settle on the survey you want to run and then get to setting up Make.
-
-
-## Step 1: Setup your survey incl. `questionId` for every question
-
-Set up the `questionId`s of your survey questions before publishing.
-
-
-
-_Update the Question ID field in every question card under Advanced Settings._
-
-
- ### Already published? Duplicate survey You can only update the questionId before publishing the survey. If already published, simply duplicate it.
-
-
-
-## Step 2: Setup Make.com
-
-Visit [Make.com](https://make.com) to start a new scenario.
-
-
-
-Search for `Formbricks`:
-
-
-
-Choose the event to trigger the Scenario:
-
-
-
-## Step 3: Connect Formbricks with Make
-
-Click "Create a webhook":
-
-
-
-Enter the Formbricks API Host and API Key. API Host is by default set to https://app.formbricks.com but can be modified for self hosting instances. Learn how to get an API Key from the [API Key tutorial](/additional-features/api#how-to-generate-an-api-key).
-
-
-
-## Step 4: Select Survey
-
-Choose from your created surveys:
-
-
-
-## Step 5: Send a test response
-
-You need a test response for Make setup. For local Formbricks setup, use the [Demo App](/contributing/demo) to submit a test response.
-
-
-
-## Step 6: Set up Google Sheet
-
-Decide on the desired action for the data. Here, we'll send submissions to a Google Sheet:
-
-
-
-Choose "Add a Row" for the action:
-
-
-
-Specify the spreadsheet details and match the Formbricks data:
-
-
-
-A new row gets added to the spreadsheet for every response:
-
-
diff --git a/apps/docs/app/developer-docs/integrations/n8n/page.mdx b/apps/docs/app/developer-docs/integrations/n8n/page.mdx
deleted file mode 100644
index f35ac4b5e7..0000000000
--- a/apps/docs/app/developer-docs/integrations/n8n/page.mdx
+++ /dev/null
@@ -1,186 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import AddApiKey from "./add-api-key.webp";
-import AddDiscord from "./add-discord.webp";
-import AddFormbricksTrigger from "./add-formbricks-trigger.webp";
-import CreateNewCredentialBtn from "./create-new-credential-btn.webp";
-import DiscordResponse from "./discord-response.webp";
-import DuplicateSurvey from "./duplicate-survey.webp";
-import FillDiscordDetails from "./fill-discord-details.webp";
-import ListenForEvent from "./listen-for-event.webp";
-import SelectEvent from "./select-event.webp";
-import SelectSurvey from "./select-survey.webp";
-import SelectedSurveys from "./selected-surveys.webp";
-import SubmitTestResponse from "./submit-test-response.webp";
-import SuccessConnection from "./success-connection.webp";
-import TestResponseSuccess from "./test-response-success.webp";
-import UpdateQuestionId from "./update-question-id.webp";
-
-export const metadata = {
- title: "Comprehensive Guide to Integrating Formbricks with n8n",
- description:
- "Unlock the potential of combining Formbricks with n8n for a streamlined workflow experience. Dive into our step-by-step guide and send your survey data effortlessly to 350+ applications. Streamline your data processes now!",
-};
-
-#### Integrations
-
-# n8n Setup
-
-
- The Formbricks n8n node is currently only available in the n8n self-hosted version as a community node. To install it go to "Settings" -> "Community Nodes" and install @formbricks/n8n-nodes-formbricks.
-
-
-n8n allows you to build flexible workflows focused on deep data integration. And with sharable templates and a user-friendly UI, the less technical people on your team can collaborate on them too. Unlike other tools, complexity is not a limitation. So you can build whatever you want — without stressing over budget. Hook up Formbricks with n8n and you can send your data to 350+ other apps. Here is how to do it.
-
-## Step 1: Setup your survey incl. `questionId` for every question
-
-
- Nailed down your survey? Any changes in the survey cause additional work in the n8n node. It makes sense to first settle on the survey you want to run and then get to setting up n8n.
-
-
-When setting up the node your life will be easier when you change the `questionId`s of your survey questions. You can only do so **before** you publish your survey.
-
-
-
-_In every question card in the Advanced Settings you find the Question ID field. Update it so that you'll recognize the response tied to this question._
-
-
- ### Already published? Duplicate survey You can only update the questionId when the survey was not yet
- published. Already published it? Just **duplicate it** to update the questionIds.
-
-
-
-## Step 2: Setup your n8n workflow
-
-Go to [n8n.io](https://n8n.io) and create a new workflow. Search for “Formbricks” to get started:
-
-
-
-## Step 3: Connect Formbricks with n8n
-
-Now, you have to connect n8n with Formbricks via an API Key:
-
-
-
-Click on Create New Credentail button to add your host and API Key
-
-
-
-Now you need an API key. Please refer to the [API Key Setup](/additional-features/api#how-to-generate-an-api-key) page to learn how to create one.
-
-Once you copied it in the API Key field, hit Save button to test the connection and save the credentials.
-
-
-
-## Step 4: Select Event
-
-Next, you can choose the event you want to trigger the node on. You can select multiple events:
-
-
-
-Here, we are adding `Response Finished` as an event, which will trigger when the survey has been filled out.
-
-## Step 5: Select Survey
-
-Next, you can choose from all the surveys you have created in this environment. You can select multiple surveys:
-
-
-
-Here, we are selecting two surveys.
-
-
-
-## Step 6: Test your trigger
-
-In order to set up n8n you'll need a test response in the selected survey. This allows you to select the individual values of each response in your workflow. If you have Formbricks running locally and you want to set up an an app or a website survey, you can use our [Demo App](/contributing/demo) to trigger a survey and submit a response.
-
-
-
-Next, click on Listen for event button.
-
-
-
-Then, go to the survey which you selected. Fill it out, and wait for the particular event to trigger (in this case it's `Response Finished`). Once the event is triggered you will see the response that you filled out in the survey.
-
-
-
-Now you have all the data you need at hand. The next steps depend on what you want to do with it. In this tutorial, we will send submissions to a discord channel:
-
-## Step 7: Add discord to your workflow
-
-Click on the plus and search `Discord`.
-
-
-
-Fill in the `Webhook URL` and the `Content` that you want to receive in the respective discord channel. Next, click on `Execute Node` button to test the node.
-
-
-
-Once the execution is successful, you'll receive the content in the discord channel.
-
-
diff --git a/apps/docs/app/developer-docs/integrations/overview/page.mdx b/apps/docs/app/developer-docs/integrations/overview/page.mdx
deleted file mode 100644
index b76774597e..0000000000
--- a/apps/docs/app/developer-docs/integrations/overview/page.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
-export const metadata = {
- title: "Configuring Formbricks with third party applications",
- description: "Configure third-party integrations with a Formbricks instance.",
-};
-
-#### Developer Docs
-
-# Overview
-
-At Formbricks, we understand the importance of integrating with third-party applications. We have step-by-step guides to configure our third-party integrations with a your Formbricks instance. We currently support the below integrations, click on them to see their individual guides:
-
-
- If you are on a self-hosted instance, you will need to configure these integrations manually. Please follow the guides [here](/self-hosting/integrations) to configure integrations on your self-hosted instance.
-
-
-- [Airtable](/developer-docs/integrations/airtable): Automatically send responses to an Airtable of your choice.
-- [Google Sheets](/developer-docs/integrations/google-sheets): Automatically send responses to a Google Sheet of your choice.
-- [Make](/developer-docs/integrations/make): Leverage Make's powerful automation capabilities to automate your workflows.
-- [n8n](/developer-docs/integrations/n8n): Automate workflows with n8n's no-code automation tool.
-- [Notion](/developer-docs/integrations/notion): Automatically send responses to a Notion database of your choice.
-- [Slack](/developer-docs/integrations/slack): Automatically send responses to a Slack channel of your choice on response events.
-- [Wordpress](/developer-docs/integrations/wordpress): Automatically integrate your Formbricks surveys with your Wordpress website.
-- [Zapier](/developer-docs/integrations/zapier): Connect Formbricks with 2000+ apps on Zapier.
-
----
-
-If you have any questions or need help with any of the integrations or even want a new integration, please reach out to us on [Github Discussions](https://github.com/formbricks/formbricks/discussions).
diff --git a/apps/docs/app/developer-docs/integrations/zapier/page.mdx b/apps/docs/app/developer-docs/integrations/zapier/page.mdx
deleted file mode 100644
index cf44575a6b..0000000000
--- a/apps/docs/app/developer-docs/integrations/zapier/page.mdx
+++ /dev/null
@@ -1,151 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import AddNewZap from "./add-new-zap.webp";
-import ChooseEvent from "./choose-event.webp";
-import ConnectWithFB1 from "./connect-with-formbricks-1.webp";
-import ConnectWithFB2 from "./connect-with-formbricks-2.webp";
-import DuplicateSurvey from "./duplicate-survey.webp";
-import SelectSurvey from "./select-survey.webp";
-import SlackChannelMsg from "./slack-channel-msg.webp";
-import SlackMsg from "./slack-message.webp";
-import SubmitTestResponse from "./submit-test-response.webp";
-import SuccessConnection from "./success-connected.webp";
-import TestSubmission from "./test-submission.webp";
-import UpdateQuestionId from "./update-question-id.webp";
-import ZapierMessage from "./zapier-message.webp";
-
-export const metadata = {
- title: "Step-by-Step Guide to Integrating Formbricks with Zapier",
- description:
- "Master the integration of Formbricks with Zapier using our detailed guide. Seamlessly connect your surveys to 5000+ apps, automate data transfers, and enhance feedback management. Start optimizing your workflow today.",
-};
-
-#### Integrations
-
-# Zapier Setup
-
-Zapier is a powerful ally. Hook up Formbricks with Zapier and you can send your data to 5000+ other apps. Here is how to do it.
-
-
- ### Nail down your survey first? Any changes in the survey cause additional work in the Zap. It makes sense to first settle on the survey you want to run and then get to setting up Zapier.
-
-
-## Step 1: Setup your survey incl. `questionId` for every question
-
-When setting up the Zap your life will be easier when you change the `questionId`s of your survey questions. You can only do so **before** you publish your survey.
-
-
-
-_In every question card in the Advanced Settings you find the Question ID field. Update it so that you’ll recognize the response tied to this question._
-
-
- ### Already published? Duplicate survey You can only update the questionId when the survey was not yet
- published. Already published it? Just **duplicate it** to update the questionIds.
-
-
-
-## Step 2: Send a test response
-
-In order to set up Zapier you’ll need a test response. This allows you to select the individual values of each response in your Zap. If you have Formbricks running locally and you want to set up an app or a website survey, you can use our [Demo App](/contributing/demo) to trigger a survey and submit a response.
-
-
-
-## Step 3: Setup your Zap
-
-Go to [zapier.com](https://zapier.com) and create a new Zap. Search for “Formbricks” to get started:
-
-
-
-Then, choose the event you want to trigger the Zap on:
-
-
-
-## Step 4: Connect Formbricks with Zapier
-
-Now, you have to connect Zapier with Formbricks via an API Key:
-
-
-
-
-Now you need an API key. Please refer to the [API Key Setup](/additional-features/api#how-to-generate-an-api-key) page to learn how to create one.
-
-Once you copied it in the newly opened Zapier window, you will be connected:
-
-
-
-## Step 5: Select Survey
-
-Next, you can choose from all the surveys you have created in this environment:
-
-
-
-## Step 6: Test your trigger
-
-Once you hit “Test” you will see the three most recent submissions for this survey. If you don’t have any submissions in the survey, submit one to continue setting up your Zap:
-
-
-_Now you're happy that you updated the questionId's_
-
-## Step 7: Set up your Zap
-
-Now you have all the data you need at hand. The next steps depend on what you want to do with it. In this tutorial, we will send submissions to a Slack channel:
-
-
-
-In the action itself we can determine the data and layout of the message. Here, we only choose the submission data. You can also refer to the meta data of the submission and the [attributes](/app-surveys/user-identification) of the person who submitted the survey.
-
-
-
-We now receive a notifcation in our Slack channel whenever a Churn survey is completed:
-
-
diff --git a/apps/docs/app/developer-docs/js-sdk/images/1-set-up-in-app-micro-survey-popup.webp b/apps/docs/app/developer-docs/js-sdk/images/1-set-up-in-app-micro-survey-popup.webp
deleted file mode 100644
index 03859c00d5..0000000000
Binary files a/apps/docs/app/developer-docs/js-sdk/images/1-set-up-in-app-micro-survey-popup.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/js-sdk/images/2-micro-survey-pop-up-in-app.webp b/apps/docs/app/developer-docs/js-sdk/images/2-micro-survey-pop-up-in-app.webp
deleted file mode 100644
index e74629fd62..0000000000
Binary files a/apps/docs/app/developer-docs/js-sdk/images/2-micro-survey-pop-up-in-app.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/js-sdk/images/3-survey-logs-in-app-survey-popup.webp b/apps/docs/app/developer-docs/js-sdk/images/3-survey-logs-in-app-survey-popup.webp
deleted file mode 100644
index 841d7cea49..0000000000
Binary files a/apps/docs/app/developer-docs/js-sdk/images/3-survey-logs-in-app-survey-popup.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/js-sdk/page.mdx b/apps/docs/app/developer-docs/js-sdk/page.mdx
deleted file mode 100644
index 659fd3cc8e..0000000000
--- a/apps/docs/app/developer-docs/js-sdk/page.mdx
+++ /dev/null
@@ -1,255 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import I1 from "./images/1-set-up-in-app-micro-survey-popup.webp";
-import I2 from "./images/2-micro-survey-pop-up-in-app.webp";
-import I3 from "./images/3-survey-logs-in-app-survey-popup.webp";
-
-export const metadata = {
- title: "Formbricks JS SDK",
- description:
- "Integrate Formbricks App Surveys into your web apps and websites with the Formbricks JS SDK. Learn how to initialize Formbricks, set attributes, track actions, and troubleshoot common issues.",
-};
-
-#### Developer Docs
-
-# SDK: Run Surveys Inside Your Web Apps and Websites
-
-### Overview
-
-The Formbricks JS SDK is a versatile solution for integrating surveys into both web apps and websites. It adapts based on the presence of a `userId`. If a `userId` is provided, the SDK handles authenticated surveys for logged-in users in web apps. If no `userId` is provided, the SDK can still seamlessly run surveys on public-facing websites. The SDK is available on npm [here](https://www.npmjs.com/package/@formbricks/js/).
-
-### Install
-
-
-
-
-```js {{ title: 'npm' }}
-npm install @formbricks/js
-```
-
-```js {{ title: 'yarn' }}
-yarn add @formbricks/js
-```
-
-```js {{ title: 'pnpm' }}
-pnpm add @formbricks/js
-```
-
-
-
-
-## Methods
-
-### Initialize Formbricks
-
-Initialize the Formbricks JS Client for surveys. When used in a web app, pass a `userId` to create and target a specific user. When using it on a website without authentication, simply omit the `userId`.
-
-
-
-
-```javascript
-import formbricks from "@formbricks/js";
-
-formbricks.init({
- environmentId: "", // required
- apiHost: "", // required
- userId: "", // optional
-});
-```
-
-
-
-
-The moment you initialise Formbricks, your user will start seeing surveys that get triggered on simpler actions such as on New Session, Page Exit, & other custom actions!
-
-
-Formbricks JS is a client SDK meant to be run client-side in their browser so make sure the window object is accessible. Below is an example of how you can set it!
-
-
-
-
-```js
-if (window !== undefined) {
- formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "", //optional
- });
-} else {
- console.error("Window object not accessible to init Formbricks");
-}
-```
-
-
-
-
-
-
-### Set Attribute
-
-Set custom attributes for the identified user to help segment them based on specific characteristics. This method only works when a `userId` is provided during initialization, allowing for targeted surveys in web apps. To learn how to set custom user attributes, refer to our [User Attributes Guide](/app-surveys/user-identification).
-
-
-
-
-```js
-formbricks.setAttribute("Plan", "Paid");
-```
-
-
-
-
-### Track Action
-
-Track user actions to trigger surveys based on user interactions, such as button clicks or scrolling:
-
-
-
-
-```js
-formbricks.track("Clicked on Claim");
-```
-
-
-
-
-### Logout
-
-To log out and deinitialize Formbricks, use the formbricks.logout() function. This action clears the current initialization configuration and erases stored frontend information, such as the surveys a user has viewed or completed. It's an important step when a user logs out of your application or when you want to reset Formbricks.
-
-
-
-
-```js
-formbricks.logout();
-```
-
-
-
-
-After calling formbricks.logout(), you'll need to reinitialize Formbricks before using any of its features again. Ensure that you properly reinitialize Formbricks to avoid unexpected errors or behavior in your application.
-
-### Reset
-
-Reset the current instance and fetch the latest surveys and state again:
-
-
-
-
-```js
-formbricks.reset();
-```
-
-
-
-
-### Register Route Change:
-
-Listen for page changes and dynamically show surveys configured via no-code actions in the Formbricks app:
-
-
- This is only needed when your framework has a custom routing system and you want to trigger surveys on route changes. For example: NextJs
-
-
-
-
-
-```js
-formbricks.registerRouteChange();
-```
-
-
-
-
-## Debug Mode
-
-To enable debug mode in Formbricks, add `?formbricksDebug=true` to your app’s URL.
-
-For example, if you’ve integrated Formbricks JS to your app hosted at `https://example.com`, then change the URL to `https://example.com?formbricksDebug=true` and refresh the page, now view the console logs to see the debug mode live in action.
-
-This activates detailed debug messages in the browser console, providing deeper insights into Formbricks' operation and potential issues.
-
----
-
-## Troubleshooting
-
-In case you don’t see your survey right away, here's what you can do. Go through these to find the error fast:
-
-### Formbricks Cloud and your app are not connected properly.
-
-Go back to [app.formbricks.com](http://app.formbricks.com) or your self-hosted instance's URL and go to the App connection in the Configuration. If the status is still indicated as “Not connected” your app hasn't yet pinged the Formbricks Cloud:
-
-
-**How to fix it:**
-
-1. Check if your app loads the Formbricks widget correctly.
-2. Make sure you have `debug` mode enabled in your integration and you should see the Formbricks debug logs in your browser console while being in your app (right click in the browser, `Inspect`, switch to the console tab). If you don’t see them, double check your integration.
-
----
-
-### Survey not loaded
-
-If your app is connected with Formbricks Cloud, the survey might have not been loaded properly. Check the debug logs and search for the list of surveys loaded. It should look like so:
-
-
-
-**How to fix it:**
-
-The widget only loads surveys which are **public** and **in progress**. Go to Formbricks Cloud and to the Survey Summary page. Check if your survey is live:
-
-
-
----
-
-### Survey not triggered
-
-If the survey is loaded by the widget it might not have been triggered properly.
-
-**How to fix:**
-
-1. Open your local app in an incognito tab or window. The New Session event is only fired if a user was inactive for 60 minutes or was logged out of Formbricks via formrbicks.logout().
-2. Check the debug logs for “Event ‘New Session” tracked”. If you see it in the logs and the survey still did not get displayed, [please let us know.](mailto:support@formbricks.com)
-
----
-
-### Survey not displayed in HTML page
-
-If the survey is loaded by the widget in the HTML page, try the below steps:
-
-**How to fix:**
-
-1. Make sure you have added the [script](/app-surveys/framework-guides#html) in the head of the HTML page.
-2. Verify that you have set the \ and \ as per your Formbricks instance.
-3. Verify that you have the latest version of the JS Package.
-4. Check the debug logs to see if you still see any errors.
-
----
-
-### Cannot read undefined of .init()
-
-If you see this error in the console, it means that the Formbricks JS package is not loaded properly.
-
-**How to fix:**
-
-1. Update to the latest version of the JS Package.
-2. Verify this wherever you call initialise the Formbricks instance in your code.
-3. It should now start working.
-
----
-
-If you have any questions or need help, feel free to reach out to us on **[Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/app/developer-docs/overview/page.mdx b/apps/docs/app/developer-docs/overview/page.mdx
deleted file mode 100644
index 2b0961a848..0000000000
--- a/apps/docs/app/developer-docs/overview/page.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
-export const metadata = {
- title: "Formbricks Developer Documentation Overview",
- description:
- "Welcome to the Developer Docs section, your comprehensive resource for integrating and utilizing Formbricks SDKs & APIs, as well as contributing to our open source codebase. Dive into the documentation to discover how to deploy surveys on your website and effectively engage with your audience.",
-};
-
-#### Developer Docs
-
-# Overview
-
-Welcome to the Developer Docs section, your comprehensive resource for integrating and utilizing Formbricks SDKs &APIs, as well as contributing to our open source codebase. Here's what you can expect to find in this section:
-
-### [SDK: React Native Apps](/developer-docs/react-native-in-app-surveys)
-
-The Formbricks React Native SDK for App Surveys is designed for React Native applications, enabling seamless integration of surveys within your mobile apps. Dive into the documentation to learn how to leverage the SDK for app surveys and engage with your users effectively.
-
-### [SDK: Formbricks JS](/developer-docs/js-sdk)
-
-The Formbricks JS SDK is a versatile solution for both web apps and public websites. It adapts based on how you provide user information.
-
-If a `userId` is provided, the SDK tailors surveys for logged-in users, enabling targeted and identified interactions. This allows for advanced user tracking, providing deeper insights into user behavior within your application.
-
-Alternatively, when no `userId` is supplied, the SDK seamlessly handles surveys for public-facing websites, making it ideal for high-traffic pages without authentication. This enables efficient survey collection without requiring user identification.
-
-### [SDK: Formbricks API](/developer-docs/api-sdk)
-
-Get acquainted with the Formbricks API JS SDK, empowering you to interact with Formbricks programmatically. Learn how to access Formbricks functionalities and automate tasks to streamline your workflow.
-
-### [REST API](/developer-docs/rest-api)
-
-Explore the Formbricks REST API documentation with Postman, providing detailed insights into available endpoints, request methods, and response formats. Integrate Formbricks seamlessly into your applications using RESTful principles.
-
-### [Webhooks](/developer-docs/webhooks)
-
-Learn about Formbricks Webhooks and how to set up event-driven notifications in your applications using our UI as well as API. Stay updated with real-time data and trigger actions based on specific response events within your Formbricks environment.
-
-### [Contributing to Formbricks](/developer-docs/contributing/get-started)
-
-Interested in contributing to the Formbricks ecosystem? This page provides guidance on how to run Formbricks locally, report issues, contribute through code, and collaborate with the Formbricks community to enhance the platform for everyone.
-
-If you have any questions or need help, feel free to reach out to us on **[Github Discussions](https://github.com/formbricks/formbricks/discussions)**. Happy coding!
diff --git a/apps/docs/app/developer-docs/react-native-in-app-surveys/page.mdx b/apps/docs/app/developer-docs/react-native-in-app-surveys/page.mdx
deleted file mode 100644
index 08fab4b9b9..0000000000
--- a/apps/docs/app/developer-docs/react-native-in-app-surveys/page.mdx
+++ /dev/null
@@ -1,127 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-export const metadata = {
- title: "React Native: Formbricks App SDK",
- description:
- "Integrate Formbricks App Surveys into your React Native apps with the Formbricks React Native SDK.",
-};
-
-#### Developer Docs
-
-# React Native: In App Surveys
-
-### Overview
-
-The Formbricks React Native SDK can be used for seamlessly integrating App Surveys into your React Native Apps. Here, w'll explore how to leverage the SDK for in app surveys. The SDK is [available on npm.](https://www.npmjs.com/package/@formbricks/react-native)
-
-### Install
-
-
-
-
-```js {{ title: 'npm' }}
-npm install @formbricks/react-native
-```
-
-```js {{ title: 'yarn' }}
-yarn add @formbricks/react-native
-```
-
-```js {{ title: 'pnpm' }}
-pnpm add @formbricks/react-native
-```
-
-
-
-
-## Methods
-
-### Initialize Formbricks
-
-In your React Native app, initialize the Formbricks React Native Client for app surveys where you pass the userId (creates a user if not existing in Formbricks) to attribute & target the user based on their actions.
-
-
-
-
-```javascript
-// other imports
-import Formbricks from "@formbricks/react-native";
-
-const config = {
- environmentId: "",
- apiHost: "",
- userId: "",
-};
-
-export default function App() {
- return (
- <>
- {/* Your app content */}
-
- >
- );
-}
-```
-
-
-
-
-The moment you initialise Formbricks, your user will start seeing surveys that get triggered on simpler actions such as on New Session.
-
-### Set Attribute
-
-You can set custom attributes for the identified user. This can be helpful for segmenting users based on specific characteristics or properties. To learn how to set custom user attributes, please check out our [User Attributes Guide](/app-surveys/user-identification).
-
-
-
-
-```js
-formbricks.setAttribute("Plan", "Paid");
-```
-
-
-
-
-### Track Action
-
-Track user actions to trigger surveys based on user interactions, such as button clicks or scrolling:
-
-
-
-
-```js
-formbricks.track("Clicked on Claim");
-```
-
-
-
-
-### Logout
-
-To log out and deinitialize Formbricks, use the formbricks.logout() function. This action clears the current initialization configuration and erases stored frontend information, such as the surveys a user has viewed or completed. It's an important step when a user logs out of your application or when you want to reset Formbricks.
-
-
-
-
-```js
-formbricks.logout();
-```
-
-
-
-
-After calling formbricks.logout(), you'll need to reinitialize Formbricks before using any of its features again. Ensure that you properly reinitialize Formbricks to avoid unexpected errors or behavior in your application.
-
-### Reset
-
-Reset the current instance and fetch the latest surveys and state again:
-
-
-
-
-```js
-formbricks.reset();
-```
-
-
-
diff --git a/apps/docs/app/developer-docs/rest-api/images/add-api-key.webp b/apps/docs/app/developer-docs/rest-api/images/add-api-key.webp
deleted file mode 100644
index cde1055849..0000000000
Binary files a/apps/docs/app/developer-docs/rest-api/images/add-api-key.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/rest-api/images/api-key-secret.webp b/apps/docs/app/developer-docs/rest-api/images/api-key-secret.webp
deleted file mode 100644
index 5608c1f8c0..0000000000
Binary files a/apps/docs/app/developer-docs/rest-api/images/api-key-secret.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/rest-api/page.mdx b/apps/docs/app/developer-docs/rest-api/page.mdx
deleted file mode 100644
index 3c1b0a8bff..0000000000
--- a/apps/docs/app/developer-docs/rest-api/page.mdx
+++ /dev/null
@@ -1,130 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import AddApiKey from "./images/add-api-key.webp";
-import ApiKeySecret from "./images/api-key-secret.webp";
-
-export const metadata = {
- title: "Formbricks API Overview: Public Client & Management API Breakdown",
- description:
- "Formbricks provides a powerful API to manage your surveys, responses, users, displays, attributes & webhooks programmatically. Get a detailed understanding of Formbricks' dual API offerings: the unauthenticated Public Client API optimized for client-side tasks and the secured Management API for advanced account operations. Choose the perfect fit for your integration needs and ensure robust data handling",
-};
-
-#### API
-
-# API Overview
-
-Formbricks offers two types of APIs: the **Public Client API** and the **Management API**. Each API serves a different purpose, has different authentication requirements, and provides access to different data and settings.
-
-View our [API Documentation](/api-docs) in more than 30 frameworks and languages.
-
-## Public Client API
-
-The [Public Client API](/api-docs#tag/Client-API) is designed for our SDKs and **does not require authentication**. This API is ideal for client-side interactions, as it doesn't expose sensitive information.
-
-We currently have the following Client API methods exposed and below is their documentation attached in Postman:
-
-- [Displays API](/api-docs#tag/Public-Client-API-greater-Displays) - Mark Survey as Displayed or Update an existing Display by linking it with a Response for a Person
-- [People API](/api-docs#tag/Public-Client-API-greater-People) - Create & Update a Person (e.g. attributes, email, userId, etc)
-- [Responses API](/api-docs#tag/Public-Client-API-greater-Responses) - Create & Update a Response for a Survey
-
-## Management API
-
-The [Management API](/api-docs#tag/Management-API) provides access to all data and settings that your account has access to in the Formbricks app. This API **requires a personal API Key** for authentication, which can be generated in the Settings section of the Formbricks app. Checkout the [API Key Setup](#how-to-generate-an-api-key) below to generate & manage API Keys.
-
-We currently have the following Management API methods exposed and below is their documentation attached in Postman:
-
-- [Action Class API](/api-docs#tag/Management-API-greater-Action-Class) - Create, List, and Delete Action Classes
-- [Attribute Class API](/api-docs#tag/Management-API-greater-Attribute-Class) - Create, List, and Delete Attribute Classes
-- [Me API](/api-docs#tag/Management-API-greater-Me) - Retrieve Account Information
-- [People API](/api-docs#tag/Management-API-greater-People) - List and Delete People
-- [Response API](/api-docs#tag/Management-API-greater-Response) - List, List by Survey, Update, and Delete Responses
-- [Survey API](/api-docs#tag/Management-API-greater-Survey) - List, Create, Update, generate multiple suId and Delete Surveys
-- [Webhook API](/api-docs#tag/Management-API-greater-Webhook) - List, Create, and Delete Webhooks
-
-## How to Generate an API key
-
-The API requests are authorized with a personal API key. This API key gives you the same rights as if you were logged in at formbricks.com - **don't share it around!**
-
-1. Go to your settings on [app.formbricks.com](https://app.formbricks.com).
-2. Go to page “API keys”
-
-3. Create a key for the development or production environment.
-4. Copy the key immediately. You won’t be able to see it again.
-
-
-
- ### Store API key safely! Anyone who has your API key has full control over your account. For security reasons, you cannot view the API key again.
-
-
-### Test your API Key
-
-Hit the below request to verify that you are authenticated with your API Key and the server is responding.
-
-## Get My Profile {{ tag: 'GET', label: '/api/v1/me' }}
-
-
-
-
- Get the project details and environment type of your account.
-
- ### Mandatory Headers
-
-
-
- Your Formbricks API key.
-
-
-
- ### Delete a personal API key
-
- 1. Go to settings on [app.formbricks.com](https://app.formbricks.com/).
- 2. Go to page “API keys”.
- 3. Find the key you wish to revoke and select “Delete”.
- 4. Your API key will stop working immediately.
-
-
-
-
-
-
- ```bash {{ title: 'cURL' }}
- curl --location \
- 'https://app.formbricks.com/api/v1/me' \
- --header \
- 'x-api-key: '
- ```
-
-
-
-
-
- ```json {{title:'200 Success'}}
- {
- "id": "cll2m30r70004mx0huqkitgqv",
- "createdAt": "2023-08-08T18:04:59.922Z",
- "updatedAt": "2023-08-08T18:04:59.922Z",
- "type": "production",
- "project": {
- "id": "cll2m30r60003mx0hnemjfckr",
- "name": "My Project"
- },
- "appSetupCompleted": false,
- "websiteSetupCompleted": false,
- }
- ```
- ```json {{ title: '401 Not Authenticated' }}
- Not authenticated
- ```
-
-
-
-
-
-**Can’t figure it out?**: **[Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions)**
-
----
diff --git a/apps/docs/app/developer-docs/webhooks/images/step-five.webp b/apps/docs/app/developer-docs/webhooks/images/step-five.webp
deleted file mode 100644
index 1f0cef8a36..0000000000
Binary files a/apps/docs/app/developer-docs/webhooks/images/step-five.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/webhooks/images/step-four.webp b/apps/docs/app/developer-docs/webhooks/images/step-four.webp
deleted file mode 100644
index ca5a560287..0000000000
Binary files a/apps/docs/app/developer-docs/webhooks/images/step-four.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/webhooks/images/step-one.webp b/apps/docs/app/developer-docs/webhooks/images/step-one.webp
deleted file mode 100644
index ad3704d819..0000000000
Binary files a/apps/docs/app/developer-docs/webhooks/images/step-one.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/webhooks/images/step-three.webp b/apps/docs/app/developer-docs/webhooks/images/step-three.webp
deleted file mode 100644
index 5fe2cfb98d..0000000000
Binary files a/apps/docs/app/developer-docs/webhooks/images/step-three.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/webhooks/images/step-two.webp b/apps/docs/app/developer-docs/webhooks/images/step-two.webp
deleted file mode 100644
index 98f9bf3b0d..0000000000
Binary files a/apps/docs/app/developer-docs/webhooks/images/step-two.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/webhooks/page.mdx b/apps/docs/app/developer-docs/webhooks/page.mdx
deleted file mode 100644
index 89e7ed3e04..0000000000
--- a/apps/docs/app/developer-docs/webhooks/page.mdx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import StepFive from "./images/step-five.webp";
-import StepFour from "./images/step-four.webp";
-import StepOne from "./images/step-one.webp";
-import StepThree from "./images/step-three.webp";
-import StepTwo from "./images/step-two.webp";
-
-export const metadata = {
- title: "Formbricks Webhooks Overview",
- description:
- "Formbricks provides a powerful Webhooks system to notify your application about response related events that happen in your Formbricks surveys. Learn how to set up Webhooks, the available events, and how to handle them in your application.",
-};
-
-#### Developer Docs
-
-# Webhooks
-
-Formbricks' Webhook API offers a powerful interface for interacting with webhooks. Webhooks allow you to receive real-time HTTP notifications of changes to specific objects in the Formbricks environment.
-
-These APIs are designed to facilitate seamless integration of Formbricks with third-party systems. By making use of our webhook API, you can automate the process of sending data to these systems whenever significant events occur within your Formbricks environment.
-
-### Leveraging Webhooks
-
-The behavior of the webhooks is determined by their trigger settings. The trigger determines which updates the webhook sends. Current available triggers include:
-
-- "responseCreated"
-- "responseUpdated",
-- "responseFinished".
-
-### Creating Webhooks
-
-There are 2 ways for you to create webhooks with Formbricks ie either via our App UI or through API.
-
-**UI:**
-
-1. Login to the Formbricks App & switch to the Integrations Tab
-
-
-
-2. Click on **Manage Webhooks** & then **Add Webhook** button:
-
-
-
-3. Add your webhook listener endpoint & test it to make sure it can receive the test endpoint otherwise you will not be able to save it.
-
-
-
-4. Now add the triggers you want to listen to and the surveys!
-
-
-
-That’s it! Your webhooks will not start receiving data as soon as it arrives!
-
-
-
-- API: Use our documented methods on Creation, List, & Deletion endpoints of the Webhook API mentioned in the [Postman Documenter](https://documenter.getpostman.com/view/11026000/2sA3Bq5XEh#62e6ec65-021b-42a4-ac93-d1434b393c6c)
-
----
diff --git a/apps/docs/app/developer-docs/website-survey-sdk/images/1-set-up-website-micro-survey-popup.webp b/apps/docs/app/developer-docs/website-survey-sdk/images/1-set-up-website-micro-survey-popup.webp
deleted file mode 100644
index 7781c1e9d2..0000000000
Binary files a/apps/docs/app/developer-docs/website-survey-sdk/images/1-set-up-website-micro-survey-popup.webp and /dev/null differ
diff --git a/apps/docs/app/developer-docs/website-survey-sdk/page.mdx b/apps/docs/app/developer-docs/website-survey-sdk/page.mdx
deleted file mode 100644
index e048f3342f..0000000000
--- a/apps/docs/app/developer-docs/website-survey-sdk/page.mdx
+++ /dev/null
@@ -1,166 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-import I1 from "./images/1-set-up-website-micro-survey-popup.webp";
-
-export const metadata = {
- title: "Formbricks Website Survey SDK",
- description:
- "Run targeted pop-up surveys on your public websites with the Formbricks JS SDK for Website Surveys. Learn how to integrate the SDK, track user actions, and trigger surveys based on user interactions.",
-};
-
-#### Developer Docs
-
-# SDK: Run Surveys On Public Websites
-
-### Overview
-
-The Formbricks JS SDK is a 2-in-1 SDK for seamlessly integrating both App Surveys and Website Surveys into your projects. In this section, we'll explore how to leverage the SDK specifically for website surveys.
-
-### Install
-
-
-
-
-```js {{ title: 'npm' }}
-npm install @formbricks/js
-```
-
-```js {{ title: 'yarn' }}
-yarn add @formbricks/js
-```
-
-```js {{ title: 'pnpm' }}
-pnpm add @formbricks/js
-```
-
-
-
-
-## Methods
-
-### Initialize Formbricks
-
-Initialize the Formbricks JS Client specifically for website surveys, ideal for public-facing websites:
-
-you cannot set any other attribute other than language (optional) in website surveys.
-
-
-
-
-```javascript
-import formbricks from "@formbricks/js/website";
-
-formbricks.init({
- environmentId: "", // required
- apiHost: "", // required
- attributes: {
- // optional
- language: "de", // optional
- },
-});
-```
-
-
-
-
-The moment you initialise Formbricks, your users will start seeing surveys that get triggered on simpler actions such as on New Session, Page Exit, & other custom actions!
-
-
-Formbricks JS is a client SDK meant to be run client-side in their browser so make sure the window object is accessible. Below is an example of how you can set it!
-
-
-
-
-```js
-if (window !== undefined) {
- formbricks.init({
- environmentId: "",
- apiHost: "",
- });
-} else {
- console.error("Window object not accessible to init Formbricks");
-}
-```
-
-
-
-
-
-
-### Track Action
-
-Track session actions to trigger surveys based on their interactions on your website, such as button clicks or scrolling:
-
-
-
-
-```js
-formbricks.track("Clicked on Claim");
-```
-
-
-
-
-### Reset
-
-Reset the current instance and fetch the latest surveys and state again:
-
-
-
-
-```js
-formbricks.reset();
-```
-
-
-
-
-### Register Route Change:
-
-Listen for page changes and dynamically show surveys configured via no-code actions in the Formbricks website:
-
-
- This is only needed when your framework has a custom routing system and you want to trigger surveys on route changes. For example: NextJs
-
-
-
-
-
-```js
-formbricks.registerRouteChange();
-```
-
-
-
-
-## Debug Mode
-
-To enable debug mode in Formbricks, add `?formbricksDebug=true` to your app’s URL.
-
-For example, if you’ve integrated Formbricks JS to your app hosted at `https://example.com`, then change the URL to `https://example.com?formbricksDebug=true` and refresh the page, now view the console logs to see the debug mode live in action.
-
-This activates detailed debug messages in the browser console, providing deeper insights into Formbricks' operation and potential issues.
-
----
-
-## Troubleshooting
-
-In case you don’t see your survey right away, here's what you can do. Go through these to find the error fast:
-
-### Formbricks Cloud and your website are not connected properly.
-
-Go back to [app.formbricks.com](http://app.formbricks.com) or your self-hosted instance's URL and go to the Website connection in the Configuration. If the status is still indicated as “Not connected” your app hasn't yet pinged the Formbricks Cloud:
-
-
-**How to fix it:**
-
-1. Check if your website loads the Formbricks widget correctly.
-2. Make sure you have `debug` mode enabled in your integration and you should see the Formbricks debug logs in your browser console while being in your app (right click in the browser, `Inspect`, switch to the console tab). If you don’t see them, double check your integration.
-
----
-
-If you have any questions or need help, feel free to reach out to us on **[Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/app/favicon.ico b/apps/docs/app/favicon.ico
deleted file mode 100644
index ef1fd01ff7..0000000000
Binary files a/apps/docs/app/favicon.ico and /dev/null differ
diff --git a/apps/docs/app/introduction/how-it-works/analytics.webp b/apps/docs/app/introduction/how-it-works/analytics.webp
deleted file mode 100644
index ab96643833..0000000000
Binary files a/apps/docs/app/introduction/how-it-works/analytics.webp and /dev/null differ
diff --git a/apps/docs/app/introduction/how-it-works/form-builder.webp b/apps/docs/app/introduction/how-it-works/form-builder.webp
deleted file mode 100644
index dba81befce..0000000000
Binary files a/apps/docs/app/introduction/how-it-works/form-builder.webp and /dev/null differ
diff --git a/apps/docs/app/introduction/how-it-works/integrations.webp b/apps/docs/app/introduction/how-it-works/integrations.webp
deleted file mode 100644
index 8db3cf2b58..0000000000
Binary files a/apps/docs/app/introduction/how-it-works/integrations.webp and /dev/null differ
diff --git a/apps/docs/app/introduction/how-it-works/page.mdx b/apps/docs/app/introduction/how-it-works/page.mdx
deleted file mode 100644
index b2adef789a..0000000000
--- a/apps/docs/app/introduction/how-it-works/page.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
-import Analytics from "./analytics.webp";
-import FormBuilder from "./form-builder.webp";
-import integrations from "./integrations.webp";
-import Targeting from "./targeting.webp";
-import Trigger from "./trigger.webp";
-
-import { MdxImage } from "@/components/mdx-image";
-
-export const metadata = {
- title: "Formbricks Components Overview",
- description:
- "Formbricks is broadly composed of four components: An open source form builder, targeting & triggers, integrations and analytics & insights.",
-};
-
-#### Introduction
-
-# How Formbricks works
-
-Formbricks is broadly composed of four elements, which enable gathering, analyzing and reporting of experience data:
-
-1. **Survey builder**: Create and customize your surveys with a user-friendly, no-code interface.
-2. **Targeting & Triggers**: Define user segments based on attributes and set event-based triggers to display your surveys to the right users at the right time.
-3. **Integrations**: Seamlessly integrate Formbricks with your current stack using the provided SDKs, native integrations or open APIs.
-4. **Analytics & Insights**: Analyze user responses and gain actionable insights to make informed product decisions.
-
-## Survey builder
-
-The survey builder is where you create and customize your surveys. With its intuitive drag-and-drop interface, you can easily add different question types, set response options, and apply your branding to the survey forms. The survey builder allows you to preview your survey in real-time, ensuring it looks and feels perfect for your users.
-
-
-
-## Targeting & Triggers
-
-Formbricks offers fine-grained user targeting and event-based triggers to help you display your surveys to the most relevant audience. Using the platform, you can define user segments based on attributes and behaviors, and set up triggers to show your surveys at specific moments within your product. This ensures that you're capturing the most accurate and valuable feedback possible.
-
-
-
-
-
-## Integration
-
-Integrating Formbricks into your web is a breeze. With SDKs for popular web frameworks like React, and an HTML snippet for non-framework based websites, you can quickly add Formbricks to your project. The provided code snippets make it easy to initialize the Formbricks widget and configure it to communicate with your backend.
-
-
-
-## Analytics & Insights
-
-Formbricks provides powerful analytics and insights to help you understand user responses and make data-driven decisions. The platform aggregates survey results and presents them in an easy-to-understand format, enabling you to identify trends, spot issues, and uncover opportunities for improvement. With Formbricks, you're always one step ahead in understanding your users and optimizing your product experience.
-
-
diff --git a/apps/docs/app/introduction/how-it-works/targeting.webp b/apps/docs/app/introduction/how-it-works/targeting.webp
deleted file mode 100644
index 9c27b02792..0000000000
Binary files a/apps/docs/app/introduction/how-it-works/targeting.webp and /dev/null differ
diff --git a/apps/docs/app/introduction/how-it-works/trigger.webp b/apps/docs/app/introduction/how-it-works/trigger.webp
deleted file mode 100644
index 435da6ff96..0000000000
Binary files a/apps/docs/app/introduction/how-it-works/trigger.webp and /dev/null differ
diff --git a/apps/docs/app/introduction/what-is-formbricks/components/getting-started.tsx b/apps/docs/app/introduction/what-is-formbricks/components/getting-started.tsx
deleted file mode 100644
index 89eae15fa5..0000000000
--- a/apps/docs/app/introduction/what-is-formbricks/components/getting-started.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { Button } from "@/components/button";
-import { Heading } from "@/components/heading";
-
-const gettingStarted = [
- {
- href: "/website-surveys/framework-guides",
- name: "Quickstart",
- description: "Get up and running with our cloud and JavaScript widget for public-facing website surveys",
- },
- {
- href: "/website-surveys/framework-guides#next-js",
- name: "Next.js App",
- description:
- "Integrate the Formbricks Website Survey SDK into a Next.js application with the new app directory",
- },
- {
- href: "/self-hosting/one-click",
- name: "Self Host Single Click Deployment",
- description:
- "Host Formbricks on your own servers with just a single script. No need to worry about setting up databases, queues, or caches.",
- },
- {
- href: "/best-practices/interview-prompt",
- name: "Interview Prompt",
- description: "Set user interviews on autopilot for a continuous stream of interviews.",
- },
-];
-
-export function GettingStarted(): React.JSX.Element {
- return (
-
-
- Quick Resources
-
-
- {gettingStarted.map((guide) => (
-
-
{guide.name}
-
{guide.description}
-
-
- Read more
-
-
-
- ))}
-
-
- );
-}
diff --git a/apps/docs/app/introduction/what-is-formbricks/page.mdx b/apps/docs/app/introduction/what-is-formbricks/page.mdx
deleted file mode 100644
index 4c6a9f2312..0000000000
--- a/apps/docs/app/introduction/what-is-formbricks/page.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Button } from "@/components/button";
-import { HeroPattern } from "@/components/hero-pattern";
-
-import { GettingStarted } from "./components/getting-started";
-
-export const metadata = {
- title: "Formbricks: Open Source Experience Management",
- description:
- "Formbricks is a versatile open source survey platform with an Experience Management Suite built on top of it. Survey customers, users or employee at any points with a perfectly timed and targeted survey.",
-};
-
-export const sections = [];
-
-
-
-# Formbricks – Open Source Experience Management
-
-Welcome to Formbricks! Formbricks is a versatile open source survey platform with an Experience Management Suite built on top of it. Survey customers, users or employee at any points with a perfectly timed and targeted survey. {{ className: 'lead' }}
-
-
-
-
-
-## Formbricks - The Open Source Survey Platform
-
-The foundation of Formbricks is an open source (AGPLv3) survey platform. Our objective is to built a survey tool which can be used to survey any stakeholder of an organisation (user, customer, employee, etc.) at any point on any platform.
-
-Today, you can already replace many of the existing surveying solutions with Formbricks:
-
-- **Standalone surveys (share via link):** Replace Google Forms, Typeform or any other link survey tool [with Formbricks Form Builder](https://formbricks.com/open-source-form-builder). Use lots of question types and comprehensive customisations.
-- **Scalable website surveys:** Even if you have millions of website visitors, Formbricks lets you run well-timed and anonymously targeted [surveys on any public website.](https://formbricks.com/website-survey)
-- **Highly targeted app surveys:** Identify known users with Formbricks and enrich their profiles with attributes and specific actions. Build cohorts for [highly targeted in app surveys.](https://formbricks.com/in-app-survey)
-
-The surveying platform is **largely free, also for commercial use.** As we further develop the product offering, all surveying capacity will move into the forever free Community Edition.
-
-## Formbricks - The XM Solution
-
-To fund the development of the most powerful and versatile surveying platform there is, we're building a commercial offering on top of the surveying platform: The Formbricks Experience Management (XM) Suite.
-
-- **What is XM?** "Experience Management" describes the effort to gather, analyze and report data from any stakeholder (customers, users, employees, etc.) of an organisation to measure and then manage how their experience with the organisation is developing.
-
-- **Why are we excited about XM?** Empowering companies, governments and nonprofit organisations to measure how customers, citizens, employees or visitors experience their products and services is a meaningful undertaking. Life is too short for poorly managed service offerings. Formbricks XM provides the data to make human-centric decisions at scale.
-
-- **How does XM work on Formbricks?** Essentially, through reduction and contextualisation. In an app-like format, we strip away everything you don't need to measure a specific experience. We also provide meaningful context in matching templates, reports and best practices.
-
-So far, we have spent most of our time and energy building out the open source survey platform which powers the above. Stick around to see how Formbricks XM Apps will empower everyone to think and work human-centric.
-
-
-
-
-
- );
-}
-
-export default RootLayout;
diff --git a/apps/docs/app/link-surveys/quickstart/home-page.webp b/apps/docs/app/link-surveys/quickstart/home-page.webp
deleted file mode 100644
index 62346fe033..0000000000
Binary files a/apps/docs/app/link-surveys/quickstart/home-page.webp and /dev/null differ
diff --git a/apps/docs/app/link-surveys/quickstart/page.mdx b/apps/docs/app/link-surveys/quickstart/page.mdx
deleted file mode 100644
index faf8a5a444..0000000000
--- a/apps/docs/app/link-surveys/quickstart/page.mdx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import HomePage from "./home-page.webp";
-import SurveyPublished from "./survey-published.webp";
-import SurveyQuestions from "./survey-questions.webp";
-import SurveyResponseOptions from "./survey-response-options.webp";
-import SurveySettings from "./survey-settings.webp";
-
-export const metadata = {
- title: "Formbricks Quickstart Guide: Link Surveys Made Easier & Faster",
- description:
- "Formbricks is the easiest way to create and manage link surveys. This quickstart guide will show you how to create your first link survey in under 5 minutes.",
-};
-
-#### Getting Started
-
-# Quickstart
-
-Link Surveys make it easy for your users to give you feedback. They are a great way to get feedback from your users, without interrupting their workflow. This quickstart guide will show you how to create your first link survey in under 5 minutes.
-
-## Create a free Formbricks Cloud account
-
-While you can [self-host](/self-hosting/deployment) Formbricks, but the quickest and easiest way to get started is with the free Cloud plan. Just [sign up here](https://app.formbricks.com/auth/signup) and click through the onboarding, until you’re here:
-
-
-
-Choose one of the pre-created templates to get started. We’ll choose the **Product Market Fit** template for this quickstart guide.
-
-## Create your first survey
-
-On clicking the template, you’ll be forwarded to the survey editor. Here you can edit the survey questions and settings. For the sake of simplicity, we'll keep the questions as they are and move to the survey settings.
-
-
-
-Click on the **Settings** tab to edit the survey settings.
-
-## Configure your survey settings
-
-Formbricks packs a lot of useful functionality out of the box. You can:
-
-- Close the survey on a specidic date
-- After a number of response
-- Redirect users to a URL after they completed the survey
-- Protect survey with a Pin
-- ... and much more!
-
-
-
-## Style your survey
-
-Style your survey to your need. You can keep it simplistic or use animated backgrounds. You can change the main color and soon you'll be able to fully control the appearance of the survey.
-
-
-
-## Publish your survey
-
-Once you’re happy with the survey settings, hit **Publish** and you’ll be forwarded to the Summary Page. This is where you’ll find the responses to this survey.
-
-
-
-## Share your survey
-
-Congratulations! Your survey is now published and ready to be shared with your users. You can share the survey link via email, SMS, or any other channel.
diff --git a/apps/docs/app/link-surveys/quickstart/survey-published.webp b/apps/docs/app/link-surveys/quickstart/survey-published.webp
deleted file mode 100644
index 9b493ab6a0..0000000000
Binary files a/apps/docs/app/link-surveys/quickstart/survey-published.webp and /dev/null differ
diff --git a/apps/docs/app/link-surveys/quickstart/survey-questions.webp b/apps/docs/app/link-surveys/quickstart/survey-questions.webp
deleted file mode 100644
index 9c8b92778a..0000000000
Binary files a/apps/docs/app/link-surveys/quickstart/survey-questions.webp and /dev/null differ
diff --git a/apps/docs/app/link-surveys/quickstart/survey-response-options.webp b/apps/docs/app/link-surveys/quickstart/survey-response-options.webp
deleted file mode 100644
index 139252852f..0000000000
Binary files a/apps/docs/app/link-surveys/quickstart/survey-response-options.webp and /dev/null differ
diff --git a/apps/docs/app/link-surveys/quickstart/survey-settings.webp b/apps/docs/app/link-surveys/quickstart/survey-settings.webp
deleted file mode 100644
index 6988107a7f..0000000000
Binary files a/apps/docs/app/link-surveys/quickstart/survey-settings.webp and /dev/null differ
diff --git a/apps/docs/app/link-surveys/single-use-links/page.mdx b/apps/docs/app/link-surveys/single-use-links/page.mdx
deleted file mode 100644
index 0db8abac34..0000000000
--- a/apps/docs/app/link-surveys/single-use-links/page.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import EnvVar from "./env-variable.webp";
-import Metadata from "./metadata.webp";
-import ShareModal from "./share-modal.webp";
-import Settings from "./single-use-setting.webp";
-import Message from "./used-message.webp";
-
-export const metadata = {
- title: "Single Use Links",
- description: "Make sure that each respondent only replies once with single use links.",
-};
-
-#### Link Surveys
-
-# Single Use Links
-
-This guide will help you understand how to generate and use single-use links within our application.
-
-## Purpose
-
-- Single-use links (or one-time / disposable links) are URLs that grant access to a survey only once.
-
-- The primary purpose of single-use links is to assure that no respondent submits a survey twice.
-
-
- Want to create up to 5,000 single-use links? Use our [API endpoint for that.](https://documenter.getpostman.com/view/11026000/2sA3Bq5XEh#c49ef758-a78a-4ef4-a282-262621151f08)
-
-
-## Using Single-Use Links with Formbricks
-
-Using single-use links with Formbricks is quite straight-forward:
-
-1. In the survey settings, toggle "Single Use Link" on:
-
-
-
-2. When you publish your survey, the following modal will open:
-
-
-Here, you can copy and generate as many single-use links as you need.
-
-## URL Encryption
-
-You can encrypt single use URLs to assure information to be protected. To enable it, you have to set the correct environment variable:
-
-
-
-## Check suId of a submission
-
-You can find the suId of each submission in the submission meta data. To view it, simple hover over the Avatar:
-
-
-
-### 'Link used' message
-
-You can customize the 'link used' messaging in the Survey Editor settings:
-
-
diff --git a/apps/docs/app/not-found.tsx b/apps/docs/app/not-found.tsx
deleted file mode 100644
index 5dbca978d3..0000000000
--- a/apps/docs/app/not-found.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Button } from "@/components/button";
-import { HeroPattern } from "@/components/hero-pattern";
-
-export default function NotFound(): React.JSX.Element {
- return (
- <>
-
-
-
404
-
Page not found
-
- Sorry, we couldn’t find the page you’re looking for.
-
-
- Back to docs
-
-
- >
- );
-}
diff --git a/apps/docs/app/providers.tsx b/apps/docs/app/providers.tsx
deleted file mode 100644
index 6139d1a717..0000000000
--- a/apps/docs/app/providers.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-"use client";
-
-import { ThemeProvider, useTheme } from "next-themes";
-import { useEffect } from "react";
-
-function ThemeWatcher() {
- const { resolvedTheme, setTheme } = useTheme();
-
- useEffect(() => {
- const media = window.matchMedia("(prefers-color-scheme: dark)");
-
- const onMediaChange = () => {
- const systemTheme = media.matches ? "dark" : "light";
- if (resolvedTheme === systemTheme) {
- setTheme("system");
- }
- };
-
- onMediaChange();
- media.addEventListener("change", onMediaChange);
-
- return () => {
- media.removeEventListener("change", onMediaChange);
- };
- }, [resolvedTheme, setTheme]);
-
- return null;
-}
-
-export function Providers({ children }: { children: React.ReactNode }) {
- return (
-
-
- {children}
-
- );
-}
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_01.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_01.webp
deleted file mode 100644
index e2aa3b1410..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_01.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_02.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_02.webp
deleted file mode 100644
index 997cd2c391..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_02.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_03.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_03.webp
deleted file mode 100644
index 46ac29a70f..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_03.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_04.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_04.webp
deleted file mode 100644
index c70921fb47..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_04.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_05.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_05.webp
deleted file mode 100644
index ed1b01be32..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_05.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_06.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_06.webp
deleted file mode 100644
index 86e40a48d7..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_06.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_07.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_07.webp
deleted file mode 100644
index 7328bf73a8..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_07.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_08.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_08.webp
deleted file mode 100644
index 112e72a0d0..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_08.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_09.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_09.webp
deleted file mode 100644
index 7b38eb46bc..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_09.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_10.webp b/apps/docs/app/self-hosting/configuration/images/entra_app_reg_10.webp
deleted file mode 100644
index 22b57fa691..0000000000
Binary files a/apps/docs/app/self-hosting/configuration/images/entra_app_reg_10.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/configuration/page.mdx b/apps/docs/app/self-hosting/configuration/page.mdx
deleted file mode 100644
index 7cba06c84d..0000000000
--- a/apps/docs/app/self-hosting/configuration/page.mdx
+++ /dev/null
@@ -1,328 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import EntraIDAppReg01 from "./images/entra_app_reg_01.webp";
-import EntraIDAppReg02 from "./images/entra_app_reg_02.webp";
-import EntraIDAppReg03 from "./images/entra_app_reg_03.webp";
-import EntraIDAppReg04 from "./images/entra_app_reg_04.webp";
-import EntraIDAppReg05 from "./images/entra_app_reg_05.webp";
-import EntraIDAppReg06 from "./images/entra_app_reg_06.webp";
-import EntraIDAppReg07 from "./images/entra_app_reg_07.webp";
-import EntraIDAppReg08 from "./images/entra_app_reg_08.webp";
-import EntraIDAppReg09 from "./images/entra_app_reg_09.webp";
-import EntraIDAppReg10 from "./images/entra_app_reg_10.webp";
-
-export const metadata = {
- title: "Configure Formbricks with External auth providers",
- description:
- "Set up and integrate multiple external authentication providers with Formbricks. Our step-by-step guide covers Google OAuth and more, ensuring a seamless login experience for your users.",
-};
-
-#### Self-Hosting
-
-# Configure
-
-### Custom Configurations
-
-These variables are present inside your machine’s docker-compose file. Restart the docker containers if you change any variables for them to take effect.
-
-
-| Variable | Description | Required | Default |
-| ---------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------- |
-| WEBAPP_URL | Base URL of the site. | required | http://localhost:3000 |
-| NEXTAUTH_URL | Location of the auth server. This should normally be the same as WEBAPP_URL | required | http://localhost:3000 |
-| DATABASE_URL | Database URL with credentials. | required | |
-| NEXTAUTH_SECRET | Secret for NextAuth, used for session signing and encryption. | required | (Generated by the user, must not exceed 32 bytes, `openssl rand -hex 32`) |
-| ENCRYPTION_KEY | Secret for used by Formbricks for data encryption | required | (Generated by the user, must not exceed 32 bytes, `openssl rand -hex 32`) |
-| CRON_SECRET | API Secret for running cron jobs. | required | (Generated by the user, must not exceed 32 bytes, `openssl rand -hex 32`) |
-| UPLOADS_DIR | Local directory for storing uploads. | optional | ./uploads |
-| S3_ACCESS_KEY | Access key for S3. | optional | (resolved by the AWS SDK) |
-| S3_SECRET_KEY | Secret key for S3. | optional | (resolved by the AWS SDK) |
-| S3_REGION | Region for S3. | optional | (resolved by the AWS SDK) |
-| S3_BUCKET_NAME | S3 bucket name for data storage. Formbricks enables S3 storage when this is set. | optional (required if S3 is enabled) | |
-| S3_ENDPOINT_URL | Endpoint for S3. | optional | (resolved by the AWS SDK) |
-| PRIVACY_URL | URL for privacy policy. | optional | |
-| TERMS_URL | URL for terms of service. | optional | |
-| IMPRINT_URL | URL for imprint. | optional | |
-|IMPRINT_ADDRESS | Address for imprint. | optional | |
-| EMAIL_AUTH_DISABLED | Disables the ability for users to signup or login via email and password if set to 1. | optional | |
-| PASSWORD_RESET_DISABLED | Disables password reset functionality if set to 1. | optional | |
-| EMAIL_VERIFICATION_DISABLED | Disables email verification if set to 1. | optional | |
-| RATE_LIMITING_DISABLED | Disables rate limiting if set to 1. | optional | |
-| INVITE_DISABLED | Disables the ability for invited users to create an account if set to 1. | optional | |
-| MAIL_FROM | Email address to send emails from. | optional (required if email services are to be enabled) | |
-| SMTP_HOST | Host URL of your SMTP server. | optional (required if email services are to be enabled) | |
-| SMTP_PORT | Host Port of your SMTP server. | optional (required if email services are to be enabled) | |
-| SMTP_USER | Username for your SMTP Server. | optional (required if email services are to be enabled) | |
-| SMTP_PASSWORD | Password for your SMTP Server. | optional (required if email services are to be enabled) | |
-| SMTP_AUTHENTICATED | If set to 0, the server will not require SMTP_USER and SMTP_PASSWORD(default is 1) | optional | |
-| SMTP_SECURE_ENABLED | SMTP secure connection. For using TLS, set to 1 else to 0. | optional (required if email services are to be enabled) | |
-| SMTP_REJECT_UNAUTHORIZED_TLS | If set to 0, the server will accept connections without requiring authorization from the list of supplied CAs. | optional | 1 |
-| TURNSTILE_SITE_KEY | Site key for Turnstile. | optional | |
-| TURNSTILE_SECRET_KEY | Secret key for Turnstile. | optional | |
-| GITHUB_ID | Client ID for GitHub. | optional (required if GitHub auth is enabled) | |
-| GITHUB_SECRET | Secret for GitHub. | optional (required if GitHub auth is enabled) | |
-| GOOGLE_CLIENT_ID | Client ID for Google. | optional (required if Google auth is enabled) | |
-| GOOGLE_CLIENT_SECRET | Secret for Google. | optional (required if Google auth is enabled) | |
-| STRIPE_SECRET_KEY | Secret key for Stripe integration. | optional | |
-| STRIPE_WEBHOOK_SECRET | Webhook secret for Stripe integration. | optional | |
-| TELEMETRY_DISABLED | Disables telemetry if set to 1. | optional | |
-| DEFAULT_BRAND_COLOR | Default brand color for your app (Can be overwritten from the UI as well). | optional | #64748b |
-| DEFAULT_ORGANIZATION_ID | Automatically assign new users to a specific organization when joining | optional | |
-| DEFAULT_ORGANIZATION_ROLE | Role of the user in the default organization. | optional | owner |
-| OIDC_DISPLAY_NAME | Display name for Custom OpenID Connect Provider | optional | |
-| OIDC_CLIENT_ID | Client ID for Custom OpenID Connect Provider | optional (required if OIDC auth is enabled) | |
-| OIDC_CLIENT_SECRET | Secret for Custom OpenID Connect Provider | optional (required if OIDC auth is enabled) | |
-| OIDC_ISSUER | Issuer URL for Custom OpenID Connect Provider (should have .well-known configured at this) | optional (required if OIDC auth is enabled) | |
-| OIDC_SIGNING_ALGORITHM | Signing Algorithm for Custom OpenID Connect Provider | optional | RS256 |
-| OPENTELEMETRY_LISTENER_URL | URL for OpenTelemetry listener inside Formbricks. | optional | |
-| CUSTOM_CACHE_DISABLED | Disables custom cache handler if set to 1 (required for deployment on Vercel) | optional | |
-
-Note: If you want to configure something that is not possible via above, please open an issue on our GitHub repo here or reach out to us on Github Discussions and we’ll try our best to work out a solution with you.
-
-## OAuth Configuration
-
-
- Single Sign-On (SSO) functionality, including OAuth integrations with Google, Microsoft Entra ID, Github and OpenID Connect, requires a valid Formbricks Enterprise License.
-
-
-### Google OAuth
-
-Integrating Google OAuth with your Formbricks instance allows users to log in using their Google credentials, ensuring a secure and streamlined user experience. This guide will walk you through the process of setting up Google OAuth for your Formbricks instance.
-
-#### Requirements:
-
-- A Google Cloud Platform (GCP) account.
-- A Formbricks instance running and accessible.
-
-#### Steps:
-
-1. **Create a GCP Project**:
-
- - Navigate to the [GCP Console](https://console.cloud.google.com/).
- - From the projects list, select a project or create a new one.
-
-2. **Setting up OAuth 2.0**:
-
- - If the **APIs & services** page isn't already open, open the console left side menu and select **APIs & services**.
- - On the left, click **Credentials**.
- - Click **Create Credentials**, then select **OAuth client ID**.
-
-3. **Configure OAuth Consent Screen**:
-
- - If this is your first time creating a client ID, configure your consent screen by clicking **Consent Screen**.
- - Fill in the necessary details and under **Authorized domains**, add the domain where your Formbricks instance is hosted.
-
-4. **Create OAuth 2.0 Client IDs**:
- - Select the application type **Web application** for your project and enter any additional information required.
- - Ensure to specify authorized JavaScript origins and authorized redirect URIs.
-
-
-
- ``` {{ title: "Redirect & Origin URLs" }}
- Authorized JavaScript origins: {WEBAPP_URL}
- Authorized redirect URIs: {WEBAPP_URL}/api/auth/callback/google
- ```
-
-
-
-
-5. **Update Environment Variables in Docker**:
- - To integrate the Google OAuth, you have two options: either update the environment variables in the docker-compose file or directly add them to the running container.
- - In your Docker setup directory, open the `.env` file, and add or update the following lines with the `Client ID` and `Client Secret` obtained from Google Cloud Platform:
- - Alternatively, you can add the environment variables directly to the running container using the following commands (replace `container_id` with your actual Docker container ID):
-
-
-
-
-```sh {{ title: 'Shell commands' }}
-docker exec -it container_id /bin/bash
-export GOOGLE_CLIENT_ID=your-client-id-here
-export GOOGLE_CLIENT_SECRET=your-client-secret-here
-exit
-```
-
-```sh {{ title: 'env file' }}
-GOOGLE_CLIENT_ID=your-client-id-here
-GOOGLE_CLIENT_SECRET=your-client-secret-here
-```
-
-
-
-
-6. **Restart Your Formbricks Instance**:
- - **Note:** Restarting your Docker containers may cause a brief period of downtime. Plan accordingly.
- - Once the environment variables have been updated, it's crucial to restart your Docker containers to apply the changes. This ensures that your Formbricks instance can utilize the new Google OAuth configuration for user authentication. Here's how you can do it:
- - Navigate to your Docker setup directory where your `docker-compose.yml` file is located.
- - Run the following command to bring down your current Docker containers and then bring them back up with the updated environment configuration:
-
-### Microsoft Entra ID (Azure Active Directory) SSO OAuth
-
-Do you have a Microsoft Entra ID Tenant? Integrate it with your Formbricks instance to allow users to log in using their existing Microsoft credentials. This guide will walk you through the process of setting up an Application Registration for your Formbricks instance.
-
-#### Requirements
-
-- A Microsoft Entra ID Tenant populated with users. [Create a tenant as per Microsoft's documentation](https://learn.microsoft.com/en-us/entra/fundamentals/create-new-tenant).
-- A Formbricks instance running and accessible.
-- The callback URI for your Formbricks instance: `{WEBAPP_URL}/api/auth/callback/azure-ad`
-
-#### Creating an App Registration
-
-1. Login to the [Microsoft Entra admin center](https://entra.microsoft.com/).
-2. Go to **Applications** > **App registrations** in the left menu.
-
-
-
-3. Click the **New registration** button at the top.
-
-
-
-4. Name your application something descriptive, such as `Formbricks SSO`.
-
-
-
-5. If you have multiple tenants/organizations, choose the appropriate **Supported account types** option. Otherwise, leave the default option for _Single Tenant_.
-
-
-
-6. Under **Redirect URI**, select **Web** for the platform and paste your Formbricks callback URI (see Requirements above).
-
-
-
-7. Click **Register** to create the App registration. You will be redirected to your new app's _Overview_ page after it is created.
-
-8. On the _Overview_ page, under **Essentials**:
-
-- Copy the entry for **Application (client) ID** to populate the `AZUREAD_CLIENT_ID` variable.
-- Copy the entry for **Directory (tenant) ID** to populate the `AZUREAD_TENANT_ID` variable.
-
-
-
-9. From your App registration's _Overview_ page, go to **Manage** > **Certificates & secrets**.
-
-
-
-10. Make sure you have the **Client secrets** tab active, and click **New client secret**.
-
-
-
-11. Enter a **Description**, set an **Expires** period, then click **Add**.
-
-
- You will need to create a new client secret using these steps whenever your chosen expiry period ends.
-
-
-
-
-12. Copy the entry under **Value** to populate the `AZUREAD_CLIENT_SECRET` variable.
-
-
- Microsoft will only show this value to you immediately after creation, and you will not be able to access it again. If you lose it, simply start from step 9 to create a new secret.
-
-
-
-
-13. Update these environment variables in your `docker-compose.yml` or pass it like your other environment variables to the Formbricks container.
-
-
- You must wrap the `AZUREAD_CLIENT_SECRET` value in double quotes (e.g., `"THis~iS4faKe.53CreTvALu3"`) to prevent issues with special characters.
-
-
-An example `.env` for Microsoft Entra ID in Formbricks would look like:
-
-
-
- ```yml {{ title: ".env" }}
- AZUREAD_CLIENT_ID=a25cadbd-f049-4690-ada3-56a163a72f4c
- AZUREAD_TENANT_ID=2746c29a-a3a6-4ea1-8762-37816d4b7885
- AZUREAD_CLIENT_SECRET="THis~iS4faKe.53CreTvALu3"
- ```
-
-
-
-14. Restart your Formbricks instance.
-15. You're all set! Users can now sign up & log in using their Microsoft credentials associated with your Entra ID Tenant.
-
-## OpenID Configuration
-
-Integrating your own OIDC (OpenID Connect) instance with your Formbricks instance allows users to log in using their OIDC credentials, ensuring a secure and streamlined user experience. Please follow the steps below to set up OIDC for your Formbricks instance.
-
-1. Configure your OIDC provider & get the following variables:
- - `OIDC_CLIENT_ID`
- - `OIDC_CLIENT_SECRET`
- - `OIDC_ISSUER`
- - `OIDC_SIGNING_ALGORITHM`
-
-
- Make sure the Redirect URI for your OIDC Client is set to `{WEBAPP_URL}/api/auth/callback/openid`.
-
-
-2. Update these environment variables in your `docker-compose.yml` or pass it directly to the running container.
-
-An example configuration for a FusionAuth OpenID Connect in Formbricks would look like:
-
-
-
- ```yml {{ title: ".env" }}
- OIDC_CLIENT_ID=59cada54-56d4-4aa8-a5e7-5823bbe0e5b7
- OIDC_CLIENT_SECRET=4f4dwP0ZoOAqMW8fM9290A7uIS3E8Xg29xe1umhlB_s
- OIDC_ISSUER=http://localhost:9011
- OIDC_DISPLAY_NAME=FusionAuth OIDC_SIGNING_ALGORITHM=HS256
- ```
-
-
-
-3. Set an environment variable `OIDC_DISPLAY_NAME` to the display name of your OIDC provider.
-
-4. Restart your Formbricks instance.
-
-5. You're all set! Users can now signup & log in using their OIDC credentials.
diff --git a/apps/docs/app/self-hosting/custom-ssl/page.mdx b/apps/docs/app/self-hosting/custom-ssl/page.mdx
deleted file mode 100644
index 036e3d8895..0000000000
--- a/apps/docs/app/self-hosting/custom-ssl/page.mdx
+++ /dev/null
@@ -1,138 +0,0 @@
-export const metadata = {
- title: "Add Custom SSL Certificate to Formbricks",
- description: "Learn how to add a custom SSL certificate to your Formbricks self-hosted instance.",
-};
-
-# Using Formbricks One-Click Setup with a Custom SSL Certificate
-
-
- Formbricks One-Click setup already comes with a valid SSL certificate using Let's Encrypt. This guide is only if you already have a valid SSL certificate that you need to use due to company policy or other requirements.
-
-
-## Introduction
-
-While Formbricks' One-Click setup can automatically create a valid SSL certificate using Let's Encrypt, there are scenarios where a custom SSL certificate is necessary. This is particularly relevant for environments like intranets or other setups with specific certificate requirements, where an internal or custom certificate authority (CA) might be used.
-
-### Step 1: Navigate to the Formbricks Folder
-
-Navigate into the "formbricks" folder that contains all the files from the Formbricks One-Click setup.
-
-```sh
-cd formbricks
-```
-
-### Step 2: Create a Folder for SSL Certificates
-
-Create a new folder named "certs" within the "formbricks" folder. Place your SSL certificate files (`fullchain.crt` and `cert.key`) in this directory.
-
-```sh
-mkdir certs
-# Move your SSL certificate files to the certs folder
-mv /path/to/your/fullchain.crt certs/
-mv /path/to/your/cert.key certs/
-```
-
-### Step 3: Understand SSL Certificate Files
-
-For a custom SSL setup, you need the following files:
-
-- **fullchain.crt**: This file contains your SSL certificate along with the entire certificate chain. The certificate chain includes intermediate certificates that link your SSL certificate to a trusted root certificate.
-- **cert.key**: This is your private key file. It is used to encrypt and decrypt data sent between your server and clients.
-
-### Step 4: Update File Permissions
-
-Ensure the directory and files have appropriate permissions:
-
-```sh
-sudo chown root:root certs/*
-sudo chmod 600 certs/*
-```
-
-### Step 5: Update `traefik.yaml`
-
-Update your `traefik.yaml` file to define entry points for HTTP and HTTPS traffic and set up a provider for Traefik to use Docker and a file-based configuration.
-
-```yaml
-entryPoints:
- web:
- address: ":80"
- http:
- redirections:
- entryPoint:
- to: websecure
- scheme: https
- permanent: true
- websecure:
- address: ":443"
-
-providers:
- docker:
- watch: true
- exposedByDefault: false
- file:
- directory: /etc/traefik/dynamic
-```
-
-### Step 6: Create `certs-traefik.yaml`
-
-Create a `certs-traefik.yaml` file that specifies the path to your custom SSL certificate and key.
-
-```yaml
-tls:
- certificates:
- - certFile: /certs/fullchain.crt
- keyFile: /certs/cert.key
-```
-
-### Step 7: Update `docker-compose.yml`
-
-Update your `docker-compose.yml` file to enforce TLS and link to your custom SSL certificate. Here's an example configuration for both the Formbricks and Traefik services. The rest of the configuration should remain the same as the One-Click setup:
-
-```yaml
-services:
- formbricks:
- restart: always
- image: ghcr.io/formbricks/formbricks:latest
- depends_on:
- - postgres
- labels:
- - "traefik.enable=true" # Enable Traefik for this service
- - "traefik.http.routers.formbricks.rule=Host(`my-domain.com`)" # Use your actual domain or IP
- - "traefik.http.routers.formbricks.entrypoints=websecure" # Use the websecure entrypoint (port 443 with TLS)
- - "traefik.http.routers.formbricks.tls=true" # Enable TLS
- - "traefik.http.services.formbricks.loadbalancer.server.port=3000" # Forward traffic to Formbricks on port 3000
- ports:
- - 3000:3000
- volumes:
- - uploads:/home/nextjs/apps/web/uploads/
- <<: *environment
-
- traefik:
- image: "traefik:v2.7"
- restart: always
- container_name: "traefik"
- depends_on:
- - formbricks
- ports:
- - "80:80"
- - "443:443"
- - "8080:8080"
- volumes:
- - ./traefik.yaml:/traefik.yaml
- - ./acme.json:/acme.json
- - /var/run/docker.sock:/var/run/docker.sock:ro
- - ./certs:/certs
- - ./certs-traefik.yaml:/etc/traefik/dynamic/certs-traefik.yaml
-```
-
-### Summary
-
-1. **Navigate to the Formbricks Folder**: Move into the "formbricks" directory.
-2. **Create a Folder for SSL Certificates**: Create a "certs" folder and place your `fullchain.crt` and `cert.key` files inside it.
-3. **Understand SSL Certificate Files**: Ensure you have the `fullchain.crt` and `cert.key` files.
-4. **Update File Permissions**: Ensure the certificate files have the correct permissions.
-5. **Update `traefik.yaml`**: Define entry points and remove certificate resolvers.
-6. **Create `certs-traefik.yaml`**: Specify the paths to your SSL certificate and key.
-7. **Update `docker-compose.yml`**: Configure Traefik labels to enforce TLS and mount the certificate directory.
-
-This setup ensures that Formbricks uses your custom SSL certificate for secure communications, suitable for environments with special certificate requirements.
diff --git a/apps/docs/app/self-hosting/docker/page.mdx b/apps/docs/app/self-hosting/docker/page.mdx
deleted file mode 100644
index af2926dd26..0000000000
--- a/apps/docs/app/self-hosting/docker/page.mdx
+++ /dev/null
@@ -1,229 +0,0 @@
-export const metadata = {
- title: "Guide to Deploying Formbricks Using Docker",
- description:
- "Step-by-step tutorial on how to effortlessly set up and run Formbricks via Docker. Explore the quick deployment process with Docker-Compose, learn how to update Formbricks, and troubleshoot common issues. Ideal for those looking for a hassle-free Formbricks experience",
-};
-
-#### Self-Hosting
-
-# Advanced Setup
-
-Quickly set up and start using Formbricks with our [official Docker image](https://github.com/formbricks/formbricks/pkgs/container/formbricks) that we've already built for you.
-
-The pre-built image is ready-to-run, and it only requires minimal configuration on your part. It's as easy as downloading the Docker image and firing up the container.
-
-### Requirements
-
-Ensure `docker` & `docker compose` are installed on your server/system. Both are typically included with Docker utilities, like Docker Desktop and Rancher Desktop.
-
-
- `docker compose` without the hyphen is now the primary method of using docker-compose, according to the Docker documentation.
-
-
-## Start
-
-1. **Create a New Directory for Formbricks**
-
-Open a terminal and create a new directory for Formbricks, then navigate into this new directory:
-
-
-
-
- ```bash
- mkdir formbricks-quickstart && cd formbricks-quickstart
- ```
-
-
-
-
-
-2. **Download the Docker-Compose File**
-
-Download the docker-compose file directly from the Formbricks repository:
-
-
-
-
- ```bash
- curl -o docker-compose.yml https://raw.githubusercontent.com/formbricks/formbricks/main/docker/docker-compose.yml
- ```
-
-
-
-
-
-3. **Generate NextAuth Secret**
-
-Next, you need to generate a NextAuth secret. This will be used for session signing and encryption. The `sed` command below generates a random string using `openssl`, then replaces the `NEXTAUTH_SECRET:` placeholder in the `docker-compose.yml` file with this generated secret:
-
-
-
-
- ```bash
- sed -i "/NEXTAUTH_SECRET:$/s/NEXTAUTH_SECRET:.*/NEXTAUTH_SECRET: $(openssl rand -hex 32)/" docker-compose.yml
- ```
-
-
-
-
-
-4. **Generate Encryption Key**
-
-Next, you need to generate an Encryption Key. This will be used for authenticating and verifying 2 Factor Authentication. The `sed` command below generates a random string using `openssl`, then replaces the `ENCRYPTION_KEY:` placeholder in the `docker-compose.yml` file with this generated secret:
-
-
-
-
- ```bash
- sed -i "/ENCRYPTION_KEY:$/s/ENCRYPTION_KEY:.*/ENCRYPTION_KEY: $(openssl rand -hex 32)/" docker-compose.yml
- ```
-
-
-
-
-
-5. **Generate Cron Secret**
-
-Next, you need to generate a Cron secret. This will be used as an API Secret for running cron jobs. The `sed` command below generates a random string using `openssl`, then replaces the `CRON_SECRET:` placeholder in the `docker-compose.yml` file with this generated secret:
-
-
-
-
- ```bash
- sed -i "/CRON_SECRET:$/s/CRON_SECRET:.*/CRON_SECRET: $(openssl rand -hex 32)/" docker-compose.yml
- ```
-
-
-
-
-
-6. **Start the Docker Setup**
-
-You're now ready to start the Formbricks Docker setup. The following command will start Formbricks together with a postgreSQL database using Docker Compose:
-
-
-
-
-```bash
- docker compose up -d
-```
-
-
-
- The `-d` flag will run the containers in detached mode, meaning they'll run in the background.
-
-7. **Visit Formbricks in Your Browser**
-
- After starting the Docker setup, visit http://localhost:3000 in your browser to interact with the Formbricks application. The first time you access this page, you'll be greeted by a setup wizard. Follow the prompts to define your first user and get started.
-
-## Update
-
-
- Please take a look at our [migration guide](/self-hosting/migration-guide) for version specific steps to update Formbricks.
-
-
-1. Pull the latest Formbricks image
-
-
-
-
-```bash
-formbricks-quickstart-formbricks-1 | All migrations have been successfully applied.
-formbricks-quickstart-formbricks-1 |
-formbricks-quickstart-formbricks-1 | - info Loaded env from /home/nextjs/apps/web/.env
-formbricks-quickstart-formbricks-1 | Listening on port 3000 url: http://:3000
-```
-
-
-
-You can close the logs again with `CTRL + C`.
-
-
-## Customizing environment variables
-
-To edit any of the available environment variables, check out our [Configure](/self-hosting/configuration) section!
-
-
-
-Still facing issues? [Join our Github Discussions](https://github.com/formbricks/formbricks/discussions) and we'd be glad to assist you!
diff --git a/apps/docs/app/self-hosting/integrations/images/airtable/create-new-integration.webp b/apps/docs/app/self-hosting/integrations/images/airtable/create-new-integration.webp
deleted file mode 100644
index a55bdc618d..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/airtable/create-new-integration.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/airtable/development-use-warning.webp b/apps/docs/app/self-hosting/integrations/images/airtable/development-use-warning.webp
deleted file mode 100644
index 8b74880552..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/airtable/development-use-warning.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/airtable/open-developer-hub.webp b/apps/docs/app/self-hosting/integrations/images/airtable/open-developer-hub.webp
deleted file mode 100644
index 648aab6598..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/airtable/open-developer-hub.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/airtable/register-new-integration.webp b/apps/docs/app/self-hosting/integrations/images/airtable/register-new-integration.webp
deleted file mode 100644
index 331ea78dfd..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/airtable/register-new-integration.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/airtable/select-scopes.webp b/apps/docs/app/self-hosting/integrations/images/airtable/select-scopes.webp
deleted file mode 100644
index f60e8ca7f4..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/airtable/select-scopes.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/add-api-key.webp b/apps/docs/app/self-hosting/integrations/images/n8n/add-api-key.webp
deleted file mode 100644
index d015ff537d..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/add-api-key.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/add-discord.webp b/apps/docs/app/self-hosting/integrations/images/n8n/add-discord.webp
deleted file mode 100644
index e5f7b5c59a..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/add-discord.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/add-formbricks-trigger.webp b/apps/docs/app/self-hosting/integrations/images/n8n/add-formbricks-trigger.webp
deleted file mode 100644
index f6219251e3..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/add-formbricks-trigger.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/create-new-credential-btn.webp b/apps/docs/app/self-hosting/integrations/images/n8n/create-new-credential-btn.webp
deleted file mode 100644
index bfc1a0c7dc..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/create-new-credential-btn.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/discord-response.webp b/apps/docs/app/self-hosting/integrations/images/n8n/discord-response.webp
deleted file mode 100644
index 5d39b9cc91..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/discord-response.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/fill-discord-details.webp b/apps/docs/app/self-hosting/integrations/images/n8n/fill-discord-details.webp
deleted file mode 100644
index 56dc5b6ef3..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/fill-discord-details.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/listen-for-event.webp b/apps/docs/app/self-hosting/integrations/images/n8n/listen-for-event.webp
deleted file mode 100644
index a08211e4b9..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/listen-for-event.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/select-event.webp b/apps/docs/app/self-hosting/integrations/images/n8n/select-event.webp
deleted file mode 100644
index 54c613ed25..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/select-event.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/select-survey.webp b/apps/docs/app/self-hosting/integrations/images/n8n/select-survey.webp
deleted file mode 100644
index f10c163bcf..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/select-survey.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/selected-surveys.webp b/apps/docs/app/self-hosting/integrations/images/n8n/selected-surveys.webp
deleted file mode 100644
index a1619783e1..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/selected-surveys.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/submit-test-response.webp b/apps/docs/app/self-hosting/integrations/images/n8n/submit-test-response.webp
deleted file mode 100644
index 735e6eb951..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/submit-test-response.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/success-connection.webp b/apps/docs/app/self-hosting/integrations/images/n8n/success-connection.webp
deleted file mode 100644
index 888369916a..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/success-connection.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/n8n/test-response-success.webp b/apps/docs/app/self-hosting/integrations/images/n8n/test-response-success.webp
deleted file mode 100644
index c25cdf6336..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/n8n/test-response-success.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/zapier/add-new-zap.webp b/apps/docs/app/self-hosting/integrations/images/zapier/add-new-zap.webp
deleted file mode 100644
index 4f4ff0cec2..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/zapier/add-new-zap.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/zapier/choose-event.webp b/apps/docs/app/self-hosting/integrations/images/zapier/choose-event.webp
deleted file mode 100644
index 9eacab449f..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/zapier/choose-event.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-1.webp b/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-1.webp
deleted file mode 100644
index d7b6b8ccde..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-1.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-2.webp b/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-2.webp
deleted file mode 100644
index c5b7fa12c1..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/zapier/connect-with-formbricks-2.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/images/zapier/success-connected.webp b/apps/docs/app/self-hosting/integrations/images/zapier/success-connected.webp
deleted file mode 100644
index 987cfaa9d2..0000000000
Binary files a/apps/docs/app/self-hosting/integrations/images/zapier/success-connected.webp and /dev/null differ
diff --git a/apps/docs/app/self-hosting/integrations/page.mdx b/apps/docs/app/self-hosting/integrations/page.mdx
deleted file mode 100644
index fe3ad065ac..0000000000
--- a/apps/docs/app/self-hosting/integrations/page.mdx
+++ /dev/null
@@ -1,378 +0,0 @@
-import { MdxImage } from "@/components/mdx-image";
-
-import CreateNewIntegration from "./images/airtable/create-new-integration.webp";
-import DevelopmentUseWarning from "./images/airtable/development-use-warning.webp";
-import OpenDeveloperHub from "./images/airtable/open-developer-hub.webp";
-import RegisterNewIntegration from "./images/airtable/register-new-integration.webp";
-import SelectScopes from "./images/airtable/select-scopes.webp";
-
-import AddApiKey from "./images/n8n/add-api-key.webp";
-import AddDiscord from "./images/n8n/add-discord.webp";
-import AddFormbricksTrigger from "./images/n8n/add-formbricks-trigger.webp";
-import CreateNewCredentialBtn from "./images/n8n/create-new-credential-btn.webp";
-import DiscordResponse from "./images/n8n/discord-response.webp";
-import FillDiscordDetails from "./images/n8n/fill-discord-details.webp";
-import ListenForEvent from "./images/n8n/listen-for-event.webp";
-import SelectEvent from "./images/n8n/select-event.webp";
-import SelectSurvey from "./images/n8n/select-survey.webp";
-import SelectedSurveys from "./images/n8n/selected-surveys.webp";
-import SubmitTestResponse from "./images/n8n/submit-test-response.webp";
-import SuccessConnection from "./images/n8n/success-connection.webp";
-import TestResponseSuccess from "./images/n8n/test-response-success.webp";
-
-import AddNewZap from "./images/zapier/add-new-zap.webp";
-import ChooseEvent from "./images/zapier/choose-event.webp";
-import ConnectWithFB1 from "./images/zapier/connect-with-formbricks-1.webp";
-import ConnectWithFB2 from "./images/zapier/connect-with-formbricks-2.webp";
-import SuccessConnectionZapier from "./images/zapier/success-connected.webp";
-
-export const metadata = {
- title: "Setting up Integrations for Self Hosted Formbricks",
- description: "Configure third-party integrations with your self-hosted Formbricks instance.",
-};
-
-# Integrations
-
-### Overview
-
-We have step-by-step guides to configure our third-party integrations with a self hosted Formbricks instance. We currently support the below integrations, click on them to see their individual guides:
-
-- [Airtable](#airtable)
-- [Google Sheets](#google-sheets)
-- [Notion](#notion)
-- Make: We do not support for self-hosted instances yet.
-- [n8n](#n8n)
-- [Slack](#slack)
-- Wordpress: Wordpress setup is similar to the [Cloud setup](/developer-docs/integrations/wordpress), just change the API Host to your self-hosted URL.
-- [Zapier](#zapier)
-
-
- Once you’ve configured your integration, See our Integration sections to see how to use them within your Formbricks app [here](/developer-docs/integrations/airtable)
-
-
-### Step by Step Guides
-
-## Airtable
-
-Enabling the Airtable Integration in a self-hosted environment requires creating an airtable account and changing the environment variables of your Formbricks instance.
-
-
- If your Airtable app is in development use, please ensure that the email used in the Airtable integration matches the email used in the Airtable OAuth app. To use other email addresses, you need to fill this information in your OAuth app settings again:
-
-
-
-
-1. Go to the [Airtable](https://airtable.com) and create a new account if you dont already have one.
-
-2. Click on user icon on top left and open to **Developer hub**
-
-
-
-3. Navigate to OAuth integrations and click on **Register an OAuth integrations**
-
-
-
-3. Select a name for you integration and also add a redirect URL which will be `/api/v1/integrations/airtable/callback`
-
-
-
-4. Now fill some basic details about your integrations and then go to scope section. You need to **enable** 5 scopes:
-
- - data.records:read
- - data.records:write
- - schema.bases:read
- - schema.bases:write
- - user.email:read
-
-
-
-5. Click on the "Save" button and you are done
-6. Now just copy **Client ID** for your integration & add it to your **Formbricks environment variables** as in the docker compose file:
-
-- `AIRTABLE_CLIENT_ID`
-
-Voila! You have successfully enabled the Airtable integration in your self-hosted Formbricks instance. Now you can follow the steps mentioned in [Airtable Integration with Formbricks](/developer-docs/integrations/airtable) section to link an Airtable with Formbricks.
-
-## Google Sheets
-
-Integrating Google Sheets with a self-hosted Formbricks instance requires configuring Google Cloud and updating your environment variables.
-
-
- If your Google Cloud Console project has a publishing status of "Testing" your refresh token will expire after 7 days. To avoid that, you need to change the publishing status to "Production". [Google OAuth 2.0 documentation](https://developers.google.com/identity/protocols/oauth2?hl=en#expiration)
-
-
-1. Go to the **[Google Cloud Console](https://console.cloud.google.com/)** and **create a new project**.
-2. Enable necessary APIs:
- - Now select the project you just created and go to the **APIs & Services** section.
- - Click on the **Enable APIs and Services** button and search for **Google Sheets API** and enable it.
-3. Configure OAuth Consent Screen:
- - Go to **OAuth Consent screen** and select the appropriate User Type (External or Internal). Select **Internal** if you want only the users of your Google Workspace to be able to use the integration.
- - Fill the required details:
- - App name: Name displayed during OAuth authentication.
- - User support email and Developer contact information: Your contact details for support.
- - Click on **Save and Continue**.
-4. Add required Scopes:
-
-- Click on the **Add or Remove Scopes** button and add the scopes:
- - `https://www.googleapis.com/auth/userinfo.email`
- - `https://www.googleapis.com/auth/spreadsheets`
-- Click on the **Update** button. Verify the scopes and click on the **Save and Continue** button.
-- Skip the **Test Users** section and click on the **Save and Continue** button.
-
-5. View the OAuth Consent Screen summary and click on the **Back to Dashboard** button.
-6. Register OAuth Client:
-
-- Navigate to **Credentials** > **Create Credentials** > **OAuth Client ID**.
-- Select **Web Application** and set:
- - Name: Name of the OAuth Client ID.
- - Authorized JavaScript Origins: `https://`
- - Authorized redirect URIs: `https:///api/google-sheet/callback`
-- Save and note the Client ID and Client Secret.
-
-7. Copy the Client ID and Client Secret and set them as environment variables in your Formbricks instance:
- - `GOOGLE_SHEETS_CLIENT_ID`
- - `GOOGLE_SHEETS_CLIENT_SECRET`
- - `GOOGLE_SHEETS_REDIRECT_URL`
-
-Now just copy **GOOGLE_SHEETS_CLIENT_ID**, **GOOGLE_SHEETS_CLIENT_SECRET** and **GOOGLE_SHEETS_REDIRECT_URL** for your integration & add it to your **Formbricks environment variables** as in the docker compose file:
-
-- `GOOGLE_SHEETS_CLIENT_ID`
-- `GOOGLE_SHEETS_CLIENT_SECRET`
-- `GOOGLE_SHEETS_REDIRECT_URL`
-
-Voila! You have successfully enabled the Google Sheets integration in your self-hosted Formbricks instance. Now you can follow the steps mentioned in [Google Sheets Integration with Formbricks](/developer-docs/integrations/google-sheets) section to link a Google Sheet with Formbricks.
-
-## Notion:
-
-Enabling the Notion Integration in a self-hosted environment requires a setup using Notion account and changing the environment variables of your Formbricks instance.
-
-1. Sign up for a **[Notion](https://www.notion.so/)** account, if you don't have one already.
-2. Go to the **[my integrations](https://www.notion.so/my-integrations)** page and click on **New integration**.
-3. Fill up the basic information like **Name**, **Logo** and click on **Submit**.
-4. Now, click on **Distribution** tab on the sidebar. A text will appear which will ask you to make the integration public. Click on that toggle button. A form will appear below the text.
-5. Now provide it the details such as requested. Under **Redirect URIs** field:
- - If you are running formbricks locally, you can enter `http://localhost:3000/api/v1/integrations/notion/callback`.
- - Or, you can enter `https:///api/v1/integrations/notion/callback`
-6. Once you've filled all the necessary details, click on **Submit**.
-7. Now just copy from the screen the **Client ID** and **Client secret** for your integration & add it to your **Formbricks environment variables** as in the docker compose file:
- - `NOTION_OAUTH_CLIENT_ID` - OAuth Client ID
- - `NOTION_OAUTH_CLIENT_SECRET` - OAuth Client Secret
-
-Voila! You have successfully enabled the Notion integration in your self-hosted Formbricks instance. Now you can follow the steps mentioned in [Notion Integration with Formbricks](/developer-docs/integrations/notion) section to link your Notion with Formbricks.
-
-## n8n
-
-Enabling the n8n integration in a self-hosted environment requires a new workflow setup using n8n and changing the environment variables of your Formbricks instance.
-
-1.Setup your n8n workflow: Go to [n8n.io](https://n8n.io) and create a new workflow. Search for “Formbricks” to get started:
-
-
-
-2.Connect Formbricks with n8n: Now, you have to connect n8n with Formbricks via an API Key:
-
-
-
-3. Click on Create New Credentail button to add your host and API Key
-
-
-
-Now you need an API key. Please refer to the [API Key Setup](/additional-features/api#how-to-generate-an-api-key) page to learn how to create one.
-
-Once you copied it in the API Key field, hit Save button to test the connection and save the credentials.
-
-
-
-4. Select Event: Next, you can choose the event you want to trigger the node on. You can select multiple events:
-
-
-
-Here, we are adding `Response Finished` as an event, which will trigger when the survey has been filled out.
-
-5. Select Survey: Next, you can choose from all the surveys you have created in this environment. You can select multiple surveys:
-
-
-
-Here, we are selecting two surveys.
-
-
-
-6. Test your trigger: In order to set up n8n you'll need a test response in the selected survey. This allows you to select the individual values of each response in your workflow. If you have Formbricks running locally and you want to set up an app survey, you can use our [Demo App](/contributing/demo) to trigger a survey and submit a response.
-
-
-
-Next, click on Listen for event button.
-
-
-
-Then, go to the survey which you selected. Fill it out, and wait for the particular event to trigger (in this case it's `Response Finished`). Once the event is triggered you will see the response that you filled out in the survey.
-
-
-
-Now you have all the data you need at hand. The next steps depend on what you want to do with it. In this tutorial, we will send submissions to a discord channel:
-
-7. Add discord to your workflow: Click on the plus and search `Discord`.
-
-
-
-Fill in the `Webhook URL` and the `Content` that you want to receive in the respective discord channel. Next, click on `Execute Node` button to test the node.
-
-
-
-Once the execution is successful, you'll receive the content in the discord channel.
-
-
-
-Voila! You have successfully enabled the n8n integration in your self-hosted Formbricks instance. Now you can follow the steps mentioned in the [Formbricks](/developer-docs/integrations/n8n) Integrations section to know more about the capabilities with Formbricks with n8n.
-
-## Slack
-
-Enabling the Slack Integration in a self-hosted environment requires a setup using slack workspace account and changing the environment variables of your Formbricks instance.
-
- Make sure your self hosted Formbricks instance works with SSL as Slack requires it.
-
-1. Create a Slack workspace if you don't have one already.
-2. Go to the [Your apps](https://api.slack.com/apps) page and **Create New App**.
-3. Click on **From Scratch** and provide the **App Name** and select your workspace in **Pick a workspace to develop your app in:** dropdown. Click on **Create App**.
-4. Go to the **OAuth & Permissions** tab on the sidebar and add the following **Bot Token Scopes**:
-
- - `channels:read`
- - `groups:read`
- - `chat:write`
- - `chat:write.public`
- - `chat:write.customize`
-
-5. Add the **Redirect URLs** under **OAuth & Permissions** tab. You can add the following URLs:
-
- - If you are running formbricks locally, you can enter `https://localhost:3000/api/v1/integrations/slack/callback`.
- - Or, you can enter `https:///api/v1/integrations/slack/callback`
-
-6. Now, click on **Install to Workspace** and **Allow** the permissions.
-7. Go to the **Basic Information** tab on the sidebar and copy the **Client ID** and **Client Secret**. Copy them & add it to your **Formbricks environment variables** as in the docker compose file:
-
-- `SLACK_CLIENT_ID` - OAuth Client ID
-- `SLACK_CLIENT_SECRET` - OAuth Client Secret
-
-8. Now, you need to enable the public distribution of your app. Go to the **Basic Information** tab and click on the **Manage distribution** button and click on the "Distribute App".
-9. Scroll down to the **Share your app with other workspaces** section, complete the checklist and click on the **Activate public distribution** button.
-
-Voila! You have successfully enabled the Slack integration in your self-hosted Formbricks instance. Now you can follow the steps mentioned in the [Slack Integration](/developer-docs/integrations/slack) section to link a Slack workspace with Formbricks.
-
-## Zapier
-
-1. Setup your Zap: Go to [zapier.com](https://zapier.com/) and create a new Zap. Search for “Formbricks” to get started:
-
-
-
-Then, choose the event you want to trigger the Zap on:
-
-
-
-1. Connect Formbricks with Zapier: You have to connect Zapier with Formbricks via an API Key:
-
-
-
-
-Now you need an API key. Please refer to the [API Key Setup](/developer-docs/rest-api##how-to-generate-an-api-key) page to learn how to create one.
-
-Once you copied it in the newly opened Zapier window, you will be connected:
-
-
-
-Voila! You have successfully configured Zapier to work with your self-hosted Formbricks instance. Now you can follow the steps mentioned in the [Zapier Integration](/developer-docs/integrations/zapier) section to connect it with your Formbricks app and see it live.
-
----
diff --git a/apps/docs/app/self-hosting/migration-guide/page.mdx b/apps/docs/app/self-hosting/migration-guide/page.mdx
deleted file mode 100644
index f8bb9a0fdf..0000000000
--- a/apps/docs/app/self-hosting/migration-guide/page.mdx
+++ /dev/null
@@ -1,1273 +0,0 @@
-export const metadata = {
- title: "Migrating Formbricks to the Latest Version",
- description:
- "Each Latest Version of Formbricks comes with an exciting set of new features & functionality while cutting down significantly on the bugs at the same time! No need to build the image again! This guide will help you migrate your existing Formbricks instance to the up-to-date instance",
-};
-
-#### Self-Hosting
-
-# Migration Guide
-
-## v3.1
-
-
- We released a new automatic data migration approach with Formbricks 3.0. If you are on a version older than v2.7, you need to migrate step-by-step through the earlier versions first (e.g. 2.4 → 2.5 → 2.6 → 2.7). After you have reached v2.7, you can upgrade directly to any v3.x and future release without performing each intermediate migration.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v3.1_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-When you start the latest version of Formbricks, it will automatically detect and run any necessary data migrations during startup. There is no need to run any manual migration steps or pull any separate migration images.
-
-5. Access your updated instance
-
-Once the containers are up and running, simply navigate to the same URL as before to access your fully migrated Formbricks instance.
-
-That’s it! The new workflow ensures that your Formbricks instance will always remain up-to-date with the latest schema changes as soon as you run the updated container.
-
-## v3.0
-
-
- **Don't upgrade to 3.0 if you need SSO, user identification or cluster support**
-
-With Formbricks 3.0, we're making some strategic changes to ensure long-term sustainability while keeping our core commitment to open source. While the Community Edition got more powerful, we're moving some advanced features to the Enterprise Edition.
-
-If you update to 3.0 and run the data migration, there IS NO WAY BACK to 2.7.2 - if you need to use SSO or one of the other previously free features, either stick with 2.7.x or reach out for a custom quote.
-
-
-
-
- This major release introduces a new improved approach for data migrations. If you are on a version older than v2.7, you need to migrate step-by-step through the earlier versions first (e.g. 2.4 → 2.5 → 2.6 → 2.7). After you have reached v2.7, you can upgrade directly to any v3.x and future release without performing each intermediate migration.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v3.0_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-When you start the latest version of Formbricks, it will automatically detect and run any necessary data migrations during startup. There is no need to run any manual migration steps or pull any separate migration images.
-
-5. Access your updated instance
-
-That’s it! Once the containers are up and running, simply navigate to the same URL as before to access your fully migrated Formbricks instance.
-
-## v2.7
-
-
- This release sets the foundation for our upcoming AI features, currently in private beta. Formbricks now requires the `pgvector` extension to be installed in the PostgreSQL database. For users of our one-click setup, simply use the `pgvector/pgvector:pg15` image instead of `postgres:15-alpine`.
-
-
-Formbricks v2.7 includes all the features and improvements developed by the community during hacktoberfest 2024. Additionally we introduce an advanced team-based access control system (requires Formbricks Enterprise Edition).
-
-### Additional Updates
-
-If you previously used organization-based access control (enterprise feature) as well as the `DEFAULT_ORGANIZATION_ROLE` environment variable, make sure to update the value to one of the following roles: `owner`, `manager`, `member`. Read more about the new roles in the [Docs](/global/access-roles).
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.7_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. If you use an older `docker-compose.yml` file from the one-click setup, modify it to use the `pgvector/pgvector:pg15` image instead of `postgres:15-alpine`:
-
-```yaml
-services:
- postgres:
- image: pgvector/pgvector:pg15
- volumes:
- - postgres:/var/lib/postgresql/data
- environment:
- - POSTGRES_DB=postgres
- - POSTGRES_USER=postgres
- - POSTGRES_PASSWORD=postgres
- ports:
- - 5432:5432
-```
-
-3. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-4. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-5. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-6. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:latest && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.7" \
- ghcr.io/formbricks/data-migrations:v2.7.0
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-7. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-## v2.6
-
-Formbricks v2.6 introduces advanced logic jumps for surveys, allowing you to add more advanced branching logic to your surveys including variables, and/or conditions and many more. This release also includes a lot of bug fixes, big performance improvements to website and app surveys and a lot of stability improvements.
-
-
- This release includes the last step of the server-side action tracking deprecation (previously used for
- segment filtering by performed actions). The migrations included in this release will delete all tracked actions from the database. If you still need these action records, please make sure to export them before upgrading.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.6_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:latest && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.6" \
- ghcr.io/formbricks/data-migrations:v2.6.0
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-## v2.5
-
-Formbricks v2.5 allows you to visualize responses in a data table format. This release also includes a few bug fixes and performance improvements.
-
-
- This release will fix the inconsistency of CTA and consent question values in case of skipping the question. The value will be set to empty string instead of "dismissed" in order to make it consistent with other questions.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.5_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:latest && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.5" \
- ghcr.io/formbricks/data-migrations:v2.5.3
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-## v2.4
-
-Formbricks v2.4 allows you to create multiple endings for your surveys and decide which ending the user should see based on logic jumps. This release also includes many bug fixes and performance improvements.
-
-
- This release will drop support for advanced targeting (enterprise targeting for app surveys) with actions (e.g. only target users that triggered action x 3 times in the last month). This means that actions can still be used as triggers, but will no longer be stored on the server in order to improve the overall performance of the Formbricks system.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.4_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:v2.4.3 && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.4" \
- ghcr.io/formbricks/data-migrations:v2.4.3
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-### Additional Updates
-
-- The `CRON_SECRET` environment variable is now required to improve the security of the internal cron APIs. Please make sure that the variable is set in your environment / docker-compose.yml. You can use `openssl rand -hex 32` to generate a secure secret.
-
-## v2.3
-
-Formbricks v2.3 includes new color options for rating questions, improved multi-language functionality for Chinese (Simplified & Traditional), and various bug fixes and performance improvements.
-
-### Steps to Migrate
-
-
- You only need to run the data migration if you have multi language surveys set up in the Chinese language (`zh`). If you don't have any surveys in Chinese, you can skip the data migration step.
-
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.3_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:v2.3.0 && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.3" \
- ghcr.io/formbricks/data-migrations:v2.3.0
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-### Additional Updates
-
-The feature to create short urls in Formbricks is now deprecated. Previously generated short urls will keep working for now but we recommend to use the long urls instead. Redirect support for short urls will be removed in a future release.
-
-## v2.2
-
-Formbricks v2.2 introduces XM research presets into your products with a brand new product onboarding. Our objective is to make user research “obviously easy”, industry by industry. And we're starting with Software-as-a-Service and E-Commerce.
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.2_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:v2.2 && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.2" \
- ghcr.io/formbricks/data-migrations:v2.2
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-### Changes in Environment Variables
-
-- `ONBOARDING_DISABLED` is now deprecated since we replaced the user onboarding with a product onboarding that only runs when creating a new product.
-
-## v2.1
-
-Formbricks v2.1 introduces more options for creating No-Code Actions and lays the foundation for easier self-hosting of Formbricks starting with an Onboarding for fresh instances.
-
-
- To improve the user experience in self-hosting instances and to simplify setup, we are moving to a single organization approach for self-hosting instances with this release. This will allow self-hosters to centrally manage their instance and more easily restrict access to the instance. We will soon introduce a new permissions system that will allow more granular access to projects and other resources within an organization. If you have created multiple organizations in the past, you will still be able to switch between them in the UI, but don't have an option to create new organizations.
- between them in the UI, but don't have an option to create new organizations.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.1_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:v2.1.0 && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.1" \
- ghcr.io/formbricks/data-migrations:v2.1.0
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-### Changes in Environment Variables
-
-- `SIGNUP_DISABLED` is now deprecated since self-hosting instaces have signup disabled by default and new users can only be invited by the organization owner or admin.
-- `DEFAULT_TEAM_ID` got renamed to `DEFAULT_ORGANIZATION_ID`
-- `DEFAULT_TEAM_ROLE` got renamed to `DEFAULT_ORGANIZATION_ROLE`
-
-## v2.0
-
-Formbricks v2.0 comes with huge features such as Multi-Language Surveys and Advanced Styling for Surveys. We have also shipped various optimisations, bug fixes & smaller fixes on the way to make your experience more seamless. This guide will help you migrate your existing Formbricks instance to v2.0 without any hassles or build errors.
-
-
- This upgrade requires a **data migration**. Please make sure to backup your database before proceeding with the upgrade. Follow the below steps thoroughly to upgrade your Formbricks instance to v2.0.
-
-
-
- If you've used the Formbricks Enterprise Edition with a free beta license key, your instance will be downgraded to the Community Edition 2.0. You can find all license details on the [license page](/self-hosting/license/).
-
-
-
- We are moving from DockerHub to Github Packages for our images. If you are still pulling the images from DockerHub please change `image: formbricks/formbricks:latest` to `image:ghcr.io/formbricks/formbricks:latest` in your `docker-compose.yml` file.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.0_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose pull
-```
-
-
-
-
-3. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-4. Restarting the containers with the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-5. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ls`
-
-
-
-
-```bash
-docker pull ghcr.io/formbricks/data-migrations:v2.0.3 && \
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v2.0" \
- ghcr.io/formbricks/data-migrations:v2.0.3
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-### App Surveys with @formbricks/js
-
-From this upgrade, we now **dynamically fetch** the package from our API endpoint and updated the package entrypoints to support both app and website surveys so that you always have the latest version of the package (v2.0.0+).
-
-**Old approach:** (v1.6.5)
-
-
-
-
-```ts
-import formbricks from "@formbricks/js/website";
-
-formbricks.init({
- environmentId: "",
- apiHost: "",
- // userId is not supported here
-});
-```
-
-
-
-
-App surveys:
-
-
-
-
-```ts
-import formbricks from "@formbricks/js/app";
-
-formbricks.init({
- environmentId: "",
- apiHost: "",
- userId: "", // required
-});
-```
-
-
-
-
-## v1.6
-
-Formbricks v1.6 comes with a big new features like Advanced Targeting & Segmentation of your end-users along with on-the-fly triggers for surveys and a ton of stability improvements & features. This also involves a few changes in our environment variables. This guide will help you migrate your existing Formbricks instance to v1.6 without any hassles or build errors.
-
-
- This upgrade requires a **data migration**. Please make sure to backup your database before proceeding with the upgrade. Follow the below steps thoroughly to upgrade your Formbricks instance to v1.6.
-
-
-### Steps to Migrate
-
-This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly.
-
-To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located.
-
-1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database:
-
-
-
-
-```bash
-docker exec formbricks-quickstart-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v1.6_$(date +%Y%m%d_%H%M%S).dump
-```
-
-
-
-
-
- If you run into “No such container”, use `docker ps` to find your container name, e.g. `formbricks_postgres_1`.
-
-
-
- If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a restore scenario you will need to use `psql` then with an empty `formbricks` database.
-
-
-2. Stop the running Formbricks instance & remove the related containers:
-
-
-
-
-```bash
-docker compose down
-```
-
-
-
-
-3. Restarting the containers will automatically pull the latest version of Formbricks:
-
-
-
-
-```bash
-docker compose up -d
-```
-
-
-
-
-4. Now let's migrate the data to the latest schema:
-
-To find your Docker Network name for your Postgres Database, find it using `docker network ps`
-
-
-
-
-```bash
-docker run --rm \
- --network=formbricks_default \
- -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \
- -e UPGRADE_TO_VERSION="v1.6" \
- ghcr.io/formbricks/data-migrations:v1.6.1
-```
-
-
-
-
-The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times.
-
-5. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before.
-
-#### Restoring the database after a failed upgrade
-
-
-
-
-```bash
-docker exec -i formbricks-quickstart-postgres-1 pg_restore --clean -U postgres -v -d formbricks < formbricks_pre_v1.6_.dump
-```
-
-
-
-
-Replace the path to `formbricks_pre_v1.6_.dump` with the exact path to your `.dump` file.
-
-This will wipe the database and restore from the `.dump` file
-
-### App Surveys with @formbricks/js
-
-If you are using the `@formbricks/js` package, please make sure to update it to version `~1.6.5` to use the latest features and improvements.
-
-
- Currently the package needs to be pinned to `~1.6.5`, see [this issue](https://github.com/formbricks/formbricks/issues/2273).
-
-
-
-
-
-```bash
-npm install @formbricks/js@~1.6.5
-```
-
-
-
-
-### Deprecated Environment Variables
-
-| Environment Variable | Comments |
-| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GITHUB_AUTH_ENABLED | Was used to enable GitHub OAuth, but from v1.6, you can just set the `GITHUB_ID` and `GITHUB_SECRET` environment variables. |
-| GOOGLE_AUTH_ENABLED | Was used to enable Google OAuth, but from v1.6, you can just set the `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` environment variables. |
-| AZUREAD_AUTH_ENABLED | Was used to enable AzureAD OAuth, but from v1.6, you can just set the `AZUREAD_CLIENT_ID`, `AZUREAD_CLIENT_SECRET` & `AZUREAD_TENANT_ID` environment variables. |
-
-## v1.2
-
-Formbricks v1.2 ships a lot of features targeting our Link Surveys. We have also improved our security posture to be as robust as ever. However, it also comes with a few breaking changes specifically with the environment variables. This guide will help you migrate your existing Formbricks instance to v1.2 without any hassles or build errors.
-
-### New Environment Variables
-
-| Environment Variable | Required | Recommended Generation | Comments |
-| -------------------- | -------- | ----------------------- | ----------------------------------------------------------- |
-| ENCRYPTION_KEY | true | `openssl rand -hex 32` | Needed for 2 Factor Authentication |
-| SHORT_URL_BASE | false | `` | Needed if you want to enable shorter links for Link Surveys |
-
-### Deprecated / Removed Environment Variables
-
-| Environment Variable | Comments |
-| -------------------- | ------------------------------------------------------------------------- |
-| SURVEY_BASE_URL | The WEBAPP_URL is now used to determine the survey base url in all places |
-
-## v1.1
-
-Formbricks v1.1 includes a lot of new features and improvements. However, it also comes with a few breaking changes specifically with the environment variables. This guide will help you migrate your existing Formbricks instance to v1.1 without losing any data.
-
-### Renamed Environment Variables
-
-This was introduced because we got a lot of requests from our users for the ability to define some common environment variables at runtime itself i.e. without having to rebuild the image for the changes to take effect.
-This is now possible with v1.1. However, due to Next.JS best practices, we had to deprecate the prefix **NEXT*PUBLIC*** in the following environment variables:
-
-| till v1.0 | v1.1 |
-| --------------------------------------- | --------------------------- |
-| NEXT_PUBLIC_EMAIL_VERIFICATION_DISABLED | EMAIL_VERIFICATION_DISABLED |
-| NEXT_PUBLIC_PASSWORD_RESET_DISABLED | PASSWORD_RESET_DISABLED |
-| NEXT_PUBLIC_SIGNUP_DISABLED | SIGNUP_DISABLED |
-| NEXT_PUBLIC_INVITE_DISABLED | INVITE_DISABLED |
-| NEXT_PUBLIC_PRIVACY_URL | PRIVACY_URL |
-| NEXT_PUBLIC_TERMS_URL | TERMS_URL |
-| NEXT_PUBLIC_IMPRINT_URL | IMPRINT_URL |
-| NEXT_PUBLIC_GITHUB_AUTH_ENABLED | GITHUB_AUTH_ENABLED |
-| NEXT_PUBLIC_GOOGLE_AUTH_ENABLED | GOOGLE_AUTH_ENABLED |
-| NEXT_PUBLIC_WEBAPP_URL | WEBAPP_URL |
-| NEXT_PUBLIC_IS_FORMBRICKS_CLOUD | IS_FORMBRICKS_CLOUD |
-| NEXT_PUBLIC_SURVEY_BASE_URL | SURVEY_BASE_URL |
-
-
- Please note that their values and the logic remains exactly the same. Only the prefix has been deprecated. The other environment variables remain the same as well.
-
-
-### Deprecated Environment Variables
-
-- **NEXT_PUBLIC_VERCEL_URL**: Was used as Vercel URL (used instead of WEBAPP_URL), but from v1.1, you can just set the WEBAPP_URL environment variable to your Vercel URL.
-- **RAILWAY_STATIC_URL**: Was used as Railway Static URL (used instead of WEBAPP_URL), but from v1.1, you can just set the WEBAPP_URL environment variable.
-- **RENDER_EXTERNAL_URL**: Was used as an external URL to Render (used instead of WEBAPP_URL), but from v1.1, you can just set the WEBAPP_URL environment variable.
-- **HEROKU_APP_NAME**: Was used to build the App name on a Heroku hosted webapp, but from v1.1, you can just set the WEBAPP_URL environment variable.
-- **NEXT_PUBLIC_WEBAPP_URL**: Was used for the same purpose as WEBAPP_URL, but from v1.1, you can just set the WEBAPP_URL environment variable.
-- **PRISMA_GENERATE_DATAPROXY**: Was used to tell Prisma that it should generate the runtime for Dataproxy usage. But its officially deprecated now.
-
-### Helper Shell Script
-
-For a seamless migration, below is a shell script for your self-hosted instance that will automatically update your environment variables to be compliant with the new naming conventions.
-
-### Docker & Single Script Setup
-
-Now that these variables can be defined at runtime, you can append them inside your `x-environment` in the `docker-compose.yml` itself.
-For a more detailed guide on these environment variables, please refer to the [Important Runtime Variables](/self-hosting/docker#important-run-time-variables) section.
-
-
-
-
-```yaml {{ title: 'docker-compose.yml' }}
-version: "3.3"
-x-environment: &environment
- environment:
- # The url of your Formbricks instance used in the admin panel
- WEBAPP_URL:
-
- # Required for next-auth. Should be the same as WEBAPP_URL
- NEXTAUTH_URL:
-
- # PostgreSQL DB for Formbricks to connect to
- DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public"
-
- # NextJS Auth
- # @see: https://next-auth.js.org/configuration/options#nextauth_secret
- # You can use: `openssl rand -hex 32` to generate one
- NEXTAUTH_SECRET:
-
- # PostgreSQL password
- POSTGRES_PASSWORD: postgres
-
- # Email Configuration
- MAIL_FROM:
- SMTP_HOST:
- SMTP_PORT:
- SMTP_SECURE_ENABLED:
- SMTP_USER:
- SMTP_PASSWORD:
-
- # Uncomment the below and set it to 1 to disable Email Verification for new signups
- # EMAIL_VERIFICATION_DISABLED:
-
- # Uncomment the below and set it to 1 to disable Password Reset
- # PASSWORD_RESET_DISABLED:
-
- # Uncomment the below and set it to 1 to disable Signups
- # SIGNUP_DISABLED:
-
- # Uncomment the below and set it to 1 to disable loging in with email
- # EMAIL_AUTH_DISABLED:
-
- # Uncomment the below and set it to 1 to disable Invites
- # INVITE_DISABLED:
-
- # Uncomment the below and set a value to have your own Privacy Page URL on the signup & login page
- # PRIVACY_URL:
-
- # Uncomment the below and set a value to have your own Terms Page URL on the auth and the surveys page
- # TERMS_URL:
-
- # Uncomment the below and set a value to have your own Imprint Page URL on the auth and the surveys page
- # IMPRINT_URL:
-
- # Uncomment the below and set to 1 if you want to enable GitHub OAuth
- # GITHUB_AUTH_ENABLED:
- # GITHUB_ID:
- # GITHUB_SECRET:
-
- # Uncomment the below and set to 1 if you want to enable Google OAuth
- # GOOGLE_AUTH_ENABLED:
- # GOOGLE_CLIENT_ID:
- # GOOGLE_CLIENT_SECRET:
-```
-
-
-
-
-Did we miss something? Are you still facing issues migrating your app? [Join our Github Discussions](https://github.com/formbricks/formbricks/discussions) We'd be happy to help!
diff --git a/apps/docs/app/self-hosting/overview/page.mdx b/apps/docs/app/self-hosting/overview/page.mdx
deleted file mode 100644
index 8b2e1d3638..0000000000
--- a/apps/docs/app/self-hosting/overview/page.mdx
+++ /dev/null
@@ -1,52 +0,0 @@
-export const metadata = {
- title: "Comprehensive Guide to Self-Hosting Formbricks",
- description:
- "Discover versatile options to deploy Formbricks tailored to your expertise level. From Ubuntu setups using shell scripts, swift Docker deployments, to manual source configurations, harness the flexibility and power of Formbricks to fit your unique hosting needs. Dive in today!",
-};
-
-#### Self-Hosting
-
-# Overview
-
-Welcome to Formbricks, the versatile surveying tool designed to meet the needs of both individuals and enterprises.
-
-Running Formbricks requires at least 1 vCPU, 2 GBs of RAM, 8 GBs of SSD
-
-The Formbricks server must be run with a valid HTTPS certificate.
-
-This section covers the below:
-
-- [**One Click Setup**](/self-hosting/one-click): Quickly set up a production instance of Formbricks on Ubuntu with our convenient shell script.
-- [**Docker Setup**](/self-hosting/docker): Start using Formbricks quickly with our pre-built Docker image.
-- [**Migration Guide**](/self-hosting/migration): Migrate your existing Formbricks instance to the latest version hassle-free.
-- [**Configuration**](/self-hosting/configuration): Customize your Formbricks installation with custom configurations.
-- [**Integrations**](/self-hosting/integrations): Configure third-party integrations with your self-hosted Formbricks instance.
-- [**All things Licensing**](/self-hosting/license): Learn more about our AGPL Formbricks Core and its open-source license & Unlock advanced features tailored for larger teams and enterprises with the EE License.
-
-## Understanding our Offerings:
-
-Whether you're looking for a self-hosted solution or prefer cloud hosting, Formbricks has you covered. Below is a concise overview of our offerings:
-
-- **Cloud Hosting**: Enjoy hassle-free deployment and management with our cloud hosting option. Available at https://app.formbricks.com, our cloud hosting solution is perfect for users who prefer a managed service.
-- **Self-Hosting Free**: Get started quickly with our free self-hosting option, perfect for personal and small-scale usage.
-- **Self-Hosting with Enterprise License**: Unlock advanced functionality tailored for larger teams and enterprises by opting for our Enterprise Edition license.
-
-### **Licensing Options Comparison**:
-
-For Self Hosting, our core product is free however certain advanced features are a part of our Enterprise License offering. Please refer this table to understand if you want the features that are a part of it and then we’ll reach out to you!
-
-| Feature | Cloud Hosting | Self-Hosting Free | Self-Hosting EE License |
-| ----------------------- | -------------------------- | ----------------- | ----------------------- |
-| Setup & Maintenance | Managed | DIY | DIY |
-| Advanced Functionality | Full (Optional Paid plans) | Most of them | All Advanced Features |
-| Support & Updates | Included | Community | Prioritised |
-| Price | Subscription | Free | Fixed Per month |
-| Customization & Control | Limited | Moderate | Full |
-
-For more queries around licensing, reach out to us at hola@formbricks.com
-
-Please note that regardless of the method you choose, Formbricks is designed to be easy-to-use and flexible. So choose the method that best fits your comfort level and requirements, and start leveraging the **power of Formbricks** today!
-
----
-
-**Can’t figure it out?**: **[Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions)**
diff --git a/apps/docs/components/button.tsx b/apps/docs/components/button.tsx
deleted file mode 100644
index 831378c85d..0000000000
--- a/apps/docs/components/button.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import clsx from "clsx";
-import Link from "next/link";
-
-function ArrowIcon(props: React.ComponentPropsWithoutRef<"svg">): React.JSX.Element {
- return (
-
- );
-}
-
-const variantStyles = {
- primary:
- "rounded-full bg-slate-900 py-1 px-3 text-white hover:text-white hover:bg-slate-700 dark:bg-teal-400/10 dark:text-teal-400 dark:ring-1 dark:ring-inset dark:ring-teal-400/20 dark:hover:bg-teal-400/10 dark:hover:text-teal-300 dark:hover:ring-teal-300",
- secondary:
- "rounded-full bg-slate-100 py-1 px-3 text-slate-900 hover:bg-slate-200 dark:bg-slate-800/40 dark:text-slate-400 dark:ring-1 dark:ring-inset dark:ring-slate-800 dark:hover:bg-slate-800 dark:hover:text-slate-300",
- filled:
- "rounded-full bg-slate-900 py-1 px-3 text-white hover:bg-slate-700 dark:bg-teal-500 dark:text-white dark:hover:bg-teal-400",
- outline:
- "rounded-full py-1 px-3 text-slate-700 ring-1 ring-inset ring-slate-900/10 hover:bg-slate-900/2.5 hover:text-slate-900 dark:text-slate-400 dark:ring-white/10 dark:hover:bg-white/5 dark:hover:text-white",
- text: "text-teal-500 hover:text-teal-700 dark:text-teal-400 dark:hover:text-teal-300",
-};
-
-type ButtonProps = {
- variant?: keyof typeof variantStyles;
- arrow?: "left" | "right";
-} & (
- | React.ComponentPropsWithoutRef
- | (React.ComponentPropsWithoutRef<"button"> & { href?: undefined })
- );
-
-export function Button({ variant = "primary", className, children, arrow, ...props }: ButtonProps): React.JSX.Element {
- const buttonClassName = clsx(
- "inline-flex gap-0.5 justify-center items-center overflow-hidden font-medium transition text-center",
- variantStyles[variant],
- className,
- "px-5 py-2.5 text-sm"
- );
-
- const arrowIcon = (
-
- );
-
- const inner = (
- <>
- {arrow === "left" && arrowIcon}
- {children}
- {arrow === "right" && arrowIcon}
- >
- );
-
- if (typeof props.href === "undefined") {
- return (
-
- {inner}
-
- );
- }
-
- return (
-
- {inner}
-
- );
-}
diff --git a/apps/docs/components/code.tsx b/apps/docs/components/code.tsx
deleted file mode 100644
index 916de9e8a5..0000000000
--- a/apps/docs/components/code.tsx
+++ /dev/null
@@ -1,342 +0,0 @@
-"use client";
-
-import { Tab } from "@headlessui/react";
-import clsx from "clsx";
-import { Children, createContext, isValidElement, useContext, useEffect, useRef, useState } from "react";
-import { create } from "zustand";
-import { Tag } from "@/components/tag";
-
-const languageNames: Record = {
- js: "JavaScript",
- ts: "TypeScript",
- javascript: "JavaScript",
- typescript: "TypeScript",
- php: "PHP",
- python: "Python",
- ruby: "Ruby",
- go: "Go",
-};
-
-const getPanelTitle = ({ title, language }: { title?: string; language?: string }) => {
- if (title) {
- return title;
- }
- if (language && language in languageNames) {
- return languageNames[language];
- }
- return "Code";
-};
-
-function ClipboardIcon(props: React.ComponentPropsWithoutRef<"svg">) {
- return (
-
- );
-}
-
-function CopyButton({ code }: { code: string }) {
- const [copyCount, setCopyCount] = useState(0);
- const copied = copyCount > 0;
-
- useEffect(() => {
- if (copyCount > 0) {
- const timeout = setTimeout(() => { setCopyCount(0); }, 1000);
- return () => {
- clearTimeout(timeout);
- };
- }
- }, [copyCount]);
-
- return (
- {
- void window.navigator.clipboard.writeText(code).then(() => {
- setCopyCount((count) => count + 1);
- });
- }}>
-
-
- Copy
-
-
- Copied!
-
-
- );
-}
-
-function CodePanelHeader({ tag, label }: { tag?: string; label?: string }): React.ReactNode | null {
- if (!tag && !label) {
- return null;
- }
-
- return (
-