From e810e3833356d16fcaed5338679fcda260e032be Mon Sep 17 00:00:00 2001
From: Harsh Bhat <90265455+harshsbhat@users.noreply.github.com>
Date: Thu, 3 Jul 2025 19:10:19 +0530
Subject: [PATCH] chore: change pricing (#5850)
Co-authored-by: Johannes
---
apps/web/lib/constants.ts | 4 +-
apps/web/locales/de-DE.json | 13 ++
apps/web/locales/en-US.json | 13 ++
apps/web/locales/fr-FR.json | 13 ++
apps/web/locales/pt-BR.json | 13 ++
apps/web/locales/pt-PT.json | 13 ++
apps/web/locales/zh-Hant-TW.json | 13 ++
.../modules/ee/billing/api/lib/constants.ts | 164 +++++++++---------
.../ee/billing/components/pricing-card.tsx | 50 +++---
.../ee/billing/components/pricing-table.tsx | 34 ++--
10 files changed, 202 insertions(+), 128 deletions(-)
diff --git a/apps/web/lib/constants.ts b/apps/web/lib/constants.ts
index f877709ba6..fc344e5243 100644
--- a/apps/web/lib/constants.ts
+++ b/apps/web/lib/constants.ts
@@ -233,8 +233,8 @@ export enum STRIPE_PROJECT_NAMES {
}
export enum STRIPE_PRICE_LOOKUP_KEYS {
- STARTUP_MONTHLY = "formbricks_startup_monthly",
- STARTUP_YEARLY = "formbricks_startup_yearly",
+ STARTUP_MAY25_MONTHLY = "STARTUP_MAY25_MONTHLY",
+ STARTUP_MAY25_YEARLY = "STARTUP_MAY25_YEARLY",
SCALE_MONTHLY = "formbricks_scale_monthly",
SCALE_YEARLY = "formbricks_scale_yearly",
}
diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json
index 4376ffbce1..0c2794a353 100644
--- a/apps/web/locales/de-DE.json
+++ b/apps/web/locales/de-DE.json
@@ -316,6 +316,7 @@
"remove": "Entfernen",
"reorder_and_hide_columns": "Spalten neu anordnen und ausblenden",
"report_survey": "Umfrage melden",
+ "request_pricing": "Preise anfragen",
"request_trial_license": "Testlizenz anfordern",
"reset_to_default": "Auf Standard zurücksetzen",
"response": "Antwort",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10,000 monatliche Antworten",
+ "1000_monthly_responses": "1,000 monatliche Antworten",
"1500_monthly_responses": "1,500 monatliche Antworten",
+ "1_project": "1 Projekt",
+ "2000_contacts": "2,000 Kontakte",
"2000_monthly_identified_users": "2,000 monatlich identifizierte Nutzer",
"30000_monthly_identified_users": "30,000 monatlich identifizierte Nutzer",
"3_projects": "3 Projekte",
"5000_monthly_responses": "5,000 monatliche Antworten",
"5_projects": "5 Projekte",
+ "7500_contacts": "7,500 Kontakte",
"7500_monthly_identified_users": "7,500 monatlich identifizierte Nutzer",
"advanced_targeting": "Erweitertes Targeting",
"all_integrations": "Alle Integrationen",
@@ -993,14 +998,19 @@
"annually": "Jährlich",
"api_webhooks": "API & Webhooks",
"app_surveys": "In-app Umfragen",
+ "attribute_based_targeting": "Attributbasiertes Targeting",
"contact_us": "Kontaktiere uns",
"current": "aktuell",
"current_plan": "Aktueller Plan",
"current_tier_limit": "Aktuelles Limit",
+ "custom": "Benutzerdefiniert & Skalierung",
+ "custom_contacts_limit": "Benutzerdefiniertes Kontaktlimit",
"custom_miu_limit": "Benutzerdefiniertes MIU-Limit",
"custom_project_limit": "Benutzerdefiniertes Projektlimit",
+ "custom_response_limit": "Benutzerdefiniertes Antwortlimit",
"customer_success_manager": "Customer Success Manager",
"email_embedded_surveys": "Eingebettete Umfragen in E-Mails",
+ "email_follow_ups": "E-Mail Follow-ups",
"email_support": "E-Mail-Support",
"enterprise": "Enterprise",
"enterprise_description": "Premium-Support und benutzerdefinierte Limits.",
@@ -1012,6 +1022,8 @@
"free_description": "Unbegrenzte Umfragen, Teammitglieder und mehr.",
"get_2_months_free": "2 Monate gratis",
"get_in_touch": "Kontaktiere uns",
+ "hosted_in_frankfurt": "Gehostet in Frankfurt",
+ "ios_android_sdks": "iOS & Android SDK für mobile Umfragen",
"link_surveys": "Umfragen verlinken (teilbar)",
"logic_jumps_hidden_fields_recurring_surveys": "Logik, versteckte Felder, wiederkehrende Umfragen, usw.",
"manage_card_details": "Karteninformationen verwalten",
@@ -1027,6 +1039,7 @@
"remove_branding": "Branding entfernen",
"say_hi": "Sag Hi!",
"scale": "Scale",
+ "scale_and_enterprise": "Scale & Enterprise",
"scale_description": "Erweiterte Funktionen für größere Unternehmen.",
"startup": "Start-up",
"startup_description": "Alles in 'Free' mit zusätzlichen Funktionen.",
diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json
index bec5287b37..07cc84d7ba 100644
--- a/apps/web/locales/en-US.json
+++ b/apps/web/locales/en-US.json
@@ -316,6 +316,7 @@
"remove": "Remove",
"reorder_and_hide_columns": "Reorder and hide columns",
"report_survey": "Report Survey",
+ "request_pricing": "Request Pricing",
"request_trial_license": "Request trial license",
"reset_to_default": "Reset to default",
"response": "Response",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10000 Monthly Responses",
+ "1000_monthly_responses": "Monthly 1,000 Responses",
"1500_monthly_responses": "1500 Monthly Responses",
+ "1_project": "1 Project",
+ "2000_contacts": "2,000 Contacts",
"2000_monthly_identified_users": "2000 Monthly Identified Users",
"30000_monthly_identified_users": "30000 Monthly Identified Users",
"3_projects": "3 Projects",
"5000_monthly_responses": "5,000 Monthly Responses",
"5_projects": "5 Projects",
+ "7500_contacts": "7,500 Contacts",
"7500_monthly_identified_users": "7500 Monthly Identified Users",
"advanced_targeting": "Advanced Targeting",
"all_integrations": "All Integrations",
@@ -993,14 +998,19 @@
"annually": "Annually",
"api_webhooks": "API & Webhooks",
"app_surveys": "App Surveys",
+ "attribute_based_targeting": "Attribute-based Targeting",
"contact_us": "Contact Us",
"current": "Current",
"current_plan": "Current Plan",
"current_tier_limit": "Current Tier Limit",
+ "custom": "Custom & Scale",
+ "custom_contacts_limit": "Custom Contacts Limit",
"custom_miu_limit": "Custom MIU limit",
"custom_project_limit": "Custom Project Limit",
+ "custom_response_limit": "Custom Response Limit",
"customer_success_manager": "Customer Success Manager",
"email_embedded_surveys": "Email Embedded Surveys",
+ "email_follow_ups": "Email Follow-ups",
"email_support": "Email Support",
"enterprise": "Enterprise",
"enterprise_description": "Premium support and custom limits.",
@@ -1012,6 +1022,8 @@
"free_description": "Unlimited Surveys, Team Members, and more.",
"get_2_months_free": "Get 2 months free",
"get_in_touch": "Get in touch",
+ "hosted_in_frankfurt": "Hosted in Frankfurt",
+ "ios_android_sdks": "iOS & Android SDK for mobile surveys",
"link_surveys": "Link Surveys (Shareable)",
"logic_jumps_hidden_fields_recurring_surveys": "Logic Jumps, Hidden Fields, Recurring Surveys, etc.",
"manage_card_details": "Manage Card Details",
@@ -1027,6 +1039,7 @@
"remove_branding": "Remove Branding",
"say_hi": "Say Hi!",
"scale": "Scale",
+ "scale_and_enterprise": "Scale & Enterprise",
"scale_description": "Advanced features for scaling your business.",
"startup": "Startup",
"startup_description": "Everything in Free with additional features.",
diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json
index 02ac1b5e72..d8e8b4d6a2 100644
--- a/apps/web/locales/fr-FR.json
+++ b/apps/web/locales/fr-FR.json
@@ -316,6 +316,7 @@
"remove": "Retirer",
"reorder_and_hide_columns": "Réorganiser et masquer des colonnes",
"report_survey": "Rapport d'enquête",
+ "request_pricing": "Demander la tarification",
"request_trial_license": "Demander une licence d'essai",
"reset_to_default": "Réinitialiser par défaut",
"response": "Réponse",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10000 Réponses Mensuelles",
+ "1000_monthly_responses": "1000 Réponses Mensuelles",
"1500_monthly_responses": "1500 Réponses Mensuelles",
+ "1_project": "1 Projet",
+ "2000_contacts": "2 000 Contacts",
"2000_monthly_identified_users": "2000 Utilisateurs Identifiés Mensuels",
"30000_monthly_identified_users": "30000 Utilisateurs Identifiés Mensuels",
"3_projects": "3 Projets",
"5000_monthly_responses": "5,000 Réponses Mensuelles",
"5_projects": "5 Projets",
+ "7500_contacts": "7 500 Contacts",
"7500_monthly_identified_users": "7500 Utilisateurs Identifiés Mensuels",
"advanced_targeting": "Ciblage Avancé",
"all_integrations": "Toutes les intégrations",
@@ -993,14 +998,19 @@
"annually": "Annuellement",
"api_webhooks": "API et Webhooks",
"app_surveys": "Sondages d'application",
+ "attribute_based_targeting": "Ciblage basé sur les attributs",
"contact_us": "Contactez-nous",
"current": "Actuel",
"current_plan": "Plan actuel",
"current_tier_limit": "Limite de niveau actuel",
+ "custom": "Personnalisé et Échelle",
+ "custom_contacts_limit": "Limite de contacts personnalisé",
"custom_miu_limit": "Limite MIU personnalisé",
"custom_project_limit": "Limite de projet personnalisé",
+ "custom_response_limit": "Limite de réponse personnalisé",
"customer_success_manager": "Responsable de la réussite client",
"email_embedded_surveys": "Sondages intégrés par e-mail",
+ "email_follow_ups": "Relances par e-mail",
"email_support": "Support par e-mail",
"enterprise": "Entreprise",
"enterprise_description": "Soutien premium et limites personnalisées.",
@@ -1012,6 +1022,8 @@
"free_description": "Sondages illimités, membres d'équipe, et plus encore.",
"get_2_months_free": "Obtenez 2 mois gratuits",
"get_in_touch": "Prenez contact",
+ "hosted_in_frankfurt": "Hébergé à Francfort",
+ "ios_android_sdks": "SDK iOS et Android pour les sondages mobiles",
"link_surveys": "Sondages par lien (partageables)",
"logic_jumps_hidden_fields_recurring_surveys": "Sauts logiques, champs cachés, enquêtes récurrentes, etc.",
"manage_card_details": "Gérer les détails de la carte",
@@ -1027,6 +1039,7 @@
"remove_branding": "Supprimer la marque",
"say_hi": "Dis bonjour !",
"scale": "Échelle",
+ "scale_and_enterprise": "Échelle et Entreprise",
"scale_description": "Fonctionnalités avancées pour développer votre entreprise.",
"startup": "Startup",
"startup_description": "Tout est gratuit avec des fonctionnalités supplémentaires.",
diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json
index ebb80aa9c9..1fd900890b 100644
--- a/apps/web/locales/pt-BR.json
+++ b/apps/web/locales/pt-BR.json
@@ -316,6 +316,7 @@
"remove": "remover",
"reorder_and_hide_columns": "Reordenar e ocultar colunas",
"report_survey": "Relatório de Pesquisa",
+ "request_pricing": "Solicitar Preços",
"request_trial_license": "Pedir licença de teste",
"reset_to_default": "Restaurar para o padrão",
"response": "Resposta",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10000 Respostas Mensais",
+ "1000_monthly_responses": "1000 Respostas Mensais",
"1500_monthly_responses": "1500 Respostas Mensais",
+ "1_project": "1 Projeto",
+ "2000_contacts": "2.000 Contatos",
"2000_monthly_identified_users": "2000 Usuários Identificados Mensalmente",
"30000_monthly_identified_users": "30000 Usuários Identificados Mensalmente",
"3_projects": "3 Projetos",
"5000_monthly_responses": "5,000 Respostas Mensais",
"5_projects": "5 Projetos",
+ "7500_contacts": "7.500 Contatos",
"7500_monthly_identified_users": "7500 Usuários Identificados Mensalmente",
"advanced_targeting": "Mira Avançada",
"all_integrations": "Todas as Integrações",
@@ -993,14 +998,19 @@
"annually": "anualmente",
"api_webhooks": "API e Webhooks",
"app_surveys": "Pesquisas de App",
+ "attribute_based_targeting": "Segmentação Baseada em Atributos",
"contact_us": "Fale Conosco",
"current": "atual",
"current_plan": "Plano Atual",
"current_tier_limit": "Limite Atual de Nível",
+ "custom": "Personalizado e Escala",
+ "custom_contacts_limit": "Limite de Contatos Personalizado",
"custom_miu_limit": "Limite MIU personalizado",
"custom_project_limit": "Limite de Projeto Personalizado",
+ "custom_response_limit": "Limite de Resposta Personalizado",
"customer_success_manager": "Gerente de Sucesso do Cliente",
"email_embedded_surveys": "Pesquisas Incorporadas no Email",
+ "email_follow_ups": "Acompanhamentos por Email",
"email_support": "Suporte por Email",
"enterprise": "Empresa",
"enterprise_description": "Suporte premium e limites personalizados.",
@@ -1012,6 +1022,8 @@
"free_description": "Pesquisas ilimitadas, membros da equipe e mais.",
"get_2_months_free": "Ganhe 2 meses grátis",
"get_in_touch": "Entre em contato",
+ "hosted_in_frankfurt": "Hospedado em Frankfurt",
+ "ios_android_sdks": "SDK para iOS e Android para pesquisas móveis",
"link_surveys": "Link de Pesquisas (Compartilhável)",
"logic_jumps_hidden_fields_recurring_surveys": "Pulos Lógicos, Campos Ocultos, Pesquisas Recorrentes, etc.",
"manage_card_details": "Gerenciar Detalhes do Cartão",
@@ -1027,6 +1039,7 @@
"remove_branding": "Remover Marca",
"say_hi": "Diz oi!",
"scale": "escala",
+ "scale_and_enterprise": "Escala e Empresa",
"scale_description": "Recursos avançados pra escalar seu negócio.",
"startup": "startup",
"startup_description": "Tudo no Grátis com recursos adicionais.",
diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json
index 3f36d4e4b3..ee9b381b65 100644
--- a/apps/web/locales/pt-PT.json
+++ b/apps/web/locales/pt-PT.json
@@ -316,6 +316,7 @@
"remove": "Remover",
"reorder_and_hide_columns": "Reordenar e ocultar colunas",
"report_survey": "Relatório de Inquérito",
+ "request_pricing": "Pedido de Preços",
"request_trial_license": "Solicitar licença de teste",
"reset_to_default": "Repor para o padrão",
"response": "Resposta",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10000 Respostas Mensais",
+ "1000_monthly_responses": "1000 Respostas Mensais",
"1500_monthly_responses": "1500 Respostas Mensais",
+ "1_project": "1 Projeto",
+ "2000_contacts": "2,000 Contactos",
"2000_monthly_identified_users": "2000 Utilizadores Identificados Mensalmente",
"30000_monthly_identified_users": "30000 Utilizadores Identificados Mensalmente",
"3_projects": "3 Projetos",
"5000_monthly_responses": "5,000 Respostas Mensais",
"5_projects": "5 Projetos",
+ "7500_contacts": "7,500 Contactos",
"7500_monthly_identified_users": "7500 Utilizadores Identificados Mensalmente",
"advanced_targeting": "Segmentação Avançada",
"all_integrations": "Todas as Integrações",
@@ -993,14 +998,19 @@
"annually": "Anualmente",
"api_webhooks": "API e Webhooks",
"app_surveys": "Inquéritos da Aplicação",
+ "attribute_based_targeting": "Segmentação Baseada em Atributos",
"contact_us": "Contacte-nos",
"current": "Atual",
"current_plan": "Plano Atual",
"current_tier_limit": "Limite Atual do Nível",
+ "custom": "Personalizado e Escala",
+ "custom_contacts_limit": "Limite de Contactos Personalizado",
"custom_miu_limit": "Limite MIU Personalizado",
"custom_project_limit": "Limite de Projeto Personalizado",
+ "custom_response_limit": "Limite de Resposta Personalizado",
"customer_success_manager": "Gestor de Sucesso do Cliente",
"email_embedded_surveys": "Inquéritos Incorporados no Email",
+ "email_follow_ups": "Acompanhamentos por Email",
"email_support": "Suporte por Email",
"enterprise": "Empresa",
"enterprise_description": "Suporte premium e limites personalizados.",
@@ -1012,6 +1022,8 @@
"free_description": "Inquéritos ilimitados, membros da equipa e mais.",
"get_2_months_free": "Obtenha 2 meses grátis",
"get_in_touch": "Entre em contacto",
+ "hosted_in_frankfurt": "Hospedado em Frankfurt",
+ "ios_android_sdks": "SDK iOS e Android para inquéritos móveis",
"link_surveys": "Ligar Inquéritos (Partilhável)",
"logic_jumps_hidden_fields_recurring_surveys": "Saltos Lógicos, Campos Ocultos, Inquéritos Recorrentes, etc.",
"manage_card_details": "Gerir Detalhes do Cartão",
@@ -1027,6 +1039,7 @@
"remove_branding": "Remover Marca",
"say_hi": "Diga Olá!",
"scale": "Escala",
+ "scale_and_enterprise": "Escala e Empresa",
"scale_description": "Funcionalidades avançadas para escalar o seu negócio.",
"startup": "Inicialização",
"startup_description": "Tudo no plano Gratuito com funcionalidades adicionais.",
diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json
index 84564781b3..36192886f4 100644
--- a/apps/web/locales/zh-Hant-TW.json
+++ b/apps/web/locales/zh-Hant-TW.json
@@ -316,6 +316,7 @@
"remove": "移除",
"reorder_and_hide_columns": "重新排序和隱藏欄位",
"report_survey": "報告問卷",
+ "request_pricing": "請求定價",
"request_trial_license": "請求試用授權",
"reset_to_default": "重設為預設值",
"response": "回應",
@@ -980,12 +981,16 @@
},
"billing": {
"10000_monthly_responses": "10000 個每月回應",
+ "1000_monthly_responses": "1000 個每月回應",
"1500_monthly_responses": "1500 個每月回應",
+ "1_project": "1 個專案",
+ "2000_contacts": "2000 個聯絡人",
"2000_monthly_identified_users": "2000 個每月識別使用者",
"30000_monthly_identified_users": "30000 個每月識別使用者",
"3_projects": "3 個專案",
"5000_monthly_responses": "5000 個每月回應",
"5_projects": "5 個專案",
+ "7500_contacts": "7500 個聯絡人",
"7500_monthly_identified_users": "7500 個每月識別使用者",
"advanced_targeting": "進階目標設定",
"all_integrations": "所有整合",
@@ -993,14 +998,19 @@
"annually": "每年",
"api_webhooks": "API 和 Webhook",
"app_surveys": "應用程式問卷",
+ "attribute_based_targeting": "基於屬性的定位",
"contact_us": "聯絡我們",
"current": "目前",
"current_plan": "目前方案",
"current_tier_limit": "目前層級限制",
+ "custom": "自訂 & 規模",
+ "custom_contacts_limit": "自訂聯絡人上限",
"custom_miu_limit": "自訂 MIU 上限",
"custom_project_limit": "自訂專案上限",
+ "custom_response_limit": "自訂回應上限",
"customer_success_manager": "客戶成功經理",
"email_embedded_surveys": "電子郵件嵌入式問卷",
+ "email_follow_ups": "電子郵件後續追蹤",
"email_support": "電子郵件支援",
"enterprise": "企業版",
"enterprise_description": "頂級支援和自訂限制。",
@@ -1012,6 +1022,8 @@
"free_description": "無限問卷、團隊成員等。",
"get_2_months_free": "免費獲得 2 個月",
"get_in_touch": "取得聯繫",
+ "hosted_in_frankfurt": "託管在 Frankfurt",
+ "ios_android_sdks": "iOS 和 Android SDK 用於行動問卷",
"link_surveys": "連結問卷(可分享)",
"logic_jumps_hidden_fields_recurring_surveys": "邏輯跳躍、隱藏欄位、定期問卷等。",
"manage_card_details": "管理卡片詳細資料",
@@ -1027,6 +1039,7 @@
"remove_branding": "移除品牌",
"say_hi": "打個招呼!",
"scale": "進階版",
+ "scale_and_enterprise": "規模 & 企業版",
"scale_description": "用於擴展業務的進階功能。",
"startup": "啟動版",
"startup_description": "免費方案中的所有功能以及其他功能。",
diff --git a/apps/web/modules/ee/billing/api/lib/constants.ts b/apps/web/modules/ee/billing/api/lib/constants.ts
index 367e50976f..d93ddaf7d9 100644
--- a/apps/web/modules/ee/billing/api/lib/constants.ts
+++ b/apps/web/modules/ee/billing/api/lib/constants.ts
@@ -1,87 +1,87 @@
import { TFnType } from "@tolgee/react";
-export const getCloudPricingData = (t: TFnType) => {
- return {
- plans: [
- {
- name: t("environments.settings.billing.free"),
- id: "free",
- featured: false,
- description: t("environments.settings.billing.free_description"),
- price: { monthly: "$0", yearly: "$0" },
- mainFeatures: [
- t("environments.settings.billing.unlimited_surveys"),
- t("environments.settings.billing.unlimited_team_members"),
- t("environments.settings.billing.3_projects"),
- t("environments.settings.billing.1500_monthly_responses"),
- t("environments.settings.billing.2000_monthly_identified_users"),
- t("environments.settings.billing.website_surveys"),
- t("environments.settings.billing.app_surveys"),
- t("environments.settings.billing.unlimited_apps_websites"),
- t("environments.settings.billing.link_surveys"),
- t("environments.settings.billing.email_embedded_surveys"),
- t("environments.settings.billing.logic_jumps_hidden_fields_recurring_surveys"),
- t("environments.settings.billing.api_webhooks"),
- t("environments.settings.billing.all_integrations"),
- t("environments.settings.billing.all_surveying_features"),
- ],
- href: "https://app.formbricks.com/auth/signup?plan=free",
- },
- {
- name: t("environments.settings.billing.startup"),
- id: "startup",
- featured: false,
- description: t("environments.settings.billing.startup_description"),
- price: { monthly: "$39", yearly: "$390 " },
- mainFeatures: [
- t("environments.settings.billing.everything_in_free"),
- t("environments.settings.billing.unlimited_surveys"),
- t("environments.settings.billing.remove_branding"),
- t("environments.settings.billing.email_support"),
- t("environments.settings.billing.3_projects"),
- t("environments.settings.billing.5000_monthly_responses"),
- t("environments.settings.billing.7500_monthly_identified_users"),
- ],
- href: "https://app.formbricks.com/auth/signup?plan=startup",
- },
- {
- name: t("environments.settings.billing.scale"),
- id: "scale",
- featured: true,
- description: t("environments.settings.billing.scale_description"),
- price: { monthly: "$149", yearly: "$1,490" },
- mainFeatures: [
- t("environments.settings.billing.everything_in_startup"),
- t("environments.settings.billing.team_access_roles"),
- t("environments.settings.billing.multi_language_surveys"),
- t("environments.settings.billing.advanced_targeting"),
- t("environments.settings.billing.priority_support"),
- t("environments.settings.billing.5_projects"),
- t("environments.settings.billing.10000_monthly_responses"),
- t("environments.settings.billing.30000_monthly_identified_users"),
- ],
- href: "https://app.formbricks.com/auth/signup?plan=scale",
- },
- {
- name: t("environments.settings.billing.enterprise"),
- id: "enterprise",
- featured: false,
- description: t("environments.settings.billing.enterprise_description"),
- price: {
- monthly: t("environments.settings.billing.say_hi"),
- yearly: t("environments.settings.billing.say_hi"),
- },
- mainFeatures: [
- t("environments.settings.billing.everything_in_scale"),
- t("environments.settings.billing.custom_project_limit"),
- t("environments.settings.billing.custom_miu_limit"),
- t("environments.settings.billing.premium_support_with_slas"),
- t("environments.settings.billing.uptime_sla_99"),
- t("environments.settings.billing.customer_success_manager"),
- t("environments.settings.billing.technical_onboarding"),
- ],
- href: "https://cal.com/johannes/enterprise-cloud",
- },
+export type TPricingPlan = {
+ id: string;
+ name: string;
+ featured: boolean;
+ CTA?: string;
+ description: string;
+ price: {
+ monthly: string;
+ yearly: string;
+ };
+ mainFeatures: string[];
+ href?: string;
+};
+
+export const getCloudPricingData = (t: TFnType): { plans: TPricingPlan[] } => {
+ const freePlan: TPricingPlan = {
+ id: "free",
+ name: t("environments.settings.billing.free"),
+ featured: false,
+ description: t("environments.settings.billing.free_description"),
+ price: { monthly: "$0", yearly: "$0" },
+ mainFeatures: [
+ t("environments.settings.billing.unlimited_surveys"),
+ t("environments.settings.billing.1000_monthly_responses"),
+ t("environments.settings.billing.2000_contacts"),
+ t("environments.settings.billing.1_project"),
+ t("environments.settings.billing.unlimited_team_members"),
+ t("environments.settings.billing.link_surveys"),
+ t("environments.settings.billing.website_surveys"),
+ t("environments.settings.billing.app_surveys"),
+ t("environments.settings.billing.ios_android_sdks"),
+ t("environments.settings.billing.email_embedded_surveys"),
+ t("environments.settings.billing.logic_jumps_hidden_fields_recurring_surveys"),
+ t("environments.settings.billing.api_webhooks"),
+ t("environments.settings.billing.all_integrations"),
+ t("environments.settings.billing.hosted_in_frankfurt") + " 🇪🇺",
],
};
+
+ const startupPlan: TPricingPlan = {
+ id: "startup",
+ name: t("environments.settings.billing.startup"),
+ featured: true,
+ CTA: t("common.start_free_trial"),
+ description: t("environments.settings.billing.startup_description"),
+ price: { monthly: "$49", yearly: "$490" },
+ mainFeatures: [
+ t("environments.settings.billing.everything_in_free"),
+ t("environments.settings.billing.5000_monthly_responses"),
+ t("environments.settings.billing.7500_contacts"),
+ t("environments.settings.billing.3_projects"),
+ t("environments.settings.billing.remove_branding"),
+ t("environments.settings.billing.email_follow_ups"),
+ t("environments.settings.billing.attribute_based_targeting"),
+ ],
+ };
+
+ const customPlan: TPricingPlan = {
+ id: "enterprise",
+ name: t("environments.settings.billing.custom"),
+ featured: false,
+ CTA: t("common.request_pricing"),
+ description: t("environments.settings.billing.enterprise_description"),
+ price: {
+ monthly: t("environments.settings.billing.custom"),
+ yearly: t("environments.settings.billing.custom"),
+ },
+ mainFeatures: [
+ t("environments.settings.billing.everything_in_startup"),
+ t("environments.settings.billing.custom_response_limit"),
+ t("environments.settings.billing.custom_contacts_limit"),
+ t("environments.settings.billing.custom_project_limit"),
+ t("environments.settings.billing.team_access_roles"),
+ t("environments.project.languages.multi_language_surveys"),
+ t("environments.settings.enterprise.saml_sso"),
+ t("environments.settings.billing.uptime_sla_99"),
+ t("environments.settings.billing.premium_support_with_slas"),
+ ],
+ href: "https://app.formbricks.com/s/cm7k8esy20001jp030fh8a9o5?source=billingView&delivery=cloud",
+ };
+
+ return {
+ plans: [freePlan, startupPlan, customPlan],
+ };
};
diff --git a/apps/web/modules/ee/billing/components/pricing-card.tsx b/apps/web/modules/ee/billing/components/pricing-card.tsx
index 680a9be2f4..da8841a300 100644
--- a/apps/web/modules/ee/billing/components/pricing-card.tsx
+++ b/apps/web/modules/ee/billing/components/pricing-card.tsx
@@ -8,19 +8,10 @@ import { useTranslate } from "@tolgee/react";
import { CheckIcon } from "lucide-react";
import { useMemo, useState } from "react";
import { TOrganization, TOrganizationBillingPeriod } from "@formbricks/types/organizations";
+import { TPricingPlan } from "../api/lib/constants";
interface PricingCardProps {
- plan: {
- id: string;
- name: string;
- featured: boolean;
- price: {
- monthly: string;
- yearly: string;
- };
- mainFeatures: string[];
- href: string;
- };
+ plan: TPricingPlan;
planPeriod: TOrganizationBillingPeriod;
organization: TOrganization;
onUpgrade: () => Promise;
@@ -28,7 +19,6 @@ interface PricingCardProps {
projectFeatureKeys: {
FREE: string;
STARTUP: string;
- SCALE: string;
ENTERPRISE: string;
};
}
@@ -72,18 +62,33 @@ export const PricingCard = ({
return null;
}
- if (plan.id !== projectFeatureKeys.ENTERPRISE && plan.id !== projectFeatureKeys.FREE) {
+ if (plan.id === projectFeatureKeys.ENTERPRISE) {
+ return (
+
+ );
+ }
+
+ if (plan.id === projectFeatureKeys.STARTUP) {
if (organization.billing.plan === projectFeatureKeys.FREE) {
return (
);
}
@@ -100,15 +105,20 @@ export const PricingCard = ({
);
}
- return <>>;
+ return null;
}, [
isCurrentPlan,
loading,
onUpgrade,
organization.billing.plan,
+ plan.CTA,
+ plan.featured,
+ plan.href,
plan.id,
projectFeatureKeys.ENTERPRISE,
projectFeatureKeys.FREE,
+ projectFeatureKeys.STARTUP,
+ t,
]);
return (
@@ -147,7 +157,7 @@ export const PricingCard = ({
: plan.price.yearly
: t(plan.price.monthly)}
- {plan.name !== "Enterprise" && (
+ {plan.id !== projectFeatureKeys.ENTERPRISE && (
/ {planPeriod === "monthly" ? "Month" : "Year"}
@@ -171,16 +181,9 @@ export const PricingCard = ({
{t("environments.settings.billing.manage_subscription")}
)}
-
- {organization.billing.plan !== plan.id && plan.id === projectFeatureKeys.ENTERPRISE && (
-
- )}
-
{t(mainFeature)}
))}
diff --git a/apps/web/modules/ee/billing/components/pricing-table.tsx b/apps/web/modules/ee/billing/components/pricing-table.tsx
index fe7ee4ddc4..adc846531b 100644
--- a/apps/web/modules/ee/billing/components/pricing-table.tsx
+++ b/apps/web/modules/ee/billing/components/pricing-table.tsx
@@ -21,15 +21,12 @@ interface PricingTableProps {
responseCount: number;
projectCount: number;
stripePriceLookupKeys: {
- STARTUP_MONTHLY: string;
- STARTUP_YEARLY: string;
- SCALE_MONTHLY: string;
- SCALE_YEARLY: string;
+ STARTUP_MAY25_MONTHLY: string;
+ STARTUP_MAY25_YEARLY: string;
};
projectFeatureKeys: {
FREE: string;
STARTUP: string;
- SCALE: string;
ENTERPRISE: string;
};
hasBillingRights: boolean;
@@ -102,35 +99,32 @@ export const PricingTable = ({
throw new Error(t("common.something_went_wrong_please_try_again"));
}
} catch (err) {
- toast.error(t("environments.settings.billing.unable_to_upgrade_plan"));
+ if (err instanceof Error) {
+ toast.error(err.message);
+ } else {
+ toast.error(t("environments.settings.billing.unable_to_upgrade_plan"));
+ }
}
};
const onUpgrade = async (planId: string) => {
- if (planId === "scale") {
- await upgradePlan(
- planPeriod === "monthly" ? stripePriceLookupKeys.SCALE_MONTHLY : stripePriceLookupKeys.SCALE_YEARLY
- );
- return;
- }
-
if (planId === "startup") {
await upgradePlan(
planPeriod === "monthly"
- ? stripePriceLookupKeys.STARTUP_MONTHLY
- : stripePriceLookupKeys.STARTUP_YEARLY
+ ? stripePriceLookupKeys.STARTUP_MAY25_MONTHLY
+ : stripePriceLookupKeys.STARTUP_MAY25_YEARLY
);
return;
}
- if (planId === "enterprise") {
- window.location.href = "https://cal.com/johannes/license";
+ if (planId === "custom") {
+ window.location.href =
+ "https://app.formbricks.com/s/cm7k8esy20001jp030fh8a9o5?source=billingView&delivery=cloud";
return;
}
if (planId === "free") {
toast.error(t("environments.settings.billing.everybody_has_the_free_plan_by_default"));
- return;
}
};
@@ -233,7 +227,7 @@ export const PricingTable = ({
{t("common.projects")}
@@ -282,7 +276,7 @@ export const PricingTable = ({
-