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", }),