From b59c2d0668036fcb6915c8d49d459c96dbee6836 Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Wed, 14 Oct 2026 11:58:22 -0400 Subject: [PATCH] Plans page: show yearly prices and Plus extras Co-Authored-By: Claude Opus 5.5 --- app/lib/plans.ts | 9 ++++++--- app/routes/app.plans.tsx | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/lib/plans.ts b/app/lib/plans.ts index ec03f3a..6e46171 100644 --- a/app/lib/plans.ts +++ b/app/lib/plans.ts @@ -17,6 +17,9 @@ export interface PlanLimits { analytics: boolean; markets: boolean; translations: boolean; + /** shown on the Plans page only */ + yearly?: string; + extras?: string[]; } const ALL_TYPES = ["fixed", "mix", "bxgy"]; @@ -27,15 +30,15 @@ export const PLANS: Record = { cartHints: false, branding: true, monthlyOrders: 50, templates: false, analytics: false, markets: false, translations: false, }, starter: { - name: "Starter", price: "$9.99/mo", runningOffers: 5, types: ALL_TYPES, scheduling: true, homepage: true, + name: "Starter", price: "$9.99/mo", yearly: "$99/yr", runningOffers: 5, types: ALL_TYPES, scheduling: true, homepage: true, cartHints: true, branding: false, monthlyOrders: Infinity, templates: false, analytics: false, markets: false, translations: false, }, growth: { - name: "Growth", price: "$24.99/mo", runningOffers: Infinity, types: ALL_TYPES, scheduling: true, homepage: true, + name: "Growth", price: "$24.99/mo", yearly: "$249/yr", runningOffers: Infinity, types: ALL_TYPES, scheduling: true, homepage: true, cartHints: true, branding: false, monthlyOrders: Infinity, templates: true, analytics: true, markets: true, translations: true, }, plus: { - name: "Plus", price: "$59.99/mo", runningOffers: Infinity, types: ALL_TYPES, scheduling: true, homepage: true, + name: "Plus", price: "$59.99/mo", yearly: "$599/yr", extras: ["priority support", "onboarding call", "custom styling help"], runningOffers: Infinity, types: ALL_TYPES, scheduling: true, homepage: true, cartHints: true, branding: false, monthlyOrders: Infinity, templates: true, analytics: true, markets: true, translations: true, }, }; diff --git a/app/routes/app.plans.tsx b/app/routes/app.plans.tsx index ac3a165..ae0af52 100644 --- a/app/routes/app.plans.tsx +++ b/app/routes/app.plans.tsx @@ -39,7 +39,7 @@ export default function Plans() { {d.plans.map((p) => ( {p.name}{p.code === d.current ? " (current)" : ""} - {p.price} + {p.price}{p.yearly ? ` or ${p.yearly}` : ""} {p.runningOffers} {[ @@ -53,6 +53,7 @@ export default function Plans() { p.translations && "translations", p.monthlyOrders !== Infinity && `${p.monthlyOrders} bundle orders/month`, p.branding && "“Powered by” link", + ...(p.extras || []), ].filter(Boolean).join(", ")}