├── assets
└── img
│ ├── hero.jpg
│ ├── img1.jpg
│ ├── img2.jpg
│ ├── img3.jpg
│ └── about.png
├── src
├── assets
│ └── img
│ │ ├── about.png
│ │ ├── hero.jpg
│ │ ├── img1.jpg
│ │ ├── img2.jpg
│ │ └── img3.jpg
├── App.css
├── main.jsx
├── index.css
├── components
│ ├── Home.jsx
│ ├── Plans.jsx
│ ├── Trainers.jsx
│ ├── About.jsx
│ ├── BarLoader.jsx
│ ├── Footer.jsx
│ ├── Navbar.jsx
│ └── Contact.jsx
├── layouts
│ ├── Button.jsx
│ ├── TrainerCard.jsx
│ └── PlansCard.jsx
└── App.jsx
├── postcss.config.js
├── vite.config.js
├── App.css
├── main.jsx
├── tailwind.config.js
├── .gitignore
├── index.css
├── components
├── Home.jsx
├── Plans.jsx
├── Trainers.jsx
├── About.jsx
├── BarLoader.jsx
├── Footer.jsx
├── Navbar.jsx
└── Contact.jsx
├── .eslintrc.cjs
├── index.html
├── layouts
├── Button.jsx
├── TrainerCard.jsx
└── PlansCard.jsx
├── package.json
├── App.jsx
└── README.md
/assets/img/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/assets/img/hero.jpg
--------------------------------------------------------------------------------
/assets/img/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/assets/img/img1.jpg
--------------------------------------------------------------------------------
/assets/img/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/assets/img/img2.jpg
--------------------------------------------------------------------------------
/assets/img/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/assets/img/img3.jpg
--------------------------------------------------------------------------------
/assets/img/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/assets/img/about.png
--------------------------------------------------------------------------------
/src/assets/img/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/src/assets/img/about.png
--------------------------------------------------------------------------------
/src/assets/img/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/src/assets/img/hero.jpg
--------------------------------------------------------------------------------
/src/assets/img/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/src/assets/img/img1.jpg
--------------------------------------------------------------------------------
/src/assets/img/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/src/assets/img/img2.jpg
--------------------------------------------------------------------------------
/src/assets/img/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EshaalB/Gym-Website/HEAD/src/assets/img/img3.jpg
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/App.css:
--------------------------------------------------------------------------------
1 | .full-screen {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100%;
7 | display: flex;
8 | justify-content: center;
9 | align-items: center;
10 | z-index: 9999;
11 | }
12 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | .full-screen {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100%;
7 | display: flex;
8 | justify-content: center;
9 | align-items: center;
10 | z-index: 9999;
11 | }
12 |
--------------------------------------------------------------------------------
/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.jsx'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.jsx'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
4 | theme: {
5 | extend: {
6 | colors: {
7 | brightRed: "#E6533C",
8 | },
9 | },
10 | },
11 | plugins: [],
12 | };
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;800;900&display=swap");
2 |
3 | @tailwind base;
4 | @tailwind components;
5 | @tailwind utilities;
6 |
7 | body {
8 | background: linear-gradient(to bottom right, #000000, #171818);
9 | color: white;
10 | font-family: "Inter", sans-serif;
11 | transition: 0.4s ease-in;
12 | }
13 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;800;900&display=swap");
2 |
3 | @tailwind base;
4 | @tailwind components;
5 | @tailwind utilities;
6 |
7 | body {
8 | background: linear-gradient(to bottom right, #000000, #171818);
9 | color: white;
10 | font-family: "Inter", sans-serif;
11 | transition: 0.4s ease-in;
12 | }
13 |
--------------------------------------------------------------------------------
/components/Home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Button from "../layouts/Button";
3 |
4 | const Home = () => {
5 | return (
6 |
7 |
8 |
Discover your strength!
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default Home;
19 |
--------------------------------------------------------------------------------
/src/components/Home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Button from "../layouts/Button";
3 |
4 | const Home = () => {
5 | return (
6 |
7 |
8 |
Discover your strength!
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default Home;
19 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: { browser: true, es2020: true },
4 | extends: [
5 | 'eslint:recommended',
6 | 'plugin:react/recommended',
7 | 'plugin:react/jsx-runtime',
8 | 'plugin:react-hooks/recommended',
9 | ],
10 | ignorePatterns: ['dist', '.eslintrc.cjs'],
11 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
12 | settings: { react: { version: '18.2' } },
13 | plugins: ['react-refresh'],
14 | rules: {
15 | 'react/jsx-no-target-blank': 'off',
16 | 'react-refresh/only-export-components': [
17 | 'warn',
18 | { allowConstantExport: true },
19 | ],
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/components/Plans.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PlansCard from "../layouts/PlansCard";
3 |
4 | const Plans = () => {
5 | return (
6 |
7 |
Gym membership
8 |
9 |
14 |
15 | );
16 | };
17 |
18 | export default Plans;
19 |
--------------------------------------------------------------------------------
/src/components/Plans.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import PlansCard from "../layouts/PlansCard";
3 |
4 | const Plans = () => {
5 | return (
6 |
7 |
Gym membership
8 |
9 |
14 |
15 | );
16 | };
17 |
18 | export default Plans;
19 |
--------------------------------------------------------------------------------
/components/Trainers.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import img1 from "../assets/img/img1.jpg";
3 | import img2 from "../assets/img/img2.jpg";
4 | import img3 from "../assets/img/img3.jpg";
5 | import TrainerCard from "../layouts/TrainerCard";
6 |
7 | const Trainers = () => {
8 | return (
9 |
10 |
Our Trainers
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default Trainers;
22 |
--------------------------------------------------------------------------------
/src/components/Trainers.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import img1 from "../assets/img/img1.jpg";
3 | import img2 from "../assets/img/img2.jpg";
4 | import img3 from "../assets/img/img3.jpg";
5 | import TrainerCard from "../layouts/TrainerCard";
6 |
7 | const Trainers = () => {
8 | return (
9 |
10 |
Our Trainers
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default Trainers;
22 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
13 | Levels Gym- The #1 Gym in Town
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/layouts/Button.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Button = (props) => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | {props.title}
11 |
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default Button;
19 |
--------------------------------------------------------------------------------
/src/layouts/Button.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Button = (props) => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | {props.title}
11 |
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default Button;
19 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gym-project",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "framer-motion": "^11.0.8",
14 | "react": "^18.2.0",
15 | "react-dom": "^18.2.0",
16 | "react-icons": "^5.0.1",
17 | "react-scroll": "^1.9.0"
18 | },
19 | "devDependencies": {
20 | "@types/react": "^18.2.56",
21 | "@types/react-dom": "^18.2.19",
22 | "@vitejs/plugin-react": "^4.2.1",
23 | "autoprefixer": "^10.4.17",
24 | "eslint": "^8.56.0",
25 | "eslint-plugin-react": "^7.33.2",
26 | "eslint-plugin-react-hooks": "^4.6.0",
27 | "eslint-plugin-react-refresh": "^0.4.5",
28 | "postcss": "^8.4.35",
29 | "tailwindcss": "^3.4.1",
30 | "vite": "^5.1.4"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/components/About.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import img from "../assets/img/about.png";
3 |
4 | const About = () => {
5 | return (
6 |
7 |
8 |
9 | About Us
10 |
11 |
12 |
13 |
14 | Your well-being is your greatest wealth. Whether it's achieving
15 | optimal health or enhancing your fitness journey, we're here to
16 | support you every step of the way.
17 |
18 | At our fitness center, our team of certified personal trainers,
19 | attentive staff, and experienced management are dedicated to
20 | fostering a nurturing environment.
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | };
31 |
32 | export default About;
33 |
--------------------------------------------------------------------------------
/src/components/About.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import img from "../assets/img/about.png";
3 |
4 | const About = () => {
5 | return (
6 |
7 |
8 |
9 | About Us
10 |
11 |
12 |
13 |
14 | Your well-being is your greatest wealth. Whether it's achieving
15 | optimal health or enhancing your fitness journey, we're here to
16 | support you every step of the way.
17 |
18 | At our fitness center, our team of certified personal trainers,
19 | attentive staff, and experienced management are dedicated to
20 | fostering a nurturing environment.
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | };
31 |
32 | export default About;
33 |
--------------------------------------------------------------------------------
/components/BarLoader.jsx:
--------------------------------------------------------------------------------
1 | import { motion } from "framer-motion";
2 |
3 | const Color = () => {
4 | return (
5 |
6 |
7 |
8 | );
9 | };
10 |
11 | const variants = {
12 | initial: {
13 | scaleY: 0.5,
14 | opacity: 0,
15 | },
16 | animate: {
17 | scaleY: 1,
18 | opacity: 1,
19 | transition: {
20 | repeat: Infinity,
21 | repeatType: "mirror",
22 | duration: 1,
23 | ease: "circIn",
24 | },
25 | },
26 | };
27 |
28 | const BarLoader = () => {
29 | return (
30 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Color;
48 |
--------------------------------------------------------------------------------
/src/components/BarLoader.jsx:
--------------------------------------------------------------------------------
1 | import { motion } from "framer-motion";
2 |
3 | const Color = () => {
4 | return (
5 |
6 |
7 |
8 | );
9 | };
10 |
11 | const variants = {
12 | initial: {
13 | scaleY: 0.5,
14 | opacity: 0,
15 | },
16 | animate: {
17 | scaleY: 1,
18 | opacity: 1,
19 | transition: {
20 | repeat: Infinity,
21 | repeatType: "mirror",
22 | duration: 1,
23 | ease: "circIn",
24 | },
25 | },
26 | };
27 |
28 | const BarLoader = () => {
29 | return (
30 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Color;
48 |
--------------------------------------------------------------------------------
/App.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import Navbar from "./components/Navbar";
3 | import Home from "./components/Home";
4 | import About from "./components/About";
5 | import Plans from "./components/Plans";
6 | import Trainers from "./components/Trainers";
7 | import Contact from "./components/Contact";
8 | import Footer from "./components/Footer";
9 | import BarLoader from "./components/BarLoader";
10 | import "./App.css";
11 |
12 | const App = () => {
13 | const [loading, setLoading] = useState(true);
14 |
15 | useEffect(() => {
16 | const timer = setTimeout(() => {
17 | setLoading(false);
18 | }, 5000);
19 |
20 | return () => clearTimeout(timer);
21 | }, []);
22 |
23 | return (
24 |
25 | {loading &&
}
26 |
27 |
28 |
29 |
32 |
33 |
36 |
39 |
40 |
43 |
44 |
47 |
48 |
49 |
50 |
51 | );
52 | };
53 |
54 | export default App;
55 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import Navbar from "./components/Navbar";
3 | import Home from "./components/Home";
4 | import About from "./components/About";
5 | import Plans from "./components/Plans";
6 | import Trainers from "./components/Trainers";
7 | import Contact from "./components/Contact";
8 | import Footer from "./components/Footer";
9 | import BarLoader from "./components/BarLoader";
10 | import "./App.css";
11 |
12 | const App = () => {
13 | const [loading, setLoading] = useState(true);
14 |
15 | useEffect(() => {
16 | const timer = setTimeout(() => {
17 | setLoading(false);
18 | }, 5000);
19 |
20 | return () => clearTimeout(timer);
21 | }, []);
22 |
23 | return (
24 |
25 | {loading &&
}
26 |
27 |
28 |
29 |
32 |
33 |
36 |
39 |
40 |
43 |
44 |
47 |
48 |
49 |
50 |
51 | );
52 | };
53 |
54 | export default App;
55 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 💪 Levels Gym – Gym Landing Page (React.js + Tailwind CSS)
2 |
3 | A modern, responsive, and sleek landing page for a gym or fitness center, built using **React.js** and styled with **Tailwind CSS**. This project is ideal for showcasing gym services, trainers, pricing plans, testimonials, and CTAs to attract new clients.
4 |
5 |
6 | ---
7 |
8 | ## 🧱 Features
9 |
10 | - 🧭 **Fully Responsive Design** – Works seamlessly across all screen sizes.
11 | - 🎯 **Hero Section** – Eye-catching introduction with call-to-action buttons.
12 | - 🏋️♀️ **Services Section** – Highlights different fitness programs.
13 | - 🧑🏫 **Trainers Section** – Showcasing experienced trainers with bios.
14 | - 📦 **Pricing Plans** – Clean and simple subscription options.
15 | - 💬 **Testimonials** – Client feedback with star ratings.
16 | - 📞 **Contact & Footer** – Call to action and social links.
17 |
18 | ---
19 |
20 | ## 🛠️ Tech Stack
21 |
22 | | Technology | Description |
23 | |----------------|-------------------------------------|
24 | | React.js | UI Library for building components |
25 | | Tailwind CSS | Utility-first CSS framework |
26 | | React Icons | Icon library for consistent icons |
27 | | Vite / CRA | (Choose based on your setup) |
28 |
29 | ---
30 |
31 |
32 | ---
33 |
34 | ## 🧩 Installation
35 |
36 | ```bash
37 | # 1. Clone the repo
38 | git clone https://github.com/your-username/fitzone-landing.git
39 |
40 | # 2. Navigate into the project
41 | cd Gym-Website
42 |
43 | # 3. Install dependencies
44 | npm install
45 |
46 | # 4. Run the development server
47 | npm run dev
48 |
49 |
50 |
--------------------------------------------------------------------------------
/layouts/TrainerCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { BsInstagram, BsTwitter, BsFacebook, BsTwitterX } from "react-icons/bs";
3 |
4 | const TrainerCard = (props) => {
5 | return (
6 |
7 |
8 |
13 |
14 |
15 |
{props.name}
16 |
48 |
49 |
50 | );
51 | };
52 |
53 | export default TrainerCard;
54 |
--------------------------------------------------------------------------------
/src/layouts/TrainerCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { BsInstagram, BsTwitter, BsFacebook, BsTwitterX } from "react-icons/bs";
3 |
4 | const TrainerCard = (props) => {
5 | return (
6 |
7 |
8 |
13 |
14 |
15 |
{props.name}
16 |
48 |
49 |
50 | );
51 | };
52 |
53 | export default TrainerCard;
54 |
--------------------------------------------------------------------------------
/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Link } from "react-scroll";
3 | import { AiTwotonePhone } from "react-icons/ai";
4 | import { AiOutlineMail } from "react-icons/ai";
5 |
6 | const newDate = new Date().getFullYear();
7 |
8 | const Footer = () => {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 | Level Gyms
16 |
17 |
18 |
19 | The best fitness destination in Lahore, for men and women.
20 |
21 |
22 |
23 |
Address
24 |
25 | Plot 339 Block R2 Johar Town Lahore, 54000 Pakistan
26 |
27 |
28 |
29 |
Business Hours
30 |
31 | Mon-Sat: 7:00 AM – 12:00 AM
32 | Sun: Closed
33 |
34 |
35 |
36 |
Contact
37 |
38 |
39 |
+92-309-4795547
40 |
41 |
42 |
43 |
levelszone@gmail.com
44 |
45 |
46 |
47 |
48 |
49 | © Levels gym | {newDate}
50 |
51 |
52 |
53 | );
54 | };
55 |
56 | export default Footer;
57 |
--------------------------------------------------------------------------------
/src/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Link } from "react-scroll";
3 | import { AiTwotonePhone } from "react-icons/ai";
4 | import { AiOutlineMail } from "react-icons/ai";
5 |
6 | const newDate = new Date().getFullYear();
7 |
8 | const Footer = () => {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 | Level Gyms
16 |
17 |
18 |
19 | The best fitness destination in Lahore, for men and women.
20 |
21 |
22 |
23 |
Address
24 |
25 | Plot 339 Block R2 Johar Town Lahore, 54000 Pakistan
26 |
27 |
28 |
29 |
Business Hours
30 |
31 | Mon-Sat: 7:00 AM – 12:00 AM
32 | Sun: Closed
33 |
34 |
35 |
36 |
Contact
37 |
38 |
39 |
+92-309-4795547
40 |
41 |
42 |
43 |
levelszone@gmail.com
44 |
45 |
46 |
47 |
48 |
49 | © Levels gym | {newDate}
50 |
51 |
52 |
53 | );
54 | };
55 |
56 | export default Footer;
57 |
--------------------------------------------------------------------------------
/layouts/PlansCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { MdOutlineAttachMoney } from "react-icons/md";
3 | import { AiFillCheckCircle, AiFillCloseCircle } from "react-icons/ai";
4 | import Button from "../layouts/Button";
5 |
6 | const PlansCard = (props) => {
7 | const features = [
8 | "Daily complimentary sessions with a personal trainer.",
9 | "Access to gym facilities during operational hours.",
10 | "Access to all rooms.",
11 | "Use of advance gym equipment.",
12 | ];
13 |
14 | const renderCircle = (index) => {
15 | if (props.title === "Trial Plan") {
16 | return index === 0 ? (
17 |
18 | ) : (
19 |
20 | );
21 | } else if (props.title === "Gold Plan") {
22 | return index < features.length / 2 ? (
23 |
24 | ) : (
25 |
26 | );
27 | } else {
28 | return props.price > 0 ? (
29 |
30 | ) : (
31 |
32 | );
33 | }
34 | };
35 |
36 | return (
37 |
38 |
39 | {props.title}
40 |
41 |
42 |
43 |
44 |
{props.price}
45 |
46 |
47 |
48 | {features.map((feature, index) => (
49 |
50 | {renderCircle(index)}
51 |
{feature}
52 |
53 | ))}
54 |
55 |
56 |
57 |
58 |
59 |
60 | );
61 | };
62 |
63 | export default PlansCard;
64 |
--------------------------------------------------------------------------------
/src/layouts/PlansCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { MdOutlineAttachMoney } from "react-icons/md";
3 | import { AiFillCheckCircle, AiFillCloseCircle } from "react-icons/ai";
4 | import Button from "../layouts/Button";
5 |
6 | const PlansCard = (props) => {
7 | const features = [
8 | "Daily complimentary sessions with a personal trainer.",
9 | "Access to gym facilities during operational hours.",
10 | "Access to all rooms.",
11 | "Use of advance gym equipment.",
12 | ];
13 |
14 | const renderCircle = (index) => {
15 | if (props.title === "Trial Plan") {
16 | return index === 0 ? (
17 |
18 | ) : (
19 |
20 | );
21 | } else if (props.title === "Gold Plan") {
22 | return index < features.length / 2 ? (
23 |
24 | ) : (
25 |
26 | );
27 | } else {
28 | return props.price > 0 ? (
29 |
30 | ) : (
31 |
32 | );
33 | }
34 | };
35 |
36 | return (
37 |
38 |
39 | {props.title}
40 |
41 |
42 |
43 |
44 |
{props.price}
45 |
46 |
47 |
48 | {features.map((feature, index) => (
49 |
50 | {renderCircle(index)}
51 |
{feature}
52 |
53 | ))}
54 |
55 |
56 |
57 |
58 |
59 |
60 | );
61 | };
62 |
63 | export default PlansCard;
64 |
--------------------------------------------------------------------------------
/components/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Link } from "react-scroll";
3 | import { AiOutlineMenuUnfold } from "react-icons/ai";
4 |
5 | const menuItems = [
6 | { id: "home", name: "Home" },
7 | { id: "about", name: "About Us" },
8 | { id: "plans", name: "Pricing Plans" },
9 | { id: "trainers", name: "Trainers" },
10 | { id: "contact", name: "Contact Us" },
11 | ];
12 |
13 | const Navbar = () => {
14 | const [menu, setMenu] = useState(false);
15 | const [isSticky, setIsSticky] = useState(false);
16 |
17 | const handleChange = () => {
18 | setMenu(!menu);
19 | };
20 |
21 | const handleScroll = () => {
22 | setIsSticky(window.scrollY > 0);
23 | };
24 |
25 | useEffect(() => {
26 | window.addEventListener("scroll", handleScroll);
27 | return () => {
28 | window.removeEventListener("scroll", handleScroll);
29 | };
30 | }, []);
31 |
32 | return (
33 |
34 |
39 |
40 |
41 |
42 | Levels Gym
43 |
44 |
45 |
46 |
47 |
48 | {menuItems.map((item) => (
49 |
57 | {item.name}
58 |
59 | ))}
60 |
61 |
62 |
65 |
66 |
67 |
72 | {menuItems.map((item) => (
73 |
81 | {item.name}
82 |
83 | ))}
84 |
85 |
86 | );
87 | };
88 |
89 | export default Navbar;
90 |
--------------------------------------------------------------------------------
/src/components/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Link } from "react-scroll";
3 | import { AiOutlineMenuUnfold } from "react-icons/ai";
4 |
5 | const menuItems = [
6 | { id: "home", name: "Home" },
7 | { id: "about", name: "About Us" },
8 | { id: "plans", name: "Pricing Plans" },
9 | { id: "trainers", name: "Trainers" },
10 | { id: "contact", name: "Contact Us" },
11 | ];
12 |
13 | const Navbar = () => {
14 | const [menu, setMenu] = useState(false);
15 | const [isSticky, setIsSticky] = useState(false);
16 |
17 | const handleChange = () => {
18 | setMenu(!menu);
19 | };
20 |
21 | const handleScroll = () => {
22 | setIsSticky(window.scrollY > 0);
23 | };
24 |
25 | useEffect(() => {
26 | window.addEventListener("scroll", handleScroll);
27 | return () => {
28 | window.removeEventListener("scroll", handleScroll);
29 | };
30 | }, []);
31 |
32 | return (
33 |
34 |
39 |
40 |
41 |
42 | Levels Gym
43 |
44 |
45 |
46 |
47 |
48 | {menuItems.map((item) => (
49 |
57 | {item.name}
58 |
59 | ))}
60 |
61 |
62 |
65 |
66 |
67 |
72 | {menuItems.map((item) => (
73 |
81 | {item.name}
82 |
83 | ))}
84 |
85 |
86 | );
87 | };
88 |
89 | export default Navbar;
90 |
--------------------------------------------------------------------------------
/components/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Button from "../layouts/Button";
3 |
4 | const Contact = () => {
5 | return (
6 |
68 | );
69 | };
70 |
71 | export default Contact;
72 |
--------------------------------------------------------------------------------
/src/components/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Button from "../layouts/Button";
3 |
4 | const Contact = () => {
5 | return (
6 |
7 |
8 |
9 | Contact Us
10 |
11 | Your Name
12 |
19 |
20 |
21 | Your Email
22 |
29 |
30 |
31 | Your Number
32 |
39 |
40 |
41 | Your Message
42 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
65 |
66 |
67 |
68 | );
69 | };
70 |
71 | export default Contact;
72 |
--------------------------------------------------------------------------------