diff --git a/package-lock.json b/package-lock.json index 03c2c912a..0e799efb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,8 @@ "devDependencies": { "@docusaurus/module-type-aliases": "^3.3.2", "@docusaurus/types": "^3.3.2", - "dotenv": "^16.4.5" + "dotenv": "^16.4.5", + "framer-motion": "^11.2.10" }, "engines": { "node": ">=18.0" @@ -10001,6 +10002,31 @@ "node": ">=0.10.0" } }, + "node_modules/framer-motion": { + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.10.tgz", + "integrity": "sha512-/gr3PLZUVFCc86a9MqCUboVrALscrdluzTb3yew+2/qKBU8CX6nzs918/SRBRCqaPbx0TZP10CB6yFgK2C5cYQ==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", diff --git a/package.json b/package.json index 7946d6207..926ab32dc 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,8 @@ "devDependencies": { "@docusaurus/module-type-aliases": "^3.3.2", "@docusaurus/types": "^3.3.2", - "dotenv": "^16.4.5" + "dotenv": "^16.4.5", + "framer-motion": "^11.2.10" }, "browserslist": { "production": [ diff --git a/src/components/Aboutpage/index.tsx b/src/components/Aboutpage/index.tsx index 7cfc08f16..cd6766bac 100644 --- a/src/components/Aboutpage/index.tsx +++ b/src/components/Aboutpage/index.tsx @@ -2,7 +2,7 @@ import React from "react"; import clsx from "clsx"; import Heading from "@theme/Heading"; import styles from "./styles.module.css"; - +import { motion } from "framer-motion"; const aboutImg = "/img/svg/about_me.svg"; export default function AboutUsSection() { @@ -11,21 +11,77 @@ export default function AboutUsSection() {
+ About Us -

+ + Welcome to Code Harbor Hub, your go-to destination for quality tech education. At Code Harbor Hub, we are passionate about empowering individuals with the knowledge and skills needed to thrive in the ever-evolving world of technology. -

-

+ + Our mission is to provide accessible and comprehensive educational resources to learners of all levels, from beginners to advanced professionals. Whether you're looking to kickstart your career in web development, master a new programming language, or stay updated on the latest tech trends, we've got you covered. -

-

+ + With a team of experienced instructors and industry experts, we offer a diverse range of courses and learning paths tailored to meet your specific goals and interests. Join our community today and embark on your journey towards success in the tech industry! -

+
-
+ {/* Placeholder for an about us image */} About Us -
+
diff --git a/src/components/HomePage/Header.tsx b/src/components/HomePage/Header.tsx index 78312226c..9cfbcea24 100644 --- a/src/components/HomePage/Header.tsx +++ b/src/components/HomePage/Header.tsx @@ -3,6 +3,7 @@ import React, { useEffect, useRef } from "react"; import "./header.css"; import Link from "@docusaurus/Link"; import VanillaTilt from "vanilla-tilt"; +import { motion } from "framer-motion"; /** * Renders the header component of the application. @@ -12,25 +13,58 @@ import VanillaTilt from "vanilla-tilt"; const HeaderContent = () => { return (
-

Level Up Skills with CodeHarborHub

-

+

Level Up Skills with CodeHarborHub

+ Tired of limitations? CodeHarborHub shatters them. We're the exclusive platform offering a comprehensive tech curriculum, taught by industry masters, completely free. Join our vibrant community, master in-demand skills, and launch your dream tech career. -

+
- - +
); @@ -62,7 +96,18 @@ const HeaderImage = () => { }, []); return ( -
+ ai { data-tilt ref={imgRef} /> -
+ ); }; diff --git a/src/pages/contact/index.tsx b/src/pages/contact/index.tsx index f5f94f408..65ca0076e 100644 --- a/src/pages/contact/index.tsx +++ b/src/pages/contact/index.tsx @@ -1,6 +1,7 @@ import Layout from "@theme/Layout"; import styles from "./Contact.module.css"; import React, { useState, ChangeEvent, FormEvent } from "react"; +import { motion } from "framer-motion"; interface FormValues { fullName: string; @@ -46,15 +47,47 @@ export default function Contact(): JSX.Element {
- + CONTACT US - -

+ + Let's talk about your problem. -

+
-
+
-
-
+ +
-
+
-
+

Send us a Message

@@ -157,7 +210,7 @@ export default function Contact(): JSX.Element {
- + diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 85fda35e1..fa9a0c62c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -11,6 +11,7 @@ import { featuresData, coursesData } from "../database/home"; import Header from "../components/HomePage/Header"; import Tweet from "../components/Tweet"; import Tweets, { type TweetItem } from "../data/tweets"; +import { motion } from "framer-motion"; function TweetsSection(): React.JSX.Element { const tweetColumns: TweetItem[][] = [[], [], []]; @@ -21,21 +22,44 @@ function TweetsSection(): React.JSX.Element { return (
-
+ Loved by many Users -
+
{tweetColumns.map((tweetItems, i) => ( -
+ {tweetItems.map((tweet) => ( ))} -
+ ))}
@@ -57,17 +81,63 @@ export default function Home(): React.JSX.Element {
-
+ Courses Available -
+ + + -
+ Features of {siteConfig.title} -
+ + + diff --git a/src/pages/showcase/index.tsx b/src/pages/showcase/index.tsx index 71022959c..e496d4d6d 100644 --- a/src/pages/showcase/index.tsx +++ b/src/pages/showcase/index.tsx @@ -1,4 +1,4 @@ -import React, {useState, useMemo, useEffect} from 'react'; +import React, { useState, useMemo, useEffect } from 'react'; import Layout from '@theme/Layout'; import clsx from 'clsx'; @@ -21,10 +21,10 @@ import { import ShowcaseTooltip from './_components/ShowcaseTooltip'; import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; -import Translate, {translate} from '@docusaurus/Translate'; -import {useHistory, useLocation} from '@docusaurus/router'; -import {usePluralForm} from '@docusaurus/theme-common'; - +import Translate, { translate } from '@docusaurus/Translate'; +import { useHistory, useLocation } from '@docusaurus/router'; +import { usePluralForm } from '@docusaurus/theme-common'; +import { motion } from "framer-motion"; import styles from './styles.module.css'; const TITLE = @@ -40,13 +40,13 @@ type UserState = { }; function restoreUserState(userState: UserState | null) { - const {scrollTopPosition, focusedElementId} = userState ?? { + const { scrollTopPosition, focusedElementId } = userState ?? { scrollTopPosition: 0, focusedElementId: undefined, }; // @ts-expect-error: if focusedElementId is undefined it returns null document.getElementById(focusedElementId)?.focus(); - window.scrollTo({top: scrollTopPosition}); + window.scrollTo({ top: scrollTopPosition }); } export function prepareUserState(): UserState | undefined { @@ -116,24 +116,57 @@ function useFilteredUsers() { function ShowcaseHeader() { return (
-

{TITLE}

-

{DESCRIPTION}

- {TITLE} + {DESCRIPTION} + + - - 🌟 Join the CodeHarbarHub Community - - + + + 🌟 Join the CodeHarbarHub Community + + +
); } function useSiteCountPlural() { - const {selectMessage} = usePluralForm(); + const { selectMessage } = usePluralForm(); return (sitesCount: number) => selectMessage( sitesCount, @@ -156,14 +189,47 @@ function ShowcaseFilters() {
-

+ Filters -

- {siteCountPlural(filteredUsers.length)} + + + {siteCountPlural(filteredUsers.length)} +
-
    + {TagList.map((tag, i) => { const {label, description, color} = Tags[tag]; const id = `showcase_checkbox_id_${tag}`; @@ -199,7 +265,7 @@ function ShowcaseFilters() { ); })} -
+
); } @@ -276,32 +342,86 @@ function ShowcaseCards() { styles.showcaseFavoriteHeader, )} > -

+ Our favorites -

- + + + +
- +
-

+ All sites -

- +
) : (