├── .gitignore
├── README.md
├── backend_sanity
├── .eslintrc
├── .npmignore
├── README.md
├── config
│ ├── .checksums
│ └── @sanity
│ │ ├── data-aspects.json
│ │ ├── default-layout.json
│ │ ├── default-login.json
│ │ ├── form-builder.json
│ │ └── vision.json
├── package.json
├── plugins
│ └── .gitkeep
├── sanity.json
├── schemas
│ ├── aboutme.js
│ ├── abouts.js
│ ├── brands.js
│ ├── contact.js
│ ├── experiences.js
│ ├── schema.js
│ ├── skills.js
│ ├── testimonials.js
│ ├── workExperience.js
│ └── works.js
├── static
│ ├── .gitkeep
│ └── favicon.ico
├── tsconfig.json
└── yarn.lock
├── frontend_react
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── letter-P-circle.svg
│ ├── letter-P.svg
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.js
│ ├── App.scss
│ ├── assets
│ ├── Ingram Robot.png
│ ├── about01.png
│ ├── about02.png
│ ├── about03.png
│ ├── about04.png
│ ├── aboutIMG-my-edit.png
│ ├── aboutIMG-pea.png
│ ├── aboutImg.svg
│ ├── adidas.png
│ ├── amazon.png
│ ├── api.png
│ ├── asus.png
│ ├── bgIMG.png
│ ├── bgWhite.png
│ ├── bolt.png
│ ├── circle.svg
│ ├── cpp.png
│ ├── css.png
│ ├── email.png
│ ├── figma.png
│ ├── flutter.png
│ ├── fullstack.jpg
│ ├── git.png
│ ├── goo.svg
│ ├── good_webdeveloper.svg
│ ├── graphql.png
│ ├── html.png
│ ├── javascript.png
│ ├── leadership.jpg
│ ├── letter-P-circle.svg
│ ├── letter-P.svg
│ ├── logo.png
│ ├── logo.svg
│ ├── machinelearning.svg
│ ├── mobile.png
│ ├── mu5.png
│ ├── nb.png
│ ├── node.png
│ ├── problemSolving.png
│ ├── problemSolving.svg
│ ├── profile.png
│ ├── programmer.svg
│ ├── python.png
│ ├── react.png
│ ├── redux.png
│ ├── robot.jpg
│ ├── sass.png
│ ├── skype.png
│ ├── spotify.png
│ ├── testimonial1.jpg
│ ├── testimonial2.jpg
│ ├── testimonialBg.png
│ ├── typescript.png
│ └── vue.png
│ ├── client.js
│ ├── components
│ ├── Footer
│ │ ├── Footer.jsx
│ │ └── Footer.scss
│ ├── Navbar
│ │ ├── Navbar.jsx
│ │ └── Navbar.scss
│ ├── NavigationDots.jsx
│ ├── SocialMedia.jsx
│ └── index.js
│ ├── constants
│ ├── images.js
│ └── index.js
│ ├── containers
│ ├── About
│ │ ├── About.jsx
│ │ └── About.scss
│ ├── Contact
│ │ ├── Contact.jsx
│ │ └── Contact.scss
│ ├── Header
│ │ ├── Header.jsx
│ │ └── Header.scss
│ ├── Skills
│ │ ├── Skills.jsx
│ │ └── Skills.scss
│ ├── Testimonial
│ │ ├── Testimonial.jsx
│ │ └── Testimonial.scss
│ ├── Work
│ │ ├── Work.jsx
│ │ └── Work.scss
│ └── index.js
│ ├── index.css
│ ├── index.js
│ └── wrapper
│ ├── AppWrap.js
│ ├── MotionWrap.js
│ └── index.js
└── images
├── contact-page.png
├── home-page.png
├── letter-P-circle.svg
└── skills-page.png
/.gitignore:
--------------------------------------------------------------------------------
1 | frontend_react/node_modules
2 | backend_sanity/node_modules
3 | frontend_react/build
4 |
5 | /assets
6 |
7 | frontend_react/.env
8 |
9 | assets.zip
10 | schemas.zip
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
",
8 | "license": "UNLICENSED",
9 | "scripts": {
10 | "start": "sanity start",
11 | "build": "sanity build"
12 | },
13 | "keywords": [
14 | "sanity"
15 | ],
16 | "dependencies": {
17 | "@sanity/base": "^2.30.1",
18 | "@sanity/core": "^2.30.2",
19 | "@sanity/default-layout": "^2.30.1",
20 | "@sanity/default-login": "^2.30.1",
21 | "@sanity/desk-tool": "^2.30.1",
22 | "@sanity/eslint-config-studio": "^2.0.0",
23 | "@sanity/vision": "^2.30.1",
24 | "eslint": "^8.6.0",
25 | "prop-types": "^15.7",
26 | "react": "^17.0",
27 | "react-dom": "^17.0",
28 | "styled-components": "^5.2.0"
29 | },
30 | "devDependencies": {}
31 | }
32 |
--------------------------------------------------------------------------------
/backend_sanity/plugins/.gitkeep:
--------------------------------------------------------------------------------
1 | User-specific packages can be placed here
2 |
--------------------------------------------------------------------------------
/backend_sanity/sanity.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "project": {
4 | "name": "Portfolio_reactjs"
5 | },
6 | "api": {
7 | "projectId": "soweeiig",
8 | "dataset": "production"
9 | },
10 | "plugins": [
11 | "@sanity/base",
12 | "@sanity/default-layout",
13 | "@sanity/default-login",
14 | "@sanity/desk-tool"
15 | ],
16 | "env": {
17 | "development": {
18 | "plugins": [
19 | "@sanity/vision"
20 | ]
21 | }
22 | },
23 | "parts": [
24 | {
25 | "name": "part:@sanity/base/schema",
26 | "path": "./schemas/schema"
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/backend_sanity/schemas/aboutme.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: "aboutme",
3 | title: "About Me",
4 | type: "document",
5 | fields: [
6 | {
7 | name: "description",
8 | title: "Description",
9 | type: "string",
10 | },
11 | {
12 | name: "profileImg",
13 | title: "Profile Picture",
14 | type: "image",
15 | options: {
16 | hotspot: true,
17 | },
18 | },
19 | {
20 | name: "resume",
21 | title: "Resume",
22 | type: "file",
23 | options: {
24 | accept: "application/pdf",
25 | },
26 | },
27 | ],
28 | };
29 |
--------------------------------------------------------------------------------
/backend_sanity/schemas/abouts.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'abouts',
3 | title:'Abouts',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'title',
8 | title:'Title',
9 | type:'string'
10 | },
11 | {
12 | name:'description',
13 | title:'Description',
14 | type:'string'
15 | },
16 | {
17 | name:'imgUrl',
18 | title:'ImgUrl',
19 | type: 'image',
20 | options: {
21 | hotspot: true,
22 | },
23 | },
24 |
25 | ]
26 | }
--------------------------------------------------------------------------------
/backend_sanity/schemas/brands.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'brands',
3 | title:'Brands',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'imgUrl',
8 | title:'ImgUrl',
9 | type: 'image',
10 | options: {
11 | hotspot: true,
12 | },
13 | },
14 | {
15 | name:'name',
16 | title:'Name',
17 | type:'string'
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/backend_sanity/schemas/contact.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: "contact",
3 | title: "Contact",
4 | type: "document",
5 | fields: [
6 | {
7 | name: "name",
8 | title: "Name",
9 | type: "string",
10 | },
11 | {
12 | name: "email",
13 | title: "Email",
14 | type: "string",
15 | },
16 | {
17 | name: "subject",
18 | title: "Subject",
19 | type: "string",
20 | },
21 | {
22 | name: "message",
23 | title: "Message",
24 | type: "text",
25 | },
26 | ],
27 | };
28 |
--------------------------------------------------------------------------------
/backend_sanity/schemas/experiences.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'experiences',
3 | title:'Experiences',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'year',
8 | title:'Year',
9 | type:'string'
10 | },
11 | {
12 | name:'works',
13 | title:'Works',
14 | type:'array',
15 | of:[{ type:'workExperience'}]
16 | },
17 | ]
18 | }
--------------------------------------------------------------------------------
/backend_sanity/schemas/schema.js:
--------------------------------------------------------------------------------
1 | // First, we must import the schema creator
2 | import createSchema from "part:@sanity/base/schema-creator";
3 |
4 | // Then import schema types from any plugins that might expose them
5 | import schemaTypes from "all:part:@sanity/base/schema-type";
6 | import works from "./works";
7 | import testimonials from "./testimonials";
8 | import brands from "./brands";
9 | import abouts from "./abouts";
10 | import experiences from "./experiences";
11 | import skills from "./skills";
12 | import workExperience from "./workExperience";
13 | import contact from "./contact";
14 | import aboutme from "./aboutme";
15 |
16 | // Then we give our schema to the builder and provide the result to Sanity
17 | export default createSchema({
18 | // We name our schema
19 | name: "default",
20 | // Then proceed to concatenate our document type
21 | // to the ones provided by any plugins that are installed
22 | types: schemaTypes.concat([
23 | works,
24 | testimonials,
25 | brands,
26 | aboutme,
27 | abouts,
28 | skills,
29 | workExperience,
30 | experiences,
31 | contact,
32 | /* Your types here! */
33 | ]),
34 | });
35 |
--------------------------------------------------------------------------------
/backend_sanity/schemas/skills.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: "skills",
3 | title: "Skills",
4 | type: "document",
5 | fields: [
6 | {
7 | name: "name",
8 | title: "Name",
9 | type: "string",
10 | },
11 | {
12 | name: "bgColor",
13 | title: "BgColor",
14 | type: "string",
15 | },
16 | {
17 | name: "proficiency",
18 | title: "Proficiency",
19 | type: "number",
20 | validation: (Rule) => Rule.min(1).max(5),
21 | },
22 |
23 | {
24 | name: "icon",
25 | title: "Icon",
26 | type: "image",
27 | options: {
28 | hotspot: true,
29 | },
30 | },
31 | ],
32 | initialValue: {
33 | bgColor: "#edf2f8",
34 | proficiency: 1,
35 | },
36 | };
37 |
--------------------------------------------------------------------------------
/backend_sanity/schemas/testimonials.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name:'testimonials',
3 | title:'Testimonials',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'name',
8 | title:'Name',
9 | type: 'string'
10 | },
11 | {
12 | name:'company',
13 | title:'Company',
14 | type:'string'
15 | },
16 | {
17 | name:'imgurl',
18 | title:'ImgUrl',
19 | type: 'image',
20 | options: {
21 | hotspot: true,
22 | },
23 | },
24 | {
25 | name:'feedback',
26 | title:'Feedback',
27 | type:'string'
28 | }
29 | ]
30 | }
--------------------------------------------------------------------------------
/backend_sanity/schemas/workExperience.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name:'workExperience',
3 | title:'Work Experience',
4 | type:'document',
5 | fields:[
6 | {name:'name',
7 | title:'name',
8 | type:'string'
9 | },
10 | {
11 | name:'company',
12 | title:'Company',
13 | type:'string'
14 | },
15 | {
16 | name:'desc',
17 | title:'Desc',
18 | type:'string'
19 | }
20 | ]
21 | }
--------------------------------------------------------------------------------
/backend_sanity/schemas/works.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'works',
3 | title: 'Works',
4 | type: 'document',
5 | fields: [
6 | {
7 | name: 'title',
8 | title: 'Title',
9 | type: 'string',
10 | },
11 |
12 | {
13 | name: 'description',
14 | title: 'Description',
15 | type: 'string',
16 | },
17 | {
18 | name: 'projectLink',
19 | title: 'Project Link',
20 | type: 'string',
21 | },
22 | {
23 | name: 'codeLink',
24 | title: 'Code Link',
25 | type: 'string',
26 | },
27 | {
28 | name: 'imgUrl',
29 | title: 'ImageUrl',
30 | type: 'image',
31 | options: {
32 | hotspot: true,
33 | },
34 | },
35 |
36 | {
37 | name: 'tags',
38 | title: 'Tags',
39 | type:'array',
40 | of: [
41 | {
42 | name:'tag',
43 | title:'Tag',
44 | type:'string'
45 | }
46 | ]
47 | },
48 |
49 | ],
50 | };
--------------------------------------------------------------------------------
/backend_sanity/static/.gitkeep:
--------------------------------------------------------------------------------
1 | Files placed here will be served by the Sanity server under the `/static`-prefix
2 |
--------------------------------------------------------------------------------
/backend_sanity/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/backend_sanity/static/favicon.ico
--------------------------------------------------------------------------------
/backend_sanity/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // Note: This config is only used to help editors like VS Code understand/resolve
3 | // parts, the actual transpilation is done by babel. Any compiler configuration in
4 | // here will be ignored.
5 | "include": ["./node_modules/@sanity/base/types/**/*.ts", "./**/*.ts", "./**/*.tsx"]
6 | }
7 |
--------------------------------------------------------------------------------
/frontend_react/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 |
--------------------------------------------------------------------------------
/frontend_react/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend_react",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@sanity/client": "^3.3.2",
7 | "@sanity/image-url": "^1.0.1",
8 | "@testing-library/jest-dom": "^5.16.4",
9 | "@testing-library/react": "^13.3.0",
10 | "@testing-library/user-event": "^13.5.0",
11 | "dotenv": "^16.0.1",
12 | "framer-motion": "^6.3.16",
13 | "node-sass": "^7.0.1",
14 | "react": "^18.2.0",
15 | "react-dom": "^18.2.0",
16 | "react-icons": "^4.4.0",
17 | "react-scripts": "5.0.1",
18 | "react-simple-typewriter": "^3.0.1",
19 | "react-tooltip": "^4.2.21",
20 | "web-vitals": "^2.1.4"
21 | },
22 | "scripts": {
23 | "start": "react-scripts start",
24 | "build": "react-scripts build",
25 | "test": "react-scripts test",
26 | "eject": "react-scripts eject"
27 | },
28 | "eslintConfig": {
29 | "extends": [
30 | "react-app",
31 | "react-app/jest"
32 | ]
33 | },
34 | "browserslist": {
35 | "production": [
36 | ">0.2%",
37 | "not dead",
38 | "not op_mini all"
39 | ],
40 | "development": [
41 | "last 1 chrome version",
42 | "last 1 firefox version",
43 | "last 1 safari version"
44 | ]
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/frontend_react/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/public/favicon.ico
--------------------------------------------------------------------------------
/frontend_react/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | Praveen
28 |
29 |
30 | You need to enable JavaScript to run this app.
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/frontend_react/public/letter-P-circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/public/letter-P.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/frontend_react/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/public/logo192.png
--------------------------------------------------------------------------------
/frontend_react/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/public/logo512.png
--------------------------------------------------------------------------------
/frontend_react/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 |
--------------------------------------------------------------------------------
/frontend_react/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/frontend_react/src/App.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import {
4 | About,
5 | Contact,
6 | Header,
7 | Skills,
8 | Testimonial,
9 | Work,
10 | } from "./containers";
11 |
12 | import { Navbar, Footer } from "./components";
13 | import "./App.scss";
14 |
15 | const App = () => {
16 | return (
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | );
28 | };
29 |
30 | export default App;
31 |
--------------------------------------------------------------------------------
/frontend_react/src/App.scss:
--------------------------------------------------------------------------------
1 | .app {
2 | background-color: var(--primary-color);
3 | font-family: var(--font-base);
4 | // overflow-x: hidden;
5 | }
6 |
7 | .app__whitebg {
8 | background-color: var(--white-color);
9 | }
10 |
11 | .app__primarybg {
12 | background-color: var(--primary-color);
13 | }
14 |
15 | .app__container {
16 | width: 100%;
17 | min-height: 100vh;
18 |
19 | display: flex;
20 | flex-direction: row;
21 | }
22 |
23 | .app__flex {
24 | display: flex;
25 | justify-content: center;
26 | align-items: center;
27 | }
28 |
29 | .app__wrapper {
30 | flex: 1;
31 | width: 100%;
32 | flex-direction: column;
33 | padding: 4rem 2rem;
34 |
35 | @media screen and (max-width: 450px) {
36 | padding: 4rem 1rem 2rem;
37 | }
38 | }
39 |
40 | .copyright {
41 | width: 100%;
42 | padding: 1rem 0 0;
43 |
44 | display: flex;
45 | flex-direction: column;
46 | justify-content: flex-end;
47 | align-items: flex-end;
48 |
49 | p {
50 | text-transform: uppercase;
51 | color: var(--black-color);
52 | }
53 | }
54 |
55 | .head-text {
56 | font-size: 2.75rem;
57 | font-weight: 800;
58 | text-align: center;
59 | color: var(--black-color);
60 | text-transform: capitalize;
61 |
62 | span {
63 | color: var(--secondary-color);
64 | }
65 |
66 | @media screen and (min-width: 2000px) {
67 | font-size: 4rem;
68 | }
69 |
70 | @media screen and (max-width: 450px) {
71 | font-size: 2rem;
72 | }
73 | }
74 |
75 | .p-text {
76 | font-size: 0.8rem;
77 | text-align: left;
78 | color: var(--gray-color);
79 | line-height: 1.5;
80 |
81 | @media screen and (min-width: 2000px) {
82 | font-size: 1.75rem;
83 | }
84 | }
85 |
86 | .bold-text {
87 | font-size: 1rem;
88 | font-weight: 800;
89 | color: var(--black-color);
90 | text-align: left;
91 |
92 | @media screen and (min-width: 2000px) {
93 | font-size: 2rem;
94 | }
95 |
96 | @media screen and (max-width: 450px) {
97 | font-size: 0.9rem;
98 | }
99 | }
100 |
101 | .app__social {
102 | display: flex;
103 | justify-content: flex-end;
104 | align-items: center;
105 | flex-direction: column;
106 |
107 | padding: 1rem;
108 | padding-bottom: 3rem;
109 |
110 | div {
111 | width: 40px;
112 | height: 40px;
113 | border-radius: 50%;
114 | background-color: var(--white-color);
115 | margin: 0.25rem 0;
116 | border: 1px solid var(--lightGray-color);
117 |
118 | display: flex;
119 | justify-content: center;
120 | align-items: center;
121 |
122 | transition: all 0.3s ease-in-out;
123 |
124 | a {
125 | width: 100%;
126 | height: 100%;
127 |
128 | svg {
129 | width: 15px;
130 | height: 15px;
131 | color: var(--gray-color);
132 | }
133 | }
134 |
135 | &:hover {
136 | background-color: var(--secondary-color);
137 | border-color: var(--secondary-color);
138 |
139 | svg {
140 | color: var(--white-color);
141 | }
142 | }
143 |
144 | @media screen and (min-width: 2000px) {
145 | width: 70px;
146 | height: 70px;
147 |
148 | margin: 0.5rem 0;
149 |
150 | svg {
151 | width: 30px;
152 | height: 30px;
153 | }
154 | }
155 | }
156 | }
157 |
158 | .app__navigation {
159 | display: flex;
160 | justify-content: center;
161 | align-items: center;
162 | flex-direction: column;
163 |
164 | padding: 1rem;
165 |
166 | .app__navigation-dot {
167 | width: 10px;
168 | height: 10px;
169 | border-radius: 50%;
170 | background-color: #cbcbcb;
171 | margin: 0.5rem;
172 |
173 | transition: background-color 0.2s ease-in-out;
174 |
175 | &:hover {
176 | background-color: var(--secondary-color);
177 | }
178 |
179 | @media screen and (min-width: 2000px) {
180 | width: 20px;
181 | height: 20px;
182 | }
183 | }
184 | }
185 |
186 | @media screen and (max-width: 500px) {
187 | .app__navigation,
188 | .app__social {
189 | display: none;
190 | }
191 |
192 | .copyright {
193 | padding: 2rem;
194 | }
195 | }
196 |
197 | .portfolio-button {
198 | padding: 1rem 2rem;
199 | margin-top: 2rem;
200 | border: none;
201 | outline: none;
202 | border-radius: 10px;
203 | font-weight: 500;
204 | cursor: pointer;
205 | color: var(--secondary-color);
206 | border: 1px solid var(--secondary-color);
207 | background: linear-gradient(var(--secondary-color), var(--secondary-color));
208 | background-position: 50% 50%;
209 | background-repeat: no-repeat;
210 | background-size: 0% 100%;
211 | transition: background-size 0.3s ease-in-out, color 0.3s ease-in-out;
212 | &:hover {
213 | background-size: 100% 100%;
214 | color: var(--white-color);
215 | }
216 | }
217 |
218 | .none {
219 | display: none;
220 | }
221 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/Ingram Robot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/Ingram Robot.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/about01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/about01.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/about02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/about02.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/about03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/about03.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/about04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/about04.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/aboutIMG-my-edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/aboutIMG-my-edit.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/aboutIMG-pea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/aboutIMG-pea.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/aboutImg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/adidas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/adidas.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/amazon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/amazon.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/api.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/api.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/asus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/asus.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/bgIMG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/bgIMG.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/bgWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/bgWhite.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/bolt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/bolt.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/cpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/cpp.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/css.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/email.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/figma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/figma.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/flutter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/flutter.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/fullstack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/fullstack.jpg
--------------------------------------------------------------------------------
/frontend_react/src/assets/git.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/git.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/good_webdeveloper.svg:
--------------------------------------------------------------------------------
1 | feeling_proud
--------------------------------------------------------------------------------
/frontend_react/src/assets/graphql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/graphql.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/html.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/javascript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/javascript.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/leadership.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/leadership.jpg
--------------------------------------------------------------------------------
/frontend_react/src/assets/letter-P-circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/letter-P.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/logo.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
17 |
19 |
20 |
22 | image/svg+xml
23 |
25 |
26 |
27 |
28 |
40 |
42 |
47 |
50 |
51 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/machinelearning.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/mobile.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/mu5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/mu5.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/nb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/nb.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/node.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/problemSolving.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/problemSolving.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/problemSolving.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/profile.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/programmer.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_react/src/assets/python.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/python.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/react.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/react.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/redux.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/robot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/robot.jpg
--------------------------------------------------------------------------------
/frontend_react/src/assets/sass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/sass.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/skype.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/skype.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/spotify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/spotify.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/testimonial1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/testimonial1.jpg
--------------------------------------------------------------------------------
/frontend_react/src/assets/testimonial2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/testimonial2.jpg
--------------------------------------------------------------------------------
/frontend_react/src/assets/testimonialBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/testimonialBg.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/typescript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/typescript.png
--------------------------------------------------------------------------------
/frontend_react/src/assets/vue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/frontend_react/src/assets/vue.png
--------------------------------------------------------------------------------
/frontend_react/src/client.js:
--------------------------------------------------------------------------------
1 | import sanityClient from "@sanity/client";
2 | import imageUrlBuilder from "@sanity/image-url";
3 |
4 | export const client = sanityClient({
5 | projectId: process.env.REACT_APP_SANITY_PROJECT_ID,
6 | dataset: "production",
7 | apiVersion: "2022-02-01",
8 | useCdn: true,
9 | token: process.env.REACT_APP_SANITY_TOKEN,
10 | });
11 |
12 | const builder = imageUrlBuilder(client);
13 |
14 | export const urlFor = (source) => builder.image(source);
15 |
--------------------------------------------------------------------------------
/frontend_react/src/components/Footer/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { BsInstagram } from "react-icons/bs";
3 | import { GrLinkedinOption } from "react-icons/gr";
4 | import { FaFacebookF } from "react-icons/fa";
5 | import { motion } from "framer-motion";
6 |
7 | import "./Footer.scss";
8 | const Footer = () => {
9 | const parentVariant = {
10 | view: {
11 | opacity: [0, 1],
12 | transition: {
13 | duration: 0.1,
14 | when: "beforeChildren",
15 | staggerChildren: 0.15,
16 | },
17 | },
18 | };
19 |
20 | const childSocialVariant = {
21 | view: {
22 | y: [-300, 0],
23 | opacity: [0, 1],
24 | transition: {
25 | opacity: {
26 | duration: 0.6,
27 | },
28 | duration: 0.3,
29 | ease: "easeInOut",
30 | },
31 | },
32 | };
33 | const childCopyVariant = {
34 | view: {
35 | y: [-100, 0],
36 | opacity: [0, 1],
37 | transition: {
38 | opacity: {
39 | duration: 0.6,
40 | },
41 | duration: 0.3,
42 | ease: "easeInOut",
43 | },
44 | },
45 | };
46 |
47 | return (
48 |
49 |
54 |
59 |
65 |
66 |
67 |
68 |
73 |
79 |
80 |
81 |
82 |
87 |
93 |
94 |
95 |
96 |
97 |
102 |
107 | © 2022 Praveen
108 |
109 |
114 | ALL RIGHTS RESERVED
115 |
116 |
117 |
118 | );
119 | };
120 |
121 | export default Footer;
122 |
--------------------------------------------------------------------------------
/frontend_react/src/components/Footer/Footer.scss:
--------------------------------------------------------------------------------
1 | .app__footer {
2 | width: 100%;
3 | justify-content: space-between !important;
4 | align-items: center;
5 | padding: 1rem 2rem;
6 | background-color: #2f2e41;
7 |
8 | @media screen and (max-width: 500px) {
9 | flex-direction: column;
10 | }
11 | @media screen and (min-width: 2000px) {
12 | padding: 2rem;
13 | }
14 | }
15 |
16 | .app__footer-contacts {
17 | flex-direction: row;
18 | margin-left: 2rem;
19 |
20 | div {
21 | transition: all 0.25s ase-in-out;
22 | margin: 0.5rem;
23 | border-radius: 50%;
24 | width: 40px;
25 | height: 40px;
26 | border: 1px solid var(--white-color);
27 | a {
28 | width: 100%;
29 | height: 100%;
30 | svg {
31 | width: 20px;
32 | height: 20px;
33 | color: var(--white-color);
34 | }
35 | }
36 |
37 | &:hover {
38 | background-color: var(--white-color);
39 |
40 | svg {
41 | color: #2f2e41;
42 | }
43 | }
44 | }
45 |
46 | @media screen and (max-width: 500px) {
47 | margin-left: 0;
48 | margin-bottom: 0.5rem;
49 |
50 | div {
51 | width: 30px;
52 | height: 30px;
53 |
54 | a {
55 | svg {
56 | width: 15px;
57 | height: 15px;
58 | }
59 | }
60 | }
61 | }
62 | @media screen and (min-width: 2000px) {
63 | div {
64 | width: 50px;
65 | height: 50px;
66 |
67 | svg {
68 | width: 25px;
69 | height: 25px;
70 | }
71 | }
72 | }
73 | }
74 |
75 | .app__footer-copyrights {
76 | margin-right: 2rem;
77 |
78 | p {
79 | text-align: center;
80 | text-transform: uppercase;
81 | margin: 0.25rem 0;
82 | }
83 |
84 | @media screen and (max-width: 500px) {
85 | margin-right: 0;
86 | // margin-bottom: 0.5rem;
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/frontend_react/src/components/Navbar/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 |
3 | import { HiMenuAlt4, HiX } from "react-icons/hi";
4 | import { motion } from "framer-motion";
5 |
6 | import { images } from "../../constants";
7 |
8 | import "./Navbar.scss";
9 |
10 | const Navbar = () => {
11 | const [toggle, setToggle] = useState(false);
12 | const [classFloat, setClassFloat] = useState("");
13 | const [active, setActive] = useState("");
14 |
15 | useEffect(() => {
16 | window.addEventListener("scroll", stickNavBar);
17 |
18 | return () => {
19 | window.removeEventListener("scroll", stickNavBar);
20 | };
21 | }, []);
22 |
23 | const stickNavBar = () => {
24 | if (window !== undefined) {
25 | let windowHeight = window.scrollY;
26 | if (windowHeight > 250) {
27 | setClassFloat("navbar-float");
28 | } else {
29 | setClassFloat("");
30 | }
31 | }
32 | };
33 |
34 | return (
35 |
36 |
37 |
38 |
39 |
53 |
54 |
55 |
setToggle(true)} />
56 | {toggle && (
57 |
61 | setToggle(false)} />
62 |
63 | {[
64 | "home",
65 | "about",
66 | "work",
67 | "skills",
68 | "testimonials",
69 | "contact",
70 | ].map((item) => (
71 |
72 | setToggle(false)}>
73 | {item}
74 |
75 |
76 | ))}
77 |
78 |
79 | )}
80 |
81 |
82 | );
83 | };
84 |
85 | export default Navbar;
86 |
--------------------------------------------------------------------------------
/frontend_react/src/components/Navbar/Navbar.scss:
--------------------------------------------------------------------------------
1 | .app__navbar {
2 | width: 100%;
3 | display: flex;
4 | justify-content: space-between;
5 | align-items: center;
6 |
7 | padding: 1rem 2rem;
8 | // background-color: rgba($color: #ffffff, $alpha: 0.25);
9 | // backdrop-filter: blur(4px);
10 | // -webkit-backdrop-filter: blur(4px);
11 | // border: 1px solid rgba($color: #ffffff, $alpha: 0.18);
12 |
13 | position: fixed;
14 | z-index: 2;
15 |
16 | transition: all 0.3s ease;
17 | }
18 |
19 | .navbar-float {
20 | background-color: var(--white-color);
21 | box-shadow: 0 0px 20px rgba(0, 0, 0, 0.2);
22 | }
23 |
24 | .app__navbar-logo {
25 | display: flex;
26 | justify-content: center;
27 | align-items: center;
28 |
29 | img {
30 | width: 90px;
31 | height: 20px;
32 | // object-fit: scale-down;
33 | }
34 |
35 | @media screen and (min-width: 2000px) {
36 | width: 180px;
37 | height: 40px;
38 | }
39 | }
40 |
41 | .app__navbar-links {
42 | flex: 1;
43 | display: flex;
44 | justify-content: center;
45 | align-items: center;
46 |
47 | list-style: none;
48 |
49 | li {
50 | margin: 0 1rem;
51 | cursor: pointer;
52 | // height: 10px;
53 |
54 | a {
55 | color: var(--gray-color);
56 | // flex-direction: column;
57 | margin: 5px 0;
58 | text-decoration: none;
59 | text-transform: uppercase;
60 | font-weight: 600;
61 |
62 | transition: all 0.3s ease-in-out;
63 |
64 | &::after {
65 | display: block;
66 | content: "";
67 | border-bottom: 1px solid var(--secondary-color);
68 | transform: scaleX(0);
69 | transition: transform 0.25s ease-in-out;
70 | transform-origin: 100% 50%;
71 | }
72 |
73 | &:hover {
74 | color: var(--secondary-color);
75 | }
76 | &:hover:after {
77 | transform-origin: 0% 50%;
78 | transform: scaleX(1);
79 | }
80 | }
81 | }
82 |
83 | @media screen and (max-width: 900px) {
84 | display: none;
85 | }
86 | }
87 |
88 | .active {
89 | a {
90 | color: var(--secondary-color) !important;
91 | font-weight: 800;
92 | }
93 | }
94 |
95 | .app__navbar-menu {
96 | width: 35px;
97 | height: 35px;
98 | border-radius: 50%;
99 | position: relative;
100 |
101 | display: flex;
102 | justify-content: center;
103 | align-items: center;
104 | background-color: var(--secondary-color);
105 |
106 | svg {
107 | color: var(--white-color);
108 | width: 70%;
109 | height: 70%;
110 | }
111 |
112 | div {
113 | position: fixed;
114 | top: 0;
115 | bottom: 0;
116 | right: 0;
117 | z-index: 5;
118 |
119 | padding: 1rem;
120 | width: 80%;
121 | height: 100vh;
122 |
123 | display: flex;
124 | justify-content: flex-end;
125 | align-items: flex-end;
126 | flex-direction: column;
127 |
128 | background: url("../../assets/bgWhite.png");
129 | background-color: var(--white-color);
130 | background-size: cover;
131 | background-repeat: repeat;
132 | box-shadow: 0px 0px 20px rgba(168, 168, 168, 0.15);
133 |
134 | svg {
135 | width: 35px;
136 | height: 35px;
137 | color: var(--secondary-color);
138 | margin: 0.1rem 1rem;
139 | }
140 |
141 | ul {
142 | list-style: none;
143 | margin: 0;
144 | padding: 0;
145 |
146 | width: 100%;
147 | height: 100%;
148 |
149 | display: flex;
150 | justify-content: flex-start;
151 | align-items: flex-start;
152 | flex-direction: column;
153 |
154 | li {
155 | margin: 1rem;
156 |
157 | a {
158 | color: var(--gray-color);
159 | text-transform: uppercase;
160 | font-weight: 500;
161 | text-decoration: none;
162 | transition: all 0.3s ease-in-out;
163 |
164 | &:hover {
165 | color: var(--secondary-color);
166 | }
167 | }
168 | }
169 | }
170 |
171 | @media screen and (min-width: 900px) {
172 | display: none;
173 | }
174 | }
175 |
176 | @media screen and (min-width: 900px) {
177 | display: none;
178 | }
179 | }
180 |
--------------------------------------------------------------------------------
/frontend_react/src/components/NavigationDots.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const NavigationDots = ({ active }) => {
4 | return (
5 |
6 | {["home", "about", "work", "skills", "testimonials", "contact"].map(
7 | (item, index) => (
8 |
14 | )
15 | )}
16 |
17 | );
18 | };
19 |
20 | export default NavigationDots;
21 |
--------------------------------------------------------------------------------
/frontend_react/src/components/SocialMedia.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import { BsLinkedin, BsInstagram } from "react-icons/bs";
4 | import { FaFacebookF } from "react-icons/fa";
5 |
6 | const SocialMedia = () => {
7 | return (
8 |
40 | );
41 | };
42 |
43 | export default SocialMedia;
44 |
--------------------------------------------------------------------------------
/frontend_react/src/components/index.js:
--------------------------------------------------------------------------------
1 | export { default as Navbar } from "./Navbar/Navbar";
2 | export { default as NavigationDots } from "./NavigationDots";
3 | export { default as SocialMedia } from "./SocialMedia";
4 | export { default as Footer } from "./Footer/Footer";
5 |
--------------------------------------------------------------------------------
/frontend_react/src/constants/images.js:
--------------------------------------------------------------------------------
1 | import email from "../assets/email.png";
2 | import mobile from "../assets/mobile.png";
3 | import api from "../assets/api.png";
4 | import cpp from "../assets/cpp.png";
5 | import css from "../assets/css.png";
6 | import figma from "../assets/figma.png";
7 | import flutter from "../assets/flutter.png";
8 | import git from "../assets/git.png";
9 | import graphql from "../assets/graphql.png";
10 | import html from "../assets/html.png";
11 | import javascript from "../assets/javascript.png";
12 | import mu5 from "../assets/mu5.png";
13 | import node from "../assets/node.png";
14 | import python from "../assets/python.png";
15 | import react from "../assets/react.png";
16 | import redux from "../assets/redux.png";
17 | import sass from "../assets/sass.png";
18 | import typescript from "../assets/typescript.png";
19 | import vue from "../assets/vue.png";
20 |
21 | import about01 from "../assets/about01.png";
22 | import about02 from "../assets/about02.png";
23 | import about03 from "../assets/about03.png";
24 | import about04 from "../assets/about04.png";
25 | import aboutImg from "../assets/aboutImg.svg";
26 | import aboutmine from "../assets/aboutIMG-my-edit.png";
27 | import aboutpea from "../assets/aboutIMG-pea.png";
28 |
29 | import profile from "../assets/profile.png";
30 | import programmer from "../assets/programmer.svg";
31 | import testimonialBg from "../assets/testimonialBg.png";
32 | import circle from "../assets/circle.svg";
33 | import logo from "../assets/logo.png";
34 |
35 | import adidas from "../assets/adidas.png";
36 | import amazon from "../assets/amazon.png";
37 | import asus from "../assets/asus.png";
38 | import bolt from "../assets/bolt.png";
39 | import nb from "../assets/nb.png";
40 | import skype from "../assets/skype.png";
41 | import spotify from "../assets/spotify.png";
42 |
43 | const images = {
44 | email,
45 | mobile,
46 | api,
47 | cpp,
48 | css,
49 | figma,
50 | flutter,
51 | git,
52 | graphql,
53 | html,
54 | javascript,
55 | mu5,
56 | node,
57 | python,
58 | react,
59 | redux,
60 | sass,
61 | typescript,
62 | vue,
63 | about01,
64 | about02,
65 | about03,
66 | about04,
67 | aboutImg,
68 | aboutmine,
69 | aboutpea,
70 | profile,
71 | programmer,
72 | testimonialBg,
73 | circle,
74 | logo,
75 | adidas,
76 | amazon,
77 | asus,
78 | bolt,
79 | nb,
80 | skype,
81 | spotify,
82 | };
83 |
84 | export default images;
85 |
--------------------------------------------------------------------------------
/frontend_react/src/constants/index.js:
--------------------------------------------------------------------------------
1 | export { default as images } from "./images";
2 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/About/About.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { motion } from "framer-motion";
3 |
4 | import { images } from "../../constants";
5 | import { client, urlFor } from "../../client";
6 | import { AppWrap, MotionWrap } from "../../wrapper";
7 | import "./About.scss";
8 |
9 | const About = () => {
10 | const [abouts, setAbouts] = useState([]);
11 | const [aboutMe, setAboutMe] = useState({});
12 |
13 | useEffect(() => {
14 | const aboutsQuery = '*[_type == "abouts"]';
15 | const aboutMeQuery = `*[_type == "aboutme"][0]{
16 | profileImg,
17 | description,
18 | "resumeUrl": resume.asset -> url
19 | }`;
20 | client.fetch(aboutsQuery).then((data) => {
21 | setAbouts(data);
22 | });
23 | client.fetch(aboutMeQuery).then((data) => {
24 | setAboutMe(data);
25 | });
26 | }, []);
27 |
28 | const viewResumeHandler = () => {
29 | window.open(aboutMe.resumeUrl, "_blank");
30 | };
31 |
32 | return (
33 | <>
34 |
35 | I know that Good Design
36 |
37 | means Good Business
38 |
39 |
40 |
41 |
42 |
43 |
51 |
52 |
53 |
54 |
About Me
55 |
59 |
60 |
61 | Resume
62 |
63 |
64 |
65 |
66 |
67 |
68 | {abouts.map((about, index) => (
69 |
77 |
78 |
79 | {about.title}
80 |
81 |
82 | {about.description}
83 |
84 |
85 | ))}
86 |
87 | >
88 | );
89 | };
90 |
91 | export default AppWrap(
92 | MotionWrap(About, "app__about"),
93 | "about",
94 | "app__whitebg"
95 | );
96 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/About/About.scss:
--------------------------------------------------------------------------------
1 | .app__about {
2 | flex: 1;
3 | flex-direction: column;
4 | width: 100%;
5 | }
6 |
7 | .app__about-context {
8 | width: 100%;
9 | // height: fit-content;
10 | flex: 1;
11 | flex-direction: row-reverse;
12 | justify-content: flex-start;
13 | align-items: flex-start;
14 | margin-top: 2rem;
15 | padding: 1rem;
16 |
17 | @media screen and (max-width: 1000px) {
18 | width: 80%;
19 | flex-direction: column;
20 | }
21 | }
22 |
23 | .app__about-img {
24 | // padding: 0 0 1.2rem 0;
25 | div {
26 | // align-items: flex-start;
27 | background: linear-gradient(rgba($color: #6b7688, $alpha: 0.35), #fff);
28 | width: 200px;
29 | height: 200px;
30 | border-radius: 50%;
31 | position: relative;
32 | // border: 1px solid black;
33 | img {
34 | position: absolute;
35 | bottom: 1.2rem;
36 | max-width: 100%;
37 | max-height: 100%;
38 | box-sizing: border-box;
39 | object-fit: cover;
40 | transform: scale(1.2);
41 | }
42 | }
43 |
44 | @media screen and (max-width: 768px) {
45 | width: 80%;
46 | }
47 |
48 | @media screen and (max-width: 300px) {
49 | div {
50 | width: 150px;
51 | height: 150px;
52 | }
53 | }
54 | }
55 |
56 | .app__about-data {
57 | width: 100%;
58 | margin: 2rem;
59 | flex-direction: column;
60 | justify-content: flex-start !important;
61 | align-items: flex-start !important;
62 |
63 | h2 {
64 | margin-bottom: 1rem;
65 | font-size: 1.5rem;
66 | }
67 | p {
68 | text-align: justify;
69 | font-size: 1rem;
70 | font-family: var(--font-base);
71 | span {
72 | font-weight: 800;
73 | color: var(--secondary-color);
74 | }
75 | }
76 |
77 | @media screen and (max-width: 1000px) {
78 | div:nth-child(3) {
79 | width: 100%;
80 | display: flex;
81 | justify-content: center;
82 | align-items: center;
83 | }
84 | }
85 | }
86 |
87 | .app__profiles {
88 | display: flex;
89 | flex-wrap: wrap;
90 | justify-content: center;
91 | align-items: flex-start;
92 | margin-top: 1rem;
93 | }
94 |
95 | .app__profile-item {
96 | width: 190px;
97 | display: flex;
98 | justify-content: flex-start;
99 | align-items: flex-start;
100 | flex-direction: column;
101 | margin: 2rem;
102 |
103 | img {
104 | width: 100%;
105 | height: 170px;
106 | object-fit: cover;
107 | border-radius: 15px;
108 | }
109 |
110 | @media screen and (min-width: 2000px) {
111 | width: 370px;
112 | margin: 2rem 4rem;
113 |
114 | img {
115 | height: 320px;
116 | }
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Contact/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | import { images } from "../../constants";
4 | import { AppWrap, MotionWrap } from "../../wrapper";
5 | import { client } from "../../client";
6 |
7 | import "./Contact.scss";
8 |
9 | const Contact = () => {
10 | const [formData, setFormData] = useState({
11 | name: "",
12 | email: "",
13 | subject: "",
14 | message: "",
15 | });
16 | const [isFormSubmitted, setIsFormSubmitted] = useState(false);
17 | const [loading, setIsLoading] = useState(false);
18 |
19 | const { email, message, subject, name } = formData;
20 |
21 | const handleChangeInput = (e) => {
22 | const { name: fieldName, value } = e.target;
23 |
24 | setFormData((prev) => {
25 | return { ...prev, [fieldName]: value };
26 | });
27 | };
28 |
29 | const handleSubmit = () => {
30 | setIsLoading(true);
31 |
32 | const contact = {
33 | _type: "contact",
34 | name: name,
35 | email: email,
36 | subject: subject,
37 | message: message,
38 | };
39 |
40 | client.create(contact).then((data) => {
41 | setIsLoading(false);
42 | setIsFormSubmitted(true);
43 | });
44 | };
45 |
46 | return (
47 | <>
48 |
49 | Take a coffee & chat with me
50 |
51 |
52 |
66 | {!isFormSubmitted ? (
67 |
68 |
69 |
77 |
78 |
79 |
87 |
88 |
89 |
97 |
98 |
99 |
105 |
106 |
111 | {loading ? "Sending Message" : "Send Message"}
112 |
113 |
114 | ) : (
115 |
116 |
117 | Thank you for getting in Touch!
118 |
119 |
120 | )}
121 | >
122 | );
123 | };
124 |
125 | export default AppWrap(
126 | MotionWrap(Contact, "app__contact"),
127 | "contact",
128 | "app__whitebg"
129 | );
130 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Contact/Contact.scss:
--------------------------------------------------------------------------------
1 | .app__contact {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__contact-cards {
8 | width: 60%;
9 | display: flex;
10 | justify-content: space-evenly;
11 | align-items: center;
12 | flex-wrap: wrap;
13 | margin: 4rem 2rem 2rem;
14 |
15 | .app__contact-card {
16 | min-width: 290px;
17 | display: flex;
18 | flex-direction: row;
19 | justify-content: flex-start;
20 | align-items: center;
21 |
22 | margin: 1rem 0;
23 | padding: 1rem;
24 | border-radius: 10px;
25 | cursor: pointer;
26 | background-color: #fef4f5;
27 | transition: all 0.3s ease-in-out;
28 |
29 | img {
30 | width: 40px;
31 | height: 40px;
32 | margin: 0 0.7rem;
33 | }
34 |
35 | p {
36 | font-weight: 600;
37 | }
38 |
39 | a {
40 | text-decoration: none;
41 | font-weight: 500;
42 | }
43 |
44 | &:hover {
45 | box-shadow: 0 0 25px #fef4f5;
46 | }
47 |
48 | @media screen and (max-width: 450px) {
49 | min-width: 0px;
50 | width: 100%;
51 |
52 | img {
53 | margin: 0 0.5rem;
54 | width: 35px;
55 | height: 35px;
56 | }
57 | }
58 | }
59 |
60 | @media screen and (max-width: 768px) {
61 | width: 100%;
62 | }
63 | }
64 |
65 | .app__contact-cards .app__contact-card:last-child {
66 | background-color: #f2f7fb;
67 | }
68 |
69 | .app__contact-form {
70 | width: 60%;
71 | flex-direction: column;
72 | margin: 1rem 2rem;
73 |
74 | div {
75 | width: 100%;
76 | margin: 0.75rem 0;
77 | border-radius: 10px;
78 | cursor: pointer;
79 | background-color: var(--primary-color);
80 |
81 | transition: all 0.3s ease-in-out;
82 |
83 | input,
84 | textarea {
85 | width: 100%;
86 | padding: 0.95rem;
87 | border: none;
88 | border-radius: 7px;
89 | background-color: var(--primary-color);
90 |
91 | font-family: var(--font-base);
92 | color: var(--secondary-color) !important;
93 | outline: none;
94 | }
95 |
96 | textarea {
97 | height: 170px;
98 | }
99 |
100 | &:hover {
101 | box-shadow: 0 0 25px var(--primary-color);
102 | }
103 | }
104 |
105 | // button {
106 | // padding: 1rem 2rem;
107 | // border-radius: 10px;
108 | // border: none;
109 | // background-color: var(--secondary-color);
110 |
111 | // font-weight: 500;
112 | // color: var(--white-color);
113 | // outline: none;
114 | // margin-top: 2rem;
115 | // font-family: var(--font-base);
116 | // cursor: pointer;
117 | // }
118 |
119 | @media screen and (max-width: 768px) {
120 | width: 100%;
121 | margin: 1rem 0;
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Header/Header.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { motion } from "framer-motion";
3 | import { useTypewriter, Cursor } from "react-simple-typewriter";
4 |
5 | import { AppWrap } from "../../wrapper";
6 | import { images } from "../../constants";
7 | import "./Header.scss";
8 |
9 | const scaleVariants = {
10 | whileInView: {
11 | scale: [0, 1],
12 | opacity: [0, 1],
13 | },
14 | transition: {
15 | duration: 0.5,
16 | ease: "easeInOut",
17 | },
18 | };
19 |
20 | const headerSkillVariants = {
21 | visible: {
22 | rotate: [-120, 0],
23 | y: -10,
24 | x: 10,
25 | transition: {
26 | rotate: { delay: 0.5, duration: 0.3, ease: "easeOut" },
27 | y: {
28 | repeat: Infinity,
29 | repeatType: "reverse",
30 | duration: 2,
31 | ease: "easeOut",
32 | },
33 | x: {
34 | repeat: Infinity,
35 | repeatType: "mirror",
36 | duration: 5,
37 | ease: "easeOut",
38 | },
39 | },
40 | },
41 | hover: {
42 | boxShadow: "0 0 20px rgba(0,0,0,0.2)",
43 | },
44 | };
45 |
46 | const Header = () => {
47 | const { text: tagText } = useTypewriter({
48 | words: ["Fullstack Developer", "ReactJS Developer", "MERN STACK"],
49 | typeSpeed: 100,
50 | loop: false,
51 | });
52 |
53 | return (
54 |
55 |
60 |
61 |
62 |
👋
63 |
64 |
Hello, I am
65 |
Praveen
66 |
67 |
68 |
69 |
{tagText}
70 |
71 | {/*
Enthusiast
*/}
72 |
73 |
74 |
75 |
76 |
81 |
86 |
93 |
94 |
99 | {[images.javascript, images.react, images.node].map((circle, index) => (
100 |
110 |
111 |
112 | ))}
113 |
114 |
115 | );
116 | };
117 |
118 | export default AppWrap(Header, "home");
119 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Header/Header.scss:
--------------------------------------------------------------------------------
1 | #home {
2 | position: relative;
3 | background: url("../../assets/bgIMG.png");
4 | background-repeat: repeat;
5 | background-size: cover;
6 | background-position: center;
7 |
8 | .app__wrapper {
9 | padding: 0;
10 |
11 | .copyright {
12 | display: none;
13 | }
14 | }
15 | }
16 |
17 | .app__header {
18 | flex: 1;
19 | width: 100%;
20 | height: 100%;
21 |
22 | flex-direction: row;
23 |
24 | padding: 6rem 2rem 0;
25 |
26 | @media screen and (min-width: 2000px) {
27 | padding-top: 8rem;
28 | }
29 | @media screen and (max-width: 1200px) {
30 | flex-direction: column;
31 | // padding-top: 8rem;
32 | }
33 | @media screen and (max-width: 450px) {
34 | padding: 6rem 1rem 2rem;
35 | }
36 | }
37 |
38 | .app__header-info {
39 | flex: 0.65;
40 | display: flex;
41 | flex-direction: column;
42 | justify-content: flex-start;
43 | align-items: flex-start;
44 | height: 100%;
45 |
46 | @media screen and (max-width: 2000px) {
47 | width: 100%;
48 | margin-right: 0rem;
49 | }
50 | }
51 |
52 | .app__header-badge {
53 | width: 100%;
54 | display: flex;
55 | flex-direction: column;
56 | justify-content: flex-end;
57 | align-items: flex-end;
58 |
59 | .badge-cmp,
60 | .tag-cmp {
61 | padding: 1rem 2rem;
62 | border: var(--white-color);
63 | border-radius: 15px;
64 | flex-direction: row;
65 | width: auto;
66 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
67 | }
68 |
69 | .tag-cmp {
70 | margin-top: 3rem;
71 | // flex-direction: column;
72 | align-items: center;
73 | p {
74 | width: 100%;
75 | text-transform: uppercase;
76 | text-align: right;
77 | color: var(--secondary-color);
78 | font-weight: bold;
79 | }
80 | span {
81 | color: var(--secondary-color);
82 | }
83 | }
84 |
85 | span {
86 | font-size: 2.5rem;
87 | @media screen and (min-width: 2000px) {
88 | font-size: 5rem;
89 | }
90 | }
91 |
92 | @media screen and (max-width: 1200px) {
93 | justify-content: flex-start;
94 | align-items: flex-start;
95 | }
96 | }
97 |
98 | .app__header-circles {
99 | flex: 0.75;
100 | display: flex;
101 | flex-direction: column;
102 | justify-content: space-evenly;
103 | align-items: flex-start;
104 | height: 100%;
105 | margin-left: 1rem;
106 |
107 | div {
108 | width: 100px;
109 | height: 100px;
110 | border-radius: 50%;
111 |
112 | background-color: var(--white-color);
113 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
114 |
115 | img {
116 | width: 60%;
117 | height: 60%;
118 | object-fit: contain;
119 | pointer-events: none;
120 | }
121 | }
122 |
123 | div:nth-child(1) {
124 | width: 100px;
125 | height: 100px;
126 | }
127 | div:nth-child(2) {
128 | margin: 1.75rem;
129 | width: 150px;
130 | height: 150px;
131 | }
132 | div:nth-child(3) {
133 | width: 100px;
134 | height: 100px;
135 | }
136 |
137 | @media screen and (min-width: 2000px) {
138 | div:nth-child(1) {
139 | width: 400px;
140 | height: 400px;
141 | }
142 | div:nth-child(2) {
143 | margin: 1.75rem;
144 | width: 250px;
145 | height: 250px;
146 | }
147 | div:nth-child(3) {
148 | width: 200px;
149 | height: 200px;
150 | }
151 | }
152 |
153 | @media screen and (max-width: 1200px) {
154 | width: 100%;
155 | flex-direction: row;
156 | flex-wrap: wrap;
157 | margin-left: 0;
158 |
159 | div {
160 | margin: 1rem;
161 | }
162 | }
163 | }
164 |
165 | .app__header-img {
166 | flex: 1;
167 | height: 100%;
168 |
169 | display: flex;
170 | justify-content: flex-end;
171 | align-items: flex-end;
172 |
173 | position: relative;
174 |
175 | img {
176 | width: 100%;
177 | object-fit: contain;
178 | z-index: 1;
179 | }
180 |
181 | .overlay_circle {
182 | position: absolute;
183 | left: 0;
184 | right: 0;
185 | bottom: 0;
186 | z-index: 0;
187 | width: 100%;
188 | height: 90%;
189 | }
190 |
191 | @media screen and (max-width: 1200px) {
192 | margin: 2rem 0;
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Skills/Skills.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { motion } from "framer-motion";
3 | import ReactTooltip from "react-tooltip";
4 |
5 | import { AppWrap, MotionWrap } from "../../wrapper";
6 | import { client, urlFor } from "../../client";
7 | import "./Skills.scss";
8 |
9 | const Skills = () => {
10 | const [skills, setSkills] = useState([]);
11 | const [experience, setExperience] = useState();
12 |
13 | const skillVariants = {
14 | view: {
15 | x: [-15, 0],
16 | opacity: [0, 1],
17 | transition: {
18 | x: {
19 | type: "spring",
20 | stiffness: "10",
21 | },
22 | duration: 0.5,
23 | ease: "easeInOut",
24 | },
25 | },
26 | hover: {
27 | y: -7,
28 | transition: {
29 | duration: 0.3,
30 | ease: "easeInOut",
31 | },
32 | },
33 | tap: {
34 | y: -7,
35 | scale: 1.05,
36 | transition: {
37 | duration: 0.2,
38 | ease: "easeInOut",
39 | },
40 | },
41 | };
42 |
43 | useEffect(() => {
44 | const skillsQuery = '*[_type=="skills"] | order(proficiency desc)';
45 | const experienceQuery = '*[_type=="experiences"] | order(year desc)';
46 | client.fetch(skillsQuery).then((skillsData) => {
47 | setSkills(skillsData);
48 | });
49 | client.fetch(experienceQuery).then((experienceData) => {
50 | setExperience(experienceData);
51 | });
52 | }, []);
53 | return (
54 | <>
55 |
56 | Skills & Experience
57 |
58 |
59 |
60 | {skills.map((skill, index) => (
61 |
69 |
73 |
74 |
75 | {skill.name}
76 |
77 | ))}
78 |
79 |
80 | {experience?.map((exp) => (
81 |
82 |
85 |
86 | {exp?.works?.map((work) => (
87 |
88 |
100 | {work.name}
101 | {work.company}
102 |
103 |
109 | {work.desc}
110 |
111 |
112 | ))}
113 |
114 |
115 | ))}
116 |
117 |
118 | >
119 | );
120 | };
121 |
122 | export default AppWrap(
123 | MotionWrap(Skills, "app__skills"),
124 | "skills",
125 | "app__whitebg"
126 | );
127 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Skills/Skills.scss:
--------------------------------------------------------------------------------
1 | .app__skills {
2 | flex: 1;
3 | flex-direction: column;
4 | width: 100%;
5 | }
6 |
7 | .app__skills-container {
8 | width: 80%;
9 | margin-top: 3rem;
10 | display: flex;
11 | flex-direction: row;
12 |
13 | @media screen and (max-width: 900px) {
14 | width: 100%;
15 | flex-direction: column;
16 | }
17 | }
18 |
19 | .app__skills-list {
20 | flex: 1;
21 | display: flex;
22 | flex-wrap: wrap;
23 | justify-content: flex-start;
24 | align-items: flex-start;
25 | margin-right: 5rem;
26 |
27 | @media screen and (max-width: 900px) {
28 | margin-right: 0;
29 | justify-content: center;
30 | align-items: center;
31 | }
32 | }
33 |
34 | .app__skills-item {
35 | flex-direction: column;
36 | text-align: center;
37 | margin: 1rem;
38 |
39 | transition: all ease-in-out;
40 |
41 | div {
42 | width: 90px;
43 | height: 90px;
44 | border-radius: 50%;
45 | background-color: #fff;
46 |
47 | img {
48 | width: 50%;
49 | height: 50%;
50 | object-fit: contain;
51 | }
52 |
53 | &:hover {
54 | box-shadow: 0 0 25px #fef4f5;
55 | }
56 | @media screen and (min-width: 2000px) {
57 | width: 150px;
58 | height: 150px;
59 | }
60 | @media screen and (max-width: 900px) {
61 | width: 75px;
62 | height: 75px;
63 | }
64 | }
65 |
66 | p {
67 | font-weight: 500;
68 | margin: 0.5rem;
69 | }
70 |
71 | @media screen and (min-width: 2000px) {
72 | margin: 1rem 2rem;
73 | p {
74 | margin-top: 1rem;
75 | }
76 | }
77 | }
78 |
79 | .app__skills-exp {
80 | flex: 1;
81 | display: flex;
82 | flex-direction: column;
83 | justify-content: flex-start;
84 | align-items: flex-start;
85 |
86 | @media screen and (max-width: 900px) {
87 | margin-top: 2rem;
88 | }
89 | }
90 |
91 | .app__skills-exp-item {
92 | width: 100%;
93 | display: flex;
94 | flex-direction: row;
95 | justify-content: flex-start;
96 | align-items: flex-start;
97 | margin: 1rem 0;
98 | }
99 |
100 | .app__skills-exp-works {
101 | flex: 1;
102 | .app__skills-exp-work {
103 | display: flex;
104 | flex-direction: column;
105 | justify-content: flex-start;
106 | align-items: flex-start;
107 | margin-bottom: 1rem;
108 | cursor: pointer;
109 |
110 | h4 {
111 | font-weight: 500;
112 | }
113 | p {
114 | font-weight: 400;
115 | color: var(--gray-color);
116 | margin-top: 5px;
117 | }
118 | }
119 | }
120 |
121 | .app__skills-exp-year {
122 | margin-right: 3rem;
123 | p {
124 | font-weight: 800;
125 | color: var(--secondary-color);
126 | }
127 |
128 | @media screen and (max-width: 450px) {
129 | margin-right: 1rem;
130 | }
131 | }
132 |
133 | .skills-tooltip {
134 | max-width: 300px !important;
135 | background-color: var(--white-color) !important;
136 | box-shadow: 0 0 25px rgba(0, 0, 0, 0.1) !important;
137 | border-radius: 5px !important;
138 | padding: 1rem !important;
139 | color: var(--gray-color) !important;
140 | text-align: center !important;
141 | line-height: 1.5 !important;
142 | opacity: 1 !important;
143 |
144 | @media screen and (min-width: 2000px) {
145 | font-size: 1.75rem !important;
146 | max-width: 500px !important;
147 | line-height: 2 !important;
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Testimonial/Testimonial.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { motion } from "framer-motion";
3 | import { HiChevronLeft, HiChevronRight } from "react-icons/hi";
4 |
5 | import { AppWrap, MotionWrap } from "../../wrapper";
6 | import { client, urlFor } from "../../client";
7 | import "./Testimonial.scss";
8 |
9 | const Testimonial = () => {
10 | const [testimonials, setTestimonials] = useState([]);
11 | const [brands, setBrands] = useState([]);
12 | const [currentIndex, setCurrentIndex] = useState(0);
13 |
14 | useEffect(() => {
15 | const brandsQuery = "*[_type == 'brands']";
16 | const testimonialsQuery = "*[_type == 'testimonials']";
17 |
18 | client.fetch(testimonialsQuery).then((testimonialsData) => {
19 | setTestimonials(testimonialsData);
20 | });
21 |
22 | client.fetch(brandsQuery).then((brandsData) => {
23 | setBrands(brandsData);
24 | });
25 | }, []);
26 |
27 | const handleClick = (index) => {
28 | setCurrentIndex(index);
29 | };
30 |
31 | const test = testimonials[currentIndex];
32 |
33 | return (
34 | <>
35 |
36 | See what Others say about me!
37 |
38 | {testimonials.length && (
39 | <>
40 |
41 |
42 |
43 |
{test.feedback}
44 |
45 |
{test.name}
46 | {test.company}
47 |
48 |
49 |
50 |
51 |
52 |
55 | handleClick(
56 | currentIndex === 0
57 | ? testimonials.length - 1
58 | : currentIndex - 1
59 | )
60 | }
61 | >
62 |
63 |
64 |
67 | handleClick(
68 | currentIndex === testimonials.length - 1
69 | ? 0
70 | : currentIndex + 1
71 | )
72 | }
73 | >
74 |
75 |
76 |
77 | >
78 | )}
79 |
80 |
81 | {brands.map((brand) => (
82 |
87 |
88 |
89 | ))}
90 |
91 | >
92 | );
93 | };
94 |
95 | export default AppWrap(
96 | MotionWrap(Testimonial, "app__testimonial"),
97 | "testimonials",
98 | "app__primarybg"
99 | );
100 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Testimonial/Testimonial.scss:
--------------------------------------------------------------------------------
1 | .app__testimonial {
2 | width: 100%;
3 | flex: 1;
4 | flex-direction: column;
5 | }
6 |
7 | .app__testimonial-carousel {
8 | width: 60%;
9 | min-height: 320px;
10 | background-color: var(--white-color);
11 | margin-top: 2rem;
12 | display: flex;
13 | padding: 2rem;
14 | border-radius: 15px;
15 | box-shadow: 0 0 30px rgba($color: #000000, $alpha: 0.1);
16 | transition: all 0.3s ease-in-out;
17 |
18 | img {
19 | width: 100px;
20 | height: 100px;
21 | border-radius: 50%;
22 | object-fit: cover;
23 | }
24 |
25 | @media screen and (min-width: 2000px) {
26 | min-height: 450px;
27 |
28 | img {
29 | width: 150px;
30 | height: 150px;
31 | }
32 | }
33 |
34 | @media screen and (max-width: 850px) {
35 | width: 100%;
36 | }
37 |
38 | @media screen and (max-width: 600px) {
39 | flex-direction: column;
40 | }
41 | }
42 |
43 | .app__testimonial-content {
44 | flex: 1;
45 | height: 100%;
46 |
47 | padding: 0 2rem;
48 | text-align: left;
49 |
50 | display: flex;
51 | flex-direction: column;
52 | justify-content: space-around;
53 | align-items: flex-start;
54 |
55 | p {
56 | font-size: 1.25rem;
57 | line-height: 2rem;
58 |
59 | color: var(--black-color);
60 | font-family: var(--font-base);
61 | }
62 | h4 {
63 | font-weight: 600;
64 | color: var(--secondary-color);
65 | margin-top: 2rem;
66 | }
67 | h5 {
68 | font-weight: 400;
69 | color: var(--gray-color);
70 | margin-top: 5px;
71 | }
72 | }
73 |
74 | .app__testimonials-btns {
75 | flex-direction: row;
76 | margin-top: 1rem;
77 |
78 | div {
79 | width: 50px;
80 | height: 50px;
81 | border-radius: 50%;
82 | background-color: var(--white-color);
83 | margin: 1rem;
84 | transition: all 0.3s ease-in-out;
85 |
86 | cursor: pointer;
87 |
88 | svg {
89 | width: 20px;
90 | height: 20px;
91 | color: var(--secondary-color);
92 | }
93 |
94 | &:hover {
95 | background-color: var(--secondary-color);
96 | svg {
97 | color: var(--white-color);
98 | }
99 | }
100 | }
101 | }
102 |
103 | .app__testimonials-brands {
104 | width: 80%;
105 | flex-wrap: wrap;
106 | margin-top: 2rem;
107 |
108 | div {
109 | width: 150px;
110 | margin: 1.5rem;
111 |
112 | img {
113 | width: 100%;
114 | height: auto;
115 | object-fit: cover;
116 | filter: grayscale(1);
117 | }
118 |
119 | &:hover {
120 | img {
121 | filter: grayscale(0);
122 | }
123 | }
124 |
125 | @media screen and (min-width: 2000px) {
126 | width: 210px;
127 | margin: 2rem;
128 | }
129 |
130 | @media screen and (max-width: 450px) {
131 | width: 120px;
132 | margin: 1rem;
133 | }
134 | }
135 |
136 | @media screen and (max-width: 800px) {
137 | width: 100%;
138 | }
139 | }
140 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Work/Work.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { AiFillEye, AiFillGithub } from "react-icons/ai";
3 | import { motion } from "framer-motion";
4 |
5 | import { AppWrap, MotionWrap } from "../../wrapper";
6 | import { client, urlFor } from "../../client";
7 | import "./Work.scss";
8 |
9 | const Work = () => {
10 | const [activeFilter, setActiveFilter] = useState("All");
11 | const [animateCard, setAnimateCard] = useState({ y: 0, opacity: 1 });
12 | const [filterWorks, setFilterWorks] = useState([]);
13 | const [works, setWorks] = useState([]);
14 |
15 | const [touched, setTouched] = useState(null);
16 |
17 | useEffect(() => {
18 | const query = '*[_type == "works"]';
19 | client.fetch(query).then((data) => {
20 | setWorks(data);
21 | setFilterWorks(data);
22 | });
23 | }, []);
24 |
25 | const handleFilter = (item) => {
26 | setActiveFilter(item);
27 | setAnimateCard({ opacity: 0, scale: 0.5, y: -100 });
28 |
29 | setTimeout(() => {
30 | setAnimateCard({ opacity: 1, scale: 1, y: 0 });
31 | if (item === "All") {
32 | setFilterWorks(works);
33 | } else {
34 | setFilterWorks(works.filter((work) => work.tags.includes(item)));
35 | }
36 | }, 500);
37 | };
38 |
39 | return (
40 | <>
41 |
42 | My creative Portfolio section
43 |
44 |
45 |
46 | {["All", "ReactJS", "Web Projects", "Machine Learning", "Python"].map(
47 | (item, index) => (
48 |
handleFilter(item)}
51 | className={`app__work-filter-item app__flex p-text ${
52 | activeFilter === item ? "item-active" : ""
53 | }`}
54 | >
55 | {item}
56 |
57 | )
58 | )}
59 |
60 | setTouched(null)}
65 | >
66 | {filterWorks.map((work, index) => (
67 | setTouched(index)}
73 | onTouchStart={() => setTouched(index)}
74 | >
75 |
122 |
123 |
124 | {work.title}
125 |
126 |
131 | {work.description}
132 |
133 |
134 |
{work.tags[0]}
135 |
136 |
137 |
138 | ))}
139 |
140 | >
141 | );
142 | };
143 |
144 | export default AppWrap(
145 | MotionWrap(Work, "app__works"),
146 | "work",
147 | "app__primarybg"
148 | );
149 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/Work/Work.scss:
--------------------------------------------------------------------------------
1 | .app__works {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__work-filter {
8 | display: flex;
9 | flex-direction: row;
10 | justify-content: flex-start;
11 | align-items: center;
12 | margin: 2rem 0 1rem 0;
13 | // width: 100%;
14 |
15 | .app__work-filter-item {
16 | padding: 0.5rem 1rem;
17 | border-radius: 0.5rem;
18 | background-color: #fff;
19 | color: black;
20 | font-weight: 800;
21 | cursor: pointer;
22 |
23 | margin: 0.5rem;
24 | transition: all 0.3s ease;
25 |
26 | &:hover {
27 | background-color: var(--secondary-color);
28 | color: #fff;
29 | }
30 |
31 | @media screen and (min-width: 2000px) {
32 | padding: 1rem 2rem;
33 | border-radius: 0.85rem;
34 | }
35 | }
36 |
37 | .item-active {
38 | background-color: var(--secondary-color);
39 | color: #fff;
40 | }
41 | @media screen and (max-width: 600px) {
42 | flex-wrap: wrap;
43 | }
44 | }
45 |
46 | .app__work-portfolio {
47 | display: flex;
48 | flex-direction: row;
49 | flex-wrap: wrap;
50 | justify-content: center;
51 | align-items: center;
52 |
53 | .app__work-item {
54 | width: 270px;
55 | flex-direction: column;
56 | margin: 2rem;
57 | padding: 1rem;
58 | border-radius: 0.5rem;
59 | background-color: #fff;
60 | color: black;
61 | cursor: pointer;
62 |
63 | // transition: all 0.3s ease;
64 |
65 | &:hover {
66 | box-shadow: 0 0 25px rgba(0, 0, 0, 0.2);
67 | }
68 |
69 | @media screen and (min-width: 2000px) {
70 | width: 470px;
71 | padding: 1.25rem;
72 | }
73 | @media screen and (max-width: 300px) {
74 | min-width: 100%;
75 | margin: 1rem;
76 | }
77 | }
78 | @media screen and (max-width: 300px) {
79 | width: 100%;
80 | }
81 | }
82 |
83 | .app__work-img {
84 | width: 100%;
85 | height: 230px;
86 | position: relative;
87 |
88 | img {
89 | border-radius: 0.5rem;
90 | width: 100%;
91 | height: 100%;
92 | object-fit: cover;
93 | }
94 |
95 | @media screen and (min-width: 2000px) {
96 | height: 350px;
97 | }
98 | }
99 |
100 | .app__work-hover {
101 | position: absolute;
102 | top: 0;
103 | left: 0;
104 | bottom: 0;
105 | right: 0;
106 | width: 100%;
107 | height: 100%;
108 | background-color: rgba(0, 0, 0, 0.5);
109 | border-radius: 0.5rem;
110 |
111 | opacity: 0;
112 | // transition: all 0.3s ease;
113 |
114 | div {
115 | width: 50px;
116 | height: 50px;
117 | border-radius: 50%;
118 | background-color: rgba(0, 0, 0, 0.5);
119 | color: #fff;
120 | margin: 1rem;
121 | font-family: var(--font-base);
122 | font-weight: 800;
123 | cursor: pointer;
124 | transition: all 0.3s ease;
125 |
126 | svg {
127 | width: 50%;
128 | height: 50%;
129 | color: var(--white-color);
130 | transition: all 0.3s ease;
131 | }
132 | }
133 |
134 | &:active {
135 | opacity: 1;
136 | }
137 | }
138 |
139 | .app__work-touched {
140 | opacity: 1;
141 | }
142 |
143 | .app__work-content {
144 | padding: 0.5rem;
145 | flex-direction: column;
146 | width: 100%;
147 | position: relative;
148 |
149 | h4 {
150 | margin-top: 1rem;
151 | line-height: 1.5;
152 | }
153 | h4,
154 | p {
155 | text-align: center;
156 | overflow: hidden;
157 | white-space: nowrap;
158 | text-overflow: ellipsis;
159 | width: 100%;
160 | }
161 |
162 | .app__work-tag {
163 | position: absolute;
164 | padding: 0.5rem 1rem;
165 | background-color: #fff;
166 | top: -25px;
167 | border-radius: 10px;
168 | }
169 | }
170 |
171 | .app__work-touched-nowrap {
172 | .app__work-content {
173 | h4,
174 | p {
175 | white-space: unset;
176 | }
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/frontend_react/src/containers/index.js:
--------------------------------------------------------------------------------
1 | export { default as About } from "./About/About";
2 | export { default as Contact } from "./Contact/Contact";
3 | export { default as Header } from "./Header/Header";
4 | export { default as Skills } from "./Skills/Skills";
5 | export { default as Testimonial } from "./Testimonial/Testimonial";
6 | export { default as Work } from "./Work/Work";
7 |
--------------------------------------------------------------------------------
/frontend_react/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap");
2 |
3 | :root {
4 | --font-base: "DM Sans", sans-serif;
5 |
6 | --primary-color: #edf2f8;
7 | --secondary-color: #313bac;
8 | --black-color: #030303;
9 | --lightGray-color: #e4e4e4;
10 | --gray-color: #6b7688;
11 | --brown-color: #46364a;
12 | --white-color: #ffffff;
13 | }
14 |
15 | * {
16 | box-sizing: border-box;
17 | padding: 0;
18 | margin: 0;
19 | scroll-behavior: smooth;
20 | }
21 |
22 | img {
23 | pointer-events: none;
24 | }
25 |
--------------------------------------------------------------------------------
/frontend_react/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 |
4 | import App from "./App";
5 | import "./index.css";
6 |
7 | const root = ReactDOM.createRoot(document.getElementById("root"));
8 |
9 | root.render( );
10 |
--------------------------------------------------------------------------------
/frontend_react/src/wrapper/AppWrap.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import { NavigationDots, SocialMedia } from "../components";
4 |
5 | const AppWrap = (Component, idName, classNames) =>
6 | function HOC() {
7 | return (
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | );
18 | };
19 |
20 | export default AppWrap;
21 |
--------------------------------------------------------------------------------
/frontend_react/src/wrapper/MotionWrap.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { motion } from "framer-motion";
3 |
4 | const MotionWrap = (Component, classNames) =>
5 | function HOC() {
6 | return (
7 |
12 |
13 |
14 | );
15 | };
16 |
17 | export default MotionWrap;
18 |
--------------------------------------------------------------------------------
/frontend_react/src/wrapper/index.js:
--------------------------------------------------------------------------------
1 | export { default as AppWrap } from "./AppWrap";
2 | export { default as MotionWrap } from "./MotionWrap";
3 |
--------------------------------------------------------------------------------
/images/contact-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/images/contact-page.png
--------------------------------------------------------------------------------
/images/home-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/images/home-page.png
--------------------------------------------------------------------------------
/images/letter-P-circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/skills-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Praveenterax/reactjs-portfolio/44a00fdfe7c5b8bc6c288e30b3334825b30c11d6/images/skills-page.png
--------------------------------------------------------------------------------