├── .eslintrc.json ├── .gitignore ├── .prettierrc.json ├── README.md ├── components ├── BackToTop.jsx ├── Error │ └── NotFound.jsx ├── FAQS.jsx ├── Fields.jsx ├── Footer.jsx ├── Landing.jsx ├── Modal.jsx ├── Navbar.jsx └── ThemeSwitcher.jsx ├── contribution.md ├── hooks └── useWindowDimensions.js ├── jsconfig.json ├── layout ├── CenterLayout.jsx └── Layout.jsx ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── 404.js ├── _app.js ├── _document.js ├── about │ └── index.jsx ├── api │ └── hello.js ├── events │ └── index.js ├── gallery │ └── index.js ├── imageModal │ └── index.js ├── index.js ├── page404 │ ├── 404.svg │ └── Error.js ├── projects │ ├── Card.js │ └── index.js ├── resource │ └── index.js ├── subscribe │ └── index.js └── team │ └── index.js ├── postcss.config.js ├── public ├── GDSC Project img.png ├── Gallery │ ├── Copy of CORE TEAM.png │ ├── Copy of Copy of Copy of Copy of DSCN1310.jpg │ ├── Copy of Copy of Copy of Copy of IMG_0204_edited.jpg │ ├── Copy of Copy of Copy of DSCN1272_edited.jpg │ ├── Copy of Copy of Copy of DSCN1288.JPG.png │ ├── Copy of Copy of Copy of DSCN1294.jpg │ ├── Copy of Copy of Copy of DSCN1311.jpg │ ├── Copy of Copy of Copy of DSCN1371.jpg │ ├── Copy of Copy of Copy of IMG_0221_edited.jpg │ ├── Copy of Copy of Copy of IMG_0243_edited.jpg │ ├── Copy of Copy of IMG_1771.png │ ├── Copy of EXTENDED CORE TEAM.png │ ├── Copy of IMG-20230927-WA0187.jpg │ ├── Copy of IMG-20230927-WA0192.jpg │ ├── Copy of Photo from Aindree.jpg │ └── Copy of Siddharth.png ├── Newsletter (1).png ├── Orientation Event.jpg ├── TeamImages │ ├── Content Team │ │ ├── Abhinandan_Barua_Content.jpg │ │ ├── Arya_Pandit_Content.jpg │ │ └── Spandan_Das_Content.jpeg │ ├── Core Team │ │ ├── Anupam_Ghosh.jpeg │ │ ├── ArinRay.jpeg │ │ ├── Aryan Paul.jpeg │ │ ├── Atanu Nayak.jpeg │ │ ├── Jyotisman _Sarkar.jpeg │ │ ├── Om_Mittal.jpeg │ │ ├── Siddharth_Banerjee.jpg │ │ ├── Somoprovo_Bhattacharjee.jpeg │ │ ├── akankcha_singh_vo1kvKT.jpg │ │ ├── anurag_jha.jpg │ │ ├── atanu_nayak.jpg │ │ ├── ayush_pandit_4WShbLz.jpg │ │ ├── debabrata_mondal.jpg │ │ ├── upayan_de.jpg │ │ └── vikash_sangai_UWkdSc0.jpeg │ ├── Design Team │ │ ├── Aindree_Chatterjee_Design.jpg │ │ ├── Anurag_Dey_Design.png │ │ ├── Apurba_Nandi_Design.jpg │ │ ├── Koustav_Bhattacharjee_Design.jpg │ │ ├── Prama_Ray_Design.jpg │ │ ├── Saumili_Roy_Design.png │ │ ├── Sayandeep_Pramanik_Design.jpg │ │ ├── Shreyaan_Saha_Design.jpg │ │ └── Soumyadeep_Kar_Design.jpg │ ├── Dev Team │ │ ├── Arka_Dutta_DevTeam.jpg │ │ ├── Ayantik_Bhaumik_DevTeam.jpeg │ │ ├── Bhavesh_Agarwal_DevTeam.jpg │ │ ├── Bhavesh_Agrawal_DevTeam.jpg │ │ ├── Copy of Arka_Dutta_DevTeam.jpg │ │ ├── Sayan_Sah_DevTeam.jpg │ │ ├── Shubham_Pandey_DevTeam.jpg │ │ ├── Soumyajit_Naskar_DevTeam.jpg │ │ ├── Subhradeep_Bera_DevTeam.jpg │ │ └── aditya_mayukh.jpg │ ├── Events Team │ │ ├── Anurag_Dey_Events.png │ │ ├── Ayantik_Bhaumik_Events.jpeg │ │ ├── Debanuj_Basak_Events.png │ │ ├── Gaurav_Bose_EventsTeam.jpg │ │ ├── Piyush_Gupta_EventsTeam.jpg │ │ ├── Rajat_subhra_chowdhury.jpeg │ │ ├── Surjayan_Kar_EventsTeam.jpg │ │ └── Tarpan_Roy_Eventsteam.jpg │ └── ML Team │ │ ├── Dipan_Mondal_ML_Team.jpg │ │ ├── Parthiv_Sarkar_ML_Team.jpeg │ │ ├── Shakya_Majumdar_ML_Team.jpg │ │ ├── Sheetali_Maity_ML_Team.jpg │ │ ├── Soumyadipto_Pal_ML_Team.jpg │ │ ├── Srijit_Das_ML_Team.jpg │ │ └── Srinjoy_Dutta_ML_Team.jpg ├── Vivek Gupta Event.jpg ├── astronaut.svg ├── bitnbuild.png ├── close.svg ├── dsacp-image.png ├── favicon.ico ├── gdsc.png ├── ml-image.png ├── newsletter.png ├── next.svg ├── saturn.svg ├── subs.jpeg ├── vercel.svg └── webdev-image.png ├── styles └── globals.css └── tailwind.config.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "semi": true, 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "trailingComma": "all", 7 | "bracketSpacing": true 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![GDSC](/public/gdsc.png) 4 | 5 | ### Website Looks 6 | ![Screenshot_2](https://github.com/0xmuski/GDSC-JU-Website/assets/147321591/20d440d8-98df-4239-86e8-f692d9958a13) 7 | 8 | ![Screenshot_3](https://github.com/0xmuski/GDSC-JU-Website/assets/147321591/d39979f1-8cb2-48c6-8995-58b743727d60) 9 | 10 | ## Getting Started 11 | 12 | First, Install necessary packages: 13 | ```bash 14 | npm install 15 | or 16 | yarn add 17 | or 18 | pnpm add 19 | or 20 | bun add 21 | ``` 22 | 23 | Second, run the development server: 24 | 25 | ```bash 26 | npm run dev 27 | # or 28 | yarn dev 29 | # or 30 | pnpm dev 31 | # or 32 | bun dev 33 | ``` 34 | 35 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 36 | 37 | 38 | 39 | ## Learn More 40 | 41 | To learn more about Next.js, take a look at the following resources: 42 | 43 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 44 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 45 | - [Learn NextUI](https://nextui.org/docs/guide/introduction) - NextUI documentation to build beautiful and accessible user interfaces(Created on top of [Tailwind CSS](https://tailwindcss.com/) and [React Aria](https://react-spectrum.adobe.com/react-aria/index.html) ) 46 | 47 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 48 | 49 | ## Deploy on Vercel 50 | 51 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 52 | 53 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 54 | 55 | ## Contribution guidelines 56 | Check [contribution.md](https://github.com/GDSC-Jadavpur-University/GDSC-JU-Website/blob/main/contribution.md) 57 | 58 | 59 | ## Contributors Wall: 60 | 61 | 62 | 63 | 64 |
65 |
66 | -------------------------------------------------------------------------------- /components/BackToTop.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { BsFillArrowUpCircleFill } from 'react-icons/bs'; 3 | import { motion } from 'framer-motion'; 4 | 5 | const BackToTop = () => { 6 | const [showButton, setShowButton] = useState(false); 7 | 8 | useEffect(() => { 9 | window.addEventListener('scroll', () => { 10 | if (window.scrollY > 100) { 11 | setShowButton(true); 12 | } else { 13 | setShowButton(false); 14 | } 15 | }); 16 | }, []); 17 | 18 | const scrollToTop = () => { 19 | window.scrollTo({ 20 | top: 0, 21 | behavior: 'smooth', 22 | }); 23 | }; 24 | 25 | return ( 26 | <> 27 | {showButton && ( 28 | 34 | 35 | 36 | )} 37 | 38 | ); 39 | }; 40 | 41 | export default BackToTop; 42 | -------------------------------------------------------------------------------- /components/Error/NotFound.jsx: -------------------------------------------------------------------------------- 1 | // NotFound.jsx 2 | import React from 'react'; 3 | // import astronaut from '/astronaut.svg'; 4 | // import saturn from '/saturn.svg'; 5 | import { useRouter } from 'next/router'; 6 | import Image from 'next/image'; 7 | 8 | const NotFound = () => { 9 | const navigate = useRouter(); 10 | 11 | const handleRedirection = () => { 12 | navigate.push('/'); 13 | }; 14 | return ( 15 |
16 |
17 |
18 |
19 |

404

20 |

21 | LOST IN 22 | 23 |   SPACE 24 | 25 | 26 |   GDSC? Hmm, looks like that page doesn't exist. 27 |

28 | Astronaut 36 | Planet 37 |
38 |
39 | 40 | 46 |
47 | ); 48 | }; 49 | 50 | export default NotFound; 51 | -------------------------------------------------------------------------------- /components/FAQS.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Accordion, AccordionItem } from '@nextui-org/react'; 3 | import { Divider } from '@nextui-org/react'; 4 | 5 | export default function FAQS() { 6 | const ans1 = 7 | ' The GDSC JU community is open to both seasoned techies and beginners in the Tech world. Whether you are into development or Competitive Programming, or even if you are into more non-coding related technical domains like graphic design and documentation, the commmunity is open to every Jadavpur University student with a passion for technology. '; 8 | const ans3 = 9 | 'You can be involved in the community of one or more GDSC chapters, however you can be a core team member in only one GDSC chapter. '; 10 | const ans2 = 11 | 'No, Code Club JU and GDSC, despite both being involved in encouraging coding habits among students, do not refer to the same entity and function independently of each other.'; 12 | 13 | return ( 14 | 15 |
16 | 17 | 18 |
19 |
20 |

21 | 22 | F 23 | A 24 | Q 25 | S 26 |   University 27 | 28 |

29 |
30 | 31 | 32 | 33 | 34 | {ans1} 35 | 36 | 37 | {ans2} 38 | 39 | 40 | {ans3} 41 | 42 | 43 | 44 |
45 | 46 |
47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /components/Fields.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Image from 'next/image'; 3 | 4 | function Fields() { 5 | return ( 6 |
7 |

What We Do

8 | 9 | {/* Web Development */} 10 |
11 |
12 |

Development

13 |

14 | Development is the process of creating and maintaining software and computer programs. Dev encompasses 15 | everything from coding, to maintenance to debugging. The open source community is one of the most popular 16 | "developer" communities 17 |

18 |
19 |
20 | 21 |
22 |
23 | 24 | {/* DSA AND CP */} 25 |
26 |
27 | 28 |
29 |
30 |

DSA And CP

31 |

32 | DSA (Data Structures and Algorithms) is the study of organizing and manipulating data efficiently to perform 33 | complex computations Competitive programming is a sport of coding where individuals or teams solve 34 | algorithmic problems in a timed competition using DSA skills, and quick thinking to solve problems within 35 | constraints. 36 |

37 |
38 |
39 | 40 | {/* Machine Learning */} 41 |
42 |
43 |

Machine Learning

44 |

45 | Machine learning is a sub domain of artificial intelligence that lets computers learn from data and make 46 | predictions or decisions for newer datasets. It involves using algorithms to analyze corelations, patterns 47 | and relationships within datasets. This technology finds applications in diverse fields, from autonomous 48 | driving to bioinformatics. 49 |

50 |
51 |
52 | 53 |
54 |
55 |
56 | ); 57 | } 58 | 59 | export default Fields; 60 | -------------------------------------------------------------------------------- /components/Footer.jsx: -------------------------------------------------------------------------------- 1 | 2 | import React from 'react'; 3 | import Link from 'next/link'; 4 | import { FaFacebook, FaYoutube, FaInstagram, FaLinkedin, FaGithub, FaXTwitter } from 'react-icons/fa6'; 5 | 6 | 7 | function Footer() { 8 | const socials = [ 9 | { 10 | name: 'Facebook', 11 | link: 'https://www.facebook.com/googlefordevs', 12 | icon: , 13 | hoverColor: 'hover:text-blue-600', 14 | darkhoverColor: 'dark:hover:text-blue-600', 15 | }, 16 | { 17 | name: 'Twitter', 18 | link: 'https://twitter.com/googledevs', 19 | icon: , 20 | hoverColor: 'hover:text-blue-400', 21 | darkhoverColor: 'dark:hover:text-blue-400', 22 | }, 23 | { 24 | name: 'Youtube', 25 | link: 'https://www.youtube.com/googledevelopers', 26 | icon: , 27 | hoverColor: 'hover:text-red-600', 28 | darkhoverColor: 'dark:hover:text-red-600', 29 | }, 30 | { 31 | name: 'Instagram', 32 | link: 'https://www.instagram.com/gdsc_ju/', 33 | icon: , 34 | hoverColor: 'hover:text-purple-600', 35 | darkhoverColor: 'dark:hover:text-purple-600', 36 | }, 37 | { 38 | name: 'LinkedIn', 39 | link: 'https://www.linkedin.com/company/gdsc-jadavpur-university/', 40 | icon: , 41 | hoverColor: 'hover:text-blue-800', 42 | darkhoverColor: 'dark:hover:text-blue-800', 43 | }, 44 | { 45 | name: 'Github', 46 | link: 'https://github.com/GDSC-Jadavpur-University/', 47 | icon: , 48 | hoverColor: 'hover:text-black', 49 | darkhoverColor: 'dark:hover:text-white', 50 | }, 51 | ]; 52 | 53 | const footerData = [ 54 | { 55 | name: 'About', 56 | link: '/about', 57 | }, 58 | { 59 | name: 'Events', 60 | link: '/events', 61 | }, 62 | { 63 | name: 'Gallery', 64 | link: '/gallery', 65 | }, 66 | { 67 | name: 'Projects', 68 | link: '/projects', 69 | }, 70 | { 71 | name: 'Team', 72 | link: '/team', 73 | }, 74 | ]; 75 | 76 | return ( 77 |
78 | {/* Row with links */} 79 |
80 |
81 | {footerData.map((item, index) => ( 82 | 83 |

84 | {item.name} 85 |

86 | 87 | ))} 88 |
89 |
90 | {/* */} 91 |
92 |
93 | Stay connected 94 |
95 |
96 | {socials.map((social, index) => ( 97 | 103 | {social.icon} 104 | 105 | ))} 106 |
107 |
108 |
109 | ); 110 | } 111 | 112 | export default Footer; 113 | -------------------------------------------------------------------------------- /components/Landing.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Player } from '@lottiefiles/react-lottie-player'; 3 | 4 | function Landing() { 5 | return ( 6 |
7 | {/* Landing text */} 8 |
9 |
10 |

11 | 12 | Ja 13 | da 14 | vp 15 | ur 16 |   University 17 | 18 | 19 |
20 | Google Developer Student Club 21 |

22 | 23 |

24 | Google Developer Student Clubs are university based community groups 25 | for students interested in Google developer technologies. Students 26 | from all undergraduate or graduate programs with an interest in 27 | growing as a developer are welcome. By joining a GDSC, students grow 28 | their knowledge in a peer-to-peer learning environment and build 29 | solutions for local businesses and their community. 30 |

31 | 32 | 44 |
45 |
46 | 52 |
53 |
54 |
55 | ); 56 | } 57 | 58 | export default Landing; 59 | -------------------------------------------------------------------------------- /components/Modal.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import React, { useCallback, useRef, ReactNode } from 'react'; 4 | import { useRouter } from 'next/navigation'; 5 | import Image from 'next/image'; 6 | 7 | const Modal = ({ children }) => { 8 | const overlay = useRef(null); 9 | const wrapper = useRef(null); 10 | const router = useRouter(); 11 | 12 | const onDismiss = useCallback(() => { 13 | router.push('/gallery'); 14 | }, [router]); 15 | const handleClick = useCallback( 16 | (e) => { 17 | if (e.target === overlay.current && onDismiss) { 18 | onDismiss(); 19 | } 20 | }, 21 | [onDismiss, overlay], 22 | ); 23 | 24 | return ( 25 |
26 | 31 |
32 | {children} 33 |
34 |
35 | ); 36 | }; 37 | 38 | export default Modal; 39 | -------------------------------------------------------------------------------- /components/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image'; 2 | import Link from 'next/link'; 3 | import { useState } from 'react'; 4 | import { FaBars, FaTimes } from 'react-icons/fa'; 5 | import { ThemeSwitcher } from './ThemeSwitcher'; 6 | 7 | const Navbar = () => { 8 | const [isMenuOpen, setMenuOpen] = useState(false); 9 | 10 | const toggleMenu = () => { 11 | setMenuOpen(!isMenuOpen); 12 | }; 13 | 14 | const closeMenu = () => { 15 | setMenuOpen(false); 16 | }; 17 | 18 | const NavData = [ 19 | { 20 | name: 'About', 21 | link: '/about', 22 | color: 'text-green-600', 23 | hoverColor: 'text-green-900', 24 | }, 25 | { 26 | name: 'Events', 27 | link: '/events', 28 | color: 'text-red-400', 29 | hoverColor: 'text-red-900', 30 | }, 31 | { 32 | name: 'Gallery', 33 | link: '/gallery', 34 | color: 'text-blue-400', 35 | hoverColor: 'text-blue-900', 36 | }, 37 | { 38 | name: 'Projects', 39 | link: '/projects', 40 | color: 'text-yellow-400', 41 | hoverColor: 'text-yellow-900', 42 | }, 43 | { 44 | name: 'Team', 45 | link: '/team', 46 | color: 'text-green-600', 47 | }, 48 | { 49 | name: 'Subscribe', 50 | link: '/subscribe', 51 | color: 'text-red-400', 52 | hoverColor: 'text-red-900', 53 | }, 54 | { 55 | name: 'Resource', 56 | link: '/resource', 57 | color: 'text-blue-400', 58 | hoverColor: 'text-blue-900', 59 | }, 60 | ]; 61 | 62 | return ( 63 |
64 | {/* LOGO */} 65 | 66 | Your Logo 67 | 68 | {/* NAV LINKS */} 69 |
70 |
71 | {NavData.map((item, index) => ( 72 | 73 |

78 | {item.name} 79 |

80 | 81 | ))} 82 |
83 |
84 | {/* THEME SWITCHER */} 85 | {/*
*/} 86 |
87 | 88 |
89 |
90 | 97 |
98 | {isMenuOpen && ( 99 |
102 | {NavData.map((item, index) => ( 103 | 104 |

105 | {item.name} 106 |

107 | 108 | ))} 109 | {/* close button */} 110 | 113 |
114 | )} 115 |
116 | ); 117 | }; 118 | export default Navbar; 119 | -------------------------------------------------------------------------------- /components/ThemeSwitcher.jsx: -------------------------------------------------------------------------------- 1 | import { useTheme } from 'next-themes'; 2 | import { SunIcon, MoonIcon } from '@heroicons/react/24/solid'; 3 | import { useState, useEffect } from 'react'; 4 | 5 | export const ThemeSwitcher = () => { 6 | const { theme, setTheme } = useTheme(); 7 | 8 | // handle hydration error 9 | const [mounted, setMounted] = useState(false); 10 | useEffect(() => setMounted(true), []); 11 | if (!mounted) return null; 12 | 13 | return ( 14 | 26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /contribution.md: -------------------------------------------------------------------------------- 1 | ## Contributing 2 | 3 | Thank you for your interest in contributing to GDSC JU Website! 4 | 5 | ### To contribute, please follow these steps: 6 | 7 | 1. Fork the repository. 8 | 2. Create a new branch for your changes. 9 | 3. Make your changes and commit them to your branch. 10 | 4. Push your changes to your fork. 11 | 5. Create a pull request to the main repository. 12 | 6. No need to ask for asssignment of issue, just create a pull request when your update is ready. 13 | 14 | Please make sure that your pull request adheres to the following guidelines: 15 | 16 | * Include a clear and concise description of your changes. 17 | * Add tests for any new code or changes to existing code. 18 | * Follow the project's code style guide. 19 | 20 | When your pull request is ready, we will review it and provide feedback. Once your pull request is approved, it will be merged into the main repository. 21 | 22 | 23 | ### Do you want a new feature? 24 | 25 | If there is a new feature you would like to see in GDSC JU Website, please open an issue and describe: 26 | 27 | 1. What is the *motivation* behind this feature? Is it something you worked on and think it could benefit the community? 28 | 29 | Whatever it is, we'd love to hear about it! 30 | 31 | 2. Describe your requested feature in as much detail as possible. The more you can tell us about it, the better we'll be able to help you. 32 | 3. Provide a *code snippet* that demonstrates the features usage. 33 | 34 | 35 | -------------------------------------------------------------------------------- /hooks/useWindowDimensions.js: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from 'react'; 2 | const useWindowDimensions = () => { 3 | const hasWindow = typeof window !== 'undefined'; 4 | 5 | function getWindowDimensions() { 6 | const width = hasWindow ? window.innerWidth : null; 7 | const height = hasWindow ? window.innerHeight : null; 8 | return { 9 | width, 10 | height, 11 | }; 12 | } 13 | 14 | const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions()); 15 | 16 | useEffect(() => { 17 | if (hasWindow) { 18 | function handleResize() { 19 | setWindowDimensions(getWindowDimensions()); 20 | } 21 | 22 | window.addEventListener('resize', handleResize); 23 | return () => window.removeEventListener('resize', handleResize); 24 | } 25 | }, [hasWindow]); 26 | 27 | return windowDimensions; 28 | }; 29 | 30 | export default useWindowDimensions; 31 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /layout/CenterLayout.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | function CenterLayout({ children }) { 4 | return ( 5 | <> 6 |
{children}
7 | 8 | ); 9 | } 10 | 11 | export default CenterLayout; 12 | -------------------------------------------------------------------------------- /layout/Layout.jsx: -------------------------------------------------------------------------------- 1 | import Footer from '@/components/Footer'; 2 | import Navbar from '@/components/Navbar'; 3 | import React from 'react'; 4 | import BackToTop from '@/components/BackToTop'; 5 | 6 | function Layout({ children }) { 7 | return ( 8 | <> 9 | 10 |
{children}
11 | 12 |