From afa0c5ecdd88800c770a17fbab80b4f76b759209 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Thu, 26 Dec 2024 14:29:50 -0500 Subject: [PATCH 1/6] Update `PLANS` array --- packages/utils/src/constants/pricing.tsx | 92 ++++++++++++++---------- 1 file changed, 55 insertions(+), 37 deletions(-) diff --git a/packages/utils/src/constants/pricing.tsx b/packages/utils/src/constants/pricing.tsx index c45489d614..bde3fe75ce 100644 --- a/packages/utils/src/constants/pricing.tsx +++ b/packages/utils/src/constants/pricing.tsx @@ -4,6 +4,7 @@ const BUSINESS_PLAN_MODIFIER = ({ yearly = 49, links = 5000, clicks = 150000, + conversions = 500, domains = 40, users = 15, ids = [], @@ -13,9 +14,9 @@ const BUSINESS_PLAN_MODIFIER = ({ yearly: number; links: number; clicks: number; + conversions: number; domains: number; users: number; - tags: number; ids: string[]; }) => ({ name, @@ -47,14 +48,24 @@ const BUSINESS_PLAN_MODIFIER = ({ }, featureTitle: "Everything in Pro, plus:", features: [ - { text: `${Intl.NumberFormat("en-US").format(links)} new links/mo` }, { + id: "clicks", text: `${Intl.NumberFormat("en-US").format(clicks)} tracked clicks/mo`, }, - { text: "3-year analytics retention" }, - { text: `${domains} custom domains` }, - { text: `${users} users` }, { + id: "links", + text: `${Intl.NumberFormat("en-US").format(links)} new links/mo`, + }, + { + id: "conversions", + text: `${Intl.NumberFormat("en-US").format(conversions)} conversions/mo`, + }, + { + id: "retention", + text: "3-year analytics retention", + }, + { + id: "tags", text: "Unlimited tags", footnote: { title: @@ -64,6 +75,15 @@ const BUSINESS_PLAN_MODIFIER = ({ }, }, { + id: "domains", + text: `${domains} domains`, + }, + { + id: "users", + text: `${users} users`, + }, + { + id: "events", text: "Real-time events stream", footnote: { title: @@ -73,6 +93,7 @@ const BUSINESS_PLAN_MODIFIER = ({ }, }, { + id: "webhooks", text: "Event webhooks (beta)", footnote: { title: @@ -112,14 +133,16 @@ export const PLANS = [ }, featureTitle: "What's included:", features: [ - { text: "25 new links/mo" }, { + id: "clicks", text: "1K tracked clicks/mo", }, - { text: "30-day analytics retention" }, - { text: "3 custom domains" }, - { text: "1 user" }, + { id: "links", text: "25 new links/mo" }, + { id: "retention", text: "30-day analytics retention" }, + { id: "domains", text: "3 domains" }, + { id: "user", text: "1 user" }, { + id: "analytics", text: "Advanced analytics", footnote: { title: @@ -128,11 +151,10 @@ export const PLANS = [ href: "https://dub.co/help/article/dub-analytics", }, }, - { text: "10 AI credits/mo" }, - { - text: "Basic support", - }, + { id: "ai", text: "10 AI credits/mo" }, + { id: "basic-support", text: "Basic support" }, { + id: "api", text: "API Access", footnote: { title: "Programatically manage your links using our REST API.", @@ -179,19 +201,19 @@ export const PLANS = [ }, featureTitle: "Everything in Free, plus:", features: [ - { text: "1,000 new links/mo" }, - { - text: "50K tracked clicks/mo", - }, - { text: "1-year analytics retention" }, - { text: "10 custom domains" }, - { text: "5 users" }, + { id: "clicks", text: "50K tracked clicks/mo" }, + { id: "links", text: "1,000 new links/mo" }, + { id: "retention", text: "1-year analytics retention" }, + { id: "domains", text: "10 domains" }, + { id: "users", text: "5 users" }, { + id: "link-features", text: "Advanced link features", footnote: "Custom social media cards, password-protected links, link expiration, link cloaking, device targeting, geo targeting etc.", }, { + id: "ai", text: "Unlimited AI credits", footnote: { title: @@ -200,10 +222,9 @@ export const PLANS = [ href: "https://dub.co/blog/introducing-dub-ai", }, }, + { id: "priority-support", text: "Priority support" }, { - text: "Priority support", - }, - { + id: "dublink", text: "Premium dub.link domain", footnote: { title: "Stand out from the crowd with a premium dub.link domain.", @@ -212,7 +233,8 @@ export const PLANS = [ }, }, { - text: "Complimentary custom domain", + id: "dotlink", + text: "Free custom domain", footnote: { title: "All our paid plans come with a free .link custom domain, which helps improve click-through rates.", @@ -228,8 +250,8 @@ export const PLANS = [ yearly: 49, links: 5000, clicks: 150000, + conversions: 500, domains: 40, - tags: 150, users: 15, ids: [ "price_1LodLoAlJJEpqkPV9rD0rlNL", // old monthly @@ -247,8 +269,8 @@ export const PLANS = [ yearly: 99, links: 15000, clicks: 400000, + conversions: 1500, domains: 100, - tags: 300, users: 30, ids: [ "price_1OnWu0AlJJEpqkPVWk4144ZG", // monthly (test) @@ -263,8 +285,8 @@ export const PLANS = [ yearly: 199, links: 40000, clicks: 1000000, + conversions: 5000, domains: 250, - tags: 500, users: 50, ids: [ "price_1OnWvCAlJJEpqkPVLzLHx5QD", // monthly (test) @@ -279,8 +301,8 @@ export const PLANS = [ yearly: 399, links: 100000, clicks: 2500000, + conversions: 15000, domains: 500, - tags: 1000, users: 100, ids: [ "price_1OnWwLAlJJEpqkPVXtJyPqLk", // monthly (test) @@ -319,15 +341,11 @@ export const PLANS = [ }, featureTitle: "Everything in Business, plus:", features: [ - { text: "Custom usage limits" }, - { text: "Volume discounts" }, - { text: "SSO/SAML" }, - { text: "Role-based access controls" }, - { text: "Custom contract & SLA" }, - { text: "Whiteglove onboarding" }, - { text: "Dedicated success manager" }, - { text: "Priority support" }, - { text: "Dedicated Slack channel" }, + { id: "sso", text: "SSO/SAML" }, + { id: "roles", text: "Role-based controls" }, + { id: "sla", text: "Custom SLA" }, + { id: "logs", text: "Audit logs" }, + { id: "success", text: "Dedicated success manager" }, ], }, ]; From c4e6d5d1bc9e5eb7c8037761098a6b065ce64477 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Thu, 26 Dec 2024 14:29:55 -0500 Subject: [PATCH 2/6] Add icons --- .../ui/src/icons/nucleo/circle-question.tsx | 39 +++++++++++++++++++ packages/ui/src/icons/nucleo/index.ts | 2 + packages/ui/src/icons/nucleo/tags.tsx | 39 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 packages/ui/src/icons/nucleo/circle-question.tsx create mode 100644 packages/ui/src/icons/nucleo/tags.tsx diff --git a/packages/ui/src/icons/nucleo/circle-question.tsx b/packages/ui/src/icons/nucleo/circle-question.tsx new file mode 100644 index 0000000000..baeef5bf63 --- /dev/null +++ b/packages/ui/src/icons/nucleo/circle-question.tsx @@ -0,0 +1,39 @@ +import { SVGProps } from "react"; + +export function CircleQuestion(props: SVGProps) { + return ( + + + + + + + + ); +} diff --git a/packages/ui/src/icons/nucleo/index.ts b/packages/ui/src/icons/nucleo/index.ts index a67a0756c2..09a00e59c1 100644 --- a/packages/ui/src/icons/nucleo/index.ts +++ b/packages/ui/src/icons/nucleo/index.ts @@ -36,6 +36,7 @@ export * from "./circle-half-dotted-check"; export * from "./circle-half-dotted-clock"; export * from "./circle-info"; export * from "./circle-play-fill"; +export * from "./circle-question"; export * from "./circle-warning"; export * from "./circle-xmark"; export * from "./circles"; @@ -145,6 +146,7 @@ export * from "./table-icon"; export * from "./table-rows2"; export * from "./tablet"; export * from "./tag"; +export * from "./tags"; export * from "./toggle2-fill"; export * from "./trash"; export * from "./tv"; diff --git a/packages/ui/src/icons/nucleo/tags.tsx b/packages/ui/src/icons/nucleo/tags.tsx new file mode 100644 index 0000000000..3c59e13e83 --- /dev/null +++ b/packages/ui/src/icons/nucleo/tags.tsx @@ -0,0 +1,39 @@ +import { SVGProps } from "react"; + +export function Tags(props: SVGProps) { + return ( + + + + + + + + ); +} From 54cf7dbe4c71f0458fa9bf359febb59d9c8f2f85 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Fri, 27 Dec 2024 11:12:27 -0500 Subject: [PATCH 3/6] Fix types --- packages/utils/src/constants/pricing.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/constants/pricing.tsx b/packages/utils/src/constants/pricing.tsx index bde3fe75ce..0458e76741 100644 --- a/packages/utils/src/constants/pricing.tsx +++ b/packages/utils/src/constants/pricing.tsx @@ -1,3 +1,13 @@ +type Feature = { + id?: string; + text: string; + footnote?: { + title: string; + cta: string; + href: string; + }; +}; + const BUSINESS_PLAN_MODIFIER = ({ name = "Business", monthly = 59, @@ -102,7 +112,7 @@ const BUSINESS_PLAN_MODIFIER = ({ href: "https://d.to/webhooks", }, }, - ], + ] as Feature[], }); export const PLANS = [ @@ -162,7 +172,7 @@ export const PLANS = [ href: "https://dub.co/docs/api-reference/introduction", }, }, - ], + ] as Feature[], }, { name: "Pro", @@ -242,7 +252,7 @@ export const PLANS = [ href: "https://dub.co/help/article/free-dot-link-domain", }, }, - ], + ] as Feature[], }, BUSINESS_PLAN_MODIFIER({ name: "Business", @@ -346,7 +356,7 @@ export const PLANS = [ { id: "sla", text: "Custom SLA" }, { id: "logs", text: "Audit logs" }, { id: "success", text: "Dedicated success manager" }, - ], + ] as Feature[], }, ]; From 614b1731dec5e967da20bcdded835333aebc7961 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Fri, 27 Dec 2024 15:39:49 -0500 Subject: [PATCH 4/6] Update pricing.tsx --- packages/utils/src/constants/pricing.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/utils/src/constants/pricing.tsx b/packages/utils/src/constants/pricing.tsx index 0458e76741..eebb797b8c 100644 --- a/packages/utils/src/constants/pricing.tsx +++ b/packages/utils/src/constants/pricing.tsx @@ -1,3 +1,5 @@ +import { nFormatter } from "../functions"; + type Feature = { id?: string; text: string; @@ -52,7 +54,7 @@ const BUSINESS_PLAN_MODIFIER = ({ }, cta: { text: "Get started with Business", - shortText: "Get started", + shortText: "Get Business", href: "https://app.dub.co/register", color: "bg-black hover:bg-gray-800 hover:ring-gray-200", }, @@ -60,7 +62,7 @@ const BUSINESS_PLAN_MODIFIER = ({ features: [ { id: "clicks", - text: `${Intl.NumberFormat("en-US").format(clicks)} tracked clicks/mo`, + text: `${nFormatter(clicks)} tracked clicks/mo`, }, { id: "links", @@ -205,7 +207,7 @@ export const PLANS = [ }, cta: { text: "Get started with Pro", - shortText: "Get started", + shortText: "Get Pro", href: "https://app.dub.co/register", color: "bg-blue-600 hover:bg-blue-700 hover:ring-blue-100", }, From 9386048e00189aa6cc5fa196f9c3892b2d7fbc99 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Fri, 27 Dec 2024 15:51:50 -0500 Subject: [PATCH 5/6] Export `PlanFeature` --- packages/utils/src/constants/pricing.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/utils/src/constants/pricing.tsx b/packages/utils/src/constants/pricing.tsx index eebb797b8c..cc6324f88f 100644 --- a/packages/utils/src/constants/pricing.tsx +++ b/packages/utils/src/constants/pricing.tsx @@ -1,6 +1,6 @@ import { nFormatter } from "../functions"; -type Feature = { +export type PlanFeature = { id?: string; text: string; footnote?: { @@ -114,7 +114,7 @@ const BUSINESS_PLAN_MODIFIER = ({ href: "https://d.to/webhooks", }, }, - ] as Feature[], + ] as PlanFeature[], }); export const PLANS = [ @@ -174,7 +174,7 @@ export const PLANS = [ href: "https://dub.co/docs/api-reference/introduction", }, }, - ] as Feature[], + ] as PlanFeature[], }, { name: "Pro", @@ -254,7 +254,7 @@ export const PLANS = [ href: "https://dub.co/help/article/free-dot-link-domain", }, }, - ] as Feature[], + ] as PlanFeature[], }, BUSINESS_PLAN_MODIFIER({ name: "Business", @@ -358,7 +358,7 @@ export const PLANS = [ { id: "sla", text: "Custom SLA" }, { id: "logs", text: "Audit logs" }, { id: "success", text: "Dedicated success manager" }, - ] as Feature[], + ] as PlanFeature[], }, ]; From 7e7e853c495e6b501d3361862d1de7029eb25dac Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Fri, 27 Dec 2024 16:34:25 -0500 Subject: [PATCH 6/6] Update pricing.tsx --- packages/utils/src/constants/pricing.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/utils/src/constants/pricing.tsx b/packages/utils/src/constants/pricing.tsx index cc6324f88f..e77b1399af 100644 --- a/packages/utils/src/constants/pricing.tsx +++ b/packages/utils/src/constants/pricing.tsx @@ -42,6 +42,7 @@ const BUSINESS_PLAN_MODIFIER = ({ limits: { links, clicks, + conversions, domains, tags: 1000000000, users,