Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { HeartIcon, ListTodoIcon, XIcon } from "lucide-react";
import Link from "next/link";
import { redirect } from "next/navigation";
import { OnboardingOptionsContainer } from "@/app/(app)/(onboarding)/organizations/components/OnboardingOptionsContainer";
import { getPostHogFeatureFlag } from "@/lib/posthog/get-feature-flag";
import { getUserWorkspaces } from "@/lib/workspace/service";
import { getTranslate } from "@/lingodotdev/server";
import { getOrganizationAuth } from "@/modules/organization/lib/utils";
Expand All @@ -24,13 +23,6 @@ const Page = async (props: ModePageProps) => {
return redirect(`/auth/login`);
}

const experimentVariant =
(await getPostHogFeatureFlag(session.user.id, "a-b_onboarding_skip-first-screen")) || "control";

if (experimentVariant === "remove-cx-and-surveys-mode") {
return redirect(`/organizations/${params.organizationId}/workspaces/new/channel`);
}

const t = await getTranslate();
const channelOptions = [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
import { SelectPlanCard } from "@/modules/ee/billing/components/select-plan-card";
import { type TPlanVariant } from "@/modules/ee/billing/lib/select-plan-variants";

interface SelectPlanOnboardingProps {
organizationId: string;
variant: TPlanVariant;
featureVariant: "control" | "variant_b";
ctaVariant: "control" | "variant_b" | "variant_c" | "variant_d";
}

export const SelectPlanOnboarding = ({ organizationId, variant }: Readonly<SelectPlanOnboardingProps>) => {
export const SelectPlanOnboarding = ({
organizationId,
featureVariant,
ctaVariant,
}: Readonly<SelectPlanOnboardingProps>) => {
const nextUrl = `/organizations/${organizationId}/workspaces/new/mode`;

return (
<div className="flex min-h-full min-w-full flex-col items-center justify-center">
<SelectPlanCard nextUrl={nextUrl} organizationId={organizationId} variant={variant} />
<SelectPlanCard
nextUrl={nextUrl}
organizationId={organizationId}
featureVariant={featureVariant}
ctaVariant={ctaVariant}
/>
</div>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ import { TCloudBillingPlan } from "@formbricks/types/organizations";
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
import { getPostHogFeatureFlag } from "@/lib/posthog/get-feature-flag";
import { getOrganizationBillingWithReadThroughSync } from "@/modules/ee/billing/lib/organization-billing";
import { PLAN_VARIANTS, type TPlanVariant } from "@/modules/ee/billing/lib/select-plan-variants";
import { getOrganizationAuth } from "@/modules/organization/lib/utils";
import { SelectPlanOnboarding } from "./components/select-plan-onboarding";

const PAID_PLANS = new Set<TCloudBillingPlan>(["pro", "scale", "custom"]);
const VALID_VARIANTS = new Set<TPlanVariant>(PLAN_VARIANTS);

interface PlanPageProps {
params: Promise<{
Expand Down Expand Up @@ -39,24 +37,28 @@ const Page = async (props: PlanPageProps) => {
return redirect(`/organizations/${params.organizationId}/workspaces/new/mode`);
}

let variant: TPlanVariant = "control";
const flagValue = await getPostHogFeatureFlag(
session.user.id,
"a-b_onboarding_trial-conversion-screen-copy",
{
const [featureFlagValue, ctaFlagValue] = await Promise.all([
getPostHogFeatureFlag(session.user.id, "a-b_onboarding_trial-conversion-screen-feature-copy", {
organizationId: params.organizationId,
}
);
if (typeof flagValue === "string" && VALID_VARIANTS.has(flagValue as TPlanVariant)) {
variant = flagValue as TPlanVariant;
}
}),
getPostHogFeatureFlag(session.user.id, "a-b_onboarding_trial-conversion-screen-cta", {
organizationId: params.organizationId,
}),
]);

const selectPlanOnboardingProps = {
organizationId: params.organizationId,
variant,
};
const featureVariant = featureFlagValue === "variant_b" ? "variant_b" : "control";
const ctaVariant =
ctaFlagValue === "variant_b" || ctaFlagValue === "variant_c" || ctaFlagValue === "variant_d"
? ctaFlagValue
: "control";

return <SelectPlanOnboarding {...selectPlanOnboardingProps} />;
return (
<SelectPlanOnboarding
organizationId={params.organizationId}
featureVariant={featureVariant}
ctaVariant={ctaVariant}
/>
);
};

export default Page;
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,12 @@ import { WorkspaceSettings } from "@/app/(app)/(onboarding)/organizations/[organ
import { DEFAULT_BRAND_COLOR } from "@/lib/constants";
import { getPublicDomain } from "@/lib/getPublicUrl";
import { capturePostHogEvent } from "@/lib/posthog";
import { getPostHogFeatureFlag } from "@/lib/posthog/get-feature-flag";
import { buildStylingFromBrandColor } from "@/lib/styling/constants";
import { getUserWorkspaces } from "@/lib/workspace/service";
import { getTranslate } from "@/lingodotdev/server";
import { getAccessControlPermission } from "@/modules/ee/license-check/lib/utils";
import { getOrganizationAuth } from "@/modules/organization/lib/utils";
import { Button } from "@/modules/ui/components/button";
import { Header } from "@/modules/ui/components/header";
import { createWorkspace } from "@/modules/workspaces/settings/lib/workspace";

interface WorkspaceSettingsPageProps {
params: Promise<{
Expand Down Expand Up @@ -48,28 +45,8 @@ const Page = async (props: WorkspaceSettingsPageProps) => {
const industry = searchParams.industry ?? null;
const mode = searchParams.mode ?? "surveys";

const experimentVariant =
(await getPostHogFeatureFlag(session.user.id, "a-b_onboarding_skip-theme-screen")) || "control";

const workspaces = await getUserWorkspaces(session.user.id, params.organizationId);

if (experimentVariant === "remove-theme") {
const existing = workspaces.find((w) => w.name === organization.name);
const workspace =
existing ??
(await createWorkspace(params.organizationId, {
name: organization.name,
styling: buildStylingFromBrandColor(DEFAULT_BRAND_COLOR),
config: { channel, industry },
}));
if (channel === "app" || channel === "website") {
return redirect(`/workspaces/${workspace.id}/connect`);
} else if (channel === "link") {
return redirect(`/workspaces/${workspace.id}/surveys`);
}
return redirect(`/workspaces/${workspace.id}/xm-templates`);
}

const organizationTeams = await getTeamsByOrganizationId(params.organizationId);

const isAccessControlAllowed = await getAccessControlPermission(organization.id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,6 @@ export const MainNavigation = ({
responseLimit={organization.billing.limits.monthly.responses}
baseResponseLimit={TRIAL_BASE_RESPONSE_LIMIT}
billingHref={`/workspaces/${workspace.id}/settings/organization/billing`}
hasPaymentMethod={organization.billing.stripe?.hasPaymentMethod}
/>
) : (
<Link
Expand Down
26 changes: 12 additions & 14 deletions apps/web/i18n.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2331,6 +2331,7 @@ checksums:
workspace/settings/billing/custom_plan_description: 53faa38123cc74e5adc7e59630641d66
workspace/settings/billing/custom_plan_title: f3b71be0d1cd4f81a177ada040119f30
workspace/settings/billing/failed_to_start_trial: 43e28223f51af382042b3a753d9e4380
workspace/settings/billing/go_to_billing: cd3ec8ecd7af2e724b44a61b29517ee7
workspace/settings/billing/keep_current_plan: 57ac15ffa2c29ac364dd405669eeb7f6
workspace/settings/billing/manage_billing_details: 40448f0b5ed4b3bb1d864ba6e1bb6a3b
workspace/settings/billing/monthly: 818f1192e32bb855597f930d3e78806e
Expand Down Expand Up @@ -2364,21 +2365,20 @@ checksums:
workspace/settings/billing/plan_unknown: 5cd12b882fe90320f93130c1b50e2e32
workspace/settings/billing/remove_branding: 88b6b818750e478bfa153b33dd658280
workspace/settings/billing/retry_setup: bef560e42fa8798271fea150476791e0
workspace/settings/billing/select_plan_cta: e346e4ed7d138dcc873db187922369da
workspace/settings/billing/select_plan_cta: f5d80c9a93a431eed25a714a8e39fc9f
workspace/settings/billing/select_plan_cta_variant_b: f44c6688c4ff83694b0de0be29ba6a8e
workspace/settings/billing/select_plan_cta_variant_c: ec46b4ca1790074e4812ad351784efa3
workspace/settings/billing/select_plan_cta_variant_d: 5c783951b0100a168bdd2161ff294833
workspace/settings/billing/select_plan_feature_1: 030739fb52448dba74b47e900500c4e3
workspace/settings/billing/select_plan_feature_2: cc2e5907d2241a589ff6e995efb1f050
workspace/settings/billing/select_plan_feature_3: 64ccc8de5813e88972d8260103bc8dcb
workspace/settings/billing/select_plan_header: f2c3791c1fb2970617ec0f2d243a931b
workspace/settings/billing/select_plan_skip: bb8bbd19353e6d40cfb5144d9ea6fe86
workspace/settings/billing/select_plan_subheader: 01c70aa6e1001815a9a11951394923ca
workspace/settings/billing/select_plan_variant_b_cta: f5d80c9a93a431eed25a714a8e39fc9f
workspace/settings/billing/select_plan_variant_b_header: 8c2e2e23f95b6cb342e8d54f67ed2a97
workspace/settings/billing/select_plan_variant_b_skip: 75e5fcff10a00796dbca6ead0148c72c
workspace/settings/billing/select_plan_variant_b_subheader: 949f452eab5897af335a18ae0343086e
workspace/settings/billing/select_plan_variant_c_cta: 405a43f614903e35445005603b0507ed
workspace/settings/billing/select_plan_variant_c_header: 2f319a63297fbd513ccd4225f9393885
workspace/settings/billing/select_plan_variant_c_skip: b1b90e0acbda206bbd20c10eafc3f7d4
workspace/settings/billing/select_plan_variant_c_subheader: e50313bfaab8bfcf36d45a952bb3943a
workspace/settings/billing/select_plan_header: 8c2e2e23f95b6cb342e8d54f67ed2a97
workspace/settings/billing/select_plan_skip: 75e5fcff10a00796dbca6ead0148c72c
workspace/settings/billing/select_plan_subheader: 949f452eab5897af335a18ae0343086e
workspace/settings/billing/select_plan_variant_b_feature_1: fd8ff2540674c7034d9d84e23153f15b
workspace/settings/billing/select_plan_variant_b_feature_2: 5e11742e97a979312ca4bee52f61e87c
workspace/settings/billing/select_plan_variant_b_feature_3: 611b5246b7a6556e39b09d9411792ab3
workspace/settings/billing/select_plan_variant_b_feature_4: 765a4db9fdf1523dd53f3971e964c8dd
workspace/settings/billing/status_trialing: 4fd32760caf3bd7169935b0a6d2b5b67
workspace/settings/billing/stripe_setup_incomplete: fa6d6e295dd14b73c17ac8678205109b
workspace/settings/billing/stripe_setup_incomplete_description: 9f28a542729cc719bca2ca08e7406284
Expand Down Expand Up @@ -2953,7 +2953,6 @@ checksums:
workspace/surveys/edit/hidden_field_used_in_recall: 15d959528c3e817dce95640173d5d6a8
workspace/surveys/edit/hidden_field_used_in_recall_ending_card: ea0d0b12ca1c9400690658cb1b537025
workspace/surveys/edit/hidden_field_used_in_recall_welcome: bb498b6ee69c6311a3977d454866b610
workspace/surveys/edit/hidden_fields_description: e9221cd00ae2944602c19ffbc82358a4
workspace/surveys/edit/hide_back_button: 91355864b3032c3f57689074e2173544
workspace/surveys/edit/hide_back_button_description: caaa30cf43c5611577933a1c9f44b9ee
workspace/surveys/edit/hide_block_settings: c24c3d3892c251792e297cdc036d2fde
Expand Down Expand Up @@ -3255,7 +3254,6 @@ checksums:
workspace/surveys/edit/variable_used_in_recall: 1979c231569117297d1a19972b349617
workspace/surveys/edit/variable_used_in_recall_ending_card: e6ab9a124985708dd77067c014b7c514
workspace/surveys/edit/variable_used_in_recall_welcome: 60b995389b488366d8f6f53df35b6d8d
workspace/surveys/edit/variables_description: 4a55faa279acc675228f54dccf63db6a
workspace/surveys/edit/verify_email_before_submission: c05d345dc35f2d33839e4cfd72d11eb2
workspace/surveys/edit/verify_email_before_submission_description: 434ab3ee6134367513b633a9d4f7d772
workspace/surveys/edit/visibility_and_recontact: c27cb4ff3a4262266902a335c3ad5d84
Expand Down
26 changes: 12 additions & 14 deletions apps/web/locales/de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -2432,6 +2432,7 @@
"custom_plan_description": "Deine Organisation nutzt ein individuelles Abrechnungsmodell. Du kannst trotzdem zu einem der Standardpläne unten wechseln.",
"custom_plan_title": "Individueller Plan",
"failed_to_start_trial": "Testphase konnte nicht gestartet werden. Bitte versuche es erneut.",
"go_to_billing": "Zur Abrechnung",
"keep_current_plan": "Aktuellen Plan beibehalten",
"manage_billing_details": "Kartendaten & Rechnungen verwalten",
"monthly": "Monatlich",
Expand Down Expand Up @@ -2465,21 +2466,20 @@
"plan_unknown": "Unbekannt",
"remove_branding": "Branding entfernen",
"retry_setup": "Einrichtung wiederholen",
"select_plan_cta": "Kostenlose Testversion starten",
"select_plan_cta": "Meine erste Umfrage erstellen",
"select_plan_cta_variant_b": "Feedback sammeln",
"select_plan_cta_variant_c": "Meinen Workspace einrichten",
"select_plan_cta_variant_d": "Loslegen",
"select_plan_feature_1": "Identifiziere Teilnehmer und erstelle zielgerichtete Zielgruppensegmente",
"select_plan_feature_2": "Automatisiere Follow-ups und synchronisiere Umfragedaten mit deinen Tools",
"select_plan_feature_3": "Verwandle Feedback in priorisierte Erkenntnisse, auf die dein Team reagieren kann",
"select_plan_header": "Hol dir Formbricks Pro kostenlos!",
"select_plan_skip": "Beim Hobby-Plan bleiben",
"select_plan_subheader": "14 Tage Testversion, keine Kreditkarte erforderlich",
"select_plan_variant_b_cta": "Meine erste Umfrage erstellen",
"select_plan_variant_b_header": "Du bist die nächsten 14 Tage auf Pro",
"select_plan_variant_b_skip": "Zurück zum 'Hobby'-Plan",
"select_plan_variant_b_subheader": "Alles unten ist freigeschaltet – kostenlos.",
"select_plan_variant_c_cta": "Pro ausprobieren",
"select_plan_variant_c_header": "Erstelle gebrandete, integrierte Umfragen in 10 Minuten",
"select_plan_variant_c_skip": "Ich teste es später",
"select_plan_variant_c_subheader": "14 Tage Pro, um es zu schaffen – auf unsere Kosten.",
"select_plan_header": "Du hast Pro für die nächsten 14 Tage",
"select_plan_skip": "Zurück zum 'Hobby'-Tarif",
"select_plan_subheader": "Alles unten ist freigeschaltet, kostenlos.",
"select_plan_variant_b_feature_1": "KI-native mehrsprachige Umfragen",
"select_plan_variant_b_feature_2": "MCP-Zugang, verbinde dich mit jedem KI-Client und triff datengestützte Entscheidungen.",
"select_plan_variant_b_feature_3": "Alle Integrationen und benutzerdefinierte Webhooks",
"select_plan_variant_b_feature_4": "2.000 Antworten pro Monat",
"status_trialing": "Testphase",
"stripe_setup_incomplete": "Rechnungseinrichtung unvollständig",
"stripe_setup_incomplete_description": "Die Rechnungseinrichtung wurde nicht erfolgreich abgeschlossen. Bitte wiederhole den Vorgang, um dein Abonnement zu aktivieren.",
Expand Down Expand Up @@ -3074,7 +3074,6 @@
"hidden_field_used_in_recall": "Verborgenes Feld \"{hiddenField}\" wird in Frage {questionIndex} abgerufen.",
"hidden_field_used_in_recall_ending_card": "Verborgenes Feld \"{hiddenField}\" wird in der Abschlusskarte abgerufen",
"hidden_field_used_in_recall_welcome": "Verborgenes Feld \"{hiddenField}\" wird in der Willkommenskarte abgerufen.",
"hidden_fields_description": "Übergib versteckte Daten an deine Umfrage, ohne sie den Teilnehmern zu zeigen.",
"hide_back_button": "\"Zurück\"-Button ausblenden",
"hide_back_button_description": "Zeige den Zurück-Button in der Umfrage nicht an",
"hide_block_settings": "Block-Einstellungen ausblenden",
Expand Down Expand Up @@ -3380,7 +3379,6 @@
"variable_used_in_recall": "Die Variable \"{variable}\" wird in Frage {questionIndex} abgerufen.",
"variable_used_in_recall_ending_card": "Die Variable {variable} wird in der Abschlusskarte abgerufen",
"variable_used_in_recall_welcome": "Die Variable \"{variable}\" wird in der Willkommenskarte abgerufen.",
"variables_description": "Definiere und berechne Werte während deiner Umfrage.",
"verify_email_before_submission": "E-Mail vor dem Absenden verifizieren",
"verify_email_before_submission_description": "Lass nur Personen mit einer echten E-Mail-Adresse antworten.",
"visibility_and_recontact": "Sichtbarkeit & erneute Kontaktaufnahme",
Expand Down
Loading
Loading