├── public
├── favicon.ico
├── logo192.png
├── logo512.png
├── robots.txt
├── planet
│ ├── scene.bin
│ ├── textures
│ │ ├── Clouds_baseColor.png
│ │ └── Planet_baseColor.png
│ ├── license.txt
│ └── scene.gltf
├── manifest.json
└── index.html
├── src
├── images
│ └── HeroImage.jpg
├── components
│ ├── HeroBgAnimation
│ │ ├── HeroBgAnimationStyle.js
│ │ └── index.js
│ ├── canvas
│ │ ├── Earth.jsx
│ │ └── Stars.jsx
│ ├── sections
│ │ ├── Education.jsx
│ │ ├── Experience.jsx
│ │ ├── Footer.jsx
│ │ ├── Skills.jsx
│ │ ├── Projects.jsx
│ │ ├── Contact.jsx
│ │ └── Hero.jsx
│ ├── cards
│ │ ├── ProjectCard.jsx
│ │ ├── EducationCard.jsx
│ │ └── ExperienceCard.jsx
│ └── Navbar.jsx
├── index.js
├── utils
│ ├── Themes.js
│ └── motion.js
├── index.css
├── App.js
└── data
│ └── constants.js
├── 3D Image ganerator
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── planet
│ │ ├── scene.bin
│ │ ├── textures
│ │ │ ├── Clouds_baseColor.png
│ │ │ └── Planet_baseColor.png
│ │ ├── license.txt
│ │ └── scene.gltf
│ └── index.html
├── src
│ ├── images
│ │ └── HeroImage.jpg
│ ├── components
│ │ ├── HeroBgAnimation
│ │ │ ├── HeroBgAnimationStyle.js
│ │ │ └── index.js
│ │ ├── canvas
│ │ │ ├── Earth.jsx
│ │ │ └── Stars.jsx
│ │ ├── sections
│ │ │ ├── Education.jsx
│ │ │ ├── Experience.jsx
│ │ │ ├── Footer.jsx
│ │ │ ├── Skills.jsx
│ │ │ ├── Projects.jsx
│ │ │ ├── Contact.jsx
│ │ │ └── Hero.jsx
│ │ ├── cards
│ │ │ ├── ProjectCard.jsx
│ │ │ ├── EducationCard.jsx
│ │ │ └── ExperienceCard.jsx
│ │ └── Navbar.jsx
│ ├── index.js
│ ├── utils
│ │ ├── Themes.js
│ │ └── motion.js
│ ├── index.css
│ └── App.js
└── README.md
└── README.md
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/logo512.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/planet/scene.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/planet/scene.bin
--------------------------------------------------------------------------------
/src/images/HeroImage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/src/images/HeroImage.jpg
--------------------------------------------------------------------------------
/3D Image ganerator/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/3D Image ganerator/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/favicon.ico
--------------------------------------------------------------------------------
/3D Image ganerator/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/logo192.png
--------------------------------------------------------------------------------
/3D Image ganerator/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/logo512.png
--------------------------------------------------------------------------------
/3D Image ganerator/public/planet/scene.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/planet/scene.bin
--------------------------------------------------------------------------------
/3D Image ganerator/src/images/HeroImage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/src/images/HeroImage.jpg
--------------------------------------------------------------------------------
/public/planet/textures/Clouds_baseColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/planet/textures/Clouds_baseColor.png
--------------------------------------------------------------------------------
/public/planet/textures/Planet_baseColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/public/planet/textures/Planet_baseColor.png
--------------------------------------------------------------------------------
/3D Image ganerator/public/planet/textures/Clouds_baseColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/planet/textures/Clouds_baseColor.png
--------------------------------------------------------------------------------
/3D Image ganerator/public/planet/textures/Planet_baseColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FNICKE/3D-Image-Ganetator/HEAD/3D Image ganerator/public/planet/textures/Planet_baseColor.png
--------------------------------------------------------------------------------
/src/components/HeroBgAnimation/HeroBgAnimationStyle.js:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 |
4 | export const Div = styled.div`
5 | width:600px;
6 | height: 500px;
7 | `
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/HeroBgAnimation/HeroBgAnimationStyle.js:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 |
4 | export const Div = styled.div`
5 | width:600px;
6 | height: 500px;
7 | `
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | const root = ReactDOM.createRoot(document.getElementById("root"));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | const root = ReactDOM.createRoot(document.getElementById("root"));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/src/utils/Themes.js:
--------------------------------------------------------------------------------
1 | export const darkTheme = {
2 | bg: "#090917",
3 | bgLight: "#1C1E27",
4 | primary: "#854CE6",
5 | text_primary: "#F2F3F4",
6 | text_secondary: "#b1b2b3",
7 | card: "#171721",
8 | card_light: "#191924",
9 | button: "#854CE6",
10 | white: "#FFFFFF",
11 | black: "#000000",
12 | };
13 |
14 | export const lightTheme = {
15 | bg: "#FFFFFF",
16 | bgLight: "#f0f0f0",
17 | primary: "#be1adb",
18 | text_primary: "#111111",
19 | text_secondary: "#48494a",
20 | card: "#FFFFFF",
21 | button: "#5c5b5b",
22 | };
23 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/utils/Themes.js:
--------------------------------------------------------------------------------
1 | export const darkTheme = {
2 | bg: "#090917",
3 | bgLight: "#1C1E27",
4 | primary: "#854CE6",
5 | text_primary: "#F2F3F4",
6 | text_secondary: "#b1b2b3",
7 | card: "#171721",
8 | card_light: "#191924",
9 | button: "#854CE6",
10 | white: "#FFFFFF",
11 | black: "#000000",
12 | };
13 |
14 | export const lightTheme = {
15 | bg: "#FFFFFF",
16 | bgLight: "#f0f0f0",
17 | primary: "#be1adb",
18 | text_primary: "#111111",
19 | text_secondary: "#48494a",
20 | card: "#FFFFFF",
21 | button: "#5c5b5b",
22 | };
23 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/planet/license.txt:
--------------------------------------------------------------------------------
1 | Model Information:
2 | * title: Stylized planet
3 | * source: https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70
4 | * author: cmzw (https://sketchfab.com/cmzw)
5 |
6 | Model License:
7 | * license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
8 | * requirements: Author must be credited. Commercial use is allowed.
9 |
10 | If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
11 | This work is based on "Stylized planet" (https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70) by cmzw (https://sketchfab.com/cmzw) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
--------------------------------------------------------------------------------
/3D Image ganerator/public/planet/license.txt:
--------------------------------------------------------------------------------
1 | Model Information:
2 | * title: Stylized planet
3 | * source: https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70
4 | * author: cmzw (https://sketchfab.com/cmzw)
5 |
6 | Model License:
7 | * license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
8 | * requirements: Author must be credited. Commercial use is allowed.
9 |
10 | If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
11 | This work is based on "Stylized planet" (https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70) by cmzw (https://sketchfab.com/cmzw) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap");
2 |
3 | * {
4 | box-sizing: border-box;
5 | margin: 0;
6 | padding: 0;
7 | scroll-behavior: smooth;
8 | font-family: "Poppins", sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0px !important;
13 | padding: 0;
14 | font-family: "Montserrat", sans-serif;
15 | }
16 |
17 | /* width */
18 | ::-webkit-scrollbar {
19 | width: 4px;
20 | height: 80px;
21 | }
22 |
23 | /* Track */
24 | ::-webkit-scrollbar-track {
25 | background: #222a35;
26 | }
27 |
28 | /* Handle */
29 | ::-webkit-scrollbar-thumb {
30 | background: #575c66;
31 | border-radius: 6px;
32 | }
33 |
34 | /* Handle on hover */
35 | ::-webkit-scrollbar-thumb:hover {
36 | background: #626970;
37 | }
38 |
39 | ::-webkit-backdrop-filter {
40 | blur: 3px saturate(106%);
41 | }
--------------------------------------------------------------------------------
/3D Image ganerator/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap");
2 |
3 | * {
4 | box-sizing: border-box;
5 | margin: 0;
6 | padding: 0;
7 | scroll-behavior: smooth;
8 | font-family: "Poppins", sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0px !important;
13 | padding: 0;
14 | font-family: "Montserrat", sans-serif;
15 | }
16 |
17 | /* width */
18 | ::-webkit-scrollbar {
19 | width: 4px;
20 | height: 80px;
21 | }
22 |
23 | /* Track */
24 | ::-webkit-scrollbar-track {
25 | background: #222a35;
26 | }
27 |
28 | /* Handle */
29 | ::-webkit-scrollbar-thumb {
30 | background: #575c66;
31 | border-radius: 6px;
32 | }
33 |
34 | /* Handle on hover */
35 | ::-webkit-scrollbar-thumb:hover {
36 | background: #626970;
37 | }
38 |
39 | ::-webkit-backdrop-filter {
40 | blur: 3px saturate(106%);
41 | }
--------------------------------------------------------------------------------
/src/components/canvas/Earth.jsx:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from "react";
2 | import { Canvas } from "@react-three/fiber";
3 | import { OrbitControls, Preload, useGLTF } from "@react-three/drei";
4 |
5 | const Earth = () => {
6 | const earth = useGLTF("./planet/scene.gltf");
7 | return (
8 |
9 | );
10 | };
11 |
12 | const EarthCanvas = () => {
13 | return (
14 |
37 | );
38 | };
39 |
40 | export default EarthCanvas;
41 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/canvas/Earth.jsx:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from "react";
2 | import { Canvas } from "@react-three/fiber";
3 | import { OrbitControls, Preload, useGLTF } from "@react-three/drei";
4 |
5 | const Earth = () => {
6 | const earth = useGLTF("./planet/scene.gltf");
7 | return (
8 |
9 | );
10 | };
11 |
12 | const EarthCanvas = () => {
13 | return (
14 |
37 | );
38 | };
39 |
40 | export default EarthCanvas;
41 |
--------------------------------------------------------------------------------
/src/components/canvas/Stars.jsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState, Suspense } from "react";
2 | import { Canvas, useFrame } from "@react-three/fiber";
3 | import { Points, PointMaterial, Preload } from "@react-three/drei";
4 | import * as random from "maath/random/dist/maath-random.esm";
5 | import styled from "styled-components";
6 |
7 | const StyledCanvasWrapper = styled.div`
8 | width: 100%;
9 | height: auto;
10 | position: absolute;
11 | inset: 0;
12 | `;
13 |
14 | const Stars = (props) => {
15 | const ref = useRef();
16 | const [sphere] = useState(() =>
17 | random.inSphere(new Float32Array(5000), { radius: 1.2 })
18 | );
19 |
20 | useFrame((state, delta) => {
21 | ref.current.rotation.x -= delta / 10;
22 | ref.current.rotation.y -= delta / 15;
23 | });
24 |
25 | return (
26 |
27 |
28 |
35 |
36 |
37 | );
38 | };
39 |
40 | const StyledStarsCanvas = () => {
41 | return (
42 |
43 |
49 |
50 | );
51 | };
52 |
53 | export default StyledStarsCanvas;
54 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/canvas/Stars.jsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState, Suspense } from "react";
2 | import { Canvas, useFrame } from "@react-three/fiber";
3 | import { Points, PointMaterial, Preload } from "@react-three/drei";
4 | import * as random from "maath/random/dist/maath-random.esm";
5 | import styled from "styled-components";
6 |
7 | const StyledCanvasWrapper = styled.div`
8 | width: 100%;
9 | height: auto;
10 | position: absolute;
11 | inset: 0;
12 | `;
13 |
14 | const Stars = (props) => {
15 | const ref = useRef();
16 | const [sphere] = useState(() =>
17 | random.inSphere(new Float32Array(5000), { radius: 1.2 })
18 | );
19 |
20 | useFrame((state, delta) => {
21 | ref.current.rotation.x -= delta / 10;
22 | ref.current.rotation.y -= delta / 15;
23 | });
24 |
25 | return (
26 |
27 |
28 |
35 |
36 |
37 | );
38 | };
39 |
40 | const StyledStarsCanvas = () => {
41 | return (
42 |
43 |
49 |
50 | );
51 | };
52 |
53 | export default StyledStarsCanvas;
54 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/3D Image ganerator/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import styled, { ThemeProvider } from "styled-components";
2 | import { darkTheme } from "./utils/Themes";
3 | import Navbar from "./components/Navbar";
4 | import { BrowserRouter } from "react-router-dom";
5 | import Hero from "./components/sections/Hero";
6 | import Skills from "./components/sections/Skills";
7 | import Experience from "./components/sections/Experience";
8 | import Education from "./components/sections/Education";
9 | import StartCanvas from "./components/canvas/Stars";
10 | import Projects from "./components/sections/Projects";
11 | import Contact from "./components/sections/Contact";
12 | import Footer from "./components/sections/Footer";
13 |
14 | const Body = styled.div`
15 | background-color: ${({ theme }) => theme.bg};
16 | width: 100%;
17 | overflow-x: hidden;
18 | position: relative;
19 | `;
20 |
21 | const Wrapper = styled.div`
22 | padding-bottom: 100px;
23 | background: linear-gradient(
24 | 38.73deg,
25 | rgba(204, 0, 187, 0.15) 0%,
26 | rgba(201, 32, 184, 0) 50%
27 | ),
28 | linear-gradient(
29 | 141.27deg,
30 | rgba(0, 70, 209, 0) 50%,
31 | rgba(0, 70, 209, 0.15) 100%
32 | );
33 | width: 100%;
34 | clip-path: polygon(0 0, 100% 0, 100% 100%, 30% 98%, 0 100%);
35 | `;
36 |
37 | function App() {
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | );
61 | }
62 |
63 | export default App;
64 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/App.js:
--------------------------------------------------------------------------------
1 | import styled, { ThemeProvider } from "styled-components";
2 | import { darkTheme } from "./utils/Themes";
3 | import Navbar from "./components/Navbar";
4 | import { BrowserRouter } from "react-router-dom";
5 | import Hero from "./components/sections/Hero";
6 | import Skills from "./components/sections/Skills";
7 | import Experience from "./components/sections/Experience";
8 | import Education from "./components/sections/Education";
9 | import StartCanvas from "./components/canvas/Stars";
10 | import Projects from "./components/sections/Projects";
11 | import Contact from "./components/sections/Contact";
12 | import Footer from "./components/sections/Footer";
13 |
14 | const Body = styled.div`
15 | background-color: ${({ theme }) => theme.bg};
16 | width: 100%;
17 | overflow-x: hidden;
18 | position: relative;
19 | `;
20 |
21 | const Wrapper = styled.div`
22 | padding-bottom: 100px;
23 | background: linear-gradient(
24 | 38.73deg,
25 | rgba(204, 0, 187, 0.15) 0%,
26 | rgba(201, 32, 184, 0) 50%
27 | ),
28 | linear-gradient(
29 | 141.27deg,
30 | rgba(0, 70, 209, 0) 50%,
31 | rgba(0, 70, 209, 0.15) 100%
32 | );
33 | width: 100%;
34 | clip-path: polygon(0 0, 100% 0, 100% 100%, 30% 98%, 0 100%);
35 | `;
36 |
37 | function App() {
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | );
61 | }
62 |
63 | export default App;
64 |
--------------------------------------------------------------------------------
/src/utils/motion.js:
--------------------------------------------------------------------------------
1 | export const transition = { type: "spring", duration: 0.8 };
2 |
3 | export const slideAnimation = (direction) => {
4 | return {
5 | initial: {
6 | x: direction === "left" ? -100 : direction === "right" ? 100 : 0,
7 | y: direction === "up" ? 100 : direction === "down" ? -100 : 0,
8 | opacity: 0,
9 | transition: { ...transition, delay: 0.5 },
10 | },
11 | animate: {
12 | x: 0,
13 | y: 0,
14 | opacity: 1,
15 | transition: { ...transition, delay: 0 },
16 | },
17 | exit: {
18 | x: direction === "left" ? -100 : direction === "right" ? 100 : 0,
19 | y: direction === "up" ? 100 : direction === "down" ? -100 : 0,
20 | transition: { ...transition, delay: 0 },
21 | },
22 | };
23 | };
24 |
25 | export const fadeAnimation = {
26 | initial: {
27 | opacity: 0,
28 | transition: { ...transition, delay: 0.5 },
29 | },
30 | animate: {
31 | opacity: 1,
32 | transition: { ...transition, delay: 0 },
33 | },
34 | exit: {
35 | opacity: 0,
36 | transition: { ...transition, delay: 0 },
37 | },
38 | };
39 |
40 | export const headTextAnimation = {
41 | initial: { x: 100, opacity: 0 },
42 | animate: { x: 0, opacity: 1 },
43 | transition: {
44 | type: "spring",
45 | damping: 5,
46 | stiffness: 40,
47 | restDelta: 0.001,
48 | duration: 0.3,
49 | },
50 | };
51 |
52 | export const headContentAnimation = {
53 | initial: { y: 100, opacity: 0 },
54 | animate: { y: 0, opacity: 1 },
55 | transition: {
56 | type: "spring",
57 | damping: 7,
58 | stiffness: 30,
59 | restDelta: 0.001,
60 | duration: 0.6,
61 | delay: 0.2,
62 | delayChildren: 0.2,
63 | },
64 | };
65 |
66 | export const headContainerAnimation = {
67 | initial: { x: -100, opacity: 0, transition: { ...transition, delay: 0.5 } },
68 | animate: { x: 0, opacity: 1, transition: { ...transition, delay: 0 } },
69 | exit: { x: -100, opacity: 0, transition: { ...transition, delay: 0 } },
70 | };
71 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/utils/motion.js:
--------------------------------------------------------------------------------
1 | export const transition = { type: "spring", duration: 0.8 };
2 |
3 | export const slideAnimation = (direction) => {
4 | return {
5 | initial: {
6 | x: direction === "left" ? -100 : direction === "right" ? 100 : 0,
7 | y: direction === "up" ? 100 : direction === "down" ? -100 : 0,
8 | opacity: 0,
9 | transition: { ...transition, delay: 0.5 },
10 | },
11 | animate: {
12 | x: 0,
13 | y: 0,
14 | opacity: 1,
15 | transition: { ...transition, delay: 0 },
16 | },
17 | exit: {
18 | x: direction === "left" ? -100 : direction === "right" ? 100 : 0,
19 | y: direction === "up" ? 100 : direction === "down" ? -100 : 0,
20 | transition: { ...transition, delay: 0 },
21 | },
22 | };
23 | };
24 |
25 | export const fadeAnimation = {
26 | initial: {
27 | opacity: 0,
28 | transition: { ...transition, delay: 0.5 },
29 | },
30 | animate: {
31 | opacity: 1,
32 | transition: { ...transition, delay: 0 },
33 | },
34 | exit: {
35 | opacity: 0,
36 | transition: { ...transition, delay: 0 },
37 | },
38 | };
39 |
40 | export const headTextAnimation = {
41 | initial: { x: 100, opacity: 0 },
42 | animate: { x: 0, opacity: 1 },
43 | transition: {
44 | type: "spring",
45 | damping: 5,
46 | stiffness: 40,
47 | restDelta: 0.001,
48 | duration: 0.3,
49 | },
50 | };
51 |
52 | export const headContentAnimation = {
53 | initial: { y: 100, opacity: 0 },
54 | animate: { y: 0, opacity: 1 },
55 | transition: {
56 | type: "spring",
57 | damping: 7,
58 | stiffness: 30,
59 | restDelta: 0.001,
60 | duration: 0.6,
61 | delay: 0.2,
62 | delayChildren: 0.2,
63 | },
64 | };
65 |
66 | export const headContainerAnimation = {
67 | initial: { x: -100, opacity: 0, transition: { ...transition, delay: 0.5 } },
68 | animate: { x: 0, opacity: 1, transition: { ...transition, delay: 0 } },
69 | exit: { x: -100, opacity: 0, transition: { ...transition, delay: 0 } },
70 | };
71 |
--------------------------------------------------------------------------------
/src/components/sections/Education.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimeline } from "react-vertical-timeline-component";
3 | import "react-vertical-timeline-component/style.min.css";
4 | import styled from "styled-components";
5 | import { education } from "../../data/constants";
6 | import EducationCard from "../cards/EducationCard";
7 | import EarthCanvas from "../canvas/Earth";
8 |
9 | const Container = styled.div`
10 | display: flex;
11 | flex-direction: column;
12 | justify-contnet: center;
13 | position: rlative;
14 | z-index: 1;
15 | align-items: center;
16 | `;
17 |
18 | const Wrapper = styled.div`
19 | position: relative;
20 | display: flex;
21 | justify-content: space-between;
22 | align-items: center;
23 | flex-direction: column;
24 | width: 100%;
25 | max-width: 1100px;
26 | gap: 12px;
27 | @media (max-width: 960px) {
28 | flex-direction: column;
29 | }
30 | `;
31 | const Title = styled.div`
32 | font-size: 52px;
33 | text-align: center;
34 | font-weight: 600;
35 | margin-top: 20px;
36 | color: ${({ theme }) => theme.text_primary};
37 | @media (max-width: 768px) {
38 | margin-top: 12px;
39 | font-size: 32px;
40 | }
41 | `;
42 | const Desc = styled.div`
43 | font-size: 18px;
44 | text-align: center;
45 | font-weight: 600;
46 | color: ${({ theme }) => theme.text_secondary};
47 | @media (max-width: 768px) {
48 | font-size: 16px;
49 | }
50 | `;
51 |
52 | const Education = () => {
53 | return (
54 |
55 |
56 | Education
57 |
62 | My education has been a journey of self-discovery and growth. My
63 | educational details are as follows.
64 |
65 |
66 |
67 | {education.map((education, index) => (
68 |
69 | ))}
70 |
71 |
72 |
73 |
74 | );
75 | };
76 |
77 | export default Education;
78 |
--------------------------------------------------------------------------------
/src/components/sections/Experience.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimeline } from "react-vertical-timeline-component";
3 | import "react-vertical-timeline-component/style.min.css";
4 | import styled from "styled-components";
5 | import { experiences } from "../../data/constants";
6 | import ExperienceCard from "../cards/ExperienceCard";
7 |
8 | const Container = styled.div`
9 | display: flex;
10 | flex-direction: column;
11 | justify-contnet: center;
12 | margin-top: 50px;
13 | position: rlative;
14 | z-index: 1;
15 | align-items: center;
16 | `;
17 |
18 | const Wrapper = styled.div`
19 | position: relative;
20 | display: flex;
21 | justify-content: space-between;
22 | align-items: center;
23 | flex-direction: column;
24 | width: 100%;
25 | max-width: 1100px;
26 | gap: 12px;
27 | @media (max-width: 960px) {
28 | flex-direction: column;
29 | }
30 | `;
31 | const Title = styled.div`
32 | font-size: 52px;
33 | text-align: center;
34 | font-weight: 600;
35 | margin-top: 20px;
36 | color: ${({ theme }) => theme.text_primary};
37 | @media (max-width: 768px) {
38 | margin-top: 12px;
39 | font-size: 32px;
40 | }
41 | `;
42 | const Desc = styled.div`
43 | font-size: 18px;
44 | text-align: center;
45 | font-weight: 600;
46 | color: ${({ theme }) => theme.text_secondary};
47 | @media (max-width: 768px) {
48 | font-size: 16px;
49 | }
50 | `;
51 |
52 | const Experience = () => {
53 | return (
54 |
55 |
56 | Experience
57 |
62 | My work experience as a software engineer and working on different
63 | companies and projects.
64 |
65 |
66 |
67 | {experiences.map((experience, index) => (
68 |
72 | ))}
73 |
74 |
75 |
76 | );
77 | };
78 |
79 | export default Experience;
80 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Education.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimeline } from "react-vertical-timeline-component";
3 | import "react-vertical-timeline-component/style.min.css";
4 | import styled from "styled-components";
5 | import { education } from "../../data/constants";
6 | import EducationCard from "../cards/EducationCard";
7 | import EarthCanvas from "../canvas/Earth";
8 |
9 | const Container = styled.div`
10 | display: flex;
11 | flex-direction: column;
12 | justify-contnet: center;
13 | position: rlative;
14 | z-index: 1;
15 | align-items: center;
16 | `;
17 |
18 | const Wrapper = styled.div`
19 | position: relative;
20 | display: flex;
21 | justify-content: space-between;
22 | align-items: center;
23 | flex-direction: column;
24 | width: 100%;
25 | max-width: 1100px;
26 | gap: 12px;
27 | @media (max-width: 960px) {
28 | flex-direction: column;
29 | }
30 | `;
31 | const Title = styled.div`
32 | font-size: 52px;
33 | text-align: center;
34 | font-weight: 600;
35 | margin-top: 20px;
36 | color: ${({ theme }) => theme.text_primary};
37 | @media (max-width: 768px) {
38 | margin-top: 12px;
39 | font-size: 32px;
40 | }
41 | `;
42 | const Desc = styled.div`
43 | font-size: 18px;
44 | text-align: center;
45 | font-weight: 600;
46 | color: ${({ theme }) => theme.text_secondary};
47 | @media (max-width: 768px) {
48 | font-size: 16px;
49 | }
50 | `;
51 |
52 | const Education = () => {
53 | return (
54 |
55 |
56 | Education
57 |
62 | My education has been a journey of self-discovery and growth. My
63 | educational details are as follows.
64 |
65 |
66 |
67 | {education.map((education, index) => (
68 |
69 | ))}
70 |
71 |
72 |
73 |
74 | );
75 | };
76 |
77 | export default Education;
78 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Experience.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimeline } from "react-vertical-timeline-component";
3 | import "react-vertical-timeline-component/style.min.css";
4 | import styled from "styled-components";
5 | import { experiences } from "../../data/constants";
6 | import ExperienceCard from "../cards/ExperienceCard";
7 |
8 | const Container = styled.div`
9 | display: flex;
10 | flex-direction: column;
11 | justify-contnet: center;
12 | margin-top: 50px;
13 | position: rlative;
14 | z-index: 1;
15 | align-items: center;
16 | `;
17 |
18 | const Wrapper = styled.div`
19 | position: relative;
20 | display: flex;
21 | justify-content: space-between;
22 | align-items: center;
23 | flex-direction: column;
24 | width: 100%;
25 | max-width: 1100px;
26 | gap: 12px;
27 | @media (max-width: 960px) {
28 | flex-direction: column;
29 | }
30 | `;
31 | const Title = styled.div`
32 | font-size: 52px;
33 | text-align: center;
34 | font-weight: 600;
35 | margin-top: 20px;
36 | color: ${({ theme }) => theme.text_primary};
37 | @media (max-width: 768px) {
38 | margin-top: 12px;
39 | font-size: 32px;
40 | }
41 | `;
42 | const Desc = styled.div`
43 | font-size: 18px;
44 | text-align: center;
45 | font-weight: 600;
46 | color: ${({ theme }) => theme.text_secondary};
47 | @media (max-width: 768px) {
48 | font-size: 16px;
49 | }
50 | `;
51 |
52 | const Experience = () => {
53 | return (
54 |
55 |
56 | Experience
57 |
62 | My work experience as a software engineer and working on different
63 | companies and projects.
64 |
65 |
66 |
67 | {experiences.map((experience, index) => (
68 |
72 | ))}
73 |
74 |
75 |
76 | );
77 | };
78 |
79 | export default Experience;
80 |
--------------------------------------------------------------------------------
/src/components/cards/ProjectCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 |
4 | const Card = styled.div`
5 | width: 330px;
6 | height: 490px;
7 | background-color: ${({ theme }) => theme.card};
8 | cursor: pointer;
9 | border-radius: 10px;
10 | box-shadow: 0 0 12px 4px rgba(0, 0, 0, 0.4);
11 | overflow: hidden;
12 | padding: 26px 20px;
13 | display: flex;
14 | flex-direction: column;
15 | gap: 14px;
16 | transition: all 0.5s ease-in-out;
17 | &:hover {
18 | transform: translateY(-10px);
19 | box-shadow: 0 0 50px 4px rgba(0, 0, 0, 0.6);
20 | filter: brightness(1.1);
21 | }
22 | `;
23 | const Image = styled.img`
24 | width: 100%;
25 | height: 180px;
26 | background-color: ${({ theme }) => theme.white};
27 | border-radius: 10px;
28 | box-shadow: 0 0 16px 2px rgba(0, 0, 0, 0.3);
29 | `;
30 | const Tags = styled.div`
31 | width: 100%;
32 | display: flex;
33 | align-items: center;
34 | flex-wrap: wrap;
35 | gap: 8px;
36 | margin-top: 4px;
37 | `;
38 | const Details = styled.div`
39 | width: 100%;
40 | display: flex;
41 | flex-direction: column;
42 | gap: 0px;
43 | padding: 0px 2px;
44 | `;
45 | const Title = styled.div`
46 | font-size: 20px;
47 | font-weight: 600;
48 | color: ${({ theme }) => theme.text_secondary};
49 | overflow: hidden;
50 | display: -webkit-box;
51 | max-width: 100%;
52 | -webkit-line-clamp: 2;
53 | -webkit-box-orient: vertical;
54 | overflow: hidden;
55 | text-overflow: ellipsis;
56 | `;
57 | const Date = styled.div`
58 | font-size: 12px;
59 | margin-left: 2px;
60 | font-weight: 400;
61 | color: ${({ theme }) => theme.text_secondary + 80};
62 | @media only screen and (max-width: 768px) {
63 | font-size: 10px;
64 | }
65 | `;
66 | const Description = styled.div`
67 | font-weight: 400;
68 | color: ${({ theme }) => theme.text_secondary + 99};
69 | overflow: hidden;
70 | margin-top: 8px;
71 | display: -webkit-box;
72 | max-width: 100%;
73 | -webkit-line-clamp: 3;
74 | -webkit-box-orient: vertical;
75 | text-overflow: ellipsis;
76 | `;
77 | const Members = styled.div`
78 | display: flex;
79 | align-items: center;
80 | padding-left: 10px;
81 | `;
82 | const Avatar = styled.img`
83 | width: 38px;
84 | height: 38px;
85 | border-radius: 50%;
86 | margin-left: -10px;
87 | background-color: ${({ theme }) => theme.white};
88 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
89 | border: 3px solid ${({ theme }) => theme.card};
90 | `;
91 | const Button = styled.a`
92 | color: ${({ theme }) => theme.primary};
93 | text-decoration: none;
94 | font-weight: 600;
95 | text-align: center;
96 | `;
97 |
98 | const ProjectCard = ({ project }) => {
99 | return (
100 |
101 |
102 |
103 |
104 | {project.title}
105 | {project.date}
106 | {project.description}
107 |
108 |
109 | {project.member?.map((member) => (
110 |
111 | ))}
112 |
113 |
116 |
117 | );
118 | };
119 |
120 | export default ProjectCard;
121 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/cards/ProjectCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 |
4 | const Card = styled.div`
5 | width: 330px;
6 | height: 490px;
7 | background-color: ${({ theme }) => theme.card};
8 | cursor: pointer;
9 | border-radius: 10px;
10 | box-shadow: 0 0 12px 4px rgba(0, 0, 0, 0.4);
11 | overflow: hidden;
12 | padding: 26px 20px;
13 | display: flex;
14 | flex-direction: column;
15 | gap: 14px;
16 | transition: all 0.5s ease-in-out;
17 | &:hover {
18 | transform: translateY(-10px);
19 | box-shadow: 0 0 50px 4px rgba(0, 0, 0, 0.6);
20 | filter: brightness(1.1);
21 | }
22 | `;
23 | const Image = styled.img`
24 | width: 100%;
25 | height: 180px;
26 | background-color: ${({ theme }) => theme.white};
27 | border-radius: 10px;
28 | box-shadow: 0 0 16px 2px rgba(0, 0, 0, 0.3);
29 | `;
30 | const Tags = styled.div`
31 | width: 100%;
32 | display: flex;
33 | align-items: center;
34 | flex-wrap: wrap;
35 | gap: 8px;
36 | margin-top: 4px;
37 | `;
38 | const Details = styled.div`
39 | width: 100%;
40 | display: flex;
41 | flex-direction: column;
42 | gap: 0px;
43 | padding: 0px 2px;
44 | `;
45 | const Title = styled.div`
46 | font-size: 20px;
47 | font-weight: 600;
48 | color: ${({ theme }) => theme.text_secondary};
49 | overflow: hidden;
50 | display: -webkit-box;
51 | max-width: 100%;
52 | -webkit-line-clamp: 2;
53 | -webkit-box-orient: vertical;
54 | overflow: hidden;
55 | text-overflow: ellipsis;
56 | `;
57 | const Date = styled.div`
58 | font-size: 12px;
59 | margin-left: 2px;
60 | font-weight: 400;
61 | color: ${({ theme }) => theme.text_secondary + 80};
62 | @media only screen and (max-width: 768px) {
63 | font-size: 10px;
64 | }
65 | `;
66 | const Description = styled.div`
67 | font-weight: 400;
68 | color: ${({ theme }) => theme.text_secondary + 99};
69 | overflow: hidden;
70 | margin-top: 8px;
71 | display: -webkit-box;
72 | max-width: 100%;
73 | -webkit-line-clamp: 3;
74 | -webkit-box-orient: vertical;
75 | text-overflow: ellipsis;
76 | `;
77 | const Members = styled.div`
78 | display: flex;
79 | align-items: center;
80 | padding-left: 10px;
81 | `;
82 | const Avatar = styled.img`
83 | width: 38px;
84 | height: 38px;
85 | border-radius: 50%;
86 | margin-left: -10px;
87 | background-color: ${({ theme }) => theme.white};
88 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
89 | border: 3px solid ${({ theme }) => theme.card};
90 | `;
91 | const Button = styled.a`
92 | color: ${({ theme }) => theme.primary};
93 | text-decoration: none;
94 | font-weight: 600;
95 | text-align: center;
96 | `;
97 |
98 | const ProjectCard = ({ project }) => {
99 | return (
100 |
101 |
102 |
103 |
104 | {project.title}
105 | {project.date}
106 | {project.description}
107 |
108 |
109 | {project.member?.map((member) => (
110 |
111 | ))}
112 |
113 |
116 |
117 | );
118 | };
119 |
120 | export default ProjectCard;
121 |
--------------------------------------------------------------------------------
/src/components/sections/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { Bio } from "../../data/constants";
4 | import {
5 | FacebookRounded,
6 | Instagram,
7 | LinkedIn,
8 | Twitter,
9 | } from "@mui/icons-material";
10 |
11 | const FooterContainer = styled.div`
12 | width: 100%;
13 | padding: 2rem 0;
14 | display: flex;
15 | justify-content: center;
16 | z-index: 10;
17 | position: relative;
18 | `;
19 | const FooterWrapper = styled.div`
20 | width: 100%;
21 | max-width: 1200px;
22 | display: flex;
23 | flex-direction: column;
24 | gap: 14px;
25 | align-items: center;
26 | padding: 1rem;
27 | color: ${({ theme }) => theme.text_primary};
28 | `;
29 | const Logo = styled.div`
30 | font-weight: 600;
31 | font-size: 20px;
32 | color: ${({ theme }) => theme.primary};
33 | `;
34 | const Nav = styled.ul`
35 | width: 100%;
36 | max-width: 800px;
37 | margin-top: 0.5rem;
38 | display: flex;
39 | flex-direction: row;
40 | gap: 2rem;
41 | justify-content: center;
42 | @media (max-width: 768px) {
43 | flex-wrap: wrap;
44 | gap: 1rem;
45 | justify-content: center;
46 | text-align: center;
47 | font-size: 12px;
48 | }
49 | `;
50 | const NavLink = styled.a`
51 | color: ${({ theme }) => theme.text_primary};
52 | text-decoration: none;
53 | font-size: 1.2rem;
54 | transition: color 0.2s ease-in-out;
55 | &:hover {
56 | color: ${({ theme }) => theme.primary};
57 | }
58 | @media (max-width: 768px) {
59 | font-size: 1rem;
60 | }
61 | `;
62 | const SocialMediaIcons = styled.div`
63 | display: flex;
64 | margin-top: 1rem;
65 | `;
66 | const SocialMediaIcon = styled.a`
67 | display: inline-block;
68 | margin: 0 1rem;
69 | font-size: 1.5rem;
70 | color: ${({ theme }) => theme.text_primary};
71 | transition: color 0.2s ease-in-out;
72 | &:hover {
73 | color: ${({ theme }) => theme.primary};
74 | }
75 | `;
76 | const Copyright = styled.p`
77 | margin-top: 1.5rem;
78 | font-size: 0.9rem;
79 | color: ${({ theme }) => theme.soft2};
80 | text-align: center;
81 | `;
82 |
83 | const Footer = () => {
84 | return (
85 |
86 |
87 | Rishav Chanda
88 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | © 2024 Rishav Chanda. All rights reserved.
110 |
111 |
112 | );
113 | };
114 |
115 | export default Footer;
116 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { Bio } from "../../data/constants";
4 | import {
5 | FacebookRounded,
6 | Instagram,
7 | LinkedIn,
8 | Twitter,
9 | } from "@mui/icons-material";
10 |
11 | const FooterContainer = styled.div`
12 | width: 100%;
13 | padding: 2rem 0;
14 | display: flex;
15 | justify-content: center;
16 | z-index: 10;
17 | position: relative;
18 | `;
19 | const FooterWrapper = styled.div`
20 | width: 100%;
21 | max-width: 1200px;
22 | display: flex;
23 | flex-direction: column;
24 | gap: 14px;
25 | align-items: center;
26 | padding: 1rem;
27 | color: ${({ theme }) => theme.text_primary};
28 | `;
29 | const Logo = styled.div`
30 | font-weight: 600;
31 | font-size: 20px;
32 | color: ${({ theme }) => theme.primary};
33 | `;
34 | const Nav = styled.ul`
35 | width: 100%;
36 | max-width: 800px;
37 | margin-top: 0.5rem;
38 | display: flex;
39 | flex-direction: row;
40 | gap: 2rem;
41 | justify-content: center;
42 | @media (max-width: 768px) {
43 | flex-wrap: wrap;
44 | gap: 1rem;
45 | justify-content: center;
46 | text-align: center;
47 | font-size: 12px;
48 | }
49 | `;
50 | const NavLink = styled.a`
51 | color: ${({ theme }) => theme.text_primary};
52 | text-decoration: none;
53 | font-size: 1.2rem;
54 | transition: color 0.2s ease-in-out;
55 | &:hover {
56 | color: ${({ theme }) => theme.primary};
57 | }
58 | @media (max-width: 768px) {
59 | font-size: 1rem;
60 | }
61 | `;
62 | const SocialMediaIcons = styled.div`
63 | display: flex;
64 | margin-top: 1rem;
65 | `;
66 | const SocialMediaIcon = styled.a`
67 | display: inline-block;
68 | margin: 0 1rem;
69 | font-size: 1.5rem;
70 | color: ${({ theme }) => theme.text_primary};
71 | transition: color 0.2s ease-in-out;
72 | &:hover {
73 | color: ${({ theme }) => theme.primary};
74 | }
75 | `;
76 | const Copyright = styled.p`
77 | margin-top: 1.5rem;
78 | font-size: 0.9rem;
79 | color: ${({ theme }) => theme.soft2};
80 | text-align: center;
81 | `;
82 |
83 | const Footer = () => {
84 | return (
85 |
86 |
87 | Rishav Chanda
88 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | © 2024 Rishav Chanda. All rights reserved.
110 |
111 |
112 | );
113 | };
114 |
115 | export default Footer;
116 |
--------------------------------------------------------------------------------
/src/components/cards/EducationCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimelineElement } from "react-vertical-timeline-component";
3 | import styled from "styled-components";
4 |
5 | const Top = styled.div`
6 | width: 100%;
7 | display: flex;
8 | max-width: 100%;
9 | gap: 12px;
10 | `;
11 | const Image = styled.img`
12 | height: 50px;
13 | border-radius: 10px;
14 | margin-top: 4px;
15 | @media only screen and (max-width: 768px) {
16 | height: 40px;
17 | }
18 | `;
19 | const Body = styled.div`
20 | width: 100%;
21 | display: flex;
22 | flex-direction: column;
23 | `;
24 | const School = styled.div`
25 | font-size: 18px;
26 | font-weight: 600px;
27 | color: ${({ theme }) => theme.text_primary + 99};
28 | @media only screen and (max-width: 768px) {
29 | font-size: 14px;
30 | }
31 | `;
32 | const Degree = styled.div`
33 | font-size: 14px;
34 | font-weight: 500px;
35 | color: ${({ theme }) => theme.text_secondary + 99};
36 | @media only screen and (max-width: 768px) {
37 | font-size: 12px;
38 | }
39 | `;
40 | const Date = styled.div`
41 | font-size: 12px;
42 | font-weight: 400px;
43 | color: ${({ theme }) => theme.text_secondary + 80};
44 |
45 | @media only screen and (max-width: 768px) {
46 | font-size: 10px;
47 | }
48 | `;
49 |
50 | const Description = styled.div`
51 | width: 100%;
52 | font-size: 15px;
53 | font-weight: 400;
54 | color: ${({ theme }) => theme.text_primary + 99};
55 | margin-bottom: 10px;
56 | @media only screen and (max-width: 768px) {
57 | font-size: 12px;
58 | }
59 | `;
60 |
61 | const Grade = styled.div`
62 | font-size: 14px;
63 | font-weight: 500;
64 | color: ${({ theme }) => theme.text_secondary + 99};
65 | @media only screen and (max-width: 768px) {
66 | font-size: 12px;
67 | }
68 | `;
69 | const Span = styled.div`
70 | display: -webkit-box;
71 | max-width: 100%;
72 | `;
73 |
74 | const EducationCard = ({ education }) => {
75 | return (
76 |
85 | }
86 | contentStyle={{
87 | display: "flex",
88 | flexDirection: "column",
89 | gap: "12px",
90 | background: "#1d1836",
91 | color: "#fff",
92 | boxShadow: "rgba(23, 92, 230, 0.15) 0px 4px 24px",
93 | backgroundColor: "rgba(17, 25, 40, 0.83)",
94 | border: "1px solid rgba(255, 255, 255, 0.125)",
95 | borderRadius: "6px",
96 | }}
97 | contentArrowStyle={{
98 | borderRight: "7px solid rgba(255, 255, 255, 0.3)",
99 | }}
100 | date={education?.date}
101 | >
102 |
103 |
104 |
105 | {education?.school}
106 | {education?.degree}
107 | {education?.date}
108 |
109 |
110 |
111 | Grade :
112 | {education?.grade}
113 |
114 |
115 | {education?.desc && {education.desc}}
116 |
117 |
118 | );
119 | };
120 |
121 | export default EducationCard;
122 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/cards/EducationCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimelineElement } from "react-vertical-timeline-component";
3 | import styled from "styled-components";
4 |
5 | const Top = styled.div`
6 | width: 100%;
7 | display: flex;
8 | max-width: 100%;
9 | gap: 12px;
10 | `;
11 | const Image = styled.img`
12 | height: 50px;
13 | border-radius: 10px;
14 | margin-top: 4px;
15 | @media only screen and (max-width: 768px) {
16 | height: 40px;
17 | }
18 | `;
19 | const Body = styled.div`
20 | width: 100%;
21 | display: flex;
22 | flex-direction: column;
23 | `;
24 | const School = styled.div`
25 | font-size: 18px;
26 | font-weight: 600px;
27 | color: ${({ theme }) => theme.text_primary + 99};
28 | @media only screen and (max-width: 768px) {
29 | font-size: 14px;
30 | }
31 | `;
32 | const Degree = styled.div`
33 | font-size: 14px;
34 | font-weight: 500px;
35 | color: ${({ theme }) => theme.text_secondary + 99};
36 | @media only screen and (max-width: 768px) {
37 | font-size: 12px;
38 | }
39 | `;
40 | const Date = styled.div`
41 | font-size: 12px;
42 | font-weight: 400px;
43 | color: ${({ theme }) => theme.text_secondary + 80};
44 |
45 | @media only screen and (max-width: 768px) {
46 | font-size: 10px;
47 | }
48 | `;
49 |
50 | const Description = styled.div`
51 | width: 100%;
52 | font-size: 15px;
53 | font-weight: 400;
54 | color: ${({ theme }) => theme.text_primary + 99};
55 | margin-bottom: 10px;
56 | @media only screen and (max-width: 768px) {
57 | font-size: 12px;
58 | }
59 | `;
60 |
61 | const Grade = styled.div`
62 | font-size: 14px;
63 | font-weight: 500;
64 | color: ${({ theme }) => theme.text_secondary + 99};
65 | @media only screen and (max-width: 768px) {
66 | font-size: 12px;
67 | }
68 | `;
69 | const Span = styled.div`
70 | display: -webkit-box;
71 | max-width: 100%;
72 | `;
73 |
74 | const EducationCard = ({ education }) => {
75 | return (
76 |
85 | }
86 | contentStyle={{
87 | display: "flex",
88 | flexDirection: "column",
89 | gap: "12px",
90 | background: "#1d1836",
91 | color: "#fff",
92 | boxShadow: "rgba(23, 92, 230, 0.15) 0px 4px 24px",
93 | backgroundColor: "rgba(17, 25, 40, 0.83)",
94 | border: "1px solid rgba(255, 255, 255, 0.125)",
95 | borderRadius: "6px",
96 | }}
97 | contentArrowStyle={{
98 | borderRight: "7px solid rgba(255, 255, 255, 0.3)",
99 | }}
100 | date={education?.date}
101 | >
102 |
103 |
104 |
105 | {education?.school}
106 | {education?.degree}
107 | {education?.date}
108 |
109 |
110 |
111 | Grade :
112 | {education?.grade}
113 |
114 |
115 | {education?.desc && {education.desc}}
116 |
117 |
118 | );
119 | };
120 |
121 | export default EducationCard;
122 |
--------------------------------------------------------------------------------
/3D Image ganerator/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
13 |
14 | The page will reload when you make changes.\
15 | You may also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!**
35 |
36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
39 |
40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/src/components/cards/ExperienceCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimelineElement } from "react-vertical-timeline-component";
3 | import styled from "styled-components";
4 |
5 | const Top = styled.div`
6 | width: 100%;
7 | display: flex;
8 | max-width: 100%;
9 | gap: 12px;
10 | `;
11 | const Image = styled.img`
12 | height: 50px;
13 | border-radius: 10px;
14 | margin-top: 4px;
15 | @media only screen and (max-width: 768px) {
16 | height: 40px;
17 | }
18 | `;
19 | const Body = styled.div`
20 | width: 100%;
21 | display: flex;
22 | flex-direction: column;
23 | `;
24 | const Role = styled.div`
25 | font-size: 18px;
26 | font-weight: 600px;
27 | color: ${({ theme }) => theme.text_primary + 99};
28 | @media only screen and (max-width: 768px) {
29 | font-size: 14px;
30 | }
31 | `;
32 | const Company = styled.div`
33 | font-size: 14px;
34 | font-weight: 500px;
35 | color: ${({ theme }) => theme.text_secondary + 99};
36 | @media only screen and (max-width: 768px) {
37 | font-size: 12px;
38 | }
39 | `;
40 | const Date = styled.div`
41 | font-size: 12px;
42 | font-weight: 400px;
43 | color: ${({ theme }) => theme.text_secondary + 80};
44 |
45 | @media only screen and (max-width: 768px) {
46 | font-size: 10px;
47 | }
48 | `;
49 |
50 | const Description = styled.div`
51 | width: 100%;
52 | font-size: 15px;
53 | font-weight: 400;
54 | color: ${({ theme }) => theme.text_primary + 99};
55 | margin-bottom: 10px;
56 | @media only screen and (max-width: 768px) {
57 | font-size: 12px;
58 | }
59 | `;
60 | const Skills = styled.div`
61 | width: 100%;
62 | display: flex;
63 | gap: 12px;
64 | margin-top: -10px;
65 | `;
66 | const Span = styled.div`
67 | display: -webkit-box;
68 | max-width: 100%;
69 | `;
70 |
71 | const Skill = styled.div`
72 | font-size: 15px;
73 | font-weight: 400;
74 | color: ${({ theme }) => theme.text_primary + 99};
75 | @media only screen and (max-width: 768px) {
76 | font-size: 12px;
77 | }
78 | `;
79 |
80 | const ItemWrapper = styled.div`
81 | display: flex;
82 | flex-wrap: wrap;
83 | gap: 8px;
84 | `;
85 |
86 | const ExperienceCard = ({ experience }) => {
87 | return (
88 |
97 | }
98 | contentStyle={{
99 | display: "flex",
100 | flexDirection: "column",
101 | gap: "12px",
102 | background: "#1d1836",
103 | color: "#fff",
104 | boxShadow: "rgba(23, 92, 230, 0.15) 0px 4px 24px",
105 | backgroundColor: "rgba(17, 25, 40, 0.83)",
106 | border: "1px solid rgba(255, 255, 255, 0.125)",
107 | borderRadius: "6px",
108 | }}
109 | contentArrowStyle={{
110 | borderRight: "7px solid rgba(255, 255, 255, 0.3)",
111 | }}
112 | date={experience?.date}
113 | >
114 |
115 |
116 |
117 | {experience?.role}
118 | {experience?.company}
119 | {experience?.date}
120 |
121 |
122 |
123 | {experience?.desc && {experience.desc}}
124 | {experience?.skills && (
125 | <>
126 |
127 |
128 | Skills
129 |
130 | {experience?.skills?.map((skill, index) => (
131 | • {skill}
132 | ))}
133 |
134 |
135 | >
136 | )}
137 |
138 |
139 | );
140 | };
141 |
142 | export default ExperienceCard;
143 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/cards/ExperienceCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { VerticalTimelineElement } from "react-vertical-timeline-component";
3 | import styled from "styled-components";
4 |
5 | const Top = styled.div`
6 | width: 100%;
7 | display: flex;
8 | max-width: 100%;
9 | gap: 12px;
10 | `;
11 | const Image = styled.img`
12 | height: 50px;
13 | border-radius: 10px;
14 | margin-top: 4px;
15 | @media only screen and (max-width: 768px) {
16 | height: 40px;
17 | }
18 | `;
19 | const Body = styled.div`
20 | width: 100%;
21 | display: flex;
22 | flex-direction: column;
23 | `;
24 | const Role = styled.div`
25 | font-size: 18px;
26 | font-weight: 600px;
27 | color: ${({ theme }) => theme.text_primary + 99};
28 | @media only screen and (max-width: 768px) {
29 | font-size: 14px;
30 | }
31 | `;
32 | const Company = styled.div`
33 | font-size: 14px;
34 | font-weight: 500px;
35 | color: ${({ theme }) => theme.text_secondary + 99};
36 | @media only screen and (max-width: 768px) {
37 | font-size: 12px;
38 | }
39 | `;
40 | const Date = styled.div`
41 | font-size: 12px;
42 | font-weight: 400px;
43 | color: ${({ theme }) => theme.text_secondary + 80};
44 |
45 | @media only screen and (max-width: 768px) {
46 | font-size: 10px;
47 | }
48 | `;
49 |
50 | const Description = styled.div`
51 | width: 100%;
52 | font-size: 15px;
53 | font-weight: 400;
54 | color: ${({ theme }) => theme.text_primary + 99};
55 | margin-bottom: 10px;
56 | @media only screen and (max-width: 768px) {
57 | font-size: 12px;
58 | }
59 | `;
60 | const Skills = styled.div`
61 | width: 100%;
62 | display: flex;
63 | gap: 12px;
64 | margin-top: -10px;
65 | `;
66 | const Span = styled.div`
67 | display: -webkit-box;
68 | max-width: 100%;
69 | `;
70 |
71 | const Skill = styled.div`
72 | font-size: 15px;
73 | font-weight: 400;
74 | color: ${({ theme }) => theme.text_primary + 99};
75 | @media only screen and (max-width: 768px) {
76 | font-size: 12px;
77 | }
78 | `;
79 |
80 | const ItemWrapper = styled.div`
81 | display: flex;
82 | flex-wrap: wrap;
83 | gap: 8px;
84 | `;
85 |
86 | const ExperienceCard = ({ experience }) => {
87 | return (
88 |
97 | }
98 | contentStyle={{
99 | display: "flex",
100 | flexDirection: "column",
101 | gap: "12px",
102 | background: "#1d1836",
103 | color: "#fff",
104 | boxShadow: "rgba(23, 92, 230, 0.15) 0px 4px 24px",
105 | backgroundColor: "rgba(17, 25, 40, 0.83)",
106 | border: "1px solid rgba(255, 255, 255, 0.125)",
107 | borderRadius: "6px",
108 | }}
109 | contentArrowStyle={{
110 | borderRight: "7px solid rgba(255, 255, 255, 0.3)",
111 | }}
112 | date={experience?.date}
113 | >
114 |
115 |
116 |
117 | {experience?.role}
118 | {experience?.company}
119 | {experience?.date}
120 |
121 |
122 |
123 | {experience?.desc && {experience.desc}}
124 | {experience?.skills && (
125 | <>
126 |
127 |
128 | Skills
129 |
130 | {experience?.skills?.map((skill, index) => (
131 | • {skill}
132 | ))}
133 |
134 |
135 | >
136 | )}
137 |
138 |
139 | );
140 | };
141 |
142 | export default ExperienceCard;
143 |
--------------------------------------------------------------------------------
/src/components/sections/Skills.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { skills } from "../../data/constants";
4 | import { Tilt } from "react-tilt";
5 |
6 | const Container = styled.div`
7 | display: flex;
8 | flex-direction: column;
9 | justify-contnet: center;
10 | position: rlative;
11 | z-index: 1;
12 | align-items: center;
13 | `;
14 |
15 | const Wrapper = styled.div`
16 | position: relative;
17 | display: flex;
18 | justify-content: space-between;
19 | align-items: center;
20 | flex-direction: column;
21 | width: 100%;
22 | max-width: 1100px;
23 | gap: 12px;
24 | @media (max-width: 960px) {
25 | flex-direction: column;
26 | }
27 | `;
28 | const Title = styled.div`
29 | font-size: 52px;
30 | text-align: center;
31 | font-weight: 600;
32 | margin-top: 20px;
33 | color: ${({ theme }) => theme.text_primary};
34 | @media (max-width: 768px) {
35 | margin-top: 12px;
36 | font-size: 32px;
37 | }
38 | `;
39 | const Desc = styled.div`
40 | font-size: 18px;
41 | text-align: center;
42 | font-weight: 600;
43 | color: ${({ theme }) => theme.text_secondary};
44 | @media (max-width: 768px) {
45 | font-size: 16px;
46 | }
47 | `;
48 |
49 | const SkillsContainer = styled.div`
50 | width: 100%;
51 | display: flex;
52 | flex-wrap: wrap;
53 | margin-top: 20px;
54 | gap: 50px;
55 | justify-content: center;
56 | `;
57 |
58 | const Skill = styled.div`
59 | width: 100%;
60 | max-width: 500px;
61 | background-color: rgba(17, 25, 40, 0.83);
62 | border: 1px solid rgba(255, 255, 255, 0.125);
63 | box-shadow: rgba(23, 92, 230, 0.15) 0px 4px 24px;
64 | border-radius: 16px;
65 | padding: 18px 36px;
66 | @media (max-width: 768px) {
67 | max-width: 400px;
68 | padding: 10px 36px;
69 | }
70 |
71 | @media (max-width: 500px) {
72 | max-width: 330px;
73 | padding: 10px 36px;
74 | }
75 | `;
76 |
77 | const SkillTitle = styled.div`
78 | font-size: 28px;
79 | font-weight: 600;
80 | margin-bottom: 20px;
81 | text-align: center;
82 | color: ${({ theme }) => theme.text_secondary};
83 | `;
84 |
85 | const SkillList = styled.div`
86 | display: flex;
87 | justify-content: center;
88 | flex-wrap: wrap;
89 | gap: 12px;
90 | margin-bottom: 20px;
91 | `;
92 | const SkillItem = styled.div`
93 | font-size: 16px;
94 | font-weight: 400;
95 | color: ${({ theme }) => theme.text_primary + 80};
96 | border: 1px solid ${({ theme }) => theme.text_primary + 80};
97 | border-radius: 12px;
98 | padding: 12px 16px;
99 | display: flex;
100 | align-items: center;
101 | justify-content: center;
102 | gap: 8px;
103 |
104 | @media (max-width: 768px) {
105 | font-size: 14px;
106 | padding: 8px 12px;
107 | }
108 | @media (max-width: 500px) {
109 | font-size: 14px;
110 | padding: 6px 12px;
111 | }
112 | `;
113 | const SkillImage = styled.img`
114 | width: 24px;
115 | height: 24px;
116 | `;
117 |
118 | const Skills = () => {
119 | return (
120 |
121 |
122 | Skills
123 |
128 | Here are some of my skills on which I have been working on for the
129 | past 3 years.
130 |
131 |
132 |
133 | {skills.map((skill, index) => (
134 |
135 |
136 | {skill.title}
137 |
138 | {skill.skills.map((item, index_x) => (
139 |
140 |
141 | {item.name}
142 |
143 | ))}
144 |
145 |
146 |
147 | ))}
148 |
149 |
150 |
151 | );
152 | };
153 |
154 | export default Skills;
155 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Skills.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { skills } from "../../data/constants";
4 | import { Tilt } from "react-tilt";
5 |
6 | const Container = styled.div`
7 | display: flex;
8 | flex-direction: column;
9 | justify-contnet: center;
10 | position: rlative;
11 | z-index: 1;
12 | align-items: center;
13 | `;
14 |
15 | const Wrapper = styled.div`
16 | position: relative;
17 | display: flex;
18 | justify-content: space-between;
19 | align-items: center;
20 | flex-direction: column;
21 | width: 100%;
22 | max-width: 1100px;
23 | gap: 12px;
24 | @media (max-width: 960px) {
25 | flex-direction: column;
26 | }
27 | `;
28 | const Title = styled.div`
29 | font-size: 52px;
30 | text-align: center;
31 | font-weight: 600;
32 | margin-top: 20px;
33 | color: ${({ theme }) => theme.text_primary};
34 | @media (max-width: 768px) {
35 | margin-top: 12px;
36 | font-size: 32px;
37 | }
38 | `;
39 | const Desc = styled.div`
40 | font-size: 18px;
41 | text-align: center;
42 | font-weight: 600;
43 | color: ${({ theme }) => theme.text_secondary};
44 | @media (max-width: 768px) {
45 | font-size: 16px;
46 | }
47 | `;
48 |
49 | const SkillsContainer = styled.div`
50 | width: 100%;
51 | display: flex;
52 | flex-wrap: wrap;
53 | margin-top: 20px;
54 | gap: 50px;
55 | justify-content: center;
56 | `;
57 |
58 | const Skill = styled.div`
59 | width: 100%;
60 | max-width: 500px;
61 | background-color: rgba(17, 25, 40, 0.83);
62 | border: 1px solid rgba(255, 255, 255, 0.125);
63 | box-shadow: rgba(23, 92, 230, 0.15) 0px 4px 24px;
64 | border-radius: 16px;
65 | padding: 18px 36px;
66 | @media (max-width: 768px) {
67 | max-width: 400px;
68 | padding: 10px 36px;
69 | }
70 |
71 | @media (max-width: 500px) {
72 | max-width: 330px;
73 | padding: 10px 36px;
74 | }
75 | `;
76 |
77 | const SkillTitle = styled.div`
78 | font-size: 28px;
79 | font-weight: 600;
80 | margin-bottom: 20px;
81 | text-align: center;
82 | color: ${({ theme }) => theme.text_secondary};
83 | `;
84 |
85 | const SkillList = styled.div`
86 | display: flex;
87 | justify-content: center;
88 | flex-wrap: wrap;
89 | gap: 12px;
90 | margin-bottom: 20px;
91 | `;
92 | const SkillItem = styled.div`
93 | font-size: 16px;
94 | font-weight: 400;
95 | color: ${({ theme }) => theme.text_primary + 80};
96 | border: 1px solid ${({ theme }) => theme.text_primary + 80};
97 | border-radius: 12px;
98 | padding: 12px 16px;
99 | display: flex;
100 | align-items: center;
101 | justify-content: center;
102 | gap: 8px;
103 |
104 | @media (max-width: 768px) {
105 | font-size: 14px;
106 | padding: 8px 12px;
107 | }
108 | @media (max-width: 500px) {
109 | font-size: 14px;
110 | padding: 6px 12px;
111 | }
112 | `;
113 | const SkillImage = styled.img`
114 | width: 24px;
115 | height: 24px;
116 | `;
117 |
118 | const Skills = () => {
119 | return (
120 |
121 |
122 | Skills
123 |
128 | Here are some of my skills on which I have been working on for the
129 | past 3 years.
130 |
131 |
132 |
133 | {skills.map((skill, index) => (
134 |
135 |
136 | {skill.title}
137 |
138 | {skill.skills.map((item, index_x) => (
139 |
140 |
141 | {item.name}
142 |
143 | ))}
144 |
145 |
146 |
147 | ))}
148 |
149 |
150 |
151 | );
152 | };
153 |
154 | export default Skills;
155 |
--------------------------------------------------------------------------------
/src/components/sections/Projects.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import styled from "styled-components";
3 | import { projects } from "../../data/constants";
4 | import ProjectCard from "../cards/ProjectCard";
5 |
6 | const Container = styled.div`
7 | display: flex;
8 | flex-direction: column;
9 | justify-contnet: center;
10 | margin-top: 50px;
11 | padding: 0px 16px;
12 | position: rlative;
13 | z-index: 1;
14 | align-items: center;
15 | `;
16 |
17 | const Wrapper = styled.div`
18 | position: relative;
19 | display: flex;
20 | justify-content: space-between;
21 | align-items: center;
22 | flex-direction: column;
23 | width: 100%;
24 | max-width: 1100px;
25 | gap: 12px;
26 | @media (max-width: 960px) {
27 | flex-direction: column;
28 | }
29 | `;
30 | const Title = styled.div`
31 | font-size: 52px;
32 | text-align: center;
33 | font-weight: 600;
34 | margin-top: 20px;
35 | color: ${({ theme }) => theme.text_primary};
36 | @media (max-width: 768px) {
37 | margin-top: 12px;
38 | font-size: 32px;
39 | }
40 | `;
41 | const Desc = styled.div`
42 | font-size: 18px;
43 | text-align: center;
44 | font-weight: 600;
45 | color: ${({ theme }) => theme.text_secondary};
46 | @media (max-width: 768px) {
47 | font-size: 16px;
48 | }
49 | `;
50 |
51 | const ToggleButtonGroup = styled.div`
52 | display: flex;
53 | border: 1.5px solid ${({ theme }) => theme.primary};
54 | color: ${({ theme }) => theme.primary};
55 | font-size: 16px;
56 | border-radius: 12px;
57 | font-weight 500;
58 | margin: 22px 0;
59 | @media (max-width: 768px){
60 | font-size: 12px;
61 | }
62 | `;
63 | const ToggleButton = styled.div`
64 | padding: 8px 18px;
65 | border-radius: 6px;
66 | cursor: pointer;
67 | &:hover {
68 | background: ${({ theme }) => theme.primary + 20};
69 | }
70 | @media (max-width: 768px) {
71 | padding: 6px 8px;
72 | border-radius: 4px;
73 | }
74 | ${({ active, theme }) =>
75 | active &&
76 | `
77 | background: ${theme.primary + 20};
78 | `}
79 | `;
80 | const Divider = styled.div`
81 | width: 1.5px;
82 | background: ${({ theme }) => theme.primary};
83 | `;
84 |
85 | const CardContainer = styled.div`
86 | display: flex;
87 | justify-content: center;
88 | align-items: center;
89 | gap: 28px;
90 | flex-wrap: wrap;
91 | `;
92 |
93 | const Projects = () => {
94 | const [toggle, setToggle] = useState("all");
95 | return (
96 |
97 |
98 | Projects
99 |
104 | I have worked on a wide range of projects. From web apps to android
105 | apps. Here are some of my projects.
106 |
107 |
108 |
109 | setToggle("all")}
112 | >
113 | ALL
114 |
115 |
116 | setToggle("web app")}
119 | >
120 | WEB APP"S
121 |
122 |
123 | setToggle("android app")}
126 | >
127 | ANDROID APP'S
128 |
129 |
130 | setToggle("machine learning")}
133 | >
134 | MACHINE LEARNING
135 |
136 |
137 |
138 |
139 | {toggle === "all" &&
140 | projects.map((project) => )}
141 | {projects
142 | .filter((item) => item.category === toggle)
143 | .map((project) => (
144 |
145 | ))}
146 |
147 |
148 |
149 | );
150 | };
151 |
152 | export default Projects;
153 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Projects.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import styled from "styled-components";
3 | import { projects } from "../../data/constants";
4 | import ProjectCard from "../cards/ProjectCard";
5 |
6 | const Container = styled.div`
7 | display: flex;
8 | flex-direction: column;
9 | justify-contnet: center;
10 | margin-top: 50px;
11 | padding: 0px 16px;
12 | position: rlative;
13 | z-index: 1;
14 | align-items: center;
15 | `;
16 |
17 | const Wrapper = styled.div`
18 | position: relative;
19 | display: flex;
20 | justify-content: space-between;
21 | align-items: center;
22 | flex-direction: column;
23 | width: 100%;
24 | max-width: 1100px;
25 | gap: 12px;
26 | @media (max-width: 960px) {
27 | flex-direction: column;
28 | }
29 | `;
30 | const Title = styled.div`
31 | font-size: 52px;
32 | text-align: center;
33 | font-weight: 600;
34 | margin-top: 20px;
35 | color: ${({ theme }) => theme.text_primary};
36 | @media (max-width: 768px) {
37 | margin-top: 12px;
38 | font-size: 32px;
39 | }
40 | `;
41 | const Desc = styled.div`
42 | font-size: 18px;
43 | text-align: center;
44 | font-weight: 600;
45 | color: ${({ theme }) => theme.text_secondary};
46 | @media (max-width: 768px) {
47 | font-size: 16px;
48 | }
49 | `;
50 |
51 | const ToggleButtonGroup = styled.div`
52 | display: flex;
53 | border: 1.5px solid ${({ theme }) => theme.primary};
54 | color: ${({ theme }) => theme.primary};
55 | font-size: 16px;
56 | border-radius: 12px;
57 | font-weight 500;
58 | margin: 22px 0;
59 | @media (max-width: 768px){
60 | font-size: 12px;
61 | }
62 | `;
63 | const ToggleButton = styled.div`
64 | padding: 8px 18px;
65 | border-radius: 6px;
66 | cursor: pointer;
67 | &:hover {
68 | background: ${({ theme }) => theme.primary + 20};
69 | }
70 | @media (max-width: 768px) {
71 | padding: 6px 8px;
72 | border-radius: 4px;
73 | }
74 | ${({ active, theme }) =>
75 | active &&
76 | `
77 | background: ${theme.primary + 20};
78 | `}
79 | `;
80 | const Divider = styled.div`
81 | width: 1.5px;
82 | background: ${({ theme }) => theme.primary};
83 | `;
84 |
85 | const CardContainer = styled.div`
86 | display: flex;
87 | justify-content: center;
88 | align-items: center;
89 | gap: 28px;
90 | flex-wrap: wrap;
91 | `;
92 |
93 | const Projects = () => {
94 | const [toggle, setToggle] = useState("all");
95 | return (
96 |
97 |
98 | Projects
99 |
104 | I have worked on a wide range of projects. From web apps to android
105 | apps. Here are some of my projects.
106 |
107 |
108 |
109 | setToggle("all")}
112 | >
113 | ALL
114 |
115 |
116 | setToggle("web app")}
119 | >
120 | WEB APP"S
121 |
122 |
123 | setToggle("android app")}
126 | >
127 | ANDROID APP'S
128 |
129 |
130 | setToggle("machine learning")}
133 | >
134 | MACHINE LEARNING
135 |
136 |
137 |
138 |
139 | {toggle === "all" &&
140 | projects.map((project) => )}
141 | {projects
142 | .filter((item) => item.category === toggle)
143 | .map((project) => (
144 |
145 | ))}
146 |
147 |
148 |
149 | );
150 | };
151 |
152 | export default Projects;
153 |
--------------------------------------------------------------------------------
/src/components/sections/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from "react";
2 | import styled from "styled-components";
3 | import emailjs from "@emailjs/browser";
4 |
5 | const Container = styled.div`
6 | display: flex;
7 | flex-direction: column;
8 | justify-contnet: center;
9 | position: rlative;
10 | z-index: 1;
11 | align-items: center;
12 | `;
13 |
14 | const Wrapper = styled.div`
15 | position: relative;
16 | display: flex;
17 | justify-content: space-between;
18 | align-items: center;
19 | flex-direction: column;
20 | width: 100%;
21 | max-width: 1100px;
22 | gap: 12px;
23 | @media (max-width: 960px) {
24 | flex-direction: column;
25 | }
26 | `;
27 | const Title = styled.div`
28 | font-size: 52px;
29 | text-align: center;
30 | font-weight: 600;
31 | margin-top: 20px;
32 | color: ${({ theme }) => theme.text_primary};
33 | @media (max-width: 768px) {
34 | margin-top: 12px;
35 | font-size: 32px;
36 | }
37 | `;
38 | const Desc = styled.div`
39 | font-size: 18px;
40 | text-align: center;
41 | font-weight: 600;
42 | color: ${({ theme }) => theme.text_secondary};
43 | @media (max-width: 768px) {
44 | font-size: 16px;
45 | }
46 | `;
47 |
48 | const ContactForm = styled.div`
49 | width: 95%;
50 | max-width: 600px;
51 | display: flex;
52 | flex-direction: column;
53 | background-color: rgba(17, 25, 40, 0.83);
54 | border: 1px solid rgba(255, 255, 255, 0.125);
55 | padding: 32px;
56 | border-radius: 12px;
57 | box-shadow: rgba(23, 92, 230, 0.1) 0px 4px 24px;
58 | margin-top: 28px;
59 | gap: 12px;
60 | `;
61 | const ContactTitle = styled.div`
62 | font-size: 28px;
63 | margin-bottom: 6px;
64 | font-weight: 600;
65 | color: ${({ theme }) => theme.text_primary};
66 | `;
67 | const ContactInput = styled.input`
68 | flex: 1;
69 | background-color: transparent;
70 | border: 1px solid ${({ theme }) => theme.text_secondary + 50};
71 | outline: none;
72 | font-size: 18px;
73 | color: ${({ theme }) => theme.text_primary};
74 | border-radius: 12px;
75 | padding: 12px 16px;
76 | &:focus {
77 | border: 1px solid ${({ theme }) => theme.primary};
78 | }
79 | `;
80 | const ContactInputMessage = styled.textarea`
81 | flex: 1;
82 | background-color: transparent;
83 | border: 1px solid ${({ theme }) => theme.text_secondary + 50};
84 | outline: none;
85 | font-size: 18px;
86 | color: ${({ theme }) => theme.text_primary};
87 | border-radius: 12px;
88 | padding: 12px 16px;
89 | &:focus {
90 | border: 1px solid ${({ theme }) => theme.primary};
91 | }
92 | `;
93 | const ContactButton = styled.input`
94 | width: 100%;
95 | text-decoration: none;
96 | text-align: center;
97 | background: hsla(271, 100%, 50%, 1);
98 | padding: 13px 16px;
99 | margin-top: 2px;
100 | border-radius: 12px;
101 | border: none;
102 | color: ${({ theme }) => theme.text_primary};
103 | font-size: 18px;
104 | font-weight: 600;
105 | `;
106 |
107 | const Contact = () => {
108 | const form = useRef();
109 | const handelSubmit = (e) => {
110 | e.preventDefault();
111 | emailjs
112 | .sendForm(
113 | "service_tox7kqs",
114 | "template_nv7k7mj",
115 | form.current,
116 | "SybVGsYS52j2TfLbi"
117 | )
118 | .then(
119 | (result) => {
120 | alert("Message Sent");
121 | form.current.result();
122 | },
123 | (error) => {
124 | alert(error);
125 | }
126 | );
127 | };
128 | return (
129 |
130 |
131 | Contact
132 |
137 | Feel free to reach out to me for any questions or opportunities!
138 |
139 |
140 | Email Me 🚀
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 | );
150 | };
151 |
152 | export default Contact;
153 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from "react";
2 | import styled from "styled-components";
3 | import emailjs from "@emailjs/browser";
4 |
5 | const Container = styled.div`
6 | display: flex;
7 | flex-direction: column;
8 | justify-contnet: center;
9 | position: rlative;
10 | z-index: 1;
11 | align-items: center;
12 | `;
13 |
14 | const Wrapper = styled.div`
15 | position: relative;
16 | display: flex;
17 | justify-content: space-between;
18 | align-items: center;
19 | flex-direction: column;
20 | width: 100%;
21 | max-width: 1100px;
22 | gap: 12px;
23 | @media (max-width: 960px) {
24 | flex-direction: column;
25 | }
26 | `;
27 | const Title = styled.div`
28 | font-size: 52px;
29 | text-align: center;
30 | font-weight: 600;
31 | margin-top: 20px;
32 | color: ${({ theme }) => theme.text_primary};
33 | @media (max-width: 768px) {
34 | margin-top: 12px;
35 | font-size: 32px;
36 | }
37 | `;
38 | const Desc = styled.div`
39 | font-size: 18px;
40 | text-align: center;
41 | font-weight: 600;
42 | color: ${({ theme }) => theme.text_secondary};
43 | @media (max-width: 768px) {
44 | font-size: 16px;
45 | }
46 | `;
47 |
48 | const ContactForm = styled.div`
49 | width: 95%;
50 | max-width: 600px;
51 | display: flex;
52 | flex-direction: column;
53 | background-color: rgba(17, 25, 40, 0.83);
54 | border: 1px solid rgba(255, 255, 255, 0.125);
55 | padding: 32px;
56 | border-radius: 12px;
57 | box-shadow: rgba(23, 92, 230, 0.1) 0px 4px 24px;
58 | margin-top: 28px;
59 | gap: 12px;
60 | `;
61 | const ContactTitle = styled.div`
62 | font-size: 28px;
63 | margin-bottom: 6px;
64 | font-weight: 600;
65 | color: ${({ theme }) => theme.text_primary};
66 | `;
67 | const ContactInput = styled.input`
68 | flex: 1;
69 | background-color: transparent;
70 | border: 1px solid ${({ theme }) => theme.text_secondary + 50};
71 | outline: none;
72 | font-size: 18px;
73 | color: ${({ theme }) => theme.text_primary};
74 | border-radius: 12px;
75 | padding: 12px 16px;
76 | &:focus {
77 | border: 1px solid ${({ theme }) => theme.primary};
78 | }
79 | `;
80 | const ContactInputMessage = styled.textarea`
81 | flex: 1;
82 | background-color: transparent;
83 | border: 1px solid ${({ theme }) => theme.text_secondary + 50};
84 | outline: none;
85 | font-size: 18px;
86 | color: ${({ theme }) => theme.text_primary};
87 | border-radius: 12px;
88 | padding: 12px 16px;
89 | &:focus {
90 | border: 1px solid ${({ theme }) => theme.primary};
91 | }
92 | `;
93 | const ContactButton = styled.input`
94 | width: 100%;
95 | text-decoration: none;
96 | text-align: center;
97 | background: hsla(271, 100%, 50%, 1);
98 | padding: 13px 16px;
99 | margin-top: 2px;
100 | border-radius: 12px;
101 | border: none;
102 | color: ${({ theme }) => theme.text_primary};
103 | font-size: 18px;
104 | font-weight: 600;
105 | `;
106 |
107 | const Contact = () => {
108 | const form = useRef();
109 | const handelSubmit = (e) => {
110 | e.preventDefault();
111 | emailjs
112 | .sendForm(
113 | "service_tox7kqs",
114 | "template_nv7k7mj",
115 | form.current,
116 | "SybVGsYS52j2TfLbi"
117 | )
118 | .then(
119 | (result) => {
120 | alert("Message Sent");
121 | form.current.result();
122 | },
123 | (error) => {
124 | alert(error);
125 | }
126 | );
127 | };
128 | return (
129 |
130 |
131 | Contact
132 |
137 | Feel free to reach out to me for any questions or opportunities!
138 |
139 |
140 | Email Me 🚀
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 | );
150 | };
151 |
152 | export default Contact;
153 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🌟 3D Image Generator
2 |
3 | ## 🖼️ Overview
4 | Welcome to **3D Image Generator** – a powerful web application that allows users to generate stunning 3D images dynamically using modern web technologies! This project is built with **React, HTML, CSS, JavaScript**, and utilizes a **database** to store and manage generated images.
5 |
6 | This project is designed for developers, designers, and enthusiasts looking to create and manipulate 3D visuals seamlessly. It provides an intuitive UI with smooth rendering, offering various customization options to tweak and enhance 3D images in real time.
7 |
8 | ---
9 |
10 | ## 🚀 Features
11 | ✅ Generate high-quality 3D images dynamically
12 | ✅ Interactive UI with smooth animations and real-time previews
13 | ✅ Database integration for storing and retrieving images
14 | ✅ Customizable rendering settings, textures, and lighting
15 | ✅ Ability to save and share generated images
16 | ✅ User authentication for personalized image storage
17 | ✅ Responsive layout for seamless experience on all devices
18 | ✅ Secure API for fetching and managing images
19 | ✅ Cross-browser compatibility
20 |
21 | ---
22 |
23 | ## 🛠️ Tech Stack
24 | - **Frontend:**
25 | 🎨 **React** 
26 | 🌐 **HTML5** 
27 | 🎨 **CSS3** 
28 | ⚡ **JavaScript** 
29 |
30 | - **Backend:**
31 | 🖥️ **Node.js** 
32 | ⚙️ **Express.js** 
33 |
34 | - **Database:**
35 | 🗄️ **MongoDB**  / 🔥 **Firebase** 
36 |
37 | - **Other Tools:**
38 | 🎭 **Three.js** 
39 | 🔄 **Redux** 
40 | 📦 **Webpack** 
41 |
42 | ---
43 |
44 | ## 📦 Installation
45 | Follow these steps to set up the project on your local machine:
46 |
47 | ### 1️⃣ Clone the Repository
48 | ```bash
49 | git clone https://github.com/FNICKE/3d-image-generator.git
50 | cd 3d-image-generator
51 | ```
52 |
53 | ### 2️⃣ Install Dependencies
54 | ```bash
55 | npm install
56 | ```
57 |
58 | ### 3️⃣ Start the Development Server
59 | ```bash
60 | npm start
61 | ```
62 | The app should now be running at `http://localhost:3000/` 🚀
63 |
64 | ---
65 |
66 | ## 🗃️ Database Setup
67 | 1. **MongoDB** (if using MongoDB):
68 | - Install MongoDB and run: `mongod`
69 | - Create a `.env` file and set up `MONGO_URI`
70 | 2. **Firebase** (if using Firebase):
71 | - Create a Firebase project and configure the credentials
72 | - Update `firebaseConfig.js` with your API keys
73 |
74 | ---
75 |
76 | ## 💡 How to Use
77 | 1️⃣ Open the app in your browser
78 | 2️⃣ Customize your image settings (textures, lighting, rotation, depth, etc.)
79 | 3️⃣ Click **Generate** to create a 3D image
80 | 4️⃣ Preview and modify the image in real time
81 | 5️⃣ Save or share the image with others!
82 | 6️⃣ Login to store images in the database for future use
83 |
84 | ---
85 |
86 | ## 🏗️ Future Enhancements
87 | 🔹 AI-based image enhancement for better rendering
88 | 🔹 More 3D effects, materials, and filters
89 | 🔹 Drag-and-drop model importing
90 | 🔹 User authentication with OAuth
91 | 🔹 WebGL optimizations for improved performance
92 | 🔹 Mobile-friendly touch-based interactions
93 | 🔹 Integration with cloud storage for seamless access
94 |
95 | ---
96 |
97 | ## 🤝 Contributing
98 | Contributions are welcome! Feel free to fork this repo, create a new branch, and submit a pull request. Make sure to follow the contribution guidelines.
99 |
100 | ---
101 |
102 | ## 📜 License
103 | This project is licensed under the **MIT License**.
104 |
105 | ---
106 |
107 | ## 📬 Contact
108 | For queries or suggestions, reach out at: [rathodsachin0766@gmail.com](mailto:rathodsachin0766@gmail.com)
109 |
110 | ---
111 |
112 | ### 🎉 Happy Coding & Enjoy Creating 3D Images! 🚀
113 |
114 |
--------------------------------------------------------------------------------
/src/components/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import { Link as LinkR } from "react-router-dom";
3 | import styled, { useTheme } from "styled-components";
4 | import { Bio } from "../data/constants";
5 | import { MenuRounded } from "@mui/icons-material";
6 |
7 | const Nav = styled.div`
8 | background-color: ${({ theme }) => theme.bg};
9 | height: 80px;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | font-size: 1rem;
14 | position: sticky;
15 | top: 0;
16 | z-index: 10;
17 | color: white;
18 | `;
19 |
20 | const NavbarContainer = styled.div`
21 | width: 100%;
22 | max-width: 1200px;
23 | padding: 0 24px;
24 | display: flex;
25 | align-items: center;
26 | justify-content: space-between;
27 | font-size: 1rem;
28 | `;
29 | const NavLogo = styled(LinkR)`
30 | width: 80%;
31 | padding: 0 6px;
32 | font-weight: 500;
33 | font-size: 18px;
34 | text-decoration: none;
35 | color: inherit;
36 | `;
37 |
38 | const NavItems = styled.ul`
39 | width: 100%;
40 | display: flex;
41 | align-items: center;
42 | justify-content: center;
43 | gap: 32px;
44 | padding: 0 6px;
45 | list-style: none;
46 |
47 | @media screen and (max-width: 768px) {
48 | display: none;
49 | }
50 | `;
51 |
52 | const NavLink = styled.a`
53 | color: ${({ theme }) => theme.text_primary};
54 | font-weight: 500;
55 | cursor: pointer;
56 | transition: all 0.2s ease-in-out;
57 | text-decoration: none;
58 | &:hover {
59 | color: ${({ theme }) => theme.primary};
60 | }
61 | `;
62 |
63 | const ButtonContainer = styled.div`
64 | width: 80%;
65 | height: 100%;
66 | display: flex;
67 | justify-content: end;
68 | align-items: center;
69 | padding: 0 6px;
70 | @media screen and (max-width: 768px) {
71 | display: none;
72 | }
73 | `;
74 |
75 | const GithubButton = styled.a`
76 | border: 1px solid ${({ theme }) => theme.primary};
77 | color: ${({ theme }) => theme.primary};
78 | justify-content: center;
79 | display: flex;
80 | align-items: center;
81 | border-radius: 20px;
82 | cursor: pointer;
83 | padding: 10px 20px;
84 | font-size: 16px;
85 | font-weight: 500;
86 | transition: all 0.6s ease-in-out;
87 | text-decoration: none;
88 | &:hover {
89 | background: ${({ theme }) => theme.primary};
90 | color: ${({ theme }) => theme.text_primary};
91 | }
92 | `;
93 |
94 | const MobileIcon = styled.div`
95 | height: 100%;
96 | display: flex;
97 | align-items: center;
98 | color: ${({ theme }) => theme.text_primary};
99 | display: none;
100 | @media screen and (max-width: 768px) {
101 | display: block;
102 | }
103 | `;
104 |
105 | const MobileMenu = styled.ul`
106 | width: 100%;
107 | display: flex;
108 | flex-direction: column;
109 | align-items: start;
110 | gap: 16px;
111 | padding: 0 6px;
112 | list-style: none;
113 | width: 100%;
114 | padding: 12px 40px 24px 40px;
115 | background: ${({ theme }) => theme.card_light + 99};
116 | position: absolute;
117 | top: 80px;
118 | right: 0;
119 |
120 | transition: all 0.6s ease-in-out;
121 | transform: ${({ isOpen }) =>
122 | isOpen ? "translateY(0)" : "translateY(-100%)"};
123 | border-radius: 0 0 20px 20px;
124 | box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
125 | opacity: ${({ isOpen }) => (isOpen ? "100%" : "0")};
126 | z-index: ${({ isOpen }) => (isOpen ? "1000" : "-1000")};
127 | `;
128 |
129 | const Navbar = () => {
130 | const [isOpen, setIsOpen] = useState(false);
131 | const theme = useTheme();
132 | return (
133 |
186 | );
187 | };
188 |
189 | export default Navbar;
190 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import { Link as LinkR } from "react-router-dom";
3 | import styled, { useTheme } from "styled-components";
4 | import { Bio } from "../data/constants";
5 | import { MenuRounded } from "@mui/icons-material";
6 |
7 | const Nav = styled.div`
8 | background-color: ${({ theme }) => theme.bg};
9 | height: 80px;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | font-size: 1rem;
14 | position: sticky;
15 | top: 0;
16 | z-index: 10;
17 | color: white;
18 | `;
19 |
20 | const NavbarContainer = styled.div`
21 | width: 100%;
22 | max-width: 1200px;
23 | padding: 0 24px;
24 | display: flex;
25 | align-items: center;
26 | justify-content: space-between;
27 | font-size: 1rem;
28 | `;
29 | const NavLogo = styled(LinkR)`
30 | width: 80%;
31 | padding: 0 6px;
32 | font-weight: 500;
33 | font-size: 18px;
34 | text-decoration: none;
35 | color: inherit;
36 | `;
37 |
38 | const NavItems = styled.ul`
39 | width: 100%;
40 | display: flex;
41 | align-items: center;
42 | justify-content: center;
43 | gap: 32px;
44 | padding: 0 6px;
45 | list-style: none;
46 |
47 | @media screen and (max-width: 768px) {
48 | display: none;
49 | }
50 | `;
51 |
52 | const NavLink = styled.a`
53 | color: ${({ theme }) => theme.text_primary};
54 | font-weight: 500;
55 | cursor: pointer;
56 | transition: all 0.2s ease-in-out;
57 | text-decoration: none;
58 | &:hover {
59 | color: ${({ theme }) => theme.primary};
60 | }
61 | `;
62 |
63 | const ButtonContainer = styled.div`
64 | width: 80%;
65 | height: 100%;
66 | display: flex;
67 | justify-content: end;
68 | align-items: center;
69 | padding: 0 6px;
70 | @media screen and (max-width: 768px) {
71 | display: none;
72 | }
73 | `;
74 |
75 | const GithubButton = styled.a`
76 | border: 1px solid ${({ theme }) => theme.primary};
77 | color: ${({ theme }) => theme.primary};
78 | justify-content: center;
79 | display: flex;
80 | align-items: center;
81 | border-radius: 20px;
82 | cursor: pointer;
83 | padding: 10px 20px;
84 | font-size: 16px;
85 | font-weight: 500;
86 | transition: all 0.6s ease-in-out;
87 | text-decoration: none;
88 | &:hover {
89 | background: ${({ theme }) => theme.primary};
90 | color: ${({ theme }) => theme.text_primary};
91 | }
92 | `;
93 |
94 | const MobileIcon = styled.div`
95 | height: 100%;
96 | display: flex;
97 | align-items: center;
98 | color: ${({ theme }) => theme.text_primary};
99 | display: none;
100 | @media screen and (max-width: 768px) {
101 | display: block;
102 | }
103 | `;
104 |
105 | const MobileMenu = styled.ul`
106 | width: 100%;
107 | display: flex;
108 | flex-direction: column;
109 | align-items: start;
110 | gap: 16px;
111 | padding: 0 6px;
112 | list-style: none;
113 | width: 100%;
114 | padding: 12px 40px 24px 40px;
115 | background: ${({ theme }) => theme.card_light + 99};
116 | position: absolute;
117 | top: 80px;
118 | right: 0;
119 |
120 | transition: all 0.6s ease-in-out;
121 | transform: ${({ isOpen }) =>
122 | isOpen ? "translateY(0)" : "translateY(-100%)"};
123 | border-radius: 0 0 20px 20px;
124 | box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
125 | opacity: ${({ isOpen }) => (isOpen ? "100%" : "0")};
126 | z-index: ${({ isOpen }) => (isOpen ? "1000" : "-1000")};
127 | `;
128 |
129 | const Navbar = () => {
130 | const [isOpen, setIsOpen] = useState(false);
131 | const theme = useTheme();
132 | return (
133 |
186 | );
187 | };
188 |
189 | export default Navbar;
190 |
--------------------------------------------------------------------------------
/src/components/sections/Hero.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { Bio } from "../../data/constants";
4 | import Typewriter from "typewriter-effect";
5 | import HeroImg from "../../images/HeroImage.jpg";
6 | import HeroBgAnimation from "../HeroBgAnimation";
7 | import { Tilt } from "react-tilt";
8 | import { motion } from "framer-motion";
9 | import {
10 | headContainerAnimation,
11 | headContentAnimation,
12 | headTextAnimation,
13 | } from "../../utils/motion";
14 | import StarCanvas from "../canvas/Stars";
15 |
16 | const HeroContainer = styled.div`
17 | display: flex;
18 | justify-content: center;
19 | position: relative;
20 | padding: 80px 30px;
21 | z-index: 1;
22 |
23 | @media (max-width: 960px) {
24 | padding: 66px 16px;
25 | }
26 |
27 | @media (max-width: 640px) {
28 | padding: 32px 16px;
29 | }
30 |
31 | clip-path: polygon(0 0, 100% 0, 100% 100%, 70% 95%, 0 100%);
32 | `;
33 | const HeroInnerContainer = styled.div`
34 | position: relative;
35 | display: flex;
36 | justify-content: space-between;
37 | align-items: center;
38 | width: 100%;
39 | max-width: 1100px;
40 |
41 | @media (max-width: 960px) {
42 | flex-direction: column;
43 | }
44 | `;
45 | const HeroLeftContainer = styled.div`
46 | width: 100%;
47 | order: 1;
48 | @media (max-width: 960px) {
49 | order: 2;
50 | margin-bottom: 30px;
51 | display: flex;
52 | gap: 6px;
53 | flex-direction: column;
54 | align-items: center;
55 | }
56 | `;
57 | const HeroRightContainer = styled.div`
58 | width: 100%;
59 | order: 2;
60 | display: flex;
61 | justify-content: end;
62 | @media (max-width: 960px) {
63 | order: 1;
64 | display: flex;
65 | flex-direction: column;
66 | align-items: center;
67 | justify-contents: center;
68 | margin-bottom: 80px;
69 | }
70 |
71 | @media (max-width: 640px) {
72 | margin-bottom: 30px;
73 | }
74 | `;
75 |
76 | const Title = styled.div`
77 | font-weight: 700;
78 | font-size: 50px;
79 | color: ${({ theme }) => theme.text_primary};
80 | line-height: 68px;
81 |
82 | @media (max-width: 960px) {
83 | text-align: center;
84 | }
85 |
86 | @media (max-width: 960px) {
87 | font-size: 40px;
88 | line-height: 48px;
89 | margin-bottom: 8px;
90 | }
91 | `;
92 |
93 | const TextLoop = styled.div`
94 | font-weight: 600;
95 | font-size: 32px;
96 | display: flex;
97 | gap: 12px;
98 | color: ${({ theme }) => theme.text_primary};
99 | line-height: 68px;
100 |
101 | @media (max-width: 960px) {
102 | text-align: center;
103 | }
104 |
105 | @media (max-width: 960px) {
106 | font-size: 22px;
107 | line-height: 48px;
108 | margin-bottom: 16px;
109 | }
110 | `;
111 |
112 | const Span = styled.div`
113 | cursor: pointer;
114 | color: ${({ theme }) => theme.primary};
115 | `;
116 |
117 | const SubTitle = styled.div`
118 | font-size: 20px;
119 | line-height: 32px;
120 | margin-bottom: 42px;
121 | color: ${({ theme }) => theme.text_primary + 95};
122 |
123 | @media (max-width: 960px) {
124 | text-align: center;
125 | }
126 |
127 | @media (max-width: 960px) {
128 | font-size: 16px;
129 | line-height: 32px;
130 | }
131 | `;
132 |
133 | const ResumeButton = styled.a`
134 | -webkit-appearance: button;
135 | -moz-appearance: button;
136 | appearance: button;
137 | text-decoration: none;
138 |
139 | width: 95%;
140 | max-width: 300px;
141 | text-align: center;
142 | padding: 16px 0;
143 |
144 | background: hsla(271, 100%, 50%, 1);
145 | background: linear-gradient(
146 | 225deg,
147 | hsla(271, 100%, 50%, 1) 0%,
148 | hsla(294, 100%, 50%, 1) 100%
149 | );
150 | background: -moz-linear-gradient(
151 | 225deg,
152 | hsla(271, 100%, 50%, 1) 0%,
153 | hsla(294, 100%, 50%, 1) 100%
154 | );
155 | background: -webkit-linear-gradient(
156 | 225deg,
157 | hsla(271, 100%, 50%, 1) 0%,
158 | hsla(294, 100%, 50%, 1) 100%
159 | );
160 | box-shadow: 20px 20px 60px #1f2634, -20px -20px 60px #1f2634;
161 | border-radius: 50px;
162 | font-weight: 600;
163 | font-size: 20px;
164 |
165 | &:hover {
166 | transform: scale(1.05);
167 | transition: all 0.4s ease-in-out;
168 | box-shadow: 20px 20px 60px #1F2634,
169 | filter: brightness(1);
170 | }
171 |
172 |
173 | @media (max-width: 640px) {
174 | padding: 12px 0;
175 | font-size: 18px;
176 | }
177 | color: white;
178 | `;
179 |
180 | const Img = styled.img`
181 | border-radius: 50%;
182 | width: 100%;
183 | height: 100%;
184 | max-width: 400px;
185 | max-height: 400px;
186 | border: 2px solid ${({ theme }) => theme.primary};
187 |
188 | @media (max-width: 640px) {
189 | max-width: 280px;
190 | max-height: 280px;
191 | }
192 | `;
193 |
194 | const HeroBg = styled.div`
195 | position: absolute;
196 | display: flex;
197 | justify-content: end;
198 | top: 0;
199 | right: 0;
200 | bottom: 0;
201 | left: 0;
202 | width: 100%;
203 | height: 100%;
204 | max-width: 1360px;
205 | overflow: hidden;
206 | padding: 0 30px;
207 | top: 50%;
208 | left: 50%;
209 | -webkit-transform: translateX(-50%) translateY(-50%);
210 | transform: translateX(-50%) translateY(-50%);
211 |
212 | @media (max-width: 960px) {
213 | justify-content: center;
214 | padding: 0 0px;
215 | }
216 | `;
217 |
218 | const Hero = () => {
219 | return (
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 | Hi, I am
{Bio.name}
233 |
234 |
235 | I am a
236 |
237 |
244 |
245 |
246 |
247 |
248 |
249 | {Bio.description}
250 |
251 |
252 |
253 | Check Resume
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 | );
268 | };
269 |
270 | export default Hero;
271 |
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/sections/Hero.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { Bio } from "../../data/constants";
4 | import Typewriter from "typewriter-effect";
5 | import HeroImg from "../../images/HeroImage.jpg";
6 | import HeroBgAnimation from "../HeroBgAnimation";
7 | import { Tilt } from "react-tilt";
8 | import { motion } from "framer-motion";
9 | import {
10 | headContainerAnimation,
11 | headContentAnimation,
12 | headTextAnimation,
13 | } from "../../utils/motion";
14 | import StarCanvas from "../canvas/Stars";
15 |
16 | const HeroContainer = styled.div`
17 | display: flex;
18 | justify-content: center;
19 | position: relative;
20 | padding: 80px 30px;
21 | z-index: 1;
22 |
23 | @media (max-width: 960px) {
24 | padding: 66px 16px;
25 | }
26 |
27 | @media (max-width: 640px) {
28 | padding: 32px 16px;
29 | }
30 |
31 | clip-path: polygon(0 0, 100% 0, 100% 100%, 70% 95%, 0 100%);
32 | `;
33 | const HeroInnerContainer = styled.div`
34 | position: relative;
35 | display: flex;
36 | justify-content: space-between;
37 | align-items: center;
38 | width: 100%;
39 | max-width: 1100px;
40 |
41 | @media (max-width: 960px) {
42 | flex-direction: column;
43 | }
44 | `;
45 | const HeroLeftContainer = styled.div`
46 | width: 100%;
47 | order: 1;
48 | @media (max-width: 960px) {
49 | order: 2;
50 | margin-bottom: 30px;
51 | display: flex;
52 | gap: 6px;
53 | flex-direction: column;
54 | align-items: center;
55 | }
56 | `;
57 | const HeroRightContainer = styled.div`
58 | width: 100%;
59 | order: 2;
60 | display: flex;
61 | justify-content: end;
62 | @media (max-width: 960px) {
63 | order: 1;
64 | display: flex;
65 | flex-direction: column;
66 | align-items: center;
67 | justify-contents: center;
68 | margin-bottom: 80px;
69 | }
70 |
71 | @media (max-width: 640px) {
72 | margin-bottom: 30px;
73 | }
74 | `;
75 |
76 | const Title = styled.div`
77 | font-weight: 700;
78 | font-size: 50px;
79 | color: ${({ theme }) => theme.text_primary};
80 | line-height: 68px;
81 |
82 | @media (max-width: 960px) {
83 | text-align: center;
84 | }
85 |
86 | @media (max-width: 960px) {
87 | font-size: 40px;
88 | line-height: 48px;
89 | margin-bottom: 8px;
90 | }
91 | `;
92 |
93 | const TextLoop = styled.div`
94 | font-weight: 600;
95 | font-size: 32px;
96 | display: flex;
97 | gap: 12px;
98 | color: ${({ theme }) => theme.text_primary};
99 | line-height: 68px;
100 |
101 | @media (max-width: 960px) {
102 | text-align: center;
103 | }
104 |
105 | @media (max-width: 960px) {
106 | font-size: 22px;
107 | line-height: 48px;
108 | margin-bottom: 16px;
109 | }
110 | `;
111 |
112 | const Span = styled.div`
113 | cursor: pointer;
114 | color: ${({ theme }) => theme.primary};
115 | `;
116 |
117 | const SubTitle = styled.div`
118 | font-size: 20px;
119 | line-height: 32px;
120 | margin-bottom: 42px;
121 | color: ${({ theme }) => theme.text_primary + 95};
122 |
123 | @media (max-width: 960px) {
124 | text-align: center;
125 | }
126 |
127 | @media (max-width: 960px) {
128 | font-size: 16px;
129 | line-height: 32px;
130 | }
131 | `;
132 |
133 | const ResumeButton = styled.a`
134 | -webkit-appearance: button;
135 | -moz-appearance: button;
136 | appearance: button;
137 | text-decoration: none;
138 |
139 | width: 95%;
140 | max-width: 300px;
141 | text-align: center;
142 | padding: 16px 0;
143 |
144 | background: hsla(271, 100%, 50%, 1);
145 | background: linear-gradient(
146 | 225deg,
147 | hsla(271, 100%, 50%, 1) 0%,
148 | hsla(294, 100%, 50%, 1) 100%
149 | );
150 | background: -moz-linear-gradient(
151 | 225deg,
152 | hsla(271, 100%, 50%, 1) 0%,
153 | hsla(294, 100%, 50%, 1) 100%
154 | );
155 | background: -webkit-linear-gradient(
156 | 225deg,
157 | hsla(271, 100%, 50%, 1) 0%,
158 | hsla(294, 100%, 50%, 1) 100%
159 | );
160 | box-shadow: 20px 20px 60px #1f2634, -20px -20px 60px #1f2634;
161 | border-radius: 50px;
162 | font-weight: 600;
163 | font-size: 20px;
164 |
165 | &:hover {
166 | transform: scale(1.05);
167 | transition: all 0.4s ease-in-out;
168 | box-shadow: 20px 20px 60px #1F2634,
169 | filter: brightness(1);
170 | }
171 |
172 |
173 | @media (max-width: 640px) {
174 | padding: 12px 0;
175 | font-size: 18px;
176 | }
177 | color: white;
178 | `;
179 |
180 | const Img = styled.img`
181 | border-radius: 50%;
182 | width: 100%;
183 | height: 100%;
184 | max-width: 400px;
185 | max-height: 400px;
186 | border: 2px solid ${({ theme }) => theme.primary};
187 |
188 | @media (max-width: 640px) {
189 | max-width: 280px;
190 | max-height: 280px;
191 | }
192 | `;
193 |
194 | const HeroBg = styled.div`
195 | position: absolute;
196 | display: flex;
197 | justify-content: end;
198 | top: 0;
199 | right: 0;
200 | bottom: 0;
201 | left: 0;
202 | width: 100%;
203 | height: 100%;
204 | max-width: 1360px;
205 | overflow: hidden;
206 | padding: 0 30px;
207 | top: 50%;
208 | left: 50%;
209 | -webkit-transform: translateX(-50%) translateY(-50%);
210 | transform: translateX(-50%) translateY(-50%);
211 |
212 | @media (max-width: 960px) {
213 | justify-content: center;
214 | padding: 0 0px;
215 | }
216 | `;
217 |
218 | const Hero = () => {
219 | return (
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 | Hi, I am
{Bio.name}
233 |
234 |
235 | I am a
236 |
237 |
244 |
245 |
246 |
247 |
248 |
249 | {Bio.description}
250 |
251 |
252 |
253 | Check Resume
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 | );
268 | };
269 |
270 | export default Hero;
271 |
--------------------------------------------------------------------------------
/public/planet/scene.gltf:
--------------------------------------------------------------------------------
1 | {
2 | "accessors": [
3 | {
4 | "bufferView": 2,
5 | "componentType": 5126,
6 | "count": 26495,
7 | "max": [
8 | 0.8758764863014221,
9 | 0.8545469045639038,
10 | 0.8728971481323242
11 | ],
12 | "min": [
13 | -0.8763356804847717,
14 | -0.8634992837905884,
15 | -0.8758782148361206
16 | ],
17 | "type": "VEC3"
18 | },
19 | {
20 | "bufferView": 2,
21 | "byteOffset": 317940,
22 | "componentType": 5126,
23 | "count": 26495,
24 | "max": [
25 | 1.0,
26 | 0.9999911785125732,
27 | 0.9991646409034729
28 | ],
29 | "min": [
30 | -1.0,
31 | -0.9999968409538269,
32 | -0.9999611377716064
33 | ],
34 | "type": "VEC3"
35 | },
36 | {
37 | "bufferView": 1,
38 | "componentType": 5126,
39 | "count": 26495,
40 | "max": [
41 | 1.0,
42 | 1.0
43 | ],
44 | "min": [
45 | 0.0,
46 | 0.0
47 | ],
48 | "type": "VEC2"
49 | },
50 | {
51 | "bufferView": 0,
52 | "componentType": 5125,
53 | "count": 103014,
54 | "type": "SCALAR"
55 | },
56 | {
57 | "bufferView": 2,
58 | "byteOffset": 635880,
59 | "componentType": 5126,
60 | "count": 6596,
61 | "max": [
62 | 0.6551179885864258,
63 | 0.6613333821296692,
64 | 0.6618664860725403
65 | ],
66 | "min": [
67 | -0.6606217622756958,
68 | -0.6490849852561951,
69 | -0.6526646018028259
70 | ],
71 | "type": "VEC3"
72 | },
73 | {
74 | "bufferView": 2,
75 | "byteOffset": 715032,
76 | "componentType": 5126,
77 | "count": 6596,
78 | "max": [
79 | 0.999987006187439,
80 | 0.9998384118080139,
81 | 0.9999796748161316
82 | ],
83 | "min": [
84 | -0.9995425939559937,
85 | -0.999676525592804,
86 | -0.9994800686836243
87 | ],
88 | "type": "VEC3"
89 | },
90 | {
91 | "bufferView": 1,
92 | "byteOffset": 211960,
93 | "componentType": 5126,
94 | "count": 6596,
95 | "max": [
96 | 1.0,
97 | 1.0
98 | ],
99 | "min": [
100 | 0.0,
101 | 0.0
102 | ],
103 | "type": "VEC2"
104 | },
105 | {
106 | "bufferView": 0,
107 | "byteOffset": 412056,
108 | "componentType": 5125,
109 | "count": 39042,
110 | "type": "SCALAR"
111 | },
112 | {
113 | "bufferView": 3,
114 | "componentType": 5126,
115 | "count": 451,
116 | "max": [
117 | 15.0
118 | ],
119 | "min": [
120 | 0.0
121 | ],
122 | "type": "SCALAR"
123 | },
124 | {
125 | "bufferView": 5,
126 | "componentType": 5126,
127 | "count": 451,
128 | "max": [
129 | 0.20017318427562714,
130 | 0.979751706123352,
131 | 0.2001722753047943,
132 | 0.9797602891921997
133 | ],
134 | "min": [
135 | -0.018710684031248093,
136 | -0.9797568917274475,
137 | -0.1991616040468216,
138 | 0.0026621678844094276
139 | ],
140 | "type": "VEC4"
141 | },
142 | {
143 | "bufferView": 3,
144 | "byteOffset": 1804,
145 | "componentType": 5126,
146 | "count": 125,
147 | "max": [
148 | 15.0
149 | ],
150 | "min": [
151 | 0.0
152 | ],
153 | "type": "SCALAR"
154 | },
155 | {
156 | "bufferView": 4,
157 | "componentType": 5126,
158 | "count": 125,
159 | "max": [
160 | 1.0000001192092896,
161 | 1.0,
162 | 1.0000001192092896
163 | ],
164 | "min": [
165 | 0.9999998807907104,
166 | 1.0,
167 | 0.9999998807907104
168 | ],
169 | "type": "VEC3"
170 | },
171 | {
172 | "bufferView": 3,
173 | "byteOffset": 2304,
174 | "componentType": 5126,
175 | "count": 451,
176 | "max": [
177 | 15.0
178 | ],
179 | "min": [
180 | 0.0
181 | ],
182 | "type": "SCALAR"
183 | },
184 | {
185 | "bufferView": 5,
186 | "byteOffset": 7216,
187 | "componentType": 5126,
188 | "count": 451,
189 | "max": [
190 | 0.20017318427562714,
191 | 0.979751706123352,
192 | 0.2001722753047943,
193 | 0.9797602891921997
194 | ],
195 | "min": [
196 | -0.018710684031248093,
197 | -0.9797568917274475,
198 | -0.1991616040468216,
199 | 0.0026621678844094276
200 | ],
201 | "type": "VEC4"
202 | },
203 | {
204 | "bufferView": 3,
205 | "byteOffset": 4108,
206 | "componentType": 5126,
207 | "count": 125,
208 | "max": [
209 | 15.0
210 | ],
211 | "min": [
212 | 0.0
213 | ],
214 | "type": "SCALAR"
215 | },
216 | {
217 | "bufferView": 4,
218 | "byteOffset": 1500,
219 | "componentType": 5126,
220 | "count": 125,
221 | "max": [
222 | 1.0000001192092896,
223 | 1.0,
224 | 1.0000001192092896
225 | ],
226 | "min": [
227 | 0.9999998807907104,
228 | 1.0,
229 | 0.9999998807907104
230 | ],
231 | "type": "VEC3"
232 | }
233 | ],
234 | "animations": [
235 | {
236 | "channels": [
237 | {
238 | "sampler": 0,
239 | "target": {
240 | "node": 3,
241 | "path": "rotation"
242 | }
243 | },
244 | {
245 | "sampler": 1,
246 | "target": {
247 | "node": 3,
248 | "path": "scale"
249 | }
250 | },
251 | {
252 | "sampler": 2,
253 | "target": {
254 | "node": 5,
255 | "path": "rotation"
256 | }
257 | },
258 | {
259 | "sampler": 3,
260 | "target": {
261 | "node": 5,
262 | "path": "scale"
263 | }
264 | }
265 | ],
266 | "name": "Animation",
267 | "samplers": [
268 | {
269 | "input": 8,
270 | "interpolation": "LINEAR",
271 | "output": 9
272 | },
273 | {
274 | "input": 10,
275 | "interpolation": "LINEAR",
276 | "output": 11
277 | },
278 | {
279 | "input": 12,
280 | "interpolation": "LINEAR",
281 | "output": 13
282 | },
283 | {
284 | "input": 14,
285 | "interpolation": "LINEAR",
286 | "output": 15
287 | }
288 | ]
289 | }
290 | ],
291 | "asset": {
292 | "extras": {
293 | "author": "cmzw (https://sketchfab.com/cmzw)",
294 | "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
295 | "source": "https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70",
296 | "title": "Stylized planet"
297 | },
298 | "generator": "Sketchfab-14.10.0",
299 | "version": "2.0"
300 | },
301 | "bufferViews": [
302 | {
303 | "buffer": 0,
304 | "byteLength": 568224,
305 | "name": "floatBufferViews",
306 | "target": 34963
307 | },
308 | {
309 | "buffer": 0,
310 | "byteLength": 264728,
311 | "byteOffset": 568224,
312 | "byteStride": 8,
313 | "name": "floatBufferViews",
314 | "target": 34962
315 | },
316 | {
317 | "buffer": 0,
318 | "byteLength": 794184,
319 | "byteOffset": 832952,
320 | "byteStride": 12,
321 | "name": "floatBufferViews",
322 | "target": 34962
323 | },
324 | {
325 | "buffer": 0,
326 | "byteLength": 4608,
327 | "byteOffset": 1627136,
328 | "name": "floatBufferViews"
329 | },
330 | {
331 | "buffer": 0,
332 | "byteLength": 3000,
333 | "byteOffset": 1631744,
334 | "byteStride": 12,
335 | "name": "floatBufferViews"
336 | },
337 | {
338 | "buffer": 0,
339 | "byteLength": 14432,
340 | "byteOffset": 1634744,
341 | "byteStride": 16,
342 | "name": "floatBufferViews"
343 | }
344 | ],
345 | "buffers": [
346 | {
347 | "byteLength": 1649176,
348 | "uri": "scene.bin"
349 | }
350 | ],
351 | "extensionsUsed": [
352 | "KHR_materials_unlit"
353 | ],
354 | "images": [
355 | {
356 | "uri": "textures/Clouds_baseColor.png"
357 | },
358 | {
359 | "uri": "textures/Planet_baseColor.png"
360 | }
361 | ],
362 | "materials": [
363 | {
364 | "doubleSided": true,
365 | "emissiveTexture": {
366 | "index": 0
367 | },
368 | "extensions": {
369 | "KHR_materials_unlit": {}
370 | },
371 | "name": "Clouds",
372 | "pbrMetallicRoughness": {
373 | "baseColorTexture": {
374 | "index": 0
375 | },
376 | "metallicFactor": 0.0
377 | }
378 | },
379 | {
380 | "emissiveFactor": [
381 | 0.23391156271636818,
382 | 0.23391156271636818,
383 | 0.23391156271636818
384 | ],
385 | "emissiveTexture": {
386 | "index": 1
387 | },
388 | "extensions": {
389 | "KHR_materials_unlit": {}
390 | },
391 | "name": "Planet",
392 | "pbrMetallicRoughness": {
393 | "baseColorTexture": {
394 | "index": 1
395 | },
396 | "metallicFactor": 0.0
397 | }
398 | }
399 | ],
400 | "meshes": [
401 | {
402 | "name": "Object_0",
403 | "primitives": [
404 | {
405 | "attributes": {
406 | "NORMAL": 1,
407 | "POSITION": 0,
408 | "TEXCOORD_0": 2
409 | },
410 | "indices": 3,
411 | "material": 0,
412 | "mode": 4
413 | }
414 | ]
415 | },
416 | {
417 | "name": "Object_1",
418 | "primitives": [
419 | {
420 | "attributes": {
421 | "NORMAL": 5,
422 | "POSITION": 4,
423 | "TEXCOORD_0": 6
424 | },
425 | "indices": 7,
426 | "material": 1,
427 | "mode": 4
428 | }
429 | ]
430 | }
431 | ],
432 | "nodes": [
433 | {
434 | "children": [
435 | 1
436 | ],
437 | "matrix": [
438 | 0.9979661703109741,
439 | 0.06371438503265381,
440 | 0.001990502001717701,
441 | 0.0,
442 | 0.0,
443 | 0.031225780025124772,
444 | -0.9995123744010925,
445 | 0.0,
446 | -0.06374546885490417,
447 | 0.9974795579910278,
448 | 0.031162271276116593,
449 | 0.0,
450 | 0.0,
451 | 0.0,
452 | 0.0,
453 | 1.0
454 | ],
455 | "name": "Sketchfab_model"
456 | },
457 | {
458 | "children": [
459 | 2
460 | ],
461 | "name": "root"
462 | },
463 | {
464 | "children": [
465 | 3,
466 | 5
467 | ],
468 | "matrix": [
469 | 1.0,
470 | 0.0,
471 | 0.0,
472 | 0.0,
473 | 0.0,
474 | 2.220446049250313e-16,
475 | 1.0,
476 | 0.0,
477 | 0.0,
478 | -1.0,
479 | 2.220446049250313e-16,
480 | 0.0,
481 | 0.0,
482 | 0.0,
483 | 0.0,
484 | 1.0
485 | ],
486 | "name": "GLTF_SceneRootNode"
487 | },
488 | {
489 | "children": [
490 | 4
491 | ],
492 | "name": "Clouds_1"
493 | },
494 | {
495 | "mesh": 0,
496 | "name": "Object_4"
497 | },
498 | {
499 | "children": [
500 | 6
501 | ],
502 | "name": "Planet_2"
503 | },
504 | {
505 | "mesh": 1,
506 | "name": "Object_6"
507 | }
508 | ],
509 | "samplers": [
510 | {
511 | "magFilter": 9729,
512 | "minFilter": 9987,
513 | "wrapS": 10497,
514 | "wrapT": 10497
515 | }
516 | ],
517 | "scene": 0,
518 | "scenes": [
519 | {
520 | "name": "Sketchfab_Scene",
521 | "nodes": [
522 | 0
523 | ]
524 | }
525 | ],
526 | "textures": [
527 | {
528 | "sampler": 0,
529 | "source": 0
530 | },
531 | {
532 | "sampler": 0,
533 | "source": 1
534 | }
535 | ]
536 | }
537 |
--------------------------------------------------------------------------------
/3D Image ganerator/public/planet/scene.gltf:
--------------------------------------------------------------------------------
1 | {
2 | "accessors": [
3 | {
4 | "bufferView": 2,
5 | "componentType": 5126,
6 | "count": 26495,
7 | "max": [
8 | 0.8758764863014221,
9 | 0.8545469045639038,
10 | 0.8728971481323242
11 | ],
12 | "min": [
13 | -0.8763356804847717,
14 | -0.8634992837905884,
15 | -0.8758782148361206
16 | ],
17 | "type": "VEC3"
18 | },
19 | {
20 | "bufferView": 2,
21 | "byteOffset": 317940,
22 | "componentType": 5126,
23 | "count": 26495,
24 | "max": [
25 | 1.0,
26 | 0.9999911785125732,
27 | 0.9991646409034729
28 | ],
29 | "min": [
30 | -1.0,
31 | -0.9999968409538269,
32 | -0.9999611377716064
33 | ],
34 | "type": "VEC3"
35 | },
36 | {
37 | "bufferView": 1,
38 | "componentType": 5126,
39 | "count": 26495,
40 | "max": [
41 | 1.0,
42 | 1.0
43 | ],
44 | "min": [
45 | 0.0,
46 | 0.0
47 | ],
48 | "type": "VEC2"
49 | },
50 | {
51 | "bufferView": 0,
52 | "componentType": 5125,
53 | "count": 103014,
54 | "type": "SCALAR"
55 | },
56 | {
57 | "bufferView": 2,
58 | "byteOffset": 635880,
59 | "componentType": 5126,
60 | "count": 6596,
61 | "max": [
62 | 0.6551179885864258,
63 | 0.6613333821296692,
64 | 0.6618664860725403
65 | ],
66 | "min": [
67 | -0.6606217622756958,
68 | -0.6490849852561951,
69 | -0.6526646018028259
70 | ],
71 | "type": "VEC3"
72 | },
73 | {
74 | "bufferView": 2,
75 | "byteOffset": 715032,
76 | "componentType": 5126,
77 | "count": 6596,
78 | "max": [
79 | 0.999987006187439,
80 | 0.9998384118080139,
81 | 0.9999796748161316
82 | ],
83 | "min": [
84 | -0.9995425939559937,
85 | -0.999676525592804,
86 | -0.9994800686836243
87 | ],
88 | "type": "VEC3"
89 | },
90 | {
91 | "bufferView": 1,
92 | "byteOffset": 211960,
93 | "componentType": 5126,
94 | "count": 6596,
95 | "max": [
96 | 1.0,
97 | 1.0
98 | ],
99 | "min": [
100 | 0.0,
101 | 0.0
102 | ],
103 | "type": "VEC2"
104 | },
105 | {
106 | "bufferView": 0,
107 | "byteOffset": 412056,
108 | "componentType": 5125,
109 | "count": 39042,
110 | "type": "SCALAR"
111 | },
112 | {
113 | "bufferView": 3,
114 | "componentType": 5126,
115 | "count": 451,
116 | "max": [
117 | 15.0
118 | ],
119 | "min": [
120 | 0.0
121 | ],
122 | "type": "SCALAR"
123 | },
124 | {
125 | "bufferView": 5,
126 | "componentType": 5126,
127 | "count": 451,
128 | "max": [
129 | 0.20017318427562714,
130 | 0.979751706123352,
131 | 0.2001722753047943,
132 | 0.9797602891921997
133 | ],
134 | "min": [
135 | -0.018710684031248093,
136 | -0.9797568917274475,
137 | -0.1991616040468216,
138 | 0.0026621678844094276
139 | ],
140 | "type": "VEC4"
141 | },
142 | {
143 | "bufferView": 3,
144 | "byteOffset": 1804,
145 | "componentType": 5126,
146 | "count": 125,
147 | "max": [
148 | 15.0
149 | ],
150 | "min": [
151 | 0.0
152 | ],
153 | "type": "SCALAR"
154 | },
155 | {
156 | "bufferView": 4,
157 | "componentType": 5126,
158 | "count": 125,
159 | "max": [
160 | 1.0000001192092896,
161 | 1.0,
162 | 1.0000001192092896
163 | ],
164 | "min": [
165 | 0.9999998807907104,
166 | 1.0,
167 | 0.9999998807907104
168 | ],
169 | "type": "VEC3"
170 | },
171 | {
172 | "bufferView": 3,
173 | "byteOffset": 2304,
174 | "componentType": 5126,
175 | "count": 451,
176 | "max": [
177 | 15.0
178 | ],
179 | "min": [
180 | 0.0
181 | ],
182 | "type": "SCALAR"
183 | },
184 | {
185 | "bufferView": 5,
186 | "byteOffset": 7216,
187 | "componentType": 5126,
188 | "count": 451,
189 | "max": [
190 | 0.20017318427562714,
191 | 0.979751706123352,
192 | 0.2001722753047943,
193 | 0.9797602891921997
194 | ],
195 | "min": [
196 | -0.018710684031248093,
197 | -0.9797568917274475,
198 | -0.1991616040468216,
199 | 0.0026621678844094276
200 | ],
201 | "type": "VEC4"
202 | },
203 | {
204 | "bufferView": 3,
205 | "byteOffset": 4108,
206 | "componentType": 5126,
207 | "count": 125,
208 | "max": [
209 | 15.0
210 | ],
211 | "min": [
212 | 0.0
213 | ],
214 | "type": "SCALAR"
215 | },
216 | {
217 | "bufferView": 4,
218 | "byteOffset": 1500,
219 | "componentType": 5126,
220 | "count": 125,
221 | "max": [
222 | 1.0000001192092896,
223 | 1.0,
224 | 1.0000001192092896
225 | ],
226 | "min": [
227 | 0.9999998807907104,
228 | 1.0,
229 | 0.9999998807907104
230 | ],
231 | "type": "VEC3"
232 | }
233 | ],
234 | "animations": [
235 | {
236 | "channels": [
237 | {
238 | "sampler": 0,
239 | "target": {
240 | "node": 3,
241 | "path": "rotation"
242 | }
243 | },
244 | {
245 | "sampler": 1,
246 | "target": {
247 | "node": 3,
248 | "path": "scale"
249 | }
250 | },
251 | {
252 | "sampler": 2,
253 | "target": {
254 | "node": 5,
255 | "path": "rotation"
256 | }
257 | },
258 | {
259 | "sampler": 3,
260 | "target": {
261 | "node": 5,
262 | "path": "scale"
263 | }
264 | }
265 | ],
266 | "name": "Animation",
267 | "samplers": [
268 | {
269 | "input": 8,
270 | "interpolation": "LINEAR",
271 | "output": 9
272 | },
273 | {
274 | "input": 10,
275 | "interpolation": "LINEAR",
276 | "output": 11
277 | },
278 | {
279 | "input": 12,
280 | "interpolation": "LINEAR",
281 | "output": 13
282 | },
283 | {
284 | "input": 14,
285 | "interpolation": "LINEAR",
286 | "output": 15
287 | }
288 | ]
289 | }
290 | ],
291 | "asset": {
292 | "extras": {
293 | "author": "cmzw (https://sketchfab.com/cmzw)",
294 | "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
295 | "source": "https://sketchfab.com/3d-models/stylized-planet-789725db86f547fc9163b00f302c3e70",
296 | "title": "Stylized planet"
297 | },
298 | "generator": "Sketchfab-14.10.0",
299 | "version": "2.0"
300 | },
301 | "bufferViews": [
302 | {
303 | "buffer": 0,
304 | "byteLength": 568224,
305 | "name": "floatBufferViews",
306 | "target": 34963
307 | },
308 | {
309 | "buffer": 0,
310 | "byteLength": 264728,
311 | "byteOffset": 568224,
312 | "byteStride": 8,
313 | "name": "floatBufferViews",
314 | "target": 34962
315 | },
316 | {
317 | "buffer": 0,
318 | "byteLength": 794184,
319 | "byteOffset": 832952,
320 | "byteStride": 12,
321 | "name": "floatBufferViews",
322 | "target": 34962
323 | },
324 | {
325 | "buffer": 0,
326 | "byteLength": 4608,
327 | "byteOffset": 1627136,
328 | "name": "floatBufferViews"
329 | },
330 | {
331 | "buffer": 0,
332 | "byteLength": 3000,
333 | "byteOffset": 1631744,
334 | "byteStride": 12,
335 | "name": "floatBufferViews"
336 | },
337 | {
338 | "buffer": 0,
339 | "byteLength": 14432,
340 | "byteOffset": 1634744,
341 | "byteStride": 16,
342 | "name": "floatBufferViews"
343 | }
344 | ],
345 | "buffers": [
346 | {
347 | "byteLength": 1649176,
348 | "uri": "scene.bin"
349 | }
350 | ],
351 | "extensionsUsed": [
352 | "KHR_materials_unlit"
353 | ],
354 | "images": [
355 | {
356 | "uri": "textures/Clouds_baseColor.png"
357 | },
358 | {
359 | "uri": "textures/Planet_baseColor.png"
360 | }
361 | ],
362 | "materials": [
363 | {
364 | "doubleSided": true,
365 | "emissiveTexture": {
366 | "index": 0
367 | },
368 | "extensions": {
369 | "KHR_materials_unlit": {}
370 | },
371 | "name": "Clouds",
372 | "pbrMetallicRoughness": {
373 | "baseColorTexture": {
374 | "index": 0
375 | },
376 | "metallicFactor": 0.0
377 | }
378 | },
379 | {
380 | "emissiveFactor": [
381 | 0.23391156271636818,
382 | 0.23391156271636818,
383 | 0.23391156271636818
384 | ],
385 | "emissiveTexture": {
386 | "index": 1
387 | },
388 | "extensions": {
389 | "KHR_materials_unlit": {}
390 | },
391 | "name": "Planet",
392 | "pbrMetallicRoughness": {
393 | "baseColorTexture": {
394 | "index": 1
395 | },
396 | "metallicFactor": 0.0
397 | }
398 | }
399 | ],
400 | "meshes": [
401 | {
402 | "name": "Object_0",
403 | "primitives": [
404 | {
405 | "attributes": {
406 | "NORMAL": 1,
407 | "POSITION": 0,
408 | "TEXCOORD_0": 2
409 | },
410 | "indices": 3,
411 | "material": 0,
412 | "mode": 4
413 | }
414 | ]
415 | },
416 | {
417 | "name": "Object_1",
418 | "primitives": [
419 | {
420 | "attributes": {
421 | "NORMAL": 5,
422 | "POSITION": 4,
423 | "TEXCOORD_0": 6
424 | },
425 | "indices": 7,
426 | "material": 1,
427 | "mode": 4
428 | }
429 | ]
430 | }
431 | ],
432 | "nodes": [
433 | {
434 | "children": [
435 | 1
436 | ],
437 | "matrix": [
438 | 0.9979661703109741,
439 | 0.06371438503265381,
440 | 0.001990502001717701,
441 | 0.0,
442 | 0.0,
443 | 0.031225780025124772,
444 | -0.9995123744010925,
445 | 0.0,
446 | -0.06374546885490417,
447 | 0.9974795579910278,
448 | 0.031162271276116593,
449 | 0.0,
450 | 0.0,
451 | 0.0,
452 | 0.0,
453 | 1.0
454 | ],
455 | "name": "Sketchfab_model"
456 | },
457 | {
458 | "children": [
459 | 2
460 | ],
461 | "name": "root"
462 | },
463 | {
464 | "children": [
465 | 3,
466 | 5
467 | ],
468 | "matrix": [
469 | 1.0,
470 | 0.0,
471 | 0.0,
472 | 0.0,
473 | 0.0,
474 | 2.220446049250313e-16,
475 | 1.0,
476 | 0.0,
477 | 0.0,
478 | -1.0,
479 | 2.220446049250313e-16,
480 | 0.0,
481 | 0.0,
482 | 0.0,
483 | 0.0,
484 | 1.0
485 | ],
486 | "name": "GLTF_SceneRootNode"
487 | },
488 | {
489 | "children": [
490 | 4
491 | ],
492 | "name": "Clouds_1"
493 | },
494 | {
495 | "mesh": 0,
496 | "name": "Object_4"
497 | },
498 | {
499 | "children": [
500 | 6
501 | ],
502 | "name": "Planet_2"
503 | },
504 | {
505 | "mesh": 1,
506 | "name": "Object_6"
507 | }
508 | ],
509 | "samplers": [
510 | {
511 | "magFilter": 9729,
512 | "minFilter": 9987,
513 | "wrapS": 10497,
514 | "wrapT": 10497
515 | }
516 | ],
517 | "scene": 0,
518 | "scenes": [
519 | {
520 | "name": "Sketchfab_Scene",
521 | "nodes": [
522 | 0
523 | ]
524 | }
525 | ],
526 | "textures": [
527 | {
528 | "sampler": 0,
529 | "source": 0
530 | },
531 | {
532 | "sampler": 0,
533 | "source": 1
534 | }
535 | ]
536 | }
537 |
--------------------------------------------------------------------------------
/src/components/HeroBgAnimation/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Div } from './HeroBgAnimationStyle';
3 | const HeroBgAnimation = () => (
4 |
5 |
362 |
363 | );
364 |
365 | export default HeroBgAnimation;
--------------------------------------------------------------------------------
/3D Image ganerator/src/components/HeroBgAnimation/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Div } from './HeroBgAnimationStyle';
3 | const HeroBgAnimation = () => (
4 |
5 |
362 |
363 | );
364 |
365 | export default HeroBgAnimation;
--------------------------------------------------------------------------------
/src/data/constants.js:
--------------------------------------------------------------------------------
1 | export const Bio = {
2 | name: "Rishav Chanda",
3 | roles: [
4 | "Full Stack Developer",
5 | "Android Developer",
6 | "UI/UX Designer",
7 | "Programmer",
8 | ],
9 | description:
10 | "I am a motivated and versatile individual, always eager to take on new challenges. With a passion for learning I am dedicated to delivering high-quality results. With a positive attitude and a growth mindset, I am ready to make a meaningful contribution and achieve great things.",
11 | github: "https://github.com/rishavchanda",
12 | resume:
13 | "https://drive.google.com/file/d/1txFKZD3LNIXMc329jD9c995AU8LItOXK/view?usp=drive_link",
14 | linkedin: "https://www.linkedin.com/in/rishav-chanda-b89a791b3/",
15 | twitter: "https://twitter.com/RishavChanda",
16 | insta: "https://www.instagram.com/rishav_chanda/",
17 | facebook: "https://www.facebook.com/rishav.chanda.165/",
18 | };
19 |
20 | export const skills = [
21 | {
22 | title: "Frontend",
23 | skills: [
24 | {
25 | name: "React Js",
26 | image:
27 | "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMS41IC0xMC4yMzE3NCAyMyAyMC40NjM0OCI+CiAgPHRpdGxlPlJlYWN0IExvZ288L3RpdGxlPgogIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIyLjA1IiBmaWxsPSIjNjFkYWZiIi8+CiAgPGcgc3Ryb2tlPSIjNjFkYWZiIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIi8+CiAgICA8ZWxsaXBzZSByeD0iMTEiIHJ5PSI0LjIiIHRyYW5zZm9ybT0icm90YXRlKDYwKSIvPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjApIi8+CiAgPC9nPgo8L3N2Zz4K",
28 | },
29 | {
30 | name: "Redux",
31 | image:
32 | "https://d33wubrfki0l68.cloudfront.net/0834d0215db51e91525a25acf97433051f280f2f/c30f5/img/redux.svg",
33 | },
34 | {
35 | name: "Next Js",
36 | image:
37 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACTklEQVR4Ab1XAaQqURB9DyohSykREpRIQSAlBCoECKUFCSRCBBEAaSEABQEoCIEASCwAUICALgCo83do0//9v819XX845O7VnDkzOzP7JWGaBd3C3IJpQVjAHeJ+Rs9a97vKLGrBsB1KgMhEP3FMUUwt4ENMfxr1yQIU4SSjRkbeOZtERmHk6pXQVDlnkHh9S+QLTm1hkiz4n/gzFQuny9FoFLquE+i34x+n02k0m00UCoV3BIzn3MMJrVYLtp1OJ0cS/X4f5/MZhmG8IyDsWtDfEaDIn2232/3zbrvdxuFwwGg04qRBt+VnETBNE0IIkE2n07/erdfrWK/X6Ha73Hb9ZXII3G43ivy3dNRqtZe7lUoFs9mM6oBDwCQCgquALT1FT3a5XF7qIZ/PYzgcolqtcggIIgBZAgRKB6lCRalp2uM8k8mAVMrlchwC+DEBipycE4n5fP44j8ViKJVKSCaTbAJCpgaez4vFIsjoWa/XA50FAgEkEgmEw2F2CkxZBZ5Br5tt1ITcbjd8Ph88Hg+7CBefECCsVitS4aVJcV9D/VMCVITk/Hq9YrPZyBBo2a1YMGvAcQYcj0cCtWMugcdYNhjDiBrP25mx3++x3W6RzWZZ8isfxzQLlsslJpMJpYY5jhkqcOH1ejEYDDAej9FoNOByuZxGsfqVzC7KTqcDSkkqleKsZOqX0mAwiHK5DGrJfr+fs5SqX8sjkQji8ThCoRC+v78Za7l6JagrUh3YkUuZpqgwDaecc9VYSDoV5Fg+at7n+eLN57kuE/EvzHr/Kvs31aYAAAAASUVORK5CYII=",
38 | },
39 | {
40 | name: "Angular Js",
41 | image:
42 | "https://camo.githubusercontent.com/8886130b3d8aba95dbdd7c4f9a41029606424cc06d1873c1ced87dd55a222fef/68747470733a2f2f616e67756c61722e696f2f6173736574732f696d616765732f6c6f676f732f616e67756c61722f616e67756c61722e737667",
43 | },
44 | {
45 | name: "HTML",
46 | image: "https://www.w3.org/html/logo/badge/html5-badge-h-solo.png",
47 | },
48 | {
49 | name: "CSS",
50 | image:
51 | "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/CSS3_logo_and_wordmark.svg/1452px-CSS3_logo_and_wordmark.svg.png",
52 | },
53 | {
54 | name: "JavaScript",
55 | image:
56 | "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/JavaScript-logo.png/800px-JavaScript-logo.png",
57 | },
58 | {
59 | name: "Bootstrap",
60 | image:
61 | "https://getbootstrap.com/docs/5.3/assets/brand/bootstrap-logo-shadow.png",
62 | },
63 | {
64 | name: "Material UI",
65 | image:
66 | "data:image/png;base64,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",
67 | },
68 | {
69 | name: "Flutter",
70 | image:
71 | "https://cdn-images-1.medium.com/max/1200/1*5-aoK8IBmXve5whBQM90GA.png",
72 | },
73 | ],
74 | },
75 | {
76 | title: "Backend",
77 | skills: [
78 | {
79 | name: "Node Js",
80 | image: "https://nodejs.org/static/images/logo.svg",
81 | },
82 | {
83 | name: "Express Js",
84 | image:
85 | "data:image/png;base64,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",
86 | },
87 | {
88 | name: "Graph Ql",
89 | image: "https://www.vectorlogo.zone/logos/graphql/graphql-icon.svg",
90 | },
91 | {
92 | name: "Python",
93 | image:
94 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg",
95 | },
96 | {
97 | name: "Flask",
98 | image:
99 | "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Flask_logo.svg/1280px-Flask_logo.svg.png",
100 | },
101 | {
102 | name: "Django",
103 | image:
104 | "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSlFFyY16N5NRhzoG24RqB7x8Ok2t8Bdgs-tuMsOBXS2Q&s",
105 | },
106 | {
107 | name: "MySQL",
108 | image:
109 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/mysql/mysql-original-wordmark.svg",
110 | },
111 | {
112 | name: "Postgresql",
113 | image: "https://www.postgresql.org/media/img/about/press/elephant.png",
114 | },
115 | {
116 | name: "MongoDB",
117 | image:
118 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/mongodb/mongodb-original-wordmark.svg",
119 | },
120 | {
121 | name: "Firebase",
122 | image: "https://www.vectorlogo.zone/logos/firebase/firebase-icon.svg",
123 | },
124 | ],
125 | },
126 | {
127 | title: "DevOps",
128 | skills: [
129 | {
130 | name: "AWS",
131 | image:
132 | "https://download.logo.wine/logo/Amazon_Web_Services/Amazon_Web_Services-Logo.wine.png",
133 | },
134 | {
135 | name: "Google Cloud",
136 | image:
137 | "https://static-00.iconduck.com/assets.00/google-cloud-platform-logo-icon-2048x1824-pg4wzspq.png",
138 | },
139 | {
140 | name: "Docker",
141 | image:
142 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/docker/docker-original-wordmark.svg",
143 | },
144 | {
145 | name: "Jenkins",
146 | image:
147 | "https://toppng.com/uploads/preview/jenkins-logo-11609365847mufysaivph.png",
148 | },
149 | {
150 | name: "Nginx",
151 | image: "https://download.logo.wine/logo/Nginx/Nginx-Logo.wine.png",
152 | },
153 | {
154 | name: "Grafana",
155 | image:
156 | "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Grafana_logo.svg/1200px-Grafana_logo.svg.png",
157 | },
158 | {
159 | name: "Kubernetes",
160 | image:
161 | "https://upload.wikimedia.org/wikipedia/commons/0/00/Kubernetes_%28container_engine%29.png",
162 | },
163 | {
164 | name: "Prometheus",
165 | image:
166 | "https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Prometheus_software_logo.svg/1200px-Prometheus_software_logo.svg.png",
167 | },
168 | ],
169 | },
170 | {
171 | title: "Android",
172 | skills: [
173 | {
174 | name: "Java",
175 | image:
176 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg",
177 | },
178 | {
179 | name: "Kotlin",
180 | image:
181 | "https://www.vectorlogo.zone/logos/kotlinlang/kotlinlang-icon.svg",
182 | },
183 | {
184 | name: "Jetpack Compose",
185 | image:
186 | "https://3.bp.blogspot.com/-VVp3WvJvl84/X0Vu6EjYqDI/AAAAAAAAPjU/ZOMKiUlgfg8ok8DY8Hc-ocOvGdB0z86AgCLcBGAsYHQ/s1600/jetpack%2Bcompose%2Bicon_RGB.png",
187 | },
188 | {
189 | name: "XML",
190 | image:
191 | "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSBMw6_RdwKQ9bDFfnKDX1iwMl4bVJEvd9PP53XuIw&s",
192 | },
193 | {
194 | name: "Android Studio",
195 | image:
196 | "https://developer.android.com/static/studio/images/new-studio-logo-1_1920.png",
197 | },
198 | ],
199 | },
200 | {
201 | title: "Machine Learning",
202 | skills: [
203 | {
204 | name: "Python",
205 | image:
206 | "https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg",
207 | },
208 | {
209 | name: "Tenserflow",
210 | image:
211 | "https://static-00.iconduck.com/assets.00/tensorflow-icon-1911x2048-1m2s54vn.png",
212 | },
213 | {
214 | name: "Keras",
215 | image:
216 | "https://miro.medium.com/v2/resize:fit:600/1*DKu_54iqz6C-p6ndo7rO3g.png",
217 | },
218 | {
219 | name: "Jupyter",
220 | image:
221 | "https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Jupyter_logo.svg/1767px-Jupyter_logo.svg.png",
222 | },
223 | {
224 | name: "Google Colab",
225 | image:
226 | "https://assets.stickpng.com/images/63c2e4c9c4baad4ce22bf9ef.png",
227 | },
228 | {
229 | name: "Sk Learn Kit",
230 | image:
231 | "https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Scikit_learn_logo_small.svg/2560px-Scikit_learn_logo_small.svg.png",
232 | },
233 | ],
234 | },
235 | {
236 | title: "Others",
237 | skills: [
238 | {
239 | name: "Git",
240 | image:
241 | "https://e7.pngegg.com/pngimages/713/558/png-clipart-computer-icons-pro-git-github-logo-text-logo-thumbnail.png",
242 | },
243 | {
244 | name: "GitHub",
245 | image:
246 | "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
247 | },
248 | {
249 | name: "Netlify",
250 | image:
251 | "https://seeklogo.com/images/N/netlify-logo-BD8F8A77E2-seeklogo.com.png",
252 | },
253 | {
254 | name: "VS Code",
255 | image:
256 | "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Visual_Studio_Code_1.35_icon.svg/512px-Visual_Studio_Code_1.35_icon.svg.png?20210804221519",
257 | },
258 | {
259 | name: "Postman",
260 | image:
261 | "https://static-00.iconduck.com/assets.00/postman-icon-497x512-beb7sy75.png",
262 | },
263 | {
264 | name: "Adobe XD",
265 | image:
266 | "https://camo.githubusercontent.com/c205ecbe12500177d102169d97bc1c17c545155fdf5ec78c08d54ac53e5b38c1/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f61646f62652d78642e737667",
267 | },
268 | {
269 | name: "Figma",
270 | image:
271 | "https://s3-alpha.figma.com/hub/file/1481185752/fa4cd070-6a79-4e1b-b079-8b9b76408595-cover.png",
272 | },
273 | ],
274 | },
275 | ];
276 |
277 | export const experiences = [
278 | {
279 | id: 0,
280 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/neurobit.jpeg?alt=media&token=1cacbb7b-e5ea-4efb-9b3d-f5a31b9564ad",
281 | role: "Frontend Engineer Intern",
282 | company: "Neurobit",
283 | date: "June 2023 - Nov 2023",
284 | desc: "Enhanced user experiences on Neurobit PSG & Hybrid, Portals by resolving bugs & reduced load time by 40%. Built Neurobit Analytics portal using React Js with seamless interaction of REST APIs using AXIOS optimized with React Query. Refactored previous code to TypeScript, updated with new dependency and integrated Vite with Jest for Unit Testing.",
285 | skills: [
286 | "ReactJS",
287 | "Redux",
288 | "NodeJs",
289 | "Material UI",
290 | "HTML",
291 | "CSS",
292 | "JavaScript",
293 | ],
294 | doc: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/Screenshot%20from%202024-01-25%2022-38-31.png?alt=media&token=2785903f-1a4e-41f5-afd2-6adcfe56d058",
295 | },
296 | {
297 | id: 1,
298 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/flipr.jpeg?alt=media&token=1d72532a-45eb-4c1a-a81a-c9bed9fec543",
299 | role: "DevOps & Fullstack Engineering Intern",
300 | company: "Flipr Inovations Pvt. Ltd.",
301 | date: "Aug 2023 - Oct 2023",
302 | desc: "Built Flipr Connect Platforms using React Js integrated GraphQL with AXIOS, created High level Design and Figma design. Built Backend with GraphQL and Node JS and connected with MongoDb - Reducing API calls by 20%. Dockerized and automated with Kubernetes & Jenkins CI/CD deployed in AWS-EC2 added Prometheus & Grafana for monitoring.",
303 | skills: [
304 | "Docker",
305 | "Terraform",
306 | "AWS",
307 | "EC2",
308 | "Portainer",
309 | "Nginx",
310 | "JavaScript",
311 | "TypeScript",
312 | "Node Js",
313 | " Next Js",
314 | ],
315 | doc: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/1696514649120.jpeg?alt=media&token=e7f6757b-edfa-4138-a692-d6709eeef3e2",
316 | },
317 | {
318 | id: 2,
319 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/Rudraksha.jpeg?alt=media&token=8f83f41e-d0a1-486f-9c7f-dd4cd1d09e8d",
320 | role: "Android Developer Intern",
321 | company: "Rudraksha Welffare Foundation",
322 | date: "June 2021 - Oct 2021",
323 | desc: "• Built RudraShakti - Astrologer App, with MVVM Architecture using Java and Android Studio integrating Firebase SDK. Created One to One video call integration with Socket.IO and Firebase cloud functions and integrated with Retrofit. Created Low Level Design and converted Figma design to XML code.",
324 | skills: [
325 | "Android",
326 | "Java",
327 | "Kotlin",
328 | "XML",
329 | "Node Js",
330 | "Cloud Firestore",
331 | "Firebase",
332 | "Figma",
333 | ],
334 | doc: "https://firebasestorage.googleapis.com/v0/b/buckoid-917cf.appspot.com/o/WhatsApp%20Image%202023-05-05%20at%2012.07.39%20AM.jpeg?alt=media&token=9f0e1648-568b-422d-bd0b-1f125f722245",
335 | },
336 | {
337 | id: 3,
338 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/flipr.jpeg?alt=media&token=1d72532a-45eb-4c1a-a81a-c9bed9fec543",
339 | role: "Fullstack Externship",
340 | company: "Flipr",
341 | date: "June 2023 - July 2023",
342 | desc: "Built an employee management full stack web app used Docker and deployed on AWS ec2. I was the top performer in the program.",
343 | skills: [
344 | "ReactJS",
345 | "Redux",
346 | "NodeJs",
347 | "Material UI",
348 | "HTML",
349 | "CSS",
350 | "JavaScript",
351 | "Docker",
352 | "AWS",
353 | "MongoDB",
354 | ],
355 | doc: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/1691181448873.jpeg?alt=media&token=ee85eb8f-7247-43cd-9a1d-ce9f58ea62a6",
356 | },
357 | {
358 | id: 4,
359 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/gdsc.jpeg?alt=media&token=c162329c-efaa-4be8-a173-8d3f4c48ea70",
360 | role: "Android Developer",
361 | company: "DSC KIIT",
362 | date: "Nov2021 - Present",
363 | desc: "As an Android developer at the Google Developers Student Club (GDCS), I have had the opportunity to work on exciting projects and collaborate with talented developers who share my passion for technology. Through my involvement with GDCS, I have also had the opportunity to host and participate in numerous events, including hackathons, study jams, and workshops.",
364 | skills: [
365 | "Leadership",
366 | "Mobile Application Development",
367 | "Kotlin",
368 | "XML",
369 | "Figma",
370 | ],
371 | },
372 | {
373 | id: 5,
374 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/girlScript.jpeg?alt=media&token=e656a621-cf3c-4230-bf0f-e74b4cec6035",
375 | role: "Open Source Contributor ",
376 | company: "GirlScript Summer of Code",
377 | date: "May 2023 - Present",
378 | desc: "Contributed to different open-source projects and learn from industry experts",
379 | },
380 | ];
381 |
382 | export const education = [
383 | {
384 | id: 0,
385 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/Kiit.jpeg?alt=media&token=3839d520-c59d-4341-ad8f-0980c98de4dd",
386 | school: "Kalinga Institute of Industrial Technology, Bhubaneswar",
387 | date: "Oct 2021 - Sep 2025",
388 | grade: "8.41 CGPA",
389 | desc: "I am currently pursuing a Bachelor's degree in Computer Science and Engineering at Kalinga Institute of Industrial Technology, Bhubaneswar. I have completed 4 semesters and have a CGPA of 8.71. I have taken courses in Data Structures, Algorithms, Object-Oriented Programming, Database Management Systems, Operating Systems, and Computer Networks, among others. I am also a member of the Google Developers Student Club (GDSC) at KIIT, where I am learning and working on exciting projects with a team of talented developers.",
390 | degree: "Bachelor of Technology - BTech, Computer Science and Engineering",
391 | },
392 | {
393 | id: 1,
394 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/methodist.png?alt=media&token=018a1b18-e2dd-4f34-8855-cff1b6b69fd3",
395 | school: "Methodist School, Dankuni",
396 | date: "Apr 2019 - Apr 2025",
397 | grade: "88.2%",
398 | desc: "I completed my class 12 high school education at Methodist School, Dankuni, where I studied Science with Computer Science.",
399 | degree: "ISC(XII), Science with Computer",
400 | },
401 | {
402 | id: 2,
403 | img: "https://firebasestorage.googleapis.com/v0/b/flexi-coding.appspot.com/o/methodist.png?alt=media&token=018a1b18-e2dd-4f34-8855-cff1b6b69fd3",
404 | school: "Methodist School, Dankuni",
405 | date: "Apr 2017 - Apr 2019",
406 | grade: "92.3%",
407 | desc: "I completed my class 10 education at Methodist School, Dankuni, where I studied Science with Computer Application.",
408 | degree: "ICSC(X), Science with Computer",
409 | },
410 | ];
411 |
412 | export const projects = [
413 | {
414 | id: 11,
415 | title: "DecisionHub",
416 | date: "Jan 2024 - Dec 2023",
417 | description:
418 | "A Rule Builder application “Decision Hub” that empowers Business Analysts to create, save, and visualize decision strategies. Provide a no-code rule writing experience and visual representation to test these rules in real-time and observe the calculations at each step.",
419 | image:
420 | "https://github.com/rishavchanda/DecisionHub/raw/master/assets/testRule.jpg",
421 | tags: [
422 | "React Js",
423 | "PostgressSQL",
424 | "Node Js",
425 | "Express Js",
426 | "Redux",
427 | "React Flow",
428 | ],
429 | category: "web app",
430 | github: "https://github.com/rishavchanda/DecisionHub",
431 | webapp: "https://decisionhub.netlify.app/",
432 | },
433 | {
434 | id: 9,
435 | title: "Trackify",
436 | date: "Jun 2023 - Jul 2023",
437 | description:
438 | "Trackify is a web application designed to streamline task management and enhance productivity in the workplace. It provides a user-friendly interface for employers to keep track of their employees' daily work activities and empowers employees to log their tasks efficiently. \nAdmin Credentials: # Email: testadmin@gmail.com #Password- 123@testadmin, Employee Credentials: #Email: testemployee@gmail.com #Password- 123@Testemployee",
439 | image:
440 | "https://user-images.githubusercontent.com/64485885/255202416-e1f89b04-2788-45b0-abc2-9dec616669e2.png",
441 | tags: [
442 | "Docker",
443 | "AWS",
444 | "DuckDNS",
445 | "Eslint",
446 | "Husky",
447 | "CI/CD",
448 | "React Js",
449 | "MongoDb",
450 | "Node Js",
451 | "Express Js",
452 | "Redux",
453 | ],
454 | category: "web app",
455 | github: "https://github.com/rishavchanda/Trackify",
456 | webapp: "https://trackify-management.netlify.app/",
457 | },
458 | {
459 | id: 0,
460 | title: "Podstream",
461 | date: "Apr 2023 - May 2023",
462 | description:
463 | "Developed a full-stack web application that allows users to search for, play, and pause their favorite podcasts on demand and create podcasts. Implemented user authentication using Google Auth and Jwt Auth, made responsive user interface with React JS that provides users with a seamless experience across all devices. Practiced agile methodologies to optimize team efficiency and communication.",
464 | image:
465 | "https://user-images.githubusercontent.com/64485885/234602896-a1bd8bcc-b72b-4821-83d6-8ad885bf435e.png",
466 | tags: ["React Js", "MongoDb", "Node Js", "Express Js", "Redux"],
467 | category: "web app",
468 | github: "https://github.com/rishavchanda/Podstream",
469 | webapp: "https://podstream.netlify.app/",
470 | member: [
471 | {
472 | name: "Rishav Chanda",
473 | img: "https://avatars.githubusercontent.com/u/64485885?v=4",
474 | linkedin: "https://www.linkedin.com/in/rishav-chanda-b89a791b3/",
475 | github: "https://github.com/rishavchanda/",
476 | },
477 | {
478 | name: "Upasana Chaudhuri",
479 | img: "https://avatars.githubusercontent.com/u/100614635?v=4",
480 | linkedin: "https://www.linkedin.com/in/upasana-chaudhuri-2a2bb5231/",
481 | github: "https://github.com/upasana0710",
482 | },
483 | ],
484 | },
485 | {
486 | id: 1,
487 | title: "Vexa",
488 | date: "Oct 2022 - Jan 2023",
489 | description:
490 | "Designed and developed the Vexa project, a project management app that helps users and teams stay organized and on track. Implemented key features such as task tracking, team collaboration, and time tracking to improve productivity and project outcomes and also invite team/project members. The plan is to add a community of users where they can find developers and other team members and chat system implementation.",
491 | image:
492 | "https://user-images.githubusercontent.com/64485885/234916413-96296f13-fe4b-4cc4-b215-e72bd7c27928.png",
493 | tags: [
494 | "React Js",
495 | "MongoDb",
496 | "Node Js",
497 | "Express Js",
498 | "Redux",
499 | "NodeMailer",
500 | ],
501 | category: "web app",
502 | github: "https://github.com/rishavchanda/Project-Management-App",
503 | webapp: "https://vexa-app.netlify.app/",
504 | },
505 | {
506 | id: 2,
507 | title: "Brain Tumor Detection",
508 | date: "Jan 2023 - Mar 2023",
509 | description:
510 | "Preprocessed and augmented the dataset to improve model accuracy, trained the model, created API using model and Python, and used React web app for the project's front end. Achievements: Achieved an accuracy of 99.2% to accurately detect brain tumors from medical images.",
511 | image:
512 | "https://github.com/rishavchanda/Brain-Tumor-Detection/raw/main/Readme_resource/Image2.png",
513 | tags: ["Python", "Keras", "TensorFlow", "VGG16", "Pickle", "React"],
514 | category: "machine learning",
515 | github: "https://github.com/rishavchanda/Brain-Tumor-Detection",
516 | webapp: "https://brain-tumor.netlify.app/",
517 | member: [
518 | {
519 | name: "Rishav Chanda",
520 | img: "https://avatars.githubusercontent.com/u/64485885?v=4",
521 | linkedin: "https://www.linkedin.com/in/rishav-chanda-b89a791b3/",
522 | github: "https://github.com/rishavchanda/",
523 | },
524 | {
525 | name: "Upasana Chaudhuri",
526 | img: "https://avatars.githubusercontent.com/u/100614635?v=4",
527 | linkedin: "https://www.linkedin.com/in/upasana-chaudhuri-2a2bb5231/",
528 | github: "https://github.com/upasana0710",
529 | },
530 | ],
531 | },
532 | {
533 | id: 3,
534 | title: "Buckoid",
535 | date: "Dec 2021 - Apr 2022",
536 | description:
537 | "App Is Currently In Playstore 100+ Downloads. This Project proposes an “Expense Tracking App”. Keep track of your personal expenses and compare them to your monthly income with the budget planner. It has Google Drive Cloud API for Backup of User Room Database. Made with Kotlin in MVVM Architecture & Live Data.",
538 | image:
539 | "https://camo.githubusercontent.com/3ad28aa710d18525f1fc87de056ed53c706d09979589bfd5a773df36653bad38/68747470733a2f2f666972656261736573746f726167652e676f6f676c65617069732e636f6d2f76302f622f6c6f67696e2d65613565322e61707073706f742e636f6d2f6f2f4255434b4f49442532302831292e706e673f616c743d6d6564696126746f6b656e3d32653735376235372d323964372d346263612d613562322d653164346538313432373435",
540 | tags: ["Kotlin", "MVVM", "Room Database", "Google Drive Cloud API"],
541 | category: "android app",
542 | github: "https://github.com/rishavchanda/Buckoid-Android-App",
543 | webapp: "https://play.google.com/store/apps/details?id=com.rishav.buckoid",
544 | },
545 | {
546 | id: 10,
547 | title: "Job Finding App",
548 | date: "Jun 2023 - Jul 2023",
549 | description:
550 | "A Job Finding App made with React Native, Axios. Users can search for any job coming from API and apply there.",
551 | image:
552 | "https://user-images.githubusercontent.com/64485885/255237090-cf798a2c-1b41-4bb7-b904-b5353a1f08e8.png",
553 | tags: ["React Native", "JavaScript", "Axios"],
554 | category: "android app",
555 | github: "https://github.com/rishavchanda/Job-finder-App",
556 | webapp: "https://github.com/rishavchanda/Job-finder-App",
557 | },
558 | {
559 | id: 4,
560 | title: "Whatsapp Clone",
561 | date: "Jul 2021",
562 | description:
563 | "A WhatsApp clone made with React JS, Firebase, and Material UI. It has Phone Authentication, Real-time Database. It has a chat room where users can chat with each other. It has a sidebar where users can see all the chat rooms and can create a new chat room. It has a login page where users can log in with their Google account.",
564 | image:
565 | "https://firebasestorage.googleapis.com/v0/b/whatsapp-clone-rishav.appspot.com/o/Screenshot%20(151).png?alt=media&token=48391593-1ef0-4a8c-a92a-eb82bdf38e89",
566 | tags: ["React Js", "Firebase", "Firestore", "Node JS"],
567 | category: "web app",
568 | github: "https://github.com/rishavchanda/Whatsapp-Clone-React-Js",
569 | webapp: "https://whatsapp-clone-rishav.web.app",
570 | },
571 | {
572 | id: 5,
573 | title: "Todo Web App",
574 | date: "Jun 2021",
575 | description:
576 | " A Todo Web App made with React JS, Redux, and Material UI. It has a login page where users can log in with their Google account. It has a sidebar where users can see all the tasks and can create a new task. It has a calendar where users can see all the tasks on a particular date. It has a search bar where users can search for a particular task.",
577 | image:
578 | "https://camo.githubusercontent.com/84ac6ab6f378348ef28d8184062b7e9e3511a1252ae3966eaa49e8e998f732a7/68747470733a2f2f666972656261736573746f726167652e676f6f676c65617069732e636f6d2f76302f622f746f646f2d6170702d63386331392e61707073706f742e636f6d2f6f2f53637265656e73686f74253230283938292e706e673f616c743d6d6564696126746f6b656e3d33643335646366322d626666322d343730382d393031632d343232383866383332386633",
579 | tags: ["React Js", "Local Storage", "AWS Auth", "Node JS"],
580 | category: "web app",
581 | github: "https://github.com/rishavchanda/Todo-Web-App",
582 | webapp: "https://rishav-react-todo.netlify.app/",
583 | },
584 | {
585 | id: 6,
586 | title: "Breaking Bad",
587 | date: "Jun 2021",
588 | description:
589 | "A simple react app that shows the characters of the famous TV series Breaking Bad. It uses the Breaking Bad API to fetch the data. It also has a search bar to search for a particular character.",
590 | image:
591 | "https://camo.githubusercontent.com/937774368308a82419f53dd6eeb4a8675780e119636488b4e3cfe5d34859a72a/68747470733a2f2f666972656261736573746f726167652e676f6f676c65617069732e636f6d2f76302f622f746f646f2d6170702d63386331392e61707073706f742e636f6d2f6f2f53637265656e73686f7425323028313534292e706e673f616c743d6d6564696126746f6b656e3d65613439383630632d303435362d343333342d616435372d336239346663303333363263",
592 | tags: ["React Js", "API", "Axios", "Node JS"],
593 | category: "web app",
594 | github: "https://github.com/rishavchanda/Breaking-Bad",
595 | webapp: "https://breaking-bad-webapp.netlify.app",
596 | },
597 | {
598 | id: 7,
599 | title: "Quiz App",
600 | date: "Dec 2020 - Jan 2021",
601 | description:
602 | "A android quiz app made with Java and Firebase. It has a login page where users can log in with their Google account. It has a sidebar where users can see all the quiz categories and can create a new quiz. It has a leaderboard where users can see the top 10 scorers. It has a search bar where users can search for a particular quiz.",
603 | image:
604 | "https://github-production-user-asset-6210df.s3.amazonaws.com/64485885/239726262-c1b061d1-d9d0-42ef-9f1c-0412d14bc4f6.gif",
605 | tags: ["Java", "Android Studio", "Firebase", "Google Auth"],
606 | category: "android app",
607 | github: "https://github.com/rishavchanda/Quiz-Earn",
608 | webapp: "https://github.com/rishavchanda/Quiz-Earn",
609 | },
610 | {
611 | id: 8,
612 | title: "Face Recognition",
613 | date: "Jan 2021",
614 | description:
615 | "A Face recognition python app made with OpenCV. It uses face_recognition library to detect faces. It uses the webcam to detect faces. It also has a search bar to search for a particular face.",
616 | image:
617 | "https://dontrepeatyourself.org/media/face-recognition-with-python-dlib-and-deep-learning_cezKZBj.png",
618 | tags: ["Python", "Keras", "TensorFlow", "VGG16", "Pickle", "React"],
619 | category: "machine learning",
620 | github: "https://github.com/rishavchanda/Face-Recodnition-AI-with-Python",
621 | webapp: "https://github.com/rishavchanda/Face-Recodnition-AI-with-Python",
622 | },
623 | ];
624 |
625 |
--------------------------------------------------------------------------------