diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 6b2a67a4b..000000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,99 +0,0 @@
-module.exports = {
- env: {
- browser: true,
- es2021: true,
- },
- extends: [
- 'plugin:react/recommended',
- 'airbnb',
- ],
- parserOptions: {
- ecmaFeatures: {
- jsx: true,
- },
- ecmaVersion: 12,
- sourceType: 'module',
- },
- plugins: [
- 'react',
- ],
- rules: {
- 'react/no-unescaped-entities': 0,
- 'eslintreact/no-danger': 0,
- 'react/jsx-max-props-per-line': 0,
- 'react/jsx-first-prop-new-line': 0,
- 'no-console': 0,
- 'jsx-a11y/label-has-associated-control': 0,
- 'no-nested-ternary': 0,
- 'consistent-return': 0,
- 'no-alert': 0,
- 'react/jsx-no-constructed-context-values': 0,
- 'import/extensions': 0,
- 'react/prop-types': 0,
- 'linebreak-style': 0,
- 'react/state-in-constructor': 0,
- 'import/prefer-default-export': 0,
- 'react/react-in-jsx-scope': 'off',
- 'react/jsx-props-no-spreading': 'off',
- 'jsx-a11y/no-noninteractive-element-interactions': 'off',
- 'react/function-component-definition': [
- 2,
- {
- namedComponents: 'arrow-function',
- unnamedComponents: 'arrow-function',
- },
- ],
- 'max-len': [
- 2,
- 1050,
- ],
- 'no-multiple-empty-lines': [
- 'error',
- {
- max: 1,
- maxEOF: 1,
- },
- ],
- 'no-underscore-dangle': [
- 'error',
- {
- allow: [
- '_d',
- '_dh',
- '_h',
- '_id',
- '_m',
- '_n',
- '_t',
- '_text',
- ],
- },
- ],
- 'object-curly-newline': 0,
- 'react/jsx-filename-extension': 0,
- 'react/jsx-one-expression-per-line': 0,
- 'jsx-a11y/click-events-have-key-events': 0,
- 'jsx-a11y/alt-text': 0,
- 'jsx-a11y/no-autofocus': 0,
- 'jsx-a11y/no-static-element-interactions': 0,
- 'react/no-array-index-key': 0,
- 'jsx-a11y/anchor-is-valid': [
- 'error',
- {
- components: [
- 'Link',
- ],
- specialLink: [
- 'to',
- 'hrefLeft',
- 'hrefRight',
- ],
- aspects: [
- 'noHref',
- 'invalidHref',
- 'preferButton',
- ],
- },
- ],
- },
-};
diff --git a/.gitignore b/.gitignore
index fdc990beb..fd3dbb571 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
/node_modules
/.pnp
.pnp.js
+.yarn/install-state.gz
# testing
/coverage
@@ -23,7 +24,6 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-.pnpm-debug.log*
# local env files
.env*.local
@@ -34,6 +34,3 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
-
-# vscode
-.vscode
\ No newline at end of file
diff --git a/README.md b/README.md
index 1fa824a38..c4033664f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,36 @@
-# Build and Deploy a Modern Next 13 Website With Framer Motion & Tailwind CSS
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
-### [Live Site](https://metaverse-sage-psi.vercel.app/)
+## Getting Started
-
+First, run the development server:
-## Launch your development career with project-based coaching - https://www.jsmastery.pro
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+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.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/app/head.js b/app/head.js
deleted file mode 100644
index 3c2880971..000000000
--- a/app/head.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import Script from 'next/script';
-
-const Head = () => (
- <>
-
-
-
- {images.map((image, index) => {
- if (index === currentSlide) {
- return (
-
- );
- }
- return null;
- })}
-
-
-
-
-
- {images.map((_, index) => (
-
{
- setCurrentSlide(index);
- }}
- />
- ))}
-
-
- );
-};
-export default Carousel;
diff --git a/sections/ContactUs.jsx b/sections/ContactUs.jsx
deleted file mode 100644
index cd76e11f1..000000000
--- a/sections/ContactUs.jsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import Form from '../components/Form';
-import { fadeIn, staggerContainer, zoomIn } from '../utils/motion';
-
-const ContactUs = () => (
-
-
-
-
-
-
- Contact Us
-
-
- Get Quotation for free!!
-
-
-
- {/*
- “With the development of today's technology, metaverse is very
- useful for today's work, or can be called web 3.0. by using
- metaverse you can use it as anything”
-
*/}
-
- {/* */}
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-);
-
-export default ContactUs;
diff --git a/sections/EshVision.jsx b/sections/EshVision.jsx
deleted file mode 100644
index 17490d23d..000000000
--- a/sections/EshVision.jsx
+++ /dev/null
@@ -1,59 +0,0 @@
-'use client';
-
-import Link from 'next/link';
-import { motion } from 'framer-motion';
-import { TitleText } from '../components';
-
-import styles from '../styles';
-import { fadeIn, staggerContainer } from '../utils/motion';
-
-const EshVision = () => (
-
-
-
-
-
- EshVision>}
- textStyles="text-center"
- />
-
-
-
- {/* EshVision */}
- {' '}Empowering developers with comprehensive free training,
- hands-on projects, and paid freelancing opportunities for a successful
- career in development. Join us to gain valuable skills, build your portfolio,
- and earn while learning. Take the leap into a thriving development career with
- EshVision. Register now : Registration Link.
- {/*
- madness of the metaverse
- {' '}
- of today, using only{' '}
- VR devices you can
- easily explore the metaverse world you want, turn your dreams into
- reality. Let's{' '}
- explore the madness
- of the metaverse by scrolling down */}
-
-
-
-
-
-);
-
-export default EshVision;
diff --git a/sections/EshVisionHero.jsx b/sections/EshVisionHero.jsx
deleted file mode 100644
index e58637068..000000000
--- a/sections/EshVisionHero.jsx
+++ /dev/null
@@ -1,72 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import Link from 'next/link';
-import styles from '../styles';
-import { slideIn, staggerContainer, textVariant } from '../utils/motion';
-
-// const headingss = `
-// text-white font-bold lg:text-[34px] md:text-[100px] sm:text-[60px] text-[44px] uppercase '
-// `;
-const EshVisionHero = () => (
-
-
-
-
-
- EshVision
-
-
-
- Freelancer Development Program | Unlock Your Potential | 15th August
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
- Explore
- */}
-
-
-);
-
-export default EshVisionHero;
diff --git a/sections/Explore.jsx b/sections/Explore.jsx
deleted file mode 100644
index 83fcb9c33..000000000
--- a/sections/Explore.jsx
+++ /dev/null
@@ -1,44 +0,0 @@
-'use client';
-
-import { useState } from 'react';
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { exploreWorlds } from '../constants';
-import { staggerContainer } from '../utils/motion';
-import { ExploreCard, TitleText, TypingText } from '../components';
-
-const Explore = () => {
- const [active, setActive] = useState('world-1');
-
- return (
-
-
-
- Meet our Founding Team>}
- textStyles="text-center"
- />
-
- {exploreWorlds.map((world, index) => (
-
- ))}
-
-
-
- );
-};
-
-export default Explore;
diff --git a/sections/Feedback.jsx b/sections/Feedback.jsx
deleted file mode 100644
index 68f85b181..000000000
--- a/sections/Feedback.jsx
+++ /dev/null
@@ -1,64 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { fadeIn, staggerContainer, zoomIn } from '../utils/motion';
-
-const Feedback = () => (
-
-
-
-
-
-
- Eshu
-
-
- Founder Eshway
-
-
-
-
- {/* “With the development of today's technology, metaverse is very
- useful for today's work, or can be called web 3.0. by using
- metaverse you can use it as anything” */}
- "Embark on a transformative journey with Eshway's groundbreaking free freelancer training program, EshVision, and unlock your full potential in the digital realm."
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-);
-
-export default Feedback;
diff --git a/sections/FeedbackCard.jsx b/sections/FeedbackCard.jsx
deleted file mode 100644
index f4c571ac7..000000000
--- a/sections/FeedbackCard.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-const FeedbackCard = ({ content, img }) => (
-
-
-
- {content}
-
- {/*
-
-
-
- {name}
-
-
- {title}
-
-
-
*/}
-
-);
-
-export default FeedbackCard;
diff --git a/sections/GetStarted.jsx b/sections/GetStarted.jsx
deleted file mode 100644
index 8f8d8e847..000000000
--- a/sections/GetStarted.jsx
+++ /dev/null
@@ -1,49 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { startingFeatures } from '../constants';
-import { StartSteps, TitleText, TypingText } from '../components';
-import { staggerContainer, fadeIn, planetVariants } from '../utils/motion';
-
-const GetStarted = () => (
-
-
-
-
-
-
-
- Get started with just a few clicks>} />
-
- {startingFeatures.map((feature, index) => (
-
- ))}
-
-
-
-
-);
-
-export default GetStarted;
diff --git a/sections/Hero.jsx b/sections/Hero.jsx
deleted file mode 100644
index f129b4a30..000000000
--- a/sections/Hero.jsx
+++ /dev/null
@@ -1,72 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import Link from 'next/link';
-import styles from '../styles';
-import { slideIn, staggerContainer, textVariant } from '../utils/motion';
-
-// const headingss = `
-// text-white font-bold lg:text-[34px] md:text-[100px] sm:text-[60px] text-[44px] uppercase '
-// `;
-const Hero = () => (
-
-
-
-
-
- Eshway
-
-
-
- Transforming your digital landscape for a better tomorrow.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Let's Talk
-
-
-
-);
-
-export default Hero;
diff --git a/sections/Insights.jsx b/sections/Insights.jsx
deleted file mode 100644
index a28b0dfe2..000000000
--- a/sections/Insights.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { insights } from '../constants';
-import { staggerContainer } from '../utils/motion';
-import { InsightCard, TitleText, TypingText } from '../components';
-
-const Insights = () => (
-
-
-
- Insight about metaverse>} textStyles="text-center" />
-
- {insights.map((item, index) => (
-
- ))}
-
-
-
-);
-
-export default Insights;
diff --git a/sections/InterIITContactUs.jsx b/sections/InterIITContactUs.jsx
deleted file mode 100644
index 92b4a061e..000000000
--- a/sections/InterIITContactUs.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { fadeIn, staggerContainer, zoomIn } from '../utils/motion';
-import InterIITForm from '../components/InterIITForm';
-
-const InterIITContactUs = () => (
-
-
-
-
-
-
- Contact Us
-
-
- Inter IIT Sports 2023
-
-
-
- {/* */}
-
-
-
-
- {/*
-
-
-
-
-
- */}
-
-
-);
-
-export default InterIITContactUs;
diff --git a/sections/Merch.jsx b/sections/Merch.jsx
deleted file mode 100644
index 989fae5f2..000000000
--- a/sections/Merch.jsx
+++ /dev/null
@@ -1,68 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import { Button } from '@mui/material';
-import Link from 'next/link';
-import styles from '../styles';
-import { fadeIn, staggerContainer, zoomIn } from '../utils/motion';
-
-const Merch = () => (
-
-
-
-
-
-
- Official Merchandise
-
-
- Eshway
-
-
-
-
- {/* “With the development of today's technology, metaverse is very
- useful for today's work, or can be called web 3.0. by using
- metaverse you can use it as anything” */}
- {/* "Embark on a transformative journey with Eshway's groundbreaking free freelancer training program, EshVision, and unlock your full potential in the digital realm." */}
- Embrace the Digital Vibe! 🚀 Elevate your style with our exclusive Eshway official T-shirt. Showcasing a sleek design and unbeatable comfort, this limited edition tee stands out. Get yours now!
- Buy Now
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-);
-
-export default Merch;
diff --git a/sections/Product.jsx b/sections/Product.jsx
deleted file mode 100644
index e130408ec..000000000
--- a/sections/Product.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import { Button } from '@mui/material';
-import Link from 'next/link';
-import styles from '../styles';
-import { productDesc } from '../constants';
-import { StartSteps, TitleText, TypingText } from '../components';
-import { staggerContainer, fadeIn, planetVariants } from '../utils/motion';
-import Carousel from './Caraousel';
-
-const Product = (props) => {
- const { price } = props;
- return (
-
-
-
-
- {/* */}
-
-
-
- Eshway Merchandise>} />
-
- {productDesc.map((feature) => (
-
- ))}
- {/* className="btn btn-primary bg-[#323f5d] text-blue-200 hover:text-secondary-white" */}
- Buy Now ₹{price}
-
-
-
-
- );
-};
-export default Product;
diff --git a/sections/Services.jsx b/sections/Services.jsx
deleted file mode 100644
index 27d2ed00f..000000000
--- a/sections/Services.jsx
+++ /dev/null
@@ -1,197 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { TypingText } from '../components';
-import { feedback } from '../constants';
-
-import styles from '../styles';
-import { fadeIn, staggerContainer } from '../utils/motion';
-import FeedbackCard from './FeedbackCard';
-
-const About = () => (
-
-
-
-
-
- {/*
- Metaverse is a new
- thing in the future, where you can enjoy the virtual world by feeling
- like it's really real, you can feel what you feel in this metaverse
- world, because this is really the{' '}
-
- madness of the metaverse
- {' '}
- of today, using only{' '}
- VR devices you can
- easily explore the metaverse world you want, turn your dreams into
- reality. Let's{' '}
- explore the madness
- of the metaverse by scrolling down
- */}
-
- {feedback.map((card) => )}
- {/* */}
- {/*
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
-
-
-
content
-
-
-
-
-
-
-
*/}
-
-
-
-
-);
-
-export default About;
diff --git a/sections/ShopHero.jsx b/sections/ShopHero.jsx
deleted file mode 100644
index 859eb3437..000000000
--- a/sections/ShopHero.jsx
+++ /dev/null
@@ -1,76 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import Link from 'next/link';
-import styles from '../styles';
-import { staggerContainer } from '../utils/motion';
-
-// const headingss = `
-// text-white font-bold lg:text-[34px] md:text-[100px] sm:text-[60px] text-[44px] uppercase '
-// `;
-const ShopHero = () => (
-
-
-
-
- {/*
-
Driven by Passion
-
Meet the Driven Minds Behind Formula Ashwariders
-
*/}
-
-
-
-
-
-
-
-
-
-
-
-
Eshway Merchandise ₹ 399
-
-
- {/*
-
-
-
-
-
-
-
Another Eshway Official Merchandise ₹ 350
-
-
*/}
- {/*
-
-
-
-
-
-
-
Another Eshway Official Merchandise ₹ 350
-
-
*/}
- {/*
-
-
-
-
-
-
-
Another Eshway Official Merchandise ₹ 350
-
-
*/}
-
-
-
-
-);
-
-export default ShopHero;
diff --git a/sections/Table.jsx b/sections/Table.jsx
deleted file mode 100644
index 8c55bac30..000000000
--- a/sections/Table.jsx
+++ /dev/null
@@ -1,310 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-// import { useState } from 'react';
-// import { Button, TextField } from '@mui/material';
-import { Button, TextField } from '@mui/material';
-import { useState } from 'react';
-import styles from '../styles';
-import { fadeIn, staggerContainer } from '../utils/motion';
-import { TypingText } from '../components';
-// import { eshvision } from '../constants';
-
-const Table = () => {
- const [completed, setCompleted] = useState(false);
- const [completedTwo, setCompletedTwo] = useState(false);
- const [completedThird, setCompletedThird] = useState(false);
- const [completedFourth, setCompletedFourth] = useState(false);
- const [ans, setAns] = useState();
- const [ans2, setAns2] = useState();
- const [ans3, setAns3] = useState();
- const [ans4, setAns4] = useState();
-
-
- const handleOneKey = (qn) => {
- if (qn === '1' && ans === 'esh28') {
- setCompleted(true);
- } else {
- alert('Wrong Passcode');
- }
- };
- const handleAns = (answer) => {
- setAns(answer.target.value);
- // console.log('THIS IS THE ANSWER :', answer.target.value);
- };
- const handleTwoKey = () => {
- if (ans2 === 'esh01q') {
- setCompletedTwo(true);
- } else {
- alert('Wrong Passcode');
- }
- };
- const handleTwoAns = (answer) => {
- setAns2(answer.target.value);
- console.log('THIS IS THE ANSWER :', answer.target.value);
- };
-
- const handleThirdKey = () => {
- if (ans3 === 'eshvision2.0') {
- setCompletedThird(true);
- } else {
- alert('Wrong Passcode');
- }
- };
- const handleThirdAns = (answer) => {
- setAns3(answer.target.value);
- console.log('THIS IS THE ANSWER :', answer.target.value);
- };
- const handleFourthKey = () => {
- if (ans4 === 'react101') {
- setCompletedFourth(true);
- } else {
- alert('Wrong Passcode');
- }
- };
- const handleFourthAns = (answer) => {
- setAns4(answer.target.value);
- // console.log('THIS IS THE ANSWER :', answer.target.value);
- };
-
- return (
-
-
-
-
-
-
-
- {/* =======ESHVISION 1.0 TABLE======= */}
-
- {/* */}
-
- {/* =======ESHVISION 2.0 TABLE======= */}
-
-
-
- S.No
- Topic
- Complete By
- Resource
- Link
-
-
-
-
- 1
- Before we start
- 2nd September
- No Assessment
- Click here
-
-
- 2
- Basic Requirements
- 2nd September
- No Assessment
- Click here
-
-
- 3
- Introduction to HTML
- 7th September
- No Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
-
-
- 3
- CSS
- 14th September
- Assessment
- {completedTwo ? (Click here ) : (
- <>
- handleTwoAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- Submit
- >
- )}
-
-
-
- 4
- JavaScript
- 23rd September
- Assessment
- {completedThird ? (Click here ) : (
- <>
- handleThirdAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- Submit
- >
- )}
-
-
-
- 5
- Introduction to React JS
- 12th October
- Assessment
- {completedFourth ? (Click here ) : (
- <>
- handleFourthAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- Submit
- >
- )}
-
-
- {/*
- 1
- Introduction to HTML
- Deadline
- Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
-
-
- 1
- Introduction to HTML
- Deadline
- Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
-
-
- 1
- Introduction to HTML
- Deadline
- Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
-
-
- 1
- Introduction to HTML
- Deadline
- Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
-
-
- 1
- Introduction to HTML
- Deadline
- Assessment
- {completed ? (Click here ) : (
- <>
- handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" />
- handleOneKey('1')}>Submit
- >
- )}
-
- */}
-
-
-
-
-
-
-
- );
-};
-
-export default Table;
diff --git a/sections/WhatsNew.jsx b/sections/WhatsNew.jsx
deleted file mode 100644
index e311139a7..000000000
--- a/sections/WhatsNew.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { newFeatures } from '../constants';
-import { NewFeatures, TitleText, TypingText } from '../components';
-import { planetVariants, staggerContainer, fadeIn } from '../utils/motion';
-
-const WhatsNew = () => (
-
-
-
-
- What's new about Eshway?>} />
-
- {newFeatures.map((feature) => (
-
- ))}
-
-
-
-
-
-
-
-
-);
-
-export default WhatsNew;
diff --git a/sections/World.jsx b/sections/World.jsx
deleted file mode 100644
index 43c483453..000000000
--- a/sections/World.jsx
+++ /dev/null
@@ -1,51 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-import styles from '../styles';
-import { TitleText, TypingText } from '../components';
-import { fadeIn, staggerContainer } from '../utils/motion';
-
-const World = () => (
-
-
-
-
- Track friends around you and invite them to play together in the same
- world
- >
- )}
- textStyles="text-center"
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
-
-export default World;
diff --git a/sections/index.js b/sections/index.js
deleted file mode 100644
index a43eaee2a..000000000
--- a/sections/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import Hero from './Hero';
-import About from './About';
-import Explore from './Explore';
-import GetStarted from './GetStarted';
-import WhatsNew from './WhatsNew';
-import World from './World';
-import Insights from './Insights';
-import Feedback from './Feedback';
-import Services from './Services';
-import Merch from './Merch';
-
-export {
- Hero,
- About,
- Explore,
- GetStarted,
- WhatsNew,
- World,
- Insights,
- Feedback,
- Merch,
- Services,
-};
diff --git a/src/app/favicon.ico b/src/app/favicon.ico
new file mode 100644
index 000000000..718d6fea4
Binary files /dev/null and b/src/app/favicon.ico differ
diff --git a/src/app/globals.css b/src/app/globals.css
new file mode 100644
index 000000000..b0e6fff59
--- /dev/null
+++ b/src/app/globals.css
@@ -0,0 +1,76 @@
+@tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 222.2 84% 4.9%;
+
+ --card: 0 0% 100%;
+ --card-foreground: 222.2 84% 4.9%;
+
+ --popover: 0 0% 100%;
+ --popover-foreground: 222.2 84% 4.9%;
+
+ --primary: 222.2 47.4% 11.2%;
+ --primary-foreground: 210 40% 98%;
+
+ --secondary: 210 40% 96.1%;
+ --secondary-foreground: 222.2 47.4% 11.2%;
+
+ --muted: 210 40% 96.1%;
+ --muted-foreground: 215.4 16.3% 46.9%;
+
+ --accent: 210 40% 96.1%;
+ --accent-foreground: 222.2 47.4% 11.2%;
+
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 210 40% 98%;
+
+ --border: 214.3 31.8% 91.4%;
+ --input: 214.3 31.8% 91.4%;
+ --ring: 222.2 84% 4.9%;
+
+ --radius: 0.5rem;
+ }
+
+ .dark {
+ --background: 222.2 84% 4.9%;
+ --foreground: 210 40% 98%;
+
+ --card: 222.2 84% 4.9%;
+ --card-foreground: 210 40% 98%;
+
+ --popover: 222.2 84% 4.9%;
+ --popover-foreground: 210 40% 98%;
+
+ --primary: 210 40% 98%;
+ --primary-foreground: 222.2 47.4% 11.2%;
+
+ --secondary: 217.2 32.6% 17.5%;
+ --secondary-foreground: 210 40% 98%;
+
+ --muted: 217.2 32.6% 17.5%;
+ --muted-foreground: 215 20.2% 65.1%;
+
+ --accent: 217.2 32.6% 17.5%;
+ --accent-foreground: 210 40% 98%;
+
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 210 40% 98%;
+
+ --border: 217.2 32.6% 17.5%;
+ --input: 217.2 32.6% 17.5%;
+ --ring: 212.7 26.8% 83.9%;
+ }
+ }
+
+ @layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+ }
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
new file mode 100644
index 000000000..2acc8bf1c
--- /dev/null
+++ b/src/app/layout.tsx
@@ -0,0 +1,30 @@
+import type { Metadata } from 'next';
+import { Inter } from 'next/font/google';
+import './globals.css';
+import Head from 'next/head';
+
+const karla = Inter({ subsets: ['latin'] });
+const inter = Inter({ subsets: ['latin'] });
+
+export const metadata: Metadata = {
+ title: 'Create Next App',
+ description: 'Generated by create next app',
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+
+
+ {children}
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 000000000..0e9a6602e
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,22 @@
+import About from '@/components/About';
+import Divider from '@/components/Divider';
+import { Hero } from '@/components/Hero';
+import Navbar from '@/components/Navbar';
+import Services from '@/components/Services';
+import StaticHero from '@/components/StaticHero';
+import { Testimonial } from '@/components/Testimonial';
+
+export default function Home() {
+ return (
+
+
+
+ {/*
*/}
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/About.tsx b/src/components/About.tsx
new file mode 100644
index 000000000..d3583e186
--- /dev/null
+++ b/src/components/About.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+
+const About = () => {
+ return (
+
+
+
+
+
+
+
+
+
+ About {' '}
+ Us
+
+
+
+ With a team of skilled developers, designers, and marketers, the
+ company offers digital marketing services such as website
+ development, mobile application development and SEO.
+
+
+
+ Know more
+
+
+
+
+
+ );
+};
+
+export default About;
diff --git a/src/components/AnimatedButton.tsx b/src/components/AnimatedButton.tsx
new file mode 100644
index 000000000..79dbf3342
--- /dev/null
+++ b/src/components/AnimatedButton.tsx
@@ -0,0 +1,82 @@
+'use client';
+import { useRef, useState } from 'react';
+import { motion } from 'framer-motion';
+
+const TARGET_TEXT = "Let's Talk";
+const CYCLES_PER_LETTER = 2;
+const SHUFFLE_TIME = 50;
+
+const CHARS = '!@#$%^&*():{};|,.<>/?';
+
+export const AnimatedButton = () => {
+ const intervalRef = useRef
(null);
+
+ const [text, setText] = useState(TARGET_TEXT);
+
+ const scramble = () => {
+ let pos = 0;
+
+ intervalRef.current = setInterval(() => {
+ const scrambled = TARGET_TEXT.split('')
+ .map((char, index) => {
+ if (pos / CYCLES_PER_LETTER > index) {
+ return char;
+ }
+
+ const randomCharIndex = Math.floor(Math.random() * CHARS.length);
+ const randomChar = CHARS[randomCharIndex];
+
+ return randomChar;
+ })
+ .join('');
+
+ setText(scrambled);
+ pos++;
+
+ if (pos >= TARGET_TEXT.length * CYCLES_PER_LETTER) {
+ stopScramble();
+ }
+ }, SHUFFLE_TIME);
+ };
+
+ const stopScramble = () => {
+ if (intervalRef.current) {
+ clearInterval(intervalRef.current);
+ intervalRef.current = null;
+ }
+ setText(TARGET_TEXT);
+ };
+
+ return (
+
+
+ {text}
+
+
+
+ );
+};
diff --git a/src/components/AnimatedHamburger.tsx b/src/components/AnimatedHamburger.tsx
new file mode 100644
index 000000000..99faf796e
--- /dev/null
+++ b/src/components/AnimatedHamburger.tsx
@@ -0,0 +1,75 @@
+import React, { useState } from 'react';
+import { MotionConfig, motion } from 'framer-motion';
+
+export const AnimatedHamburgerButton = () => {
+ const [active, setActive] = useState(false);
+ return (
+
+ setActive((pv) => !pv)}
+ className='relative h-16 rounded-full bg-white/0 transition-colors hover:bg-white/20'
+ >
+
+
+
+
+
+ );
+};
+
+const VARIANTS = {
+ top: {
+ open: {
+ rotate: ['0deg', '0deg', '45deg'],
+ top: ['35%', '50%', '50%'],
+ },
+ closed: {
+ rotate: ['45deg', '0deg', '0deg'],
+ top: ['50%', '50%', '35%'],
+ },
+ },
+ middle: {
+ open: {
+ rotate: ['0deg', '0deg', '-45deg'],
+ },
+ closed: {
+ rotate: ['-45deg', '0deg', '0deg'],
+ },
+ },
+ bottom: {
+ open: {
+ rotate: ['0deg', '0deg', '45deg'],
+ bottom: ['35%', '50%', '50%'],
+ left: '50%',
+ },
+ closed: {
+ rotate: ['45deg', '0deg', '0deg'],
+ bottom: ['50%', '50%', '35%'],
+ left: 'calc(50% + 10px)',
+ },
+ },
+};
diff --git a/src/components/Divider.tsx b/src/components/Divider.tsx
new file mode 100644
index 000000000..33872f904
--- /dev/null
+++ b/src/components/Divider.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+
+const Divider = () => {
+ return (
+
+
+
+ Unlock your online potential now
+ with ESH
+ WAY
+
+
+
+ );
+};
+
+export default Divider;
diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx
new file mode 100644
index 000000000..2db558780
--- /dev/null
+++ b/src/components/Hero.tsx
@@ -0,0 +1,47 @@
+'use client';
+import { motion } from 'framer-motion';
+import React from 'react';
+import { ImagesSlider } from './image-slider';
+
+export function Hero() {
+ const images = [
+ '/hero.png',
+ 'https://images.unsplash.com/photo-1483982258113-b72862e6cff6?q=80&w=3456&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
+ 'https://images.unsplash.com/photo-1482189349482-3defd547e0e9?q=80&w=2848&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
+ ];
+ return (
+
+
+
+ Crafting Digital Excellence Together
+
+
+ Transforming your digital landscape for a better tomorrow
+
+
+
+
+ Let's Start
+
+
+ {/*
+ Join now →
+
+ */}
+
+
+ );
+}
diff --git a/src/components/HorizontalScrollCarousel.tsx b/src/components/HorizontalScrollCarousel.tsx
new file mode 100644
index 000000000..39e01ed39
--- /dev/null
+++ b/src/components/HorizontalScrollCarousel.tsx
@@ -0,0 +1,110 @@
+'use client';
+import { motion, useTransform, useScroll } from 'framer-motion';
+import { useRef } from 'react';
+import { TiltCard } from './TiltCard';
+
+const Example = () => {
+ return (
+
+
+
+ Scroll down
+
+
+
+
+
+ Scroll up
+
+
+
+ );
+};
+
+interface CardType {
+ url: string;
+ title: string;
+ description: string;
+ id: number;
+}
+
+export const HorizontalScrollCarousel = () => {
+ const targetRef = useRef(null);
+ const { scrollYProgress } = useScroll({
+ target: targetRef,
+ });
+
+ const x = useTransform(scrollYProgress, [0, 1], ['1%', '-70%']);
+
+ return (
+
+
+
+ {cards.map((card) => {
+ return ;
+ })}
+
+
+
+ );
+};
+
+interface CardProps {
+ card: CardType;
+}
+
+const Card = ({ card }: CardProps) => {
+ return (
+
+ );
+};
+
+export default Example;
+
+const cards: CardType[] = [
+ {
+ url: '/imgs/abstract/1.jpg',
+ title: 'Website Development',
+ description:
+ 'Web development is the process of creating websites and web applications for the internet.',
+ id: 1,
+ },
+ {
+ url: '/imgs/abstract/2.jpg',
+ title: 'Application Development',
+ description:
+ 'Web development is the process of creating websites and web applications for the internet.',
+ id: 2,
+ },
+ {
+ url: '/imgs/abstract/3.jpg',
+ title: 'UI/UX',
+ description:
+ 'Web development is the process of creating websites and web applications for the internet.',
+ id: 3,
+ },
+ {
+ url: '/imgs/abstract/4.jpg',
+ title: 'Video Editing',
+ description:
+ 'Web development is the process of creating websites and web applications for the internet.',
+ id: 4,
+ },
+];
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
new file mode 100644
index 000000000..b43302704
--- /dev/null
+++ b/src/components/Navbar.tsx
@@ -0,0 +1,123 @@
+'use client';
+import Image from 'next/image';
+import React, { useState } from 'react';
+import { AnimatedHamburgerButton } from './AnimatedHamburger';
+
+const Navbar = () => {
+ const [isOpen, setIsOpen] = useState(false);
+
+ return (
+
+
+
+
+
+
+
setIsOpen(!isOpen)}
+ className='text-white hover:text-gray-300 inline-flex items-center justify-center p-2 rounded-md focus:outline-none'
+ >
+
+ {/*
+
+ */}
+
+
+
+
+ {isOpen && (
+
+ )}
+
+
+ );
+};
+
+export default Navbar;
diff --git a/src/components/Services.tsx b/src/components/Services.tsx
new file mode 100644
index 000000000..785abee88
--- /dev/null
+++ b/src/components/Services.tsx
@@ -0,0 +1,35 @@
+import React from 'react';
+import { HorizontalScrollCarousel } from './HorizontalScrollCarousel';
+
+const Services = () => {
+ return (
+
+
+
+ {/*
*/}
+
+ {/*
*/}
+
+
+
+ Services
+
+
+
+ Embark on a journey where imagination meets innovation, and watch
+ your digital dreams come to life with our{' '}
+ transformative solutions.
+
+
+
+
+
+
+ );
+};
+
+export default Services;
diff --git a/src/components/StaticHero.tsx b/src/components/StaticHero.tsx
new file mode 100644
index 000000000..86a5ac933
--- /dev/null
+++ b/src/components/StaticHero.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { AnimatedButton } from './AnimatedButton';
+
+const StaticHero = () => {
+ return (
+
+
+
+
+
+
+ Crafting Digital Excellence Together
+ {/*
+ {' '}
+ Forever Home.{' '}
+ */}
+
+
+
+ Transforming your digital landscape for a better tomorrow
+
+
+
+
+
+
+ );
+};
+
+export default StaticHero;
diff --git a/src/components/Testimonial.tsx b/src/components/Testimonial.tsx
new file mode 100644
index 000000000..9946ebade
--- /dev/null
+++ b/src/components/Testimonial.tsx
@@ -0,0 +1,48 @@
+'use client';
+
+import React, { useEffect, useState } from 'react';
+import { InfiniteMovingCards } from './ui/infinite-moving-cards';
+
+export function Testimonial() {
+ return (
+
+
+
+ );
+}
+
+const testimonials = [
+ {
+ quote:
+ 'Great work so far, loved the fact that Eshu personally took it up! Looking forward to the final product.',
+ name: 'Eknoor Singh',
+ title: 'Speezy',
+ },
+ {
+ quote:
+ 'Great work. They could exactly replicate the design into website and the speed was super quick. Eshu personally solved all the issue I had in quickest of time. Would definitely work with them again!',
+ name: 'Abhishek Pai Angle',
+ title: 'Ribin',
+ },
+ {
+ quote: 'Work execution was smooth and task was done on time!',
+ name: 'Sujas Jain',
+ title: 'Abhyuday IIT Bombay',
+ },
+ {
+ quote:
+ 'Exceptional work! The website is fantastic, and we appreciate your team's expertise and professionalism.',
+ name: 'Mandar',
+ title: 'Formula AshwaRiders',
+ },
+ {
+ quote:
+ 'It was very personalised and they did multiple iterations according to my requirements.',
+ name: 'Aryan Goyal',
+ title: 'Thirtyml',
+ },
+];
diff --git a/src/components/TiltCard.tsx b/src/components/TiltCard.tsx
new file mode 100644
index 000000000..2364de85c
--- /dev/null
+++ b/src/components/TiltCard.tsx
@@ -0,0 +1,110 @@
+'use client';
+import React, { useRef } from 'react';
+import {
+ motion,
+ useMotionTemplate,
+ useMotionValue,
+ useSpring,
+} from 'framer-motion';
+
+const Example = () => {
+ return (
+
+
+
+ );
+};
+
+const ROTATION_RANGE = 32.5;
+const HALF_ROTATION_RANGE = 32.5 / 2;
+
+interface CardProps {
+ card: {
+ title: string;
+ description: string;
+ };
+}
+
+export const TiltCard = ({ card }: CardProps) => {
+ const ref = useRef(null);
+
+ const x = useMotionValue(0);
+ const y = useMotionValue(0);
+
+ const xSpring = useSpring(x);
+ const ySpring = useSpring(y);
+
+ const transform = useMotionTemplate`rotateX(${xSpring}deg) rotateY(${ySpring}deg)`;
+
+ const handleMouseMove = (e: React.MouseEvent) => {
+ if (!ref.current) return;
+
+ const rect = ref.current.getBoundingClientRect();
+
+ const width = rect.width;
+ const height = rect.height;
+
+ const mouseX = (e.clientX - rect.left) * ROTATION_RANGE;
+ const mouseY = (e.clientY - rect.top) * ROTATION_RANGE;
+
+ const rX = (mouseY / height - HALF_ROTATION_RANGE) * -1;
+ const rY = mouseX / width - HALF_ROTATION_RANGE;
+
+ x.set(rX);
+ y.set(rY);
+ };
+
+ const handleMouseLeave = () => {
+ x.set(0);
+ y.set(0);
+ };
+
+ return (
+
+
+
+
+ {card.title}
+
+
+ {card.description}
+
+
+
+
+ );
+};
+
+export default Example;
diff --git a/src/components/image-slider.tsx b/src/components/image-slider.tsx
new file mode 100644
index 000000000..85067ee3d
--- /dev/null
+++ b/src/components/image-slider.tsx
@@ -0,0 +1,152 @@
+'use client';
+
+import { cn } from '@/utils/cs';
+import { motion, AnimatePresence } from 'framer-motion';
+import React, { useEffect, useState } from 'react';
+
+export const ImagesSlider = ({
+ images,
+ children,
+ overlay = true,
+ overlayClassName,
+ className,
+ autoplay = true,
+ direction = 'up',
+}: {
+ images: string[];
+ children: React.ReactNode;
+ overlay?: React.ReactNode;
+ overlayClassName?: string;
+ className?: string;
+ autoplay?: boolean;
+ direction?: 'up' | 'down';
+}) => {
+ const [currentIndex, setCurrentIndex] = useState(0);
+ const [loading, setLoading] = useState(false);
+ const [loadedImages, setLoadedImages] = useState([]);
+
+ const handleNext = () => {
+ setCurrentIndex((prevIndex) =>
+ prevIndex + 1 === images.length ? 0 : prevIndex + 1
+ );
+ };
+
+ const handlePrevious = () => {
+ setCurrentIndex((prevIndex) =>
+ prevIndex - 1 < 0 ? images.length - 1 : prevIndex - 1
+ );
+ };
+
+ useEffect(() => {
+ loadImages();
+ }, []);
+
+ const loadImages = () => {
+ setLoading(true);
+ const loadPromises = images.map((image) => {
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ img.src = image;
+ img.onload = () => resolve(image);
+ img.onerror = reject;
+ });
+ });
+
+ Promise.all(loadPromises)
+ .then((loadedImages) => {
+ setLoadedImages(loadedImages as string[]);
+ setLoading(false);
+ })
+ .catch((error) => console.error('Failed to load images', error));
+ };
+ useEffect(() => {
+ const handleKeyDown = (event: KeyboardEvent) => {
+ if (event.key === 'ArrowRight') {
+ handleNext();
+ } else if (event.key === 'ArrowLeft') {
+ handlePrevious();
+ }
+ };
+
+ window.addEventListener('keydown', handleKeyDown);
+
+ // autoplay
+ let interval: any;
+ if (autoplay) {
+ interval = setInterval(() => {
+ handleNext();
+ }, 5000);
+ }
+
+ return () => {
+ window.removeEventListener('keydown', handleKeyDown);
+ clearInterval(interval);
+ };
+ }, []);
+
+ const slideVariants = {
+ initial: {
+ scale: 0,
+ opacity: 0,
+ rotateX: 45,
+ },
+ visible: {
+ scale: 1,
+ rotateX: 0,
+ opacity: 1,
+ transition: {
+ duration: 0.5,
+ ease: [0.645, 0.045, 0.355, 1.0],
+ },
+ },
+ upExit: {
+ opacity: 1,
+ y: '-150%',
+ transition: {
+ duration: 1,
+ },
+ },
+ downExit: {
+ opacity: 1,
+ y: '150%',
+ transition: {
+ duration: 1,
+ },
+ },
+ };
+
+ const areImagesLoaded = loadedImages.length > 0;
+
+ return (
+
+ {areImagesLoaded && children}
+ {areImagesLoaded && overlay && (
+
+ )}
+
+ {areImagesLoaded && (
+
+
+
+ )}
+
+ );
+};
diff --git a/src/components/ui/infinite-moving-cards.tsx b/src/components/ui/infinite-moving-cards.tsx
new file mode 100644
index 000000000..00415f15d
--- /dev/null
+++ b/src/components/ui/infinite-moving-cards.tsx
@@ -0,0 +1,122 @@
+'use client';
+
+import { cn } from '@/lib/utils';
+import React, { useEffect, useState } from 'react';
+
+export const InfiniteMovingCards = ({
+ items,
+ direction = 'left',
+ speed = 'fast',
+ pauseOnHover = true,
+ className,
+}: {
+ items: {
+ quote: string;
+ name: string;
+ title: string;
+ }[];
+ direction?: 'left' | 'right';
+ speed?: 'fast' | 'normal' | 'slow';
+ pauseOnHover?: boolean;
+ className?: string;
+}) => {
+ const containerRef = React.useRef(null);
+ const scrollerRef = React.useRef(null);
+
+ useEffect(() => {
+ addAnimation();
+ }, []);
+ const [start, setStart] = useState(false);
+ function addAnimation() {
+ if (containerRef.current && scrollerRef.current) {
+ const scrollerContent = Array.from(scrollerRef.current.children);
+
+ scrollerContent.forEach((item) => {
+ const duplicatedItem = item.cloneNode(true);
+ if (scrollerRef.current) {
+ scrollerRef.current.appendChild(duplicatedItem);
+ }
+ });
+
+ getDirection();
+ getSpeed();
+ setStart(true);
+ }
+ }
+ const getDirection = () => {
+ if (containerRef.current) {
+ if (direction === 'left') {
+ containerRef.current.style.setProperty(
+ '--animation-direction',
+ 'forwards'
+ );
+ } else {
+ containerRef.current.style.setProperty(
+ '--animation-direction',
+ 'reverse'
+ );
+ }
+ }
+ };
+ const getSpeed = () => {
+ if (containerRef.current) {
+ if (speed === 'fast') {
+ containerRef.current.style.setProperty('--animation-duration', '20s');
+ } else if (speed === 'normal') {
+ containerRef.current.style.setProperty('--animation-duration', '40s');
+ } else {
+ containerRef.current.style.setProperty('--animation-duration', '80s');
+ }
+ }
+ };
+ return (
+
+
+ {items.map((item, idx) => (
+
+
+
+
+ {item.quote}
+
+
+
+
+ {item.name}
+
+
+ {item.title}
+
+
+
+
+
+ ))}
+
+
+ );
+};
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
new file mode 100644
index 000000000..d084ccade
--- /dev/null
+++ b/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/src/utils/cs.ts b/src/utils/cs.ts
new file mode 100644
index 000000000..cec6ac9e8
--- /dev/null
+++ b/src/utils/cs.ts
@@ -0,0 +1,6 @@
+import { ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/styles/globals.css b/styles/globals.css
deleted file mode 100644
index 943a256ad..000000000
--- a/styles/globals.css
+++ /dev/null
@@ -1,155 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- font-family: "Eudoxus Sans", sans-serif;
- scroll-behavior: smooth;
-}
-
-.feature-card:hover {
- background: linear-gradient(
- 144.39deg,
- #ffffff -278.56%,
- #6d6d6d -78.47%,
- #11101d 91.61%
- );
- box-shadow: 0px 20px 100px -10px rgba(66, 71, 91, 0.1);
- transform: scale(1.1);
-}
-
-/* .feedback-card{
- background: linear-gradient(
- 144.39deg,
- #ffffff -278.56%,
- #6d6d6d -78.47%,
- #11101d 91.61%
- );
-} */
-
-.feedback-container .feedback-card:last-child {
- margin-right: 0px;
-}
-
-.feedback-card {
- background: linear-gradient(
- 144.39deg,
- #ffffff -278.56%,
- #6d6d6d -78.47%,
- #11101d 91.61%
- );
- transition: ease-out 0.6s;
-}
-
-.feedback-card:hover {
- /* background: var(--black-gradient); */
- background: linear-gradient(
- 144.39deg,
- #ffffff -278.56%,
- #6d6d6d -78.47%,
- #11101d 91.61%
- );
- box-shadow: 0px 20px 100px -10px rgba(66, 71, 91, 0.1);
- transform: scale(1.1);
- transition: all 1s;
-}
-
-
-.gradient-01 {
- background-image: linear-gradient(
- 270deg,
- hsl(295deg 76% 51%) 0%,
- hsl(284deg 70% 73%) 26%,
- hsl(257deg 70% 86%) 39%,
- hsl(202deg 92% 90%) 50%,
- hsl(215deg 77% 81%) 61%,
- hsl(221deg 73% 70%) 74%,
- hsl(220deg 76% 51%) 100%
- );
- filter: blur(125px);
-}
-
-.hero-gradient {
- background: linear-gradient(
- 97.86deg,
- #a509ff 0%,
- #34acc7 53.65%,
- #a134c7 100%
- );
-}
-
-.gradient-02 {
- position: absolute;
- width: 200px;
- height: 438px;
- top: 0px;
- right: 0px;
-
- background: #7aebfb;
- filter: blur(190px);
-}
-
-.glassmorphism {
- background: rgba(255, 255, 255, 0.25);
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
- backdrop-filter: blur(4px);
- -webkit-backdrop-filter: blur(4px);
- border: 1px solid rgba(255, 255, 255, 0.18);
-}
-
-.gradient-03 {
- position: absolute;
- width: 404px;
- height: 800px;
- left: 20%;
- top: 5%;
-
- background: rgba(149, 66, 232, 0.35);
- filter: blur(175px);
- transform: rotate(-114.2deg);
-}
-
-.gradient-04 {
- position: absolute;
- width: 304px;
- height: 100vh;
- left: 30%;
- top: 10%;
-
- background: rgba(45, 72, 152, 0.75);
- filter: blur(200px);
- transform: rotate(-53.13deg);
-}
-
-.gradient-05 {
- background: linear-gradient(
- 180deg,
- rgba(255, 255, 255, 0.04) 0%,
- rgba(255, 255, 255, 0) 100%
- );
-}
-
-.feedback-gradient {
- position: absolute;
- width: 200px;
- height: 316px;
- left: 0px;
- top: 0px;
-
- background: #8d39a3;
- filter: blur(175px);
-}
-
-.footer-gradient {
- position: absolute;
- width: 500px;
- height: 100px;
- left: 37%;
- bottom: 0;
-
- background: #65c4fa;
- filter: blur(150px);
-}
diff --git a/styles/index.js b/styles/index.js
deleted file mode 100644
index acd8707f9..000000000
--- a/styles/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const styles = {
- innerWidth: '2xl:max-w-[1280px] w-full',
- interWidth: 'lg:w-[80%] w-[100%]',
-
- paddings: 'sm:p-16 xs:p-8 px-6 py-12',
- yPaddings: 'sm:py-16 xs:py-8 py-12',
- xPaddings: 'sm:px-16 px-6',
- topPaddings: 'sm:pt-16 xs:pt-8 pt-12',
- bottomPaddings: 'sm:pb-16 xs:pb-8 pb-12',
-
- flexCenter: 'flex justify-center items-center',
- flexStart: 'flex justify-start items-start',
- flexEnd: 'flex justify-end',
- navPadding: 'pt-[98px]',
-
- // hero section
- heroHeading:
- 'font-bold lg:text-[144px] md:text-[100px] sm:text-[60px] text-[44px] lg:leading-[158.4px] md:leading-[114.4px] sm:leading-[74.4px] leading-[64.4px] uppercase text-white',
- eshVisionHeroHeading: 'font-bold lg:text-[130px] md:text-[90px] sm:text-[50px] text-[34px] lg:leading-[128.4px] md:leading-[100.4px] sm:leading-[64.4px] leading-[54.4px] uppercase text-white',
- heroDText:
- 'md:w-[212px] sm:w-[80px] w-[60px] md:h-[108px] sm:h-[48px] h-[38px] md:border-[18px] border-[9px] rounded-r-[50px] border-white sm:mx-2 mx-[6px]',
-};
-
-export default styles;
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index 40f22efa8..000000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/** @type {import('tailwindcss').Config} */
-module.exports = {
- content: [
- './app/**/*.{html,js,jsx}',
- './components/**/*.{html,js,jsx}',
- './sections/**/*.{html,js,jsx}',
- './styles/**/*.{js,jsx}',
- ],
- mode: 'jit',
- theme: {
- extend: {
- colors: {
- 'primary-black': '#1A232E',
- 'secondary-white': '#c7c7c7',
- },
- transitionTimingFunction: {
- 'out-flex': 'cubic-bezier(0.05, 0.6, 0.4, 0.9)',
- },
- },
- },
- plugins: [],
-};
diff --git a/tailwind.config.ts b/tailwind.config.ts
new file mode 100644
index 000000000..1e6a30b2f
--- /dev/null
+++ b/tailwind.config.ts
@@ -0,0 +1,105 @@
+import type { Config } from "tailwindcss"
+
+const {
+ default: flattenColorPalette,
+} = require("tailwindcss/lib/util/flattenColorPalette");
+
+const config = {
+ darkMode: ["class"],
+ content: [
+ './pages/**/*.{ts,tsx}',
+ './components/**/*.{ts,tsx}',
+ './app/**/*.{ts,tsx}',
+ './src/**/*.{ts,tsx}',
+ ],
+ prefix: "",
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1400px",
+ },
+ },
+ extend: {
+ fontFamily: {
+ karla: ['Karla', 'sans-serif'],
+ },
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ keyframes: {
+ scroll: {
+ to: {
+ transform: "translate(calc(-50% - 0.5rem))",
+ },
+ },
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ scroll:
+ "scroll var(--animation-duration, 40s) var(--animation-direction, forwards) linear infinite",
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ },
+ },
+ plugins: [require("tailwindcss-animate"), addVariablesForColors],
+} satisfies Config
+
+export default config
+
+function addVariablesForColors({ addBase, theme }: any) {
+ let allColors = flattenColorPalette(theme("colors"));
+ let newVars = Object.fromEntries(
+ Object.entries(allColors).map(([key, val]) => [`--${key}`, val])
+ );
+
+ addBase({
+ ":root": newVars,
+ });
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 000000000..7b2858930
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/utils/motion.js b/utils/motion.js
deleted file mode 100644
index 629976e72..000000000
--- a/utils/motion.js
+++ /dev/null
@@ -1,161 +0,0 @@
-export const navVariants = {
- hidden: {
- opacity: 0,
- y: -50,
- transition: {
- type: 'spring',
- stiffness: 300,
- damping: 140,
- },
- },
- show: {
- opacity: 1,
- y: 0,
- transition: {
- type: 'spring',
- stiffness: 80,
- delay: 1,
- },
- },
-};
-
-export const slideIn = (direction, type, delay, duration) => ({
- hidden: {
- x: direction === 'left' ? '-100%' : direction === 'right' ? '100%' : 0,
- y: direction === 'up' ? '100%' : direction === 'down' ? '100%' : 0,
- },
- show: {
- x: 0,
- y: 0,
- transition: {
- type,
- delay,
- duration,
- ease: 'easeOut',
- },
- },
-});
-
-export const staggerContainer = (staggerChildren, delayChildren) => ({
- hidden: {},
- show: {
- transition: {
- staggerChildren,
- delayChildren,
- },
- },
-});
-
-export const textVariant = (delay) => ({
- hidden: {
- y: 50,
- opacity: 0,
- },
- show: {
- y: 0,
- opacity: 1,
- transition: {
- type: 'spring',
- duration: 1.25,
- delay,
- },
- },
-});
-
-export const textContainer = {
- hidden: {
- opacity: 0,
- },
- show: (i = 1) => ({
- opacity: 1,
- transition: { staggerChildren: 0.1, delayChildren: i * 0.1 },
- }),
-};
-
-export const textVariant2 = {
- hidden: {
- opacity: 0,
- y: 20,
- },
- show: {
- opacity: 1,
- y: 0,
- transition: {
- type: 'tween',
- ease: 'easeIn',
- },
- },
-};
-
-export const fadeIn = (direction, type, delay, duration) => ({
- hidden: {
- x: direction === 'left' ? 100 : direction === 'right' ? -100 : 0,
- y: direction === 'up' ? 100 : direction === 'down' ? -100 : 0,
- opacity: 0,
- },
- show: {
- x: 0,
- y: 0,
- opacity: 1,
- transition: {
- type,
- delay,
- duration,
- ease: 'easeOut',
- },
- },
-});
-
-export const planetVariants = (direction) => ({
- hidden: {
- x: direction === 'left' ? '-100%' : '100%',
- rotate: 120,
- },
- show: {
- x: 0,
- rotate: 0,
- transition: {
- type: 'spring',
- duration: 1.8,
- delay: 0.5,
- },
- },
-});
-
-export const zoomIn = (delay, duration) => ({
- hidden: {
- scale: 0,
- opacity: 0,
- },
- show: {
- scale: 1,
- opacity: 1,
- transition: {
- type: 'tween',
- delay,
- duration,
- ease: 'easeOut',
- },
- },
-});
-
-export const footerVariants = {
- hidden: {
- opacity: 0,
- y: 50,
- transition: {
- type: 'spring',
- stiffness: 300,
- damping: 140,
- },
- },
- show: {
- opacity: 1,
- y: 0,
- transition: {
- type: 'spring',
- stiffness: 80,
- delay: 0.5,
- },
- },
-};