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 && (
+
+ محبوبترین
+
+ )}
+
+
+
+ ),
+ )
+ }
+
+
+
+