diff --git a/public/images/basic.png b/public/images/basic.png new file mode 100644 index 0000000..0a63835 Binary files /dev/null and b/public/images/basic.png differ diff --git a/public/images/pro.png b/public/images/pro.png new file mode 100644 index 0000000..e5bbc19 Binary files /dev/null and b/public/images/pro.png differ diff --git a/public/images/standard.png b/public/images/standard.png new file mode 100644 index 0000000..87b2f52 Binary files /dev/null and b/public/images/standard.png differ diff --git a/src/components/contact/ContactBanner.astro b/src/components/contact/ContactBanner.astro new file mode 100644 index 0000000..453c31a --- /dev/null +++ b/src/components/contact/ContactBanner.astro @@ -0,0 +1,30 @@ +--- +import ActionLink from "@/components/landing/ActionLink.astro"; +import { LucideIcon } from "@/components/ui/lucide-icon"; +--- + +
+
+ + + +
+

به یک پلن اختصاصی نیاز دارید؟

+

+ تیم ما به شما کمک می‌کند پلنی متناسب با نیازهای مجموعه‌تان داشته باشید. +

+
+
+ + + تماس با پشتیبانی + + +
diff --git a/src/components/ui/lucide-icon.tsx b/src/components/ui/lucide-icon.tsx index 2ccd3f8..bfc0876 100644 --- a/src/components/ui/lucide-icon.tsx +++ b/src/components/ui/lucide-icon.tsx @@ -4,6 +4,7 @@ import { Bell, BicepsFlexed, Building2, + Calendar, Check, Cloud, Dumbbell, @@ -20,6 +21,7 @@ import { UserCircle, Users, Wallet, + X, type LucideIcon as LucideIconComponent, } from "lucide-react" @@ -48,6 +50,8 @@ export const landingIcons = { thumbsUp: ThumbsUp, star: Star, check: Check, + calendar: Calendar, + x: X, } as const satisfies Record export type LandingIconName = keyof typeof landingIcons diff --git a/src/pages/plans.astro b/src/pages/plans.astro index 18eba28..005aaae 100644 --- a/src/pages/plans.astro +++ b/src/pages/plans.astro @@ -1,9 +1,182 @@ --- import Layout from "../layouts/Layout.astro"; +import { LucideIcon } from "@/components/ui/lucide-icon"; +import ContactBanner from "@/components/contact/ContactBanner.astro"; +const plans = [ + { + title: "پلن ساده", + description: "بهترین انتخاب برای باشگاه‌های تازه به راه افتاده.", + userCount: 50, + coachCount: 5, + pricePerMonth: 2_500_000, + time: 30, + accessToPublicMovments: true, + accessToPublicMeals: false, + imageUrl: "/images/basic.png", + popular: false, + }, + { + title: "پلن استاندارد", + description: "ایده‌آل برای باشگاه‌های در حال رشد با اعضای فعال.", + userCount: 100, + coachCount: 10, + pricePerMonth: 3_500_000, + time: 30, + accessToPublicMovments: true, + accessToPublicMeals: true, + imageUrl: "/images/standard.png", + popular: true, + }, + { + title: "پلن حرفه ای", + description: + "مناسب برای باشگاه‌های بزرگ که به دسترسی کامل و انعطاف‌پذیری بالا نیاز دارند.", + userCount: Infinity, + coachCount: Infinity, + pricePerMonth: 4_500_000, + time: 90, + accessToPublicMovments: true, + accessToPublicMeals: true, + imageUrl: "/images/pro.png", + popular: false, + }, +]; + +function formatLimit(value: number) { + return value === Infinity ? "نامحدود" : String(value); +} ---
-

پلن‌ها

+

+ پلن + متناسب + با باشگاه شما +

+
+ { + plans.map( + ({ + accessToPublicMeals, + description, + coachCount, + pricePerMonth, + imageUrl, + accessToPublicMovments, + time, + title, + userCount, + popular, + }) => ( +
+ +
+
{title}
+
+ + {pricePerMonth.toLocaleString("fa-IR")} + + تومان / ماهانه +
+
+

{description}

+ +
    +
  • + + + محدودیت اعضا + + {formatLimit(userCount)} +
  • +
    +
  • + + + محدودیت مربیان + + {formatLimit(coachCount)} +
  • +
    +
  • + + + مدت زمان + + {time} روز +
  • +
    +
  • + دسترسی به حرکات عمومی + {accessToPublicMovments ? ( + + + + ) : ( + + + + )} +
  • +
    +
  • + دسترسی به وعده‌های عمومی + {accessToPublicMeals ? ( + + + + ) : ( + + + + )} +
  • +
+ +
+ {popular && ( + + محبوب‌ترین + + )} + +
+
+ ), + ) + } +
+
+ +