diff --git a/src/pages/Classes.tsx b/src/pages/Classes.tsx new file mode 100644 index 0000000..ff9a9db --- /dev/null +++ b/src/pages/Classes.tsx @@ -0,0 +1,143 @@ +import { useState } from "react"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Clock, User, Users, Flame } from "lucide-react"; +import { useSaasMutation } from "@/hooks/use-tygarun"; +import { toast } from "sonner"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; + +const days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +const schedule: Record> = { + Mon: [ + { time: "6:00 AM", name: "HIIT Burn", trainer: "Sarah Chen", difficulty: "Advanced", capacity: "20/25" }, + { time: "12:00 PM", name: "Yoga Flow", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "15/30" }, + { time: "5:30 PM", name: "Power Lift", trainer: "Marcus Rivera", difficulty: "Intermediate", capacity: "18/20" }, + ], + Tue: [ + { time: "7:00 AM", name: "Yoga Flow", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "12/25" }, + { time: "12:00 PM", name: "Power Lift", trainer: "Marcus Rivera", difficulty: "Intermediate", capacity: "16/20" }, + { time: "6:30 PM", name: "Box Fit", trainer: "Dante Williams", difficulty: "Advanced", capacity: "22/25" }, + ], + Wed: [ + { time: "6:00 AM", name: "HIIT Burn", trainer: "Sarah Chen", difficulty: "Advanced", capacity: "19/25" }, + { time: "10:00 AM", name: "Pilates Core", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "10/20" }, + { time: "5:30 PM", name: "Strength Circuit", trainer: "Marcus Rivera", difficulty: "Intermediate", capacity: "17/20" }, + ], + Thu: [ + { time: "7:00 AM", name: "Box Fit", trainer: "Dante Williams", difficulty: "Intermediate", capacity: "14/25" }, + { time: "12:00 PM", name: "Yoga Flow", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "8/25" }, + { time: "6:00 PM", name: "HIIT Burn", trainer: "Sarah Chen", difficulty: "Advanced", capacity: "23/25" }, + ], + Fri: [ + { time: "6:00 AM", name: "Power Lift", trainer: "Marcus Rivera", difficulty: "Advanced", capacity: "18/20" }, + { time: "10:00 AM", name: "Stretch & Recover", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "6/20" }, + { time: "5:00 PM", name: "Fight Club", trainer: "Dante Williams", difficulty: "Advanced", capacity: "20/25" }, + ], + Sat: [ + { time: "8:00 AM", name: "Full Body Blast", trainer: "Sarah Chen", difficulty: "Intermediate", capacity: "22/30" }, + { time: "10:00 AM", name: "Yoga Flow", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "15/25" }, + ], + Sun: [ + { time: "9:00 AM", name: "Recovery Yoga", trainer: "Priya Sharma", difficulty: "All Levels", capacity: "10/25" }, + { time: "11:00 AM", name: "Open Gym Session", trainer: "Marcus Rivera", difficulty: "All Levels", capacity: "30/50" }, + ], +}; + +const diffColor: Record = { + "Advanced": "bg-red-500/10 text-red-400 border-red-500/30", + "Intermediate": "bg-orange-500/10 text-orange-400 border-orange-500/30", + "All Levels": "bg-emerald-500/10 text-emerald-400 border-emerald-500/30", +}; + +export default function Classes() { + const [activeDay, setActiveDay] = useState("Mon"); + const { mutate: bookClass, loading: booking } = useSaasMutation("scheduling", "/bookings"); + + return ( +
+
+ + {/* ── Hero ── */} +
+
+ Schedule +

CLASS SCHEDULE

+

Find the perfect workout for your goals. Book your spot before classes fill up.

+
+
+ + {/* ── Day Tabs ── */} +
+
+
+ {days.map((d) => ( + + ))} +
+ +
+ {(schedule[activeDay] || []).map((cls, i) => ( + + +
+ + {cls.time} +
+
+

{cls.name}

+
+ + {cls.trainer} +
+
+ {cls.difficulty} +
+ + {cls.capacity} +
+ +
+
+ ))} +
+
+
+ + {/* ── Class Info Cards ── */} +
+
+ + + +

First Class Free

+

Try any class with no commitment. Just sign up and show up.

+
+
+ + + +

45-60 Min Sessions

+

Efficient workouts designed to maximize results in minimal time.

+
+
+ + + +

Small Groups

+

Capped at 25 so every member gets personal attention from the trainer.

+
+
+
+
+ +
+ ); +} \ No newline at end of file