diff --git a/.env.example b/.env.example
index 94cdc84a2..23984acb3 100644
--- a/.env.example
+++ b/.env.example
@@ -40,7 +40,7 @@ DISABLE_SSO="false"
STRIPE_SECRET_KEY="stripe-secret-key"
STRIPE_PUBLIC_KEY="stripe-public-key"
STRIPE_WEBHOOK_ENDPOINT_SECRET="stripe-endpoint-secret"
-
+FREE_TRIAL_DAYS="14"
SMTP_PWD="super-safe-passw0rd"
SMTP_HOST="mail.example.com"
diff --git a/app/components/subscription/price-cta.tsx b/app/components/subscription/price-cta.tsx
index 88b294b53..bb91afd5c 100644
--- a/app/components/subscription/price-cta.tsx
+++ b/app/components/subscription/price-cta.tsx
@@ -1,4 +1,5 @@
import { useLoaderData } from "@remix-run/react";
+import { config } from "~/config/shelf.config";
import type { loader } from "~/routes/_layout+/account-details.subscription";
import { CustomerPortalForm } from "./customer-portal-form";
import type { Price } from "./prices";
@@ -48,7 +49,7 @@ export const PriceCta = ({
name="intent"
value="trial"
>
- Start 14 day free trial
+ Start {config.freeTrialDays} day free trial
)}
diff --git a/app/components/welcome/choose-purpose.tsx b/app/components/welcome/choose-purpose.tsx
index 577a72724..2a808a6f3 100644
--- a/app/components/welcome/choose-purpose.tsx
+++ b/app/components/welcome/choose-purpose.tsx
@@ -1,5 +1,6 @@
import { useState } from "react";
import { useNavigation } from "@remix-run/react";
+import { config } from "~/config/shelf.config";
import { isFormProcessing } from "~/utils/form";
import { tw } from "~/utils/tw";
import Icon from "../icons/icon";
@@ -13,7 +14,6 @@ export function ChoosePurpose() {
);
const navigation = useNavigation();
const disabled = isFormProcessing(navigation.state) || !selectedPlan;
-
return (
<>
@@ -62,7 +62,7 @@ export function ChoosePurpose() {
{" "}
- Free 14-day trial
+ Free {config.freeTrialDays}-day trial
diff --git a/app/config/shelf.config.ts b/app/config/shelf.config.ts
index b77992197..90eccc589 100644
--- a/app/config/shelf.config.ts
+++ b/app/config/shelf.config.ts
@@ -2,13 +2,16 @@ import {
DISABLE_SIGNUP,
DISABLE_SSO,
ENABLE_PREMIUM_FEATURES,
+ FREE_TRIAL_DAYS,
SEND_ONBOARDING_EMAIL,
} from "~/utils/env";
import { Config } from "./types";
+console.log("FREE_TRIAL_DAYS", FREE_TRIAL_DAYS);
export const config: Config = {
sendOnboardingEmail: SEND_ONBOARDING_EMAIL || false,
enablePremiumFeatures: ENABLE_PREMIUM_FEATURES || false,
+ freeTrialDays: Number(FREE_TRIAL_DAYS || 7),
disableSignup: DISABLE_SIGNUP || false,
disableSSO: DISABLE_SSO || false,
diff --git a/app/config/types.ts b/app/config/types.ts
index f9867b92a..9411de80a 100644
--- a/app/config/types.ts
+++ b/app/config/types.ts
@@ -5,6 +5,11 @@ export interface Config {
* */
sendOnboardingEmail: boolean;
+ /**
+ * Number of days for the free trial
+ */
+ freeTrialDays: number;
+
/**
* Enable premium features
*/
diff --git a/app/routes/_welcome+/select-plan.tsx b/app/routes/_welcome+/select-plan.tsx
index 522e37aa3..6aff94b5d 100644
--- a/app/routes/_welcome+/select-plan.tsx
+++ b/app/routes/_welcome+/select-plan.tsx
@@ -10,6 +10,7 @@ import { CrispButton } from "~/components/marketing/crisp";
import { ShelfSymbolLogo } from "~/components/marketing/logos";
import { Button } from "~/components/shared/button";
import { PriceBox } from "~/components/subscription/price-box";
+import { config } from "~/config/shelf.config";
import { getUserByID } from "~/modules/user/service.server";
import { appendToMetaTitle } from "~/utils/append-to-meta-title";
import { makeShelfError } from "~/utils/error";
@@ -164,7 +165,7 @@ export default function SelectPlan() {
value="trial"
disabled={disabled}
>
- Start 14 day free trial
+ Start {config.freeTrialDays} day free trial
diff --git a/app/utils/env.ts b/app/utils/env.ts
index 47d09cda3..9b5db2bd7 100644
--- a/app/utils/env.ts
+++ b/app/utils/env.ts
@@ -15,6 +15,7 @@ declare global {
MAINTENANCE_MODE: string;
CHROME_EXECUTABLE_PATH: string;
URL_SHORTENER: string;
+ FREE_TRIAL_DAYS: string;
};
}
}
@@ -50,6 +51,7 @@ declare global {
ADMIN_EMAIL: string;
CHROME_EXECUTABLE_PATH: string;
FINGERPRINT: string;
+ FREE_TRIAL_DAYS: string;
}
}
}
@@ -190,6 +192,12 @@ export const ENABLE_PREMIUM_FEATURES =
isRequired: false,
}) === "true" || false;
+export const FREE_TRIAL_DAYS =
+ getEnv("FREE_TRIAL_DAYS", {
+ isSecret: false,
+ isRequired: false,
+ }) || "14";
+
export const DISABLE_SIGNUP =
getEnv("DISABLE_SIGNUP", {
isSecret: false,
@@ -225,5 +233,6 @@ export function getBrowserEnv() {
MAINTENANCE_MODE,
CHROME_EXECUTABLE_PATH,
URL_SHORTENER,
+ FREE_TRIAL_DAYS,
};
}
diff --git a/app/utils/stripe.server.ts b/app/utils/stripe.server.ts
index 48b5aebf5..fbf66786b 100644
--- a/app/utils/stripe.server.ts
+++ b/app/utils/stripe.server.ts
@@ -126,7 +126,7 @@ export async function createStripeCheckoutSession({
missing_payment_method: "pause",
},
},
- trial_period_days: 14,
+ trial_period_days: config.freeTrialDays,
},
payment_method_collection: "if_required",
}),