├── 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 |
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 |
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 |
10 | 11 | 12 | 13 |
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 |
10 | 11 | 12 | 13 |
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 | 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 | 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 | img 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 | img 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 |
30 | 31 |
32 | 33 |
34 | 35 |
36 |
37 | 38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
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 |
30 | 31 |
32 | 33 |
34 | 35 |
36 |
37 | 38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
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 | Trainer 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 | Trainer 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 |
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 |
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 | 61 | 62 |
63 | 64 |
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 | 61 | 62 |
63 | 64 |
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 |
7 |
8 |
9 |

Contact Us

10 |
11 | 12 | 19 |
20 |
21 | 22 | 29 |
30 |
31 | 32 | 39 |
40 |
41 | 42 | 49 |
50 |
51 |
54 |
55 |
56 | 65 |
66 |
67 |
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 | 12 | 19 |
20 |
21 | 22 | 29 |
30 |
31 | 32 | 39 |
40 |
41 | 42 | 49 |
50 |
51 |
54 |
55 |
56 | 65 |
66 |
67 |
68 | ); 69 | }; 70 | 71 | export default Contact; 72 | --------------------------------------------------------------------------------