├── .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 |
2 | 9 | 10 | 11 | 18 | 19 | [![Contributors][contributors-shield]][contributors-url] 20 | [![Forks][forks-shield]][forks-url] 21 | [![Stargazers][stars-shield]][stars-url] 22 | [![Issues][issues-shield]][issues-url] 23 | [![MIT License][license-shield]][license-url] 24 | [![LinkedIn][linkedin-shield]][linkedin-url] 25 | 26 | 27 |
28 |
29 | 30 | Logo 31 | 32 | 33 |

Portfolio Website - React JS

34 | 35 |

36 | A well designed portfolio to showcase your skills and achievements. A beautiful and functional portfolio with smooth animations. Built using React JS, Sanity, Framer-motion. 37 |
38 | Portfolio Website 39 |
40 | Explore the docs » 41 |
42 |
43 | View Demo 44 | · 45 | Report Bug 46 | · 47 | Request Feature 48 |

49 |
50 | 51 | 52 |
53 | Table of Contents 54 |
    55 |
  1. 56 | About The Project 57 | 60 |
  2. 61 |
  3. 62 | Getting Started 63 | 67 |
  4. 68 |
  5. Usage
  6. 69 |
  7. Roadmap
  8. 70 |
  9. Contributing
  10. 71 |
  11. License
  12. 72 |
  13. Contact
  14. 73 |
  15. Acknowledgments
  16. 74 |
75 |
76 | 77 | 78 | 79 | ## About The Project 80 | 81 | [![Home Page][product-screenshot-1]](https://praveenterax-portfolio.netlify.app) 82 | [![Skills Page][product-screenshot-2]](https://praveenterax-portfolio.netlify.app/#skills) 83 | [![Contact Page][product-screenshot-3]](https://praveenterax-portfolio.netlify.app/#contact) 84 | 85 | Website is completely built using the React JS and Sanity knowledge. No need to be proficient to understand or change the content, basic understanding is enough fill the gaps. 86 | 87 | It is completely responsive works fine on most of the devices and highly interactive. Data can be changed using a Content Management Service(CMS), [Sanity](https://www.sanity.io/). Because of this data can be changed anytime even after deployment. 88 | 89 |

(back to top)

90 | 91 | ### Built With 92 | 93 | - [React.js](https://reactjs.org/) 94 | - [Sanity](https://www.sanity.io/) 95 | - [SCSS](https://sass-lang.com/) 96 | - [Netlify](https://www.netlify.com/) 97 | 98 |

(back to top)

99 | 100 | 101 | 102 | ## Getting Started 103 | 104 | Getting started, to avoid hassle at a later part, go ahead and create an account in Sanity and follow the displayed commands! 105 | 106 | ### Prerequisites 107 | 108 | - Create a folder named \*\*backend_sanity" and navigate the terminal to it. 109 | ``` 110 | cd backend_sanity 111 | ``` 112 | - Install the sanity client 113 | ```sh 114 | npm install -g @sanity/cli 115 | ``` 116 | - Login using your preferred way! 117 | - Enter the project name, press Y and use the default settings. 118 | - Now use the command 119 | ```sh 120 | sanity start 121 | ``` 122 | - Now run the following in the terminal 123 | ``` 124 | sanity manage 125 | ``` 126 | - Your project dashboard page pops up in your browser 127 | > These are the most important steps 128 | - Note your project ID for future reference 129 | - Click on **Token** -> **Add new Token** 130 | - Give it a name and copy the token as it can be viewed only once. 131 | - Now add your react browser address i.e. your localhost in **CORS ORIGIN** 132 | - You are mostly done with setting up the backend. 133 | 134 | ### Installation 135 | 136 | 1. After completing the prerequistes, go ahead with the following steps. 137 | 2. Clone the repo 138 | ```sh 139 | git clone https://github.com/Praveenterax/reactjs-portfolio.git 140 | ``` 141 | 3. Install NPM packages in the folders [Frontend React](/frontend_react). 142 | > Make sure you are in the right folder path in the terminal. 143 | ```sh 144 | npm install 145 | ``` 146 | 4. Replace the [Backend Sanity](/backend_sanity) file contents with your sanity file contents (entire folder). 147 | 5. Run the command and a page with your sanity documents appears. 148 | > Make sure you are in the right folder path in the terminal. 149 | ``` 150 | sanity start 151 | ``` 152 | 6. Add your details to the necessary documents, refer [Sanity](https://www.sanity.io/docs) for better understanding. 153 | 7. Create a .env file in the [Frontend React](/frontend_react) directory with the following 154 | ``` 155 | REACT_APP_SANITY_PROJECT_ID= "your project id" 156 | REACT_APP_SANITY_TOKEN= "your api token" 157 | ``` 158 | 8. Run the final command in the [Frontend React](/frontend_react). 159 | > Make sure you are in the right folder path in the terminal. 160 | ``` 161 | npm start 162 | ``` 163 | 9. Your website is up and running. Make the necessary changes and deploy it. 164 | 10. To add or change necessary documents in **Sanity Studio** refer the [Sanity Docs](https://sanity.io/docs), it is very intuitive and easy. 165 | 166 |

(back to top)

167 | 168 | 169 | 170 | ## Contributing 171 | 172 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 173 | 174 | If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". 175 | Don't forget to give the project a star! Thanks again! 176 | 177 | 1. Fork the Project 178 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 179 | 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 180 | 4. Push to the Branch (`git push origin feature/AmazingFeature`) 181 | 5. Open a Pull Request 182 | 183 |

(back to top)

184 | 185 | 186 | 187 | ## License 188 | 189 | Distributed under the MIT License. See `LICENSE.txt` for more information. 190 | 191 |

(back to top)

192 | 193 | 194 | 195 | ## Contact 196 | 197 | Praveen Dunga - [@Praveenterax](https://instagram.com/Praveenterax) - praveendunga789@gmail.com 198 | 199 | Project Link: [https://praveenterax-portfolio.netlify.app](https://praveenterax-portfolio.netlify.app) 200 | 201 |

(back to top)

202 | 203 | 204 | 205 | 206 | [contributors-shield]: https://img.shields.io/github/contributors/Praveenterax/reactjs-portfolio.svg?style=for-the-badge 207 | [contributors-url]: https://github.com/Praveenterax/reactjs-portfolio/graphs/contributors 208 | [forks-shield]: https://img.shields.io/github/forks/Praveenterax/reactjs-portfolio.svg?style=for-the-badge 209 | [forks-url]: https://github.com/Praveenterax/reactjs-portfolio/network/members 210 | [stars-shield]: https://img.shields.io/github/stars/Praveenterax/reactjs-portfolio.svg?style=for-the-badge 211 | [stars-url]: https://github.com/Praveenterax/reactjs-portfolio/stargazers 212 | [issues-shield]: https://img.shields.io/github/issues/Praveenterax/reactjs-portfolio.svg?style=for-the-badge 213 | [issues-url]: https://github.com/Praveenterax/reactjs-portfolio/issues 214 | [license-shield]: https://img.shields.io/github/license/Praveenterax/reactjs-portfolio.svg?style=for-the-badge 215 | [license-url]: https://github.com/Praveenterax/reactjs-portfolio/blob/master/LICENSE.txt 216 | [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 217 | [linkedin-url]: https://linkedin.com/in/praveendunga 218 | [product-screenshot-1]: images/home-page.png 219 | [product-screenshot-2]: images/contact-page.png 220 | [product-screenshot-3]: images/skills-page.png 221 | -------------------------------------------------------------------------------- /backend_sanity/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@sanity/eslint-config-studio" 3 | } 4 | -------------------------------------------------------------------------------- /backend_sanity/.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | /logs 3 | *.log 4 | 5 | # Coverage directory used by tools like istanbul 6 | /coverage 7 | 8 | # Dependency directories 9 | node_modules 10 | 11 | # Compiled sanity studio 12 | /dist 13 | -------------------------------------------------------------------------------- /backend_sanity/README.md: -------------------------------------------------------------------------------- 1 | # Sanity Clean Content Studio 2 | 3 | Congratulations, you have now installed the Sanity Content Studio, an open source real-time content editing environment connected to the Sanity backend. 4 | 5 | Now you can do the following things: 6 | 7 | - [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme) 8 | - [Join the community Slack](https://slack.sanity.io/?utm_source=readme) 9 | - [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme) 10 | -------------------------------------------------------------------------------- /backend_sanity/config/.checksums: -------------------------------------------------------------------------------- 1 | { 2 | "#": "Used by Sanity to keep track of configuration file checksums, do not delete or modify!", 3 | "@sanity/default-layout": "bb034f391ba508a6ca8cd971967cbedeb131c4d19b17b28a0895f32db5d568ea", 4 | "@sanity/default-login": "e2ed4e51e97331c0699ba7cf9f67cbf76f1c6a5f806d6eabf8259b2bcb5f1002", 5 | "@sanity/form-builder": "b38478227ba5e22c91981da4b53436df22e48ff25238a55a973ed620be5068aa", 6 | "@sanity/data-aspects": "d199e2c199b3e26cd28b68dc84d7fc01c9186bf5089580f2e2446994d36b3cb6", 7 | "@sanity/vision": "da5b6ed712703ecd04bf4df560570c668aa95252c6bc1c41d6df1bda9b8b8f60" 8 | } 9 | -------------------------------------------------------------------------------- /backend_sanity/config/@sanity/data-aspects.json: -------------------------------------------------------------------------------- 1 | { 2 | "listOptions": {} 3 | } 4 | -------------------------------------------------------------------------------- /backend_sanity/config/@sanity/default-layout.json: -------------------------------------------------------------------------------- 1 | { 2 | "toolSwitcher": { 3 | "order": [], 4 | "hidden": [] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /backend_sanity/config/@sanity/default-login.json: -------------------------------------------------------------------------------- 1 | { 2 | "providers": { 3 | "mode": "append", 4 | "redirectOnSingle": false, 5 | "entries": [] 6 | }, 7 | "loginMethod": "dual" 8 | } 9 | -------------------------------------------------------------------------------- /backend_sanity/config/@sanity/form-builder.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": { 3 | "directUploads": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /backend_sanity/config/@sanity/vision.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultApiVersion": "2021-10-21" 3 | } 4 | -------------------------------------------------------------------------------- /backend_sanity/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "portfolioreactjs", 3 | "private": true, 4 | "version": "1.0.0", 5 | "description": "", 6 | "main": "package.json", 7 | "author": "Praveenterax ", 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 | 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 | 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 |
9 |
10 | 16 | 17 | 18 |
19 |
20 | 26 | 27 | 28 |
29 |
30 | 36 | 37 | 38 |
39 |
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 | Profile 51 |
52 |
53 |
54 |

About Me

55 |

59 |
60 | 63 |
64 |
65 |
66 | 67 |
68 | {abouts.map((about, index) => ( 69 | 77 | {about.title} 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 |
53 |
54 | email 55 | 56 | praveendunga111@gmail.com 57 | 58 |
59 |
60 | mobile 61 | 62 | +91 9110709550 63 | 64 |
65 |
66 | {!isFormSubmitted ? ( 67 |
68 |
69 | 77 |
78 |
79 | 87 |
88 |
89 | 97 |
98 |
99 |