From dded00edc754ef68b47bc059aab571f8cac75e47 Mon Sep 17 00:00:00 2001 From: mehedi-hasan Date: Tue, 9 Apr 2024 17:36:43 +0600 Subject: [PATCH] feat: add free tier pricing card --- src/app/(app)/pricing/page.tsx | 33 ++++++++++++++++++++++++- src/components/pricing/check-item.tsx | 2 +- src/components/pricing/pricing-card.tsx | 29 +++++++++++++++++++--- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/app/(app)/pricing/page.tsx b/src/app/(app)/pricing/page.tsx index 38baaf3..05ef640 100644 --- a/src/app/(app)/pricing/page.tsx +++ b/src/app/(app)/pricing/page.tsx @@ -11,6 +11,23 @@ export default function Page() { setIsYearly(parseInt(value) === 1); const plans = [ + { + title: "Free", + monthlyPrice: 0, + yearlyPrice: 0, + description: "Essential features you need to get started", + features: [ + "Access to a selection of introductory courses", + "Limited content library", + "Basic skill assessments", + "Community support", + ], + idealFor: [ + "Beginners looking to dip their toes into upskilling", + "Those on a tight budget who want to explore our platform before committing", + ], + actionLabel: "Get Started", + }, { title: "Basic", monthlyPrice: 10, @@ -23,6 +40,10 @@ export default function Page() { "Community forums for networking and support", "Certificate of completion for each course", ], + idealFor: [ + "Individuals committed to continuous learning and professional growth", + "Those seeking a comprehensive upskilling solution at an affordable price", + ], actionLabel: "Get Started", }, { @@ -37,6 +58,11 @@ export default function Page() { "Priority customer support", "Premium resources such as e-books and industry reports", ], + idealFor: [ + "Experienced developers aiming to specialize in specific areas", + "Professionals seeking personalized guidance to advance their careers", + "Individuals looking for premium upskilling resources and support", + ], actionLabel: "Get Started", popular: true, }, @@ -51,6 +77,11 @@ export default function Page() { "Team analytics and progress tracking", "On-site workshops and training sessions (optional)", ], + idealFor: [ + "Companies looking to invest in the continuous growth and development of their engineering teams", + "HR departments seeking scalable upskilling solutions for their workforce", + "Organizations with specific training needs and goals", + ], actionLabel: "Contact Sales", exclusive: true, }, @@ -62,7 +93,7 @@ export default function Page() { subtitle="At Skilld, we empower software engineers with top-notch upskilling resources tailored to their career goals. Explore our pricing plans below and take the next step towards mastering your craft." /> -
+
{plans.map((plan) => { return ; })} diff --git a/src/components/pricing/check-item.tsx b/src/components/pricing/check-item.tsx index 48ad54c..b81267e 100644 --- a/src/components/pricing/check-item.tsx +++ b/src/components/pricing/check-item.tsx @@ -2,7 +2,7 @@ import { CheckCircle2 } from "lucide-react" const CheckItem = ({ text }: { text: string }) => (
- +

{text}

) diff --git a/src/components/pricing/pricing-card.tsx b/src/components/pricing/pricing-card.tsx index 6500600..7b50aa1 100644 --- a/src/components/pricing/pricing-card.tsx +++ b/src/components/pricing/pricing-card.tsx @@ -9,6 +9,7 @@ import { import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import CheckItem from "./check-item"; +import { ArrowRight } from "lucide-react"; type PricingCardProps = { isYearly?: boolean; @@ -20,6 +21,7 @@ type PricingCardProps = { actionLabel: string; popular?: boolean; exclusive?: boolean; + idealFor: string[]; }; const PricingCard = ({ @@ -32,12 +34,13 @@ const PricingCard = ({ actionLabel, popular, exclusive, + idealFor, }: PricingCardProps) => ( - {yearlyPrice && isYearly ? "/year" : monthlyPrice ? "/month" : null} + {yearlyPrice && isYearly + ? "/year" + : isYearly && title === "Free" + ? "/year" + : monthlyPrice + ? "/month" + : title === "Free" + ? "/month" + : null} {description} @@ -86,6 +99,16 @@ const PricingCard = ({ {features.map((feature: string) => ( ))} +

Ideal For:

+ + {idealFor.map((item) => ( +
+ +

+ {item} +

+
+ ))}