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 -![Chat Application](https://i.ibb.co/sbSHWH0/Thumbnail-1.png) +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 = () => ( - <> - Eshway - - - - - - -); - -export default Head; diff --git a/app/layout.js b/app/layout.js deleted file mode 100644 index 0e6153407..000000000 --- a/app/layout.js +++ /dev/null @@ -1,16 +0,0 @@ -import '../styles/globals.css'; - -const RootLayout = ({ children }) => ( - - - - - - - - - - -); - -export default MyApp; diff --git a/pages/api/hello.js b/pages/api/hello.js deleted file mode 100644 index d49a2572c..000000000 --- a/pages/api/hello.js +++ /dev/null @@ -1,5 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction - -export default function handler(req, res) { - res.status(200).json({ name: 'John Doe' }); -} diff --git a/pages/contact.js b/pages/contact.js deleted file mode 100644 index 7f4f546cc..000000000 --- a/pages/contact.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Footer, Navbar } from '../components'; -import ContactUs from '../sections/ContactUs'; - -const Home = () => ( -
- - - {/* */} -
-
-
-); - -export default Home; diff --git a/pages/eshvision.js b/pages/eshvision.js deleted file mode 100644 index 6632946c7..000000000 --- a/pages/eshvision.js +++ /dev/null @@ -1,291 +0,0 @@ -// import { useState } from 'react'; -// import TextField from '@mui/material/TextField'; -// import Button from '@mui/material/Button'; -import { useState } from 'react'; -import { Button, TextField } from '@mui/material'; -import { Footer, Navbar } from '../components'; -import EshVisionHero from '../sections/EshVisionHero.jsx'; -import Table from '../sections/Table.jsx'; -import { Feedback } from '../sections'; - -const EshVision = () => { - // const list = ['likhitha', 'eshller', 'vallabh', 'akshat', 'prakhar', 'subham', 'sakshi', 'admin', 'mohitkrishna', 'ektaagarwal', 'kajal', 'nallasaisrikar', 'filzasiddiqui', 'adityamandhane', 'gauravshelke', 'piyushsoni', 'adityapratap', 'trishul', 'sangeeta', 'shivakoli', 'sankalpkushwaha', 'kamalmahour', 'vedantbhosale', 'tanishkashivhare', 'anishmahore', 'eeshasingh', 'aryanmishra', 'narender', 'meeragoyal', 'nikhilsaini', 'harshchaurasia', 'pratikshakapoor', 'rahulmj', 'sarita', 'sricharannanthakumaran', 'lalitkumar', 'anjalikapoor', 'sharvarilahane', 'adityakumarchoudhary', 'shyamk', 'laghudeepsingh', 'viyasudhirrajap', 'nashrasabiralisiddiqui', 'adwait', 'dineshp', 'ritika', 'nashra', 'ameysawalkar', 'dimpalaggarwal', 'adityakashyap', 'teena', 'prashasti']; - const list = [ - 'likhitha', - 'eshller', - 'vallabh', - 'akshat', - 'nakshita', - 'admin', - 'nashrasiddiqui', - 'vedantbhosale', - 'anitarawat', - 'chandershekha', - 'harshamge', - 'yashkumar', - 'akrativerma', - 'qunutshirgaonkar', - 'shaikhahme', - 'dhruvsudan', - 'aasthaagrawal', - 'tarunkurapaty', - 'yashasore', - 'rohitbenjamin', - 'ripankamil', - 'suhanirathor', - 'gunjangupta', - 'shashwattrived', - 'atharvavarpe', - 'astitvaraj', - 'aniruddhsharm', - 'akshikajai', - 'lucky6', - '38675287', - 'yuvrajgupt', - 'ayushlodh', - 'mradulsonka', - 'ayushtaya', - 'ravira', - 'rounakgupt', - 'aakashgupta', - 'ashishchane', - 'abhaychandra', - 'sandhya', - 'lohithpol', - 'riteshkuma', - 'sahilpati', - 'sumantripathi', - 'teen', - 'samanthmarti', - 'ayushlonakad', - 'ashwinanand', - 'mohammadshafi', - 'nikhilsain', - 'rishibhand', - 'prajyot', - 'ayushnema', - 'somannagarianandith', - 'teena', - 'omnunase', - 'mayureshkathe', - 'nish', - 'amanverm', - 'anujyada', - 'shrutising', - 'jyotiprakash', - 'nashrasiddiqui', - 'vedantbhosale', - 'anitarawat', - 'chandershekhar', - 'ramkumarr', - 'harshamge', - 'yashkuma', - 'akrativerm', - 'qunutshirgaonkar', - 'shaikhahme', - 'dhruvsudan', - 'aasthaagrawal', - 'tarunkurapaty', - 'yashasore', - 'rohitbenjamin', - 'ripankamil', - 'suhanirathor', - 'gunjangupta', - 'shashwattrived', - 'atharvavarpe', - 'astitvaraj', - 'aniruddhsharm', - 'akshikajai', - 'lucky6', - '38675287', - 'yuvrajgupt', - 'ayushlodh', - 'mradulsonka', - 'ayushtaya', - 'ravira', - 'rounakgupt', - 'aakashgupta', - 'ashishchane', - 'abhaychandra', - 'sandhyabarathi', - 'lohithreddypol', - 'riteshkuma', - 'sahilpati', - 'sumantripathi', - 'teen', - 'samanthmarti', - 'ayushlonakad', - 'ashwinanand', - 'mohammadshafi', - 'nikhilsain', - 'rishibhand', - 'prajyot', - 'ayushnema', - 'somannagarianandith', - 'omnunase', - 'mayureshkathe', - 'gowrisomisetty', - 'nish', - 'amanverm', - 'anujyada', - 'shrutising', - 'jyotiprakash', - 'nileshverma', - 'rudrapratapsingh', - 'anshumishra', - 'dhruvchaturvedi', - 'aryankashyap', - 'jyotiprakash', - 'eekshithasomisetty', - 'taiabansary', - 'k.sricharanraj', - 'yashitkumar', - 'purna', - 'shaikawezmehtab', - 'malaykedia', - 'tusharkumarjain', - 'shashankjoshi', - 'anirudhmamgain', - 'rupeshanilsonawane', - 'shubhamjoshu', - 'polipallimadhusudanarao', - 'mohankrishnakatta', - 'ayushlonakadi', - 'nikhilkhandelwal', - 'priyanshu', - 'nikhilnarera', - 'shreyassingh', - 'harishkumarlaxmikantgajakosh', - 'sanyamsingh', - 'ronakgupta', - 'priyanshusengar', - 'divyanshsharma', - 'ashwinisinghtomar', - 'anujyadav', - 'aaryakokate', - 'ashwinanand', - 'leelalaharimalla', - 'mohiboddinshaikh', - 'ashasingh', - 'ripankamila', - 'nashrasiddiqui', - 'vedantbhosale', - 'anitarawat', - 'chandershekhar', - 'ramkumarr', - 'harshamge', - 'yashkumar', - 'akrativerma', - 'qunutikhtiyarshirgaonkar', - 'shaikhtehreemirshadahmed', - 'dhruvsudan', - 'aasthaagrawal', - 'tarunkurapaty', - 'yashasore', - 'rohitbenjamine', - 'ripankamila', - 'suhanirathore', - 'gunjangupta', - 'shashwattrivedi', - 'atharvavarpe', - 'astitvaraj', - 'aniruddhsharma', - 'akshikajain', - 'lucky@6386752877', - 'yuvrajgupta', - 'ayushlodhi', - 'mradulsonkar', - 'ayushtayal', - 'raviraj', - 'rounakgupta', - 'aakashgupta', - 'ashishchanel', - 'abhaychandra', - 'sandhyabarathik', - 'lohithreddypolu', - 'riteshkumar', - 'sahilravindrapatil', - 'sumantripathi', - 'teena', - 'samanthmartis', - 'ayushlonakadi', - 'ashwinanand', - 'mohammadsamiuddinshafi', - 'nikhilsaini', - 'rishibhande', - 'prajyot', - 'ayushnema', - 'somannagariananditha', - 'omnunase', - 'mayureshudaykathe', - 'gowrisaieekshithasomisetty', - 'nisha', - 'amanverma', - 'anujyadav', - 'shrutisingh', - 'jyotiprakash', - ]; - const [authenticated, setauthenticated] = useState(false); - const [username, setUsername] = useState(null); - const handleInput = (e) => { - e.preventDefault(); - setUsername(e.target.value?.toLowerCase()); - }; - const handleSubmit = () => { - list?.forEach((element) => { - if (username === element) { - setauthenticated(true); - } - }); - }; - return ( -
- - -
- {authenticated ? ( - - ) : ( -
-

- LOGIN HERE -

- - -
- )} -
- Not Registered? Click :{' '} - - Registration Link - -
-
- -
-
- - ); -}; -export default EshVision; diff --git a/pages/index.js b/pages/index.js deleted file mode 100644 index 0b99b3927..000000000 --- a/pages/index.js +++ /dev/null @@ -1,45 +0,0 @@ -import Script from 'next/script'; -import { Footer, Navbar } from '../components'; -import { About, Explore, Services, GetStarted, Hero, WhatsNew, Merch } from '../sections'; -import EshVision from '../sections/EshVision'; -import Testimonials from '../components/Testimonials'; - -const Home = () => ( -
- - - -
- - -
- -
- -
- -
- - - -
- {/* -
- -
- -
*/} -
-
-); - -export default Home; diff --git a/pages/inter-iit.js b/pages/inter-iit.js deleted file mode 100644 index 61a6558e5..000000000 --- a/pages/inter-iit.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Footer, Navbar } from '../components'; -import InterIITContactUs from '../sections/InterIITContactUs'; - -const InterIIT = () => ( -
- - - {/* */} -
-
-
-); - -export default InterIIT; diff --git a/pages/privacy.js b/pages/privacy.js deleted file mode 100644 index 403ec46de..000000000 --- a/pages/privacy.js +++ /dev/null @@ -1,214 +0,0 @@ -import { motion } from 'framer-motion'; -import { staggerContainer, textVariant } from '../utils/motion'; - -const Privacy = () => ( -
- - - Privacy Policy - - - Last updated: [Date] - - - - Eshway ("we", "our", "us") is committed to protecting your privacy. This - Privacy Policy explains how your personal data is collected, used, and - disclosed by Eshway. - - - - 1. User Data - - - We collect information that you provide directly to us, such as when you - create an account, fill out a form, or communicate with us. This may - include: - - -
  • Personal information such as name, email address, phone number.
  • -
  • Account information such as username and password.
  • -
  • Any other information you choose to provide.
  • -
    - - - 2. Permissions and APIs that Access Sensitive Information - - - Our app may request certain permissions that allow it to access your - device's data and perform specific functions: - - -
  • Location data for providing location-based services.
  • -
  • Camera and photos for profile pictures and other features.
  • -
  • Contacts for connecting with friends and other users.
  • -
    - - We use this information solely to provide and improve our services. - - - - 3. Device and Network Abuse - - - We strictly prohibit any form of abuse or misuse of our application, - including but not limited to: - - -
  • Unauthorized access to or alteration of our systems.
  • -
  • Disruption of our services or networks.
  • -
  • - Use of our services to harm others or for any illegal activities. -
  • -
    - - - 4. Deceptive Behavior - - - Our application does not engage in deceptive practices, such as: - - -
  • Misleading users about the app's functionalities.
  • -
  • Impersonating other apps or services.
  • -
  • Using deceptive ads or notifications.
  • -
    - - - 5. Misrepresentation - - - We ensure that our app and its functionalities are accurately - represented. Any claims made about the app's capabilities are truthful - and not misleading. - - - - 6. Google Play's Target API Level Policy - - - Our application targets an appropriate API level that ensures compliance - with Google Play's policy. We regularly update our app to meet the - latest security and functionality standards. - - - - 7. SDK Requirements - - - Any third-party SDKs integrated into our application are vetted to - ensure they comply with our privacy and security standards. We do not - use SDKs that compromise user data or security. - - - - 8. Changes to This Privacy Policy - - - We may update our Privacy Policy from time to time. We will notify you - of any changes by posting the new Privacy Policy on this page. You are - advised to review this Privacy Policy periodically for any changes. - - - - Contact Us - - - If you have any questions about this Privacy Policy, please contact us - at: - - -
  • Email: business@eshway.com
  • -
    -
    -
    -); - -export default Privacy; diff --git a/pages/store.js b/pages/store.js deleted file mode 100644 index 763af1a88..000000000 --- a/pages/store.js +++ /dev/null @@ -1,11 +0,0 @@ -import { Footer, Navbar } from '../components'; -import ShopHero from '../sections/ShopHero.jsx'; - -const Store = () => ( -
    - - -
    -
    -); -export default Store; diff --git a/pages/store/productPage.js b/pages/store/productPage.js deleted file mode 100644 index 2c1470542..000000000 --- a/pages/store/productPage.js +++ /dev/null @@ -1,11 +0,0 @@ -import { Footer, Navbar } from '../../components'; -import Product from '../../sections/Product'; - -const productPage = () => ( -
    - - -
    -
    -); -export default productPage; diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 12a703d90..000000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/public/A_nobg.webp b/public/A_nobg.webp deleted file mode 100644 index 44a620af8..000000000 Binary files a/public/A_nobg.webp and /dev/null differ diff --git a/public/E_nobg.webp b/public/E_nobg.webp deleted file mode 100644 index fa5e9b390..000000000 Binary files a/public/E_nobg.webp and /dev/null differ diff --git a/public/Front.webp b/public/Front.webp deleted file mode 100644 index d4392a2a1..000000000 Binary files a/public/Front.webp and /dev/null differ diff --git a/public/L_nobg.webp b/public/L_nobg.webp deleted file mode 100644 index 5daa0cb87..000000000 Binary files a/public/L_nobg.webp and /dev/null differ diff --git a/public/V_nobg.webp b/public/V_nobg.webp deleted file mode 100644 index d94a28567..000000000 Binary files a/public/V_nobg.webp and /dev/null differ diff --git a/public/abhishek.png b/public/abhishek.png deleted file mode 100644 index eb5b0725a..000000000 Binary files a/public/abhishek.png and /dev/null differ diff --git a/public/arrow-down.svg b/public/arrow-down.svg deleted file mode 100644 index 8991958b1..000000000 --- a/public/arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/arrow.svg b/public/arrow.svg deleted file mode 100644 index ac6457eef..000000000 --- a/public/arrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/aryan.png b/public/aryan.png deleted file mode 100644 index 61f702abc..000000000 Binary files a/public/aryan.png and /dev/null differ diff --git a/public/check.png b/public/check.png deleted file mode 100644 index b2d370c40..000000000 Binary files a/public/check.png and /dev/null differ diff --git a/public/contact.png b/public/contact.png deleted file mode 100644 index 772e7e019..000000000 Binary files a/public/contact.png and /dev/null differ diff --git a/public/dollar.png b/public/dollar.png deleted file mode 100755 index 37faba8b3..000000000 Binary files a/public/dollar.png and /dev/null differ diff --git a/public/eknoor.png b/public/eknoor.png deleted file mode 100644 index 37a708e11..000000000 Binary files a/public/eknoor.png and /dev/null differ diff --git a/public/eshu_bg.png b/public/eshu_bg.png deleted file mode 100644 index ec42625b1..000000000 Binary files a/public/eshu_bg.png and /dev/null differ diff --git a/public/f.png b/public/f.png deleted file mode 100644 index 18a8c2c91..000000000 Binary files a/public/f.png and /dev/null differ diff --git a/public/facebook.svg b/public/facebook.svg deleted file mode 100644 index 6ed2124f0..000000000 --- a/public/facebook.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 5b1079edf..000000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/get-started.png b/public/get-started.png deleted file mode 100644 index 201e9372d..000000000 Binary files a/public/get-started.png and /dev/null differ diff --git a/public/hand.png b/public/hand.png new file mode 100644 index 000000000..388c4c4b4 Binary files /dev/null and b/public/hand.png differ diff --git a/public/headset.svg b/public/headset.svg deleted file mode 100644 index d3b5b9f2a..000000000 --- a/public/headset.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/hero.png b/public/hero.png new file mode 100644 index 000000000..16f01a15f Binary files /dev/null and b/public/hero.png differ diff --git a/public/ill.png b/public/ill.png deleted file mode 100644 index ea3bbeb2b..000000000 Binary files a/public/ill.png and /dev/null differ diff --git a/public/instagram.svg b/public/instagram.svg deleted file mode 100644 index a91798e81..000000000 --- a/public/instagram.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/linkedin.svg b/public/linkedin.svg deleted file mode 100644 index 876259d6b..000000000 --- a/public/linkedin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/logo.png b/public/logo.png deleted file mode 100644 index 202368a43..000000000 Binary files a/public/logo.png and /dev/null differ diff --git a/public/man.png b/public/man.png deleted file mode 100644 index 27fef9716..000000000 Binary files a/public/man.png and /dev/null differ diff --git a/public/map.png b/public/map.png deleted file mode 100644 index 5027f7016..000000000 Binary files a/public/map.png and /dev/null differ diff --git a/public/menu.svg b/public/menu.svg deleted file mode 100644 index 38b11980c..000000000 --- a/public/menu.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/nakshita.jpeg b/public/nakshita.jpeg deleted file mode 100644 index c8471016f..000000000 Binary files a/public/nakshita.jpeg and /dev/null differ diff --git a/public/nakshita.png b/public/nakshita.png deleted file mode 100644 index 33fff91e7..000000000 Binary files a/public/nakshita.png and /dev/null differ diff --git a/public/nakshita.webp b/public/nakshita.webp deleted file mode 100644 index f34049dce..000000000 Binary files a/public/nakshita.webp and /dev/null differ diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/phone.png b/public/phone.png deleted file mode 100644 index abe129405..000000000 Binary files a/public/phone.png and /dev/null differ diff --git a/public/search.svg b/public/search.svg deleted file mode 100644 index b1cdfe50d..000000000 --- a/public/search.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/seo.png b/public/seo.png deleted file mode 100644 index 3ee3aa645..000000000 Binary files a/public/seo.png and /dev/null differ diff --git a/public/stamp.png b/public/stamp.png deleted file mode 100644 index 7d73928dc..000000000 Binary files a/public/stamp.png and /dev/null differ diff --git a/public/tech.png b/public/tech.png deleted file mode 100644 index 220a1ee62..000000000 Binary files a/public/tech.png and /dev/null differ diff --git a/public/techrnd.JPG b/public/techrnd.JPG new file mode 100644 index 000000000..dd32f3936 Binary files /dev/null and b/public/techrnd.JPG differ diff --git a/public/time.png b/public/time.png deleted file mode 100755 index 9d22e8d01..000000000 Binary files a/public/time.png and /dev/null differ diff --git a/public/tshirtmockup.webp b/public/tshirtmockup.webp deleted file mode 100644 index 5b991825a..000000000 Binary files a/public/tshirtmockup.webp and /dev/null differ diff --git a/public/twitter.svg b/public/twitter.svg deleted file mode 100644 index d8a9c2eb0..000000000 --- a/public/twitter.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/vercel.svg b/public/vercel.svg index fbf0e25a6..d2f842227 100644 --- a/public/vercel.svg +++ b/public/vercel.svg @@ -1,4 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/public/vrpano.svg b/public/vrpano.svg deleted file mode 100644 index c3571f342..000000000 --- a/public/vrpano.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/web.png b/public/web.png deleted file mode 100644 index 2d26e78f2..000000000 Binary files a/public/web.png and /dev/null differ diff --git a/public/website.png b/public/website.png index f32ad627c..7790eb9f6 100644 Binary files a/public/website.png and b/public/website.png differ diff --git a/sections/About.jsx b/sections/About.jsx deleted file mode 100644 index 5585ea3e1..000000000 --- a/sections/About.jsx +++ /dev/null @@ -1,54 +0,0 @@ -'use client'; - -import { motion } from 'framer-motion'; -import { TypingText } from '../components'; - -import styles from '../styles'; -import { fadeIn, staggerContainer } from '../utils/motion'; - -const About = () => ( -
    -
    - - - - - Eshway - {' '}is a digital agency specializing in website development, - mobile application development, SEO, and other digital marketing services. - With a team of skilled developers, designers, and marketers, - the company offers end-to-end services, from ideation and strategy development to - implementation and ongoing maintenance. The startup strives to stay up-to-date with - the latest trends and technologies in the digital space, enabling its clients to stay - ahead of the competition. - {/* - 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 About; diff --git a/sections/Caraousel.jsx b/sections/Caraousel.jsx deleted file mode 100644 index 12220ea63..000000000 --- a/sections/Caraousel.jsx +++ /dev/null @@ -1,62 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { Button } from '@mui/material'; -import Image from 'next/image'; -import { images } from '../constants/index'; - -const Carousel = () => { - const [currentSlide, setCurrentSlide] = useState(0); - - const handleNextSlide = () => { - const newSlide = currentSlide === images.length - 1 ? 0 : currentSlide + 1; - setCurrentSlide(newSlide); - }; - - return ( -
    -
    - -
    - -

    - - - - planet-09 - - - {/* stamp */} - - - - -); - -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 ( -
    - - - - {/* get-started */} - - - - Eshway Merchandise} /> -
    - {productDesc.map((feature) => ( - - ))} - {/* className="btn btn-primary bg-[#323f5d] text-blue-200 hover:text-secondary-white" */} - -
    -
    -
    -
    - ); -}; -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) => )} - {/* */} - {/*
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    -
    - double_quotes -

    content -

    - -
    -  -
    -

    Name -

    -

    Title -

    -
    -
    -
    */} -
    - -
    -
    -); - -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

    -
    */} -
    - -
    - -
    -
    - Testimonial 01 -
    -
    - -
    - Eshway Merchandise ₹ 399 -
    -
    - {/*
    -
    -
    - Testimonial 01 -
    -
    -
    - Another Eshway Official Merchandise ₹ 350 -
    -
    */} - {/*
    -
    -
    - Testimonial 01 -
    -
    -
    - Another Eshway Official Merchandise ₹ 350 -
    -
    */} - {/*
    -
    -
    - Testimonial 01 -
    -
    -
    - 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======= */} - - {/*
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    S.NoTopicComplete By
    1.Before we start30th August 2023
    2.Basic Requirements30th August 2023
    3.Introduction to HTML30th June 2023
    4.Advanced HTML2nd July 2023
    5.Task - 12nd July 2023
    6.CSS3rd July 2023
    7.Bootstrap4th July 2023
    8.Task - 26th July 2023
    9.JavaScript9th July 2023
    10.Assignment - 111th July 2023
    */} - - {/* =======ESHVISION 2.0 TABLE======= */} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */} - -
    S.NoTopicComplete ByResourceLink
    1Before we start2nd SeptemberNo AssessmentClick here
    2Basic Requirements2nd SeptemberNo AssessmentClick here
    3Introduction to HTML7th SeptemberNo Assessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    3CSS14th SeptemberAssessment{completedTwo ? (Click here) : ( - <> - handleTwoAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    4JavaScript23rd SeptemberAssessment{completedThird ? (Click here) : ( - <> - handleThirdAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    5Introduction to React JS12th OctoberAssessment{completedFourth ? (Click here) : ( - <> - handleFourthAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    1Introduction to HTMLDeadlineAssessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    1Introduction to HTMLDeadlineAssessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    1Introduction to HTMLDeadlineAssessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    1Introduction to HTMLDeadlineAssessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    1Introduction to HTMLDeadlineAssessment{completed ? (Click here) : ( - <> - handleAns(event)} InputLabelProps={{ style: { color: '#fff' } }} sx={{ color: 'white !important' }} variant="outlined" label="Enter key" /> - - - )} -
    - - - - - - ); -}; - -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) => ( - - ))} -
    -
    - - - get-started - -
    -
    -); - -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" - /> - - - map - -
    - people -
    - -
    - people -
    - -
    - people -
    -
    -
    -
    -); - -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 + + + {/* */} + + + ); +} 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 ( +
    +
    +
    +

    + {card.title} +

    +
    +
    + ); +}; + +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 ( +
    + +
    + ); +}; + +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 +

    + +
    + + {/* + Let's Talk + */} +
    +
    +
    +
    + ); +}; + +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, - }, - }, -};