├── .github
├── ISSUE_TEMPLATE
│ └── bug_report.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── super-linter.yml
├── .gitignore
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── public
├── favicon.ico
├── index.html
├── logo192.png
├── logo512.png
├── manifest.json
├── robots.txt
├── template1.png
└── template2.png
└── src
├── App.js
├── App.test.js
├── components
├── About.js
├── Contact.js
├── Footer.js
├── Header.js
├── Main.js
├── Resume.js
├── ResumePage
│ ├── Context.js
│ ├── element
│ │ ├── BuildSteps
│ │ │ ├── About.js
│ │ │ ├── Education.js
│ │ │ ├── Projects.js
│ │ │ ├── Skills.js
│ │ │ ├── Template.js
│ │ │ └── Work.js
│ │ ├── Builder.js
│ │ ├── Ceo.jpeg
│ │ ├── ImageUploadButton
│ │ │ ├── ImageUpload.component.jsx
│ │ │ └── ImageUpload.styles.css
│ │ ├── Main.js
│ │ ├── Template1.js
│ │ ├── Template2.js
│ │ └── Theme
│ │ │ ├── ThemeOption.js
│ │ │ └── ThemeSelect.js
│ └── images
│ │ └── hero.svg
├── Study.js
└── images
│ ├── ContactUs.png
│ ├── chip.png
│ ├── cv.png
│ ├── em1.jpg
│ ├── free.png
│ ├── fu.jpg
│ ├── github.png
│ ├── github2.png
│ ├── guide.png
│ ├── happy.png
│ ├── maine.png
│ ├── mmm.jpg
│ ├── open-sign.png
│ ├── programming.png
│ ├── shared.png
│ ├── source-code.png
│ ├── user-guide.png
│ └── web-design.png
├── index.css
├── index.js
├── logo.svg
├── reportWebVitals.js
└── setupTests.js
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ""
5 | labels: ""
6 | assignees: ""
7 | ---
8 |
9 | **Describe the bug**
10 | A clear and concise description of what the bug is.
11 |
12 | **To Reproduce**
13 | Steps to reproduce the behavior:
14 |
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 |
28 | - OS: [e.g. iOS]
29 | - Browser [e.g. chrome, safari]
30 | - Version [e.g. 22]
31 |
32 | **Smartphone (please complete the following information):**
33 |
34 | - Device: [e.g. iPhone6]
35 | - OS: [e.g. iOS8.1]
36 | - Browser [e.g. stock browser, safari]
37 | - Version [e.g. 22]
38 |
39 | **Additional context**
40 | Add any other context about the problem here.
41 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | # Description
2 |
3 | Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.
4 |
5 | - [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
6 | - [ ] All code checks passed.
7 |
--------------------------------------------------------------------------------
/.github/workflows/super-linter.yml:
--------------------------------------------------------------------------------
1 | # This workflow executes several linters on changed files based on languages used in your code base whenever
2 | # you push a code or open a pull request.
3 | #
4 | # You can adjust the behavior by modifying this file.
5 | # For more information, see:
6 | # https://github.com/github/super-linter
7 | name: Lint Code Base
8 |
9 | on:
10 | push:
11 | branches: ["main"]
12 | pull_request:
13 | branches: ["main"]
14 | jobs:
15 | run-lint:
16 | runs-on: ubuntu-latest
17 | steps:
18 | - name: Checkout code
19 | uses: actions/checkout@v3
20 | with:
21 | # Full git history is needed to get a proper list of changed files within `super-linter`
22 | fetch-depth: 0
23 |
24 | - name: Lint Code Base
25 | uses: github/super-linter@v4
26 | env:
27 | VALIDATE_ALL_CODEBASE: false
28 | DEFAULT_BRANCH: "main"
29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Yash
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
⭐ Star our repository and grow our community
2 |
3 |
4 |
5 |
6 | RESUME GENERATOR
7 | A RESPONSIVE AND USEFULL WEB.
8 |
9 |
10 |
11 | [](https://github.com/y4sssh /Resume-Genrator)
12 | [](https://opensource.org/licenses/MIT)
13 |
14 |
15 | # About Resume Generator
16 |
17 | 1. It can help you to generate your own Resume
18 |
19 | 2. Which can help you represent yourself at Companies
20 |
21 | 3. It automatically converts your details into a attractive Resume Template
22 |
23 | 4. It can help you to get a job easily
24 |
25 | 5. The attractiveness of resume is directly proportional to the high chances of getting a good job, the more the resume is attractive is the more chances of a job
26 |
27 | ## Note-:
28 |
29 | It is a Resume Generator which automatically generates a resume car according to your given information. We made this project with help of all our Team Members. All credits goes to its Respective Owners.......
30 |
31 | # Used Languages
32 |
33 | - Html
34 | - Css
35 | - Javascript
36 | - React
37 |
38 | # Installation
39 |
40 | To use this project locally, follow these steps:
41 |
42 | 1. Clone the repository:
43 |
44 | `git clone https://github.com/y4sssh /Resume-Genrator.git`
45 |
46 | 2. Go to the project directory:
47 |
48 | `cd Resume-Genrator`
49 |
50 | 3. Install dependencies:
51 |
52 | `npm install`
53 |
54 | If `npm install` does not work, try using:
55 |
56 | `npm i --legacy-peer-deps`
57 |
58 | 4. Start the development server:
59 |
60 | `npm start`
61 |
62 | 5. Open the app in your browser at:
63 |
64 | `http://localhost:3000/`
65 |
66 | # Web URL
67 |
68 | https://resume-generator-xi.vercel.app/
69 |
70 | # Credits
71 |
72 | - [Yash Vyavahare](https://github.com/y4sssh )
73 | - [Khizar Shah](https://github.com/Khizarshah01)
74 | - [Om Ingle](https://github.com/omingle-og)
75 | - [Harsh Baraliya](https://github.com/MrCracker-OP)
76 | - [Shashwat Agrawal](https://github.com/ShashwatAgrawal20)
77 |
78 | ## Thanks to all Contributors 💪
79 |
80 | Thanks a lot for spending your time helping Resume Generator grow. Thanks a lot! Keep rocking 🍻
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | # Support us by Donating
96 |
97 | Pay us using
98 |
99 |
100 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "resume-generator",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@chakra-ui/react": "^1.7.4",
7 | "@emotion/react": "^11.7.1",
8 | "@emotion/styled": "^11.6.0",
9 | "@testing-library/jest-dom": "^5.16.5",
10 | "@testing-library/react": "^13.4.0",
11 | "@testing-library/user-event": "^13.5.0",
12 | "bootstrap": "^5.2.3",
13 | "framer-motion": "^5.6.0",
14 | "html2canvas": "^1.4.0",
15 | "jspdf": "^2.5.0",
16 | "react": "^18.2.0",
17 | "react-bootstrap": "^2.7.2",
18 | "react-color": "^2.19.3",
19 | "react-dom": "^18.2.0",
20 | "react-files": "^2.4.9",
21 | "react-icons": "^4.7.1",
22 | "react-router-dom": "^6.8.1",
23 | "react-scripts": "5.0.1",
24 | "react-share": "^4.4.1",
25 | "react-to-print": "^2.14.3",
26 | "styled-components": "^5.3.6",
27 | "uuid": "^8.3.2",
28 | "uuidv4": "^6.2.12",
29 | "web-vitals": "^2.1.4",
30 | "webfontloader": "^1.6.28"
31 | },
32 | "scripts": {
33 | "start": "react-scripts start",
34 | "build": "react-scripts build",
35 | "test": "react-scripts test",
36 | "eject": "react-scripts eject"
37 | },
38 | "eslintConfig": {
39 | "extends": [
40 | "react-app",
41 | "react-app/jest"
42 | ]
43 | },
44 | "browserslist": {
45 | "production": [
46 | ">0.2%",
47 | "not dead",
48 | "not op_mini all"
49 | ],
50 | "development": [
51 | "last 1 chrome version",
52 | "last 1 firefox version",
53 | "last 1 safari version"
54 | ]
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 |
28 |
29 | Resume Generator
30 |
31 |
32 | You need to enable JavaScript to run this app.
33 |
34 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/template1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/public/template1.png
--------------------------------------------------------------------------------
/public/template2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/public/template2.png
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import Footer from "./components/Footer";
2 | import Header from "./components/Header";
3 | import Main from "./components/Main";
4 | import "bootstrap/dist/css/bootstrap.min.css";
5 | import Resume from "./components/Resume";
6 | import Contact from "./components/Contact";
7 | import About from "./components/About";
8 | import Study from "./components/Study";
9 | import { BrowserRouter, Route, Routes } from "react-router-dom";
10 |
11 | function App() {
12 | return (
13 |
14 |
15 |
16 |
17 | } />
18 | } />
19 | } />
20 | }/>
21 | } />
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default App;
30 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from "@testing-library/react";
2 | import App from "./App";
3 |
4 | test("renders learn react link", () => {
5 | render( );
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/components/About.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect, useMemo } from "react";
2 | import { Container, Row, Col, Card } from "react-bootstrap";
3 | import styled from "styled-components";
4 |
5 | const Demo = styled.div`
6 | font-family: Garamond, serif;
7 | `;
8 |
9 | const StyledCard = styled(Card)`
10 | background-color: #90c2ff;
11 | border-radius: 10px;
12 | margin: 1rem;
13 | text-align: center;
14 | display: flex;
15 | justify-content: center;
16 | align-items: center;
17 | padding-top: 5px;
18 | border: none;
19 | font-weight: bold;
20 |
21 | &:hover {
22 | box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px,
23 | rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
24 | background-color: #7bb6ff;
25 | border: none;
26 | }
27 | `;
28 |
29 | const Background = styled.div`
30 | background-color: #d2ebf7;
31 | `;
32 |
33 | const About = () => {
34 | const [contributors, setContributors] = useState([]);
35 |
36 | const coreDevelopers = useMemo(
37 | () => [
38 | {
39 | login: "MrCracker-OP",
40 | html_url: "https://github.com/MrCracker-OP",
41 | image: "https://avatars.githubusercontent.com/u/77793128?v=4",
42 | },
43 | {
44 | login: "Khizarshah01",
45 | html_url: "https://github.com/khizarshah01",
46 | image: "https://avatars.githubusercontent.com/u/109973520?v=4",
47 | },
48 | {
49 | login: "omingle-og",
50 | html_url: "https://github.com/omingle-og",
51 | image: "https://avatars.githubusercontent.com/u/161492096?v=4",
52 | },
53 | {
54 | login: "ShashwatAgrawal20",
55 | html_url: "https://github.com/shashwatagrawal20",
56 | image: "https://avatars.githubusercontent.com/u/72117025?v=4",
57 | },
58 | {
59 | login: "y4sssh ",
60 | html_url: "https://github.com/y4sssh ",
61 | image: "https://avatars.githubusercontent.com/u/104668751?v=4",
62 | },
63 |
64 | ],
65 | []
66 | );
67 |
68 | useEffect(() => {
69 | fetch(
70 | "https://api.github.com/repos/y4sssh /Resume-Generator/contributors"
71 | )
72 | .then((response) => response.json())
73 | .then((data) => {
74 | // Filter out the contributors whose GitHub username matches with any of the core developers' GitHub username
75 | const filteredData = data.filter(
76 | (contributor) =>
77 | !coreDevelopers.find(
78 | (developer) => developer.login === contributor.login
79 | )
80 | );
81 | setContributors(filteredData);
82 | })
83 | .catch((error) => console.log(error));
84 | }, [coreDevelopers]);
85 |
86 | const teamHeader = "Our Team";
87 | const teamDescription = "Meet the amazing people who make it all possible!";
88 |
89 | return (
90 |
91 |
92 |
93 | {teamHeader}
94 | {teamDescription}
95 | Core Contributors
96 |
97 | Thanks to the following core contributors:
98 |
99 |
100 | {coreDevelopers.map((developer) => (
101 |
102 |
103 |
113 |
114 |
115 |
121 | {developer.login}
122 |
123 |
124 |
125 | Contributor
126 |
127 |
128 |
129 |
130 | ))}
131 |
132 | GitHub Contributors
133 |
134 | Thanks to the following GitHub contributors:
135 |
136 |
137 | {contributors.map((contributor) => (
138 |
139 |
140 |
150 |
151 |
152 |
158 |
159 | {contributor.name
160 | ? contributor.name
161 | : contributor.login}
162 |
163 |
164 |
165 |
166 | Contributor
167 |
168 |
169 |
170 |
171 | ))}
172 |
173 |
174 |
175 |
176 | );
177 | };
178 | export default About;
179 |
--------------------------------------------------------------------------------
/src/components/Contact.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col, Form, Button } from "react-bootstrap";
3 | import styled from "styled-components";
4 | // import ContactUs from './images/ContactUs.png'
5 |
6 | const StyledForm = styled(Form)`
7 | /* background-color: rgba(0,0,1, 0.2); */
8 | background: white;
9 | /* box-shadow: 5px 5px 15px #D1D9E6, -5px -5px 15px #ffffff; */
10 | /* backdrop-filter: blur(20px); */
11 | color: #1a202c;
12 | border-radius: 10px;
13 | /* font-family: Garamond, serif; */
14 | box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.2);
15 | height: 100%;
16 | width: 100%;
17 | display: flex;
18 | flex-direction: column;
19 | justify-content: space-evenly;
20 | padding: 0 2rem;
21 | margin-top: 40px;
22 | /* margin-left: 35px; */
23 | margin-bottom: 35px;
24 | /* box-shadow: 0px 1px 0px 0px rgba(0,0,0,0.22), 1px 0px 0px 0px rgba(0,0,0,0.22), 1px 2px 0px 0px rgba(0,0,0,0.22), 2px 1px 0px 0px rgba(0,0,0,0.22), 2px 3px 0px 0px rgba(0,0,0,0.22), 3px 2px 0px 0px rgba(0,0,0,0.22), 3px 4px 0px 0px rgba(0,0,0,0.22), 4px 3px 0px 0px rgba(0,0,0,0.22), 4px 5px 0px 0px rgba(0,0,0,0.22), 5px 4px 0px 0px rgba(0,0,0,0.22), 5px 6px 0px 0px rgba(0,0,0,0.22), 6px 5px 0px 0px rgba(0,0,0,0.22), 6px 7px 0px 0px rgba(0,0,0,0.22), 7px 6px 0px 0px rgba(0,0,0,0.22), 7px 8px 0px 0px rgba(0,0,0,0.22), 8px 7px 0px 0px rgba(0,0,0,0.22); */
25 |
26 | input[type="text"],
27 | input[type="email"],
28 | textarea {
29 | border: 2px solid grey;
30 | border-radius: 5px;
31 | padding: 0.5rem;
32 | margin-bottom: 1rem;
33 | margin-top: 0.5rem;
34 | }
35 |
36 | input[type="text"]:first-of-type {
37 | margin-top: 1rem;
38 | }
39 |
40 | @media (max-width: 767px) {
41 | /* styles for screens with a maximum width of 767 pixels */
42 | height: auto;
43 | width: 100%;
44 | margin: 0;
45 | margin-top: 40px;
46 | margin-bottom: 40px;
47 |
48 | input[type="text"],
49 | input[type="email"],
50 | textarea {
51 | margin-bottom: 0.5rem;
52 | margin-top: 0.5rem;
53 | }
54 |
55 | input[type="text"]:first-of-type {
56 | margin-top: 0.5rem;
57 | }
58 | }
59 | `;
60 |
61 | const StyledButton = styled(Button)`
62 | background-color: grey;
63 | // box-shadow: 1px 2px 14px 0px black;
64 | font-weight: 600;
65 | letter-spacing: 1px;
66 | margin: 1rem 0;
67 | border: none;
68 |
69 | &:hover {
70 | background-color: black;
71 | /* border-color: #023e8a; */
72 | }
73 |
74 | @media (max-width: 767px) {
75 | /* adjust button styling for mobile screens */
76 | margin: 1rem auto;
77 | width: 100%;
78 | }
79 | `;
80 |
81 | const StyledSection = styled.section`
82 | /* background-image: url(); */
83 | background: #d2ebf7;
84 | background-size: cover;
85 | background-position: center center;
86 | min-height: 100vh;
87 | height: 100%;
88 | /* background-color: #00203FFF; */
89 | `;
90 |
91 | const Contact = () => {
92 | return (
93 |
94 |
95 |
96 |
97 |
98 |
102 | Get in Touch
103 |
104 |
105 | Name
106 |
107 |
108 |
109 | Email address
110 |
111 |
112 |
113 | Subject
114 |
115 |
116 |
117 | Message
118 |
123 |
124 |
125 | Send Message
126 |
127 |
128 |
129 |
130 |
131 |
132 | );
133 | };
134 |
135 | export default Contact;
136 |
--------------------------------------------------------------------------------
/src/components/Footer.js:
--------------------------------------------------------------------------------
1 | import { Container, Row, Col } from "react-bootstrap";
2 | import styled from "styled-components";
3 | import { Link } from "react-router-dom";
4 |
5 | const teamMembers = [
6 | { name: "Harsh Baraliya", github: "https://github.com/MrCracker-OP" },
7 | { name: "Khizar Shah", github: "https://github.com/Khizarshah01" },
8 | { name: "Om Ingle", github: "https://github.com/omingle-og" },
9 | { name: "Shashwat Agrawal", github: "https://github.com/ShashwatAgrawal20" },
10 | { name: "Yash Vyavahare", github: "https://github.com/y4sssh " },
11 |
12 | ];
13 |
14 | const Footer = () => {
15 | const GoldHoverLink = styled.a`
16 | &:hover {
17 | color: #ffc107;
18 | }
19 | `;
20 | return (
21 |
24 |
25 |
26 | {/* */}
27 |
28 |
29 |
Links
30 | Home
31 | About
32 | Contact
33 | Study
34 |
35 |
36 |
37 | {/* */}
38 |
39 |
40 |
Contact
41 |
Your Address here
42 |
info@gmail.com
43 |
+ 01 234 567 88
44 |
+ 01 234 567 89
45 |
46 |
47 |
48 | {/* */}
49 |
50 |
51 |
Contributors
52 |
53 | {teamMembers.map((member, index) => (
54 |
55 |
60 | {member.name}
61 |
62 |
63 | ))}
64 |
65 |
66 |
67 |
68 | {/* */}
69 |
70 |
71 |
Follow us
72 |
73 | {/* */}
74 |
80 |
81 | {/* */}
82 |
88 |
89 | {/* */}
90 |
96 |
97 | {/* */}
98 |
104 |
105 | {/* */}
106 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | {/* */}
119 |
123 | Copyright © {new Date().getFullYear()} Resume Generator
124 |
125 |
126 |
127 |
128 | )
129 | }
130 |
131 | export default Footer;
132 |
--------------------------------------------------------------------------------
/src/components/Header.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import Container from "react-bootstrap/Container";
3 | import Navbar from "react-bootstrap/Navbar";
4 | import styled from "styled-components";
5 | import { NavLink, Link } from "react-router-dom";
6 | import { HiXMark } from "react-icons/hi2";
7 | import githubLogo from "./images/github.png"; // import the GitHub logo image
8 |
9 | function Header() {
10 | const [open, setOpen] = useState(false);
11 | const handleToggle = () => {
12 | open ? setOpen(false) : setOpen(true);
13 | };
14 | return (
15 |
22 |
23 |
24 | Resume Generator
25 |
26 | {!open ? (
27 |
31 | ) : (
32 |
36 |
37 |
38 | )}
39 |
40 |
41 |
42 | Home
43 |
44 |
45 | About
46 |
47 |
48 | Contact
49 |
50 |
51 | Study
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | );
61 | }
62 |
63 | const StyledNavbar = styled(Navbar)`
64 | padding: 1rem 2rem;
65 | box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px,
66 | rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
67 | background-color: #fff;
68 | border-bottom: 1px solid #e4e4e4;
69 |
70 | @media screen and (max-width: 991.98px) {
71 | padding: 1rem;
72 | }
73 |
74 | @media screen and (max-width: 767.98px) {
75 | padding: 0.5rem;
76 | }
77 | `;
78 |
79 | const NavLinks = styled.nav`
80 | display: flex;
81 | align-items: center;
82 | justify-content: center;
83 | padding-right: 100px;
84 | flex: 1; /* make the NavLinks component take up all remaining space */
85 |
86 | @media screen and (max-width: 991.98px) {
87 | flex-direction: column;
88 | gap: 20px;
89 | padding-right: 0px;
90 | }
91 | `;
92 |
93 | const StyledNavLink = styled(NavLink)`
94 | color: #333;
95 | font-weight: 500;
96 | margin: 0 1rem;
97 | &:hover {
98 | color: #555;
99 | text-decoration: none;
100 | }
101 | &.active {
102 | color: #007bff;
103 | text-decoration: none;
104 | border-bottom: 2px solid #007bff;
105 | }
106 |
107 | @media screen and (max-width: 767.98px) {
108 | margin: 0.5rem;
109 | }
110 | `;
111 |
112 | const GitHubLink = styled.a`
113 | display: flex;
114 | align-items: center;
115 | justify-content: center;
116 | margin-left: auto; /* push the GitHub logo to the left side of the header */
117 | color: #333;
118 | font-weight: 500;
119 | &:hover {
120 | color: #555;
121 | text-decoration: none;
122 | }
123 |
124 | img {
125 | width: 30px;
126 | height: 30px;
127 | }
128 |
129 | @media screen and (max-width: 991.98px) {
130 | margin-top: 10px;
131 | }
132 | `;
133 |
134 | export default Header;
135 |
--------------------------------------------------------------------------------
/src/components/Main.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import { useNavigate } from "react-router-dom";
4 | import cv from "./images/cv.png";
5 | import opens from "./images/source-code.png";
6 | import freindly from "./images/happy.png";
7 | import free from "./images/free.png";
8 | import desing from "./images/web-design.png";
9 | import code from "./images/programming.png";
10 | import github from "./images/github2.png";
11 |
12 | const Main1 = styled.div`
13 | background-color: #cff2ff;
14 | color: black;
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | flex-direction: column;
19 | text-align: center;
20 | padding-top: 70px;
21 | padding-bottom: 0px;
22 | `;
23 | const Rap = styled.p`
24 | font-size: 16px;
25 | margin-top: 10px;
26 | `;
27 |
28 | const Heading = styled.h1`
29 | font-weight: bold;
30 | font-size: 50px;
31 | margin-top: 10px;
32 | font-family: Garamond, serif;
33 |
34 | @media (max-width: 768px) {
35 | font-size: 30px;
36 | }
37 | `;
38 |
39 | const MainSection = styled.div`
40 | width: 80%;
41 | max-width: 1200px;
42 | display: flex;
43 | flex-direction: column;
44 | align-items: center;
45 | justify-content: center;
46 | text-align: center;
47 | height: 100%;
48 | @media (max-width: 768px) {
49 | width: 100%;
50 | padding: 0 20px;
51 | }
52 | `;
53 |
54 | const Button = styled.button`
55 | padding: 15px 35px;
56 | font-size: 20px;
57 | font-weight: bold;
58 | /* background-color: #10c479; */
59 | background-color: #021547;
60 | color: white;
61 | border: none;
62 | border-radius: 5px;
63 | cursor: pointer;
64 | margin-top: 60px;
65 | margin-bottom: 40px;
66 |
67 | &:hover {
68 | /* background-color: #30856a; */
69 | // background-color: #7a9cfd;
70 | // color: black;
71 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
72 | }
73 | `;
74 |
75 | const Button1 = styled.button`
76 | padding: 15px 35px;
77 | font-size: 20px;
78 | font-weight: bold;
79 | /* background-color: #10c479; */
80 | background-color: black;
81 | color: white;
82 | border: none;
83 | border-radius: 5px;
84 | cursor: pointer;
85 | margin-top: 60px;
86 | margin-bottom: 40px;
87 |
88 | &:hover {
89 | /* background-color: #30856a; */
90 | background-color: #00000087;
91 | color: white;
92 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
93 | }
94 | `;
95 |
96 | // font-family: Garamond, serif;
97 |
98 | const Img = styled.img`
99 | width: 700px;
100 | height: 400px;
101 | object-fit: cover;
102 | object-position: 25% 25%;
103 | @media (max-width: 768px) {
104 | width: 100%;
105 | height: auto;
106 | }
107 | `;
108 |
109 | const ImageSection = styled.div`
110 | width: 50%;
111 | display: flex;
112 | justify-content: flex-end;
113 | align-items: center;
114 | @media (max-width: 768px) {
115 | width: 100%;
116 | justify-content: center;
117 | }
118 | `;
119 |
120 | const Main2 = styled.div`
121 | background-color: #eddbc5;
122 | color: black;
123 | display: flex;
124 | flex-direction: row;
125 | padding: 70px;
126 | @media (max-width: 768px) {
127 | padding: 30px;
128 |
129 | /* Hide the image when the screen size is less than or equal to 768px */
130 | ${ImageSection} {
131 | display: none;
132 | }
133 | }
134 | `;
135 |
136 | const Rancho = styled.h1`
137 | margin-top: 75px;
138 | font-weight: bold;
139 | font-size: 50px;
140 | font-family: Garamond, serif;
141 | text-align-last: center;
142 | @media (max-width: 768px) {
143 | font-size: 30px;
144 | margin-top: 0;
145 | }
146 | `;
147 |
148 | const Pilo = styled.p`
149 | margin-top: 20px;
150 | text-align: left;
151 | flex: 1;
152 | text-align-last: center;
153 | @media (max-width: 768px) {
154 | text-align: center;
155 | margin-top: 10px;
156 | }
157 | `;
158 |
159 | const Main3 = styled.div`
160 | background-color: #f1f1f1;
161 | color: black;
162 | display: flex;
163 | flex-direction: column;
164 | align-items: center;
165 | padding: 70px;
166 |
167 | @media (max-width: 768px) {
168 | padding: 30px;
169 | }
170 | `;
171 |
172 | const Rancho1 = styled.h1`
173 | font-weight: bold;
174 | font-size: 50px;
175 | font-family: Garamond, serif;
176 | text-align: center;
177 | flex: 1;
178 |
179 | @media (max-width: 768px) {
180 | font-size: 30px;
181 | }
182 | `;
183 |
184 | const Pilo1 = styled.p`
185 | text-align: center;
186 | max-width: 800px;
187 | line-height: 1.5;
188 | flex: 1;
189 |
190 | @media (max-width: 768px) {
191 | font-size: 16px;
192 | }
193 | `;
194 |
195 | const ImageSection1 = styled.div`
196 | width: 50%;
197 | display: flex;
198 | justify-content: flex-end;
199 | align-items: center;
200 |
201 | @media (max-width: 768px) {
202 | width: 100%;
203 | justify-content: center;
204 | }
205 | `;
206 |
207 | const Img1 = styled.img`
208 | /* width: 800px;
209 | height: 400px; */
210 | object-fit: cover;
211 | object-position: 25% 25%;
212 |
213 | @media (max-width: 768px) {
214 | width: 100%;
215 | height: auto;
216 | }
217 | `;
218 |
219 | const Main4Container = styled.div`
220 | /* background-color: #f1f1f1; */
221 | background-color: #cff2ff;
222 | padding: 40px;
223 | text-align: center;
224 | `;
225 |
226 | const Main4Title = styled.h2`
227 | font-size: 2rem;
228 | margin-bottom: 40px;
229 | font-weight: bold;
230 | font-size: 50px;
231 | font-family: Garamond, serif;
232 | text-align: center;
233 | `;
234 |
235 | const Main4IconsContainer = styled.div`
236 | display: flex;
237 | flex-wrap: wrap;
238 | justify-content: center;
239 | gap: 40px;
240 | `;
241 |
242 | const Main4IconContainer = styled.div`
243 | display: flex;
244 | flex-direction: column;
245 | align-items: center;
246 | `;
247 |
248 | const Main4Icon = styled.img`
249 | width: 80px;
250 | height: 80px;
251 | margin-bottom: 20px;
252 | `;
253 |
254 | const Main4IconTitle = styled.h3`
255 | font-size: 1.2rem;
256 | margin-bottom: 20px;
257 | font-weight: bold;
258 | font-family: Garamond, serif;
259 | `;
260 |
261 | const Main4IconDescription = styled.p`
262 | font-size: 1rem;
263 | line-height: 1.5;
264 | max-width: 250px;
265 | text-align: center;
266 | `;
267 |
268 |
269 |
270 |
271 | const Main = () => {
272 | const navigate = useNavigate();
273 |
274 | const handleClick = () => {
275 | navigate("/resume");
276 | };
277 |
278 | return (
279 | <>
280 |
281 | ONLINE RESUME BUILDER
282 |
283 | You have the skills, now make your resume reflect them. Be one of the
284 | chosen 2%.
285 |
286 |
287 | Create My Resume
288 |
289 |
293 |
294 |
295 |
296 |
297 |
Use the best resume maker as your guide.
298 |
299 | Getting that dream job can seem like an impossible task. We’re here
300 | to change that. Give yourself a real advantage with the best online
301 | resume maker: created by experts, improved by data, trusted by
302 | millions of professionals
303 |
304 |
305 |
306 |
310 |
311 |
312 |
313 |
314 | Take your job search to the next level with our top-rated resume
315 | builder.
316 |
317 |
318 | Say goodbye to writer's block and endless formatting woes with our
319 | 3-step resume builder. Create a perfect resume in minutes that will
320 | catch employers' attention!
321 |
322 | Create Resume Now
323 |
324 |
328 |
329 |
330 |
331 |
332 |
333 | Why Use Our Resume Builder?
334 |
335 |
336 |
337 | User-friendly interface
338 |
339 | Our resume builder is designed to be easy and intuitive to use, so you can create a great resume quickly and easily.
340 |
341 |
342 |
343 |
344 | Professional resume templates
345 |
346 | Our builder includes a wide range of professionally designed resume templates to help you create a polished and impressive resume.
347 |
348 |
349 |
350 |
351 | Open-source code
352 |
353 | Our resume builder is built with open-source code, meaning that it is transparent and can be audited by anyone.
354 |
355 |
356 |
357 |
358 | Completely free to use
359 |
360 | Our resume builder is completely free to use. You can create and download as many resumes as you want.
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 | Do you want to make your own templates?
369 | +
370 |
371 | Do you write React code?
372 | =
373 |
374 | Contribute
375 |
376 | >
377 | );
378 | };
379 |
380 | export default Main;
381 |
382 |
383 | const MainSection5 = styled.div`
384 | display: flex;
385 | justify-content: center;
386 | align-items: center;
387 | padding: 70px;
388 | background-color: #f1f1f1;
389 |
390 | @media (max-width: 768px) {
391 | flex-direction: column;
392 | justify-content: center;
393 | align-items: center;
394 | padding: 50px;
395 | }
396 | `;
397 |
398 | const Icon = styled.img`
399 | height: 60px;
400 | width: 60px;
401 | margin-right: 1.5rem;
402 |
403 | @media (max-width: 768px) {
404 | margin-right: 0;
405 | margin-bottom: 1.5rem;
406 | }
407 | `;
408 |
409 | const Text = styled.h2`
410 | font-size: 2.5rem;
411 | font-weight: 500;
412 | margin: 0;
413 | font-family: Garamond, serif;
414 |
415 | @media (max-width: 768px) {
416 | font-size: 2rem;
417 | text-align: center;
418 | }
419 | `;
420 |
421 | const Plus = styled.span`
422 | font-size: 2.5rem;
423 | margin: 0 1.5rem;
424 | padding-right: 25px;
425 |
426 | @media (max-width: 768px) {
427 | display: none;
428 | }
429 | `;
430 |
431 | const Equal = styled.span`
432 | font-size: 2.5rem;
433 | margin: 0 1.5rem;
434 |
435 | @media (max-width: 768px) {
436 | display: none;
437 | }
438 | `;
439 |
440 | const Button5 = styled.button`
441 | padding: 15px 35px;
442 | font-size: 20px;
443 | font-weight: bold;
444 | background-color: black;
445 | color: white;
446 | border: none;
447 | border-radius: 5px;
448 | cursor: pointer;
449 | margin-top: 60px;
450 | margin-bottom: 60px;
451 |
452 | @media (max-width: 768px) {
453 | margin-top: 40px;
454 | margin-bottom: 20px;
455 | }
456 | `;
457 |
458 | // const IconContainer = styled.div`
459 | // display: flex;
460 | // justify-content: center;
461 | // align-items: center;
462 | // margin-bottom: 1.5rem;
463 |
464 | // @media (max-width: 768px) {
465 | // margin-bottom: 0.5rem;
466 | // }
467 | // `;
--------------------------------------------------------------------------------
/src/components/Resume.js:
--------------------------------------------------------------------------------
1 | import { ResumeProvider } from "./ResumePage/Context";
2 | import { useEffect } from "react";
3 | import Main from "./ResumePage/element/Main";
4 | import WebFont from "webfontloader";
5 | const Resume = () => {
6 | useEffect(() => {
7 | WebFont.load({
8 | google: {
9 | families: ["Pacifico", "Poppins"],
10 | },
11 | });
12 | }, []);
13 | return (
14 | <>
15 |
16 | {/* */}
17 |
18 |
19 | >
20 | );
21 | };
22 |
23 | export default Resume;
24 |
--------------------------------------------------------------------------------
/src/components/ResumePage/Context.js:
--------------------------------------------------------------------------------
1 | import { createContext, useContext, useRef, useState } from "react";
2 |
3 | const ResumeContext = createContext();
4 |
5 | export const useResume = () => useContext(ResumeContext);
6 |
7 | export const ResumeProvider = ({ children }) => {
8 | const printElem = useRef();
9 |
10 | const [theme, setTheme] = useState("blue");
11 |
12 | const [about, setAbout] = useState({
13 | name: "",
14 | role: "",
15 | email: "",
16 | phone: "",
17 | address: "",
18 | website: "",
19 | github: "",
20 | linkedin: "",
21 | picture: "",
22 | aboutMe: "",
23 | addResumeImage: false
24 | });
25 |
26 | const [educationList, setEducationList] = useState([
27 | {
28 | id: "",
29 | degree: "",
30 | school: "",
31 | startYr: 0,
32 | endYr: 0,
33 | grade: "",
34 | },
35 | ]);
36 |
37 | const [skills, setSkills] = useState([
38 | {
39 | id: 1,
40 | name: "JavaScript",
41 | },
42 | {
43 | id: 2,
44 | name: "ReactJS",
45 | },
46 | {
47 | id: 3,
48 | name: "NodeJS",
49 | },
50 | {
51 | id: 4,
52 | name: "MongoDB",
53 | },
54 | {
55 | id: 5,
56 | name: "ExpressJS",
57 | },
58 | {
59 | id: 6,
60 | name: "PHP",
61 | },
62 | {
63 | id: 7,
64 | name: ".Net",
65 | },
66 | {
67 | id: 8,
68 | name: "Java",
69 | },
70 | {
71 | id: 9,
72 | name: "RestAPI",
73 | },
74 | {
75 | id: 10,
76 | name: "jQuery",
77 | },
78 | {
79 | id: 11,
80 | name: "MySQL",
81 | },
82 | {
83 | id: 12,
84 | name: "Ajax",
85 | },
86 | {
87 | id: 13,
88 | name: "GitHub",
89 | },
90 | {
91 | id: 14,
92 | name: "HTML",
93 | },
94 | {
95 | id: 15,
96 | name: "CSS",
97 | },
98 | {
99 | id: 16,
100 | name: "TailwindCSS",
101 | },
102 | {
103 | id: 17,
104 | name: "Bootstrap",
105 | },
106 | ]);
107 |
108 | const [workList, setWorkList] = useState([
109 | {
110 | id: "",
111 | position: "",
112 | company: "",
113 | type: "",
114 | startDate: "",
115 | endDate: "",
116 | description: "",
117 | },
118 | ]);
119 |
120 | const [projects, setProjects] = useState([
121 | {
122 | id: "",
123 | name: "",
124 | description: "",
125 | url: "",
126 | },
127 | ]);
128 |
129 | const [template, setTemplate] = useState("");
130 |
131 | const value = {
132 | about,
133 | setAbout,
134 | educationList,
135 | setEducationList,
136 | skills,
137 | setSkills,
138 | workList,
139 | setWorkList,
140 | projects,
141 | setProjects,
142 | printElem,
143 | theme,
144 | setTheme,
145 | template,
146 | setTemplate,
147 | };
148 |
149 | return (
150 | {children}
151 | );
152 | };
153 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/About.js:
--------------------------------------------------------------------------------
1 | import {
2 | FormControl,
3 | FormLabel,
4 | HStack,
5 | Input,
6 | Stack,
7 | Button,
8 | Textarea,
9 | Switch
10 | } from "@chakra-ui/react";
11 | import { useResume } from "../../Context";
12 | import ImageUpload from "../ImageUploadButton/ImageUpload.component";
13 |
14 | const About = () => {
15 | const { about, setAbout } = useResume();
16 |
17 | const handleChange = (e) => {
18 | const { name, value } = e.target;
19 | setAbout({ ...about, [name]: value });
20 | };
21 |
22 | return (
23 | <>
24 |
25 | {about.picture ? (
26 | {
28 | setAbout({ ...about, picture: "" });
29 | }}
30 | colorScheme="red"
31 | variant="outline"
32 | >
33 | Remove Image
34 |
35 | ) : (
36 | <>
37 |
38 |
39 | Add Image
40 |
41 | setAbout({...about, ["addResumeImage"]: e.target.checked})}/>
42 |
43 | {about.addResumeImage && }
44 | >
45 | )}
46 |
47 |
48 |
49 | Full Name
50 | handleChange(e)}
52 | name="name"
53 | id="name"
54 | type="text"
55 | variant="filled"
56 | placeholder="Full Name"
57 | />
58 |
59 |
60 | Role
61 | handleChange(e)}
63 | name="role"
64 | id="role"
65 | type="text"
66 | variant="filled"
67 | placeholder="Role"
68 | />
69 |
70 |
71 |
72 |
73 |
74 | Email
75 | handleChange(e)}
77 | name="email"
78 | id="email"
79 | type="email"
80 | variant="filled"
81 | placeholder="Email"
82 | />
83 |
84 |
85 | Phone
86 | handleChange(e)}
88 | name="phone"
89 | id="phone"
90 | type="tel"
91 | variant="filled"
92 | placeholder="Phone"
93 | />
94 |
95 |
96 |
97 |
98 |
99 | Address
100 | handleChange(e)}
102 | name="address"
103 | id="address"
104 | type="text"
105 | variant="filled"
106 | placeholder="Address"
107 | />
108 |
109 |
110 | Website
111 | handleChange(e)}
113 | name="website"
114 | id="website"
115 | type="url"
116 | variant="filled"
117 | placeholder="https://portfolio.com"
118 | />
119 |
120 |
121 |
122 |
123 |
124 | Github
125 | handleChange(e)}
127 | name="github"
128 | id="github"
129 | type="url"
130 | variant="filled"
131 | placeholder="https://github.com"
132 | />
133 |
134 |
135 | LinkedIn
136 | handleChange(e)}
138 | name="linkedin"
139 | id="linkedin"
140 | type="url"
141 | variant="filled"
142 | placeholder="https://linkedin.com"
143 | />
144 |
145 |
146 |
147 |
148 |
149 | About Me
150 |
158 |
159 | Objectives
160 |
168 |
169 |
170 | >
171 | );
172 | };
173 |
174 | export default About;
175 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/Education.js:
--------------------------------------------------------------------------------
1 | import {
2 | Accordion,
3 | AccordionButton,
4 | AccordionIcon,
5 | AccordionItem,
6 | AccordionPanel,
7 | Box,
8 | Button,
9 | FormControl,
10 | FormLabel,
11 | HStack,
12 | Input,
13 | VStack,
14 | Text,
15 | } from "@chakra-ui/react";
16 | import React from "react";
17 | import { useResume } from "../../Context";
18 | import { MdDelete } from "react-icons/md";
19 |
20 | const Education = () => {
21 | const { educationList, setEducationList } = useResume();
22 |
23 | const addMore = () => {
24 | setEducationList([...educationList, educationList]);
25 | };
26 |
27 | const handleChange = (e, index) => {
28 | const { name, value } = e.target;
29 | const updatedEducation = educationList.map((edu, i) =>
30 | index === i ? Object.assign(edu, { [name]: value }) : edu
31 | );
32 |
33 | setEducationList(updatedEducation);
34 | };
35 |
36 | const deleteEducation = (id) => {
37 | setEducationList(educationList.filter((edu) => edu.id !== id));
38 | };
39 |
40 | return (
41 | <>
42 |
43 | {educationList.map((education, index) => (
44 |
45 |
46 |
47 |
48 |
49 | {education.degree ? education.degree : "Degree"}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | handleChange(e, index)}
59 | name="degree"
60 | type="text"
61 | variant="filled"
62 | placeholder="Degree"
63 | />
64 | handleChange(e, index)}
66 | name="school"
67 | type="text"
68 | variant="filled"
69 | placeholder="College"
70 | />
71 |
72 |
73 |
74 |
75 | Start Year
76 | handleChange(e, index)}
78 | name="startYr"
79 | id="startyr"
80 | type="number"
81 | variant="filled"
82 | min="1900"
83 | max="2030"
84 | placeholder="Start Year"
85 | />
86 |
87 |
88 |
89 | End Year
90 | handleChange(e, index)}
92 | name="endYr"
93 | id="endyr"
94 | type="number"
95 | variant="filled"
96 | min="1900"
97 | max="2030"
98 | placeholder="Start Year"
99 | />
100 |
101 |
102 |
103 | Grade
104 | handleChange(e, index)}
106 | name="grade"
107 | id="grade"
108 | type="text"
109 | variant="filled"
110 | placeholder="Grade"
111 | />
112 |
113 |
114 | {educationList[0].id !== education.id && }
116 | onClick={() => deleteEducation(education.id)}
117 | mt={3}
118 | colorScheme={"red"}
119 | >
120 | Delete
121 | }
122 |
123 |
124 | ))}
125 |
126 |
127 | {educationList.length < 2 && (
128 |
129 | Add More
130 |
131 | )}
132 | >
133 | );
134 | };
135 |
136 | export default Education;
137 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/Projects.js:
--------------------------------------------------------------------------------
1 | import {
2 | Accordion,
3 | AccordionButton,
4 | AccordionIcon,
5 | AccordionItem,
6 | AccordionPanel,
7 | Box,
8 | Button,
9 | Input,
10 | VStack,
11 | Textarea,
12 | Text,
13 | } from "@chakra-ui/react";
14 | import { useResume } from "../../Context";
15 | import { v4 as uuidv4 } from "uuid";
16 | import { MdDelete } from "react-icons/md";
17 |
18 | const Projects = () => {
19 | const { projects, setProjects } = useResume();
20 |
21 | const addMore = () => {
22 | setProjects([...projects, {
23 | id: uuidv4(),
24 | name: "",
25 | description: "",
26 | url: "",
27 | }]);
28 | };
29 |
30 | const handleChange = (e, id) => {
31 | const { name, value } = e.target;
32 | const updatedProject = projects.map((project) =>
33 | project.id === id
34 | ? Object.assign(project, { id: uuidv4(), [name]: value })
35 | : project
36 | );
37 | setProjects(updatedProject);
38 | };
39 |
40 | const deleteProject = (id) => {
41 | setProjects(projects.filter((elem) => elem.id !== id));
42 | };
43 |
44 | return (
45 | <>
46 |
47 | {projects.map((project, index) => (
48 |
49 |
50 |
51 |
52 |
53 | {project.name ? project.name : "Project Name"}
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | handleChange(e, project.id)}
64 | name="name"
65 | id="name"
66 | type="text"
67 | variant="filled"
68 | placeholder="Project Name"
69 | />
70 |
71 | handleChange(e, project.id)}
74 | name="url"
75 | id="url"
76 | type="url"
77 | variant="filled"
78 | placeholder="Project URL"
79 | />
80 |
81 |
98 |
99 |
100 | ))}
101 |
102 |
103 | {projects.length < 4 && (
104 |
105 | Add More
106 |
107 | )}
108 | >
109 | );
110 | };
111 |
112 | export default Projects;
113 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/Skills.js:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Button,
4 | FormControl,
5 | FormLabel,
6 | HStack,
7 | Input,
8 | Tag,
9 | TagCloseButton,
10 | TagLabel,
11 | } from "@chakra-ui/react";
12 | import React, { useState } from "react";
13 | import { v4 as uuidv4 } from "uuid";
14 | import { useResume } from "../../Context";
15 | import { useToast } from "@chakra-ui/react";
16 |
17 | const Skills = () => {
18 | const toast = useToast();
19 | const [skill, setSkill] = useState("");
20 | const { skills, setSkills } = useResume();
21 |
22 | const handleSubmit = (e) => {
23 | e.preventDefault();
24 | if (!skill || skill === " ") {
25 | toast({
26 | title: "Empty Input",
27 | status: "error",
28 | isClosable: true,
29 | });
30 | return;
31 | }
32 | const newSkill = {
33 | id: uuidv4(),
34 | name: skill,
35 | };
36 | setSkills([...skills, newSkill]);
37 | setSkill("");
38 | };
39 |
40 | const deleteSkill = (id) => {
41 | setSkills(skills.filter((elem) => elem.id !== id));
42 | };
43 |
44 | return (
45 | <>
46 | handleSubmit(e)}
51 | >
52 |
53 | Add Skills
54 | setSkill(e.target.value)}
56 | value={skill}
57 | name="skill"
58 | id="skill"
59 | type="text"
60 | variant="filled"
61 | placeholder="Skill"
62 | />
63 |
64 |
65 | Add
66 |
67 |
68 |
69 |
70 | {skills.length > 0
71 | ? skills.map((skill, index) => (
72 |
81 | {skill.name}
82 | deleteSkill(skill.id)} />
83 |
84 | ))
85 | : "No Skills Added"}
86 |
87 | >
88 | );
89 | };
90 |
91 | export default Skills;
92 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/Template.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { Box, HStack, Image, Stack } from "@chakra-ui/react";
3 | import { useResume } from "../../Context.js";
4 |
5 | const Template = () => {
6 | const { setTemplate } = useResume();
7 | const [selectedTemplate, setSelectedTemplate] = useState(null);
8 |
9 | const handleSelectTemplate = (template) => {
10 | setSelectedTemplate(template);
11 | setTemplate(template);
12 | };
13 |
14 | return (
15 |
16 |
17 | handleSelectTemplate("template1")}
25 | >
26 |
33 |
34 | handleSelectTemplate("template2")}
42 | >
43 |
50 |
51 |
52 |
53 | );
54 | };
55 |
56 | export default Template;
57 |
58 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/BuildSteps/Work.js:
--------------------------------------------------------------------------------
1 | import {
2 | Accordion,
3 | AccordionButton,
4 | AccordionIcon,
5 | AccordionItem,
6 | AccordionPanel,
7 | Box,
8 | Button,
9 | FormControl,
10 | FormLabel,
11 | HStack,
12 | Input,
13 | Textarea,
14 | Select,
15 | Text,
16 | } from "@chakra-ui/react";
17 | import { useResume } from "../../Context";
18 | import { v4 as uuidv4 } from "uuid";
19 | import { MdDelete } from "react-icons/md";
20 |
21 | const Work = () => {
22 | const { workList, setWorkList } = useResume();
23 |
24 | const addMore = () => {
25 | setWorkList([...workList, {
26 | id: uuidv4(),
27 | position: "",
28 | company: "",
29 | type: "",
30 | startDate: "",
31 | endDate: "",
32 | description: "",
33 | }]);
34 | };
35 |
36 | const handleChange = (e, id) => {
37 | const { name, value } = e.target;
38 | const updatedWorkList = workList.map((work) =>
39 | work.id === id
40 | ? Object.assign(work, { id: uuidv4(), [name]: value })
41 | : work
42 | );
43 |
44 | setWorkList(updatedWorkList);
45 | };
46 |
47 | const deleteWork = (id) => {
48 | setWorkList(workList.filter((elem) => elem.id !== id));
49 | };
50 |
51 | return (
52 | <>
53 |
54 | {workList.map((work, index) => (
55 |
56 |
57 |
58 |
59 |
60 | {work.position ? work.position : "Position"}
61 |
62 |
63 |
64 |
65 |
66 |
67 | handleChange(e, work.id)}
70 | name="position"
71 | type="text"
72 | variant="filled"
73 | placeholder="Position"
74 | mb={3}
75 | />
76 |
77 |
78 | handleChange(e, work.id)}
81 | name="company"
82 | type="text"
83 | variant="filled"
84 | placeholder="Company"
85 | />
86 | handleChange(e, work.id)}
89 | name="type"
90 | variant="filled"
91 | placeholder="Employment Type"
92 | >
93 | Full-time
94 | Part-time
95 | Internship
96 | Freelance
97 |
98 |
99 |
100 |
101 |
102 | Start Date
103 | handleChange(e, work.id)}
106 | name="startDate"
107 | id="startDate"
108 | type="month"
109 | variant="filled"
110 | placeholder="Start Date"
111 | />
112 |
113 |
114 |
115 | End Date
116 | handleChange(e, work.id)}
119 | name="endDate"
120 | id="endDate"
121 | type="month"
122 | variant="filled"
123 | placeholder="Start Date"
124 | />
125 |
126 |
127 |
128 |
129 | Description
130 |
139 |
140 | }
142 | onClick={() => deleteWork(work.id)}
143 | mt={3}
144 | colorScheme={"red"}
145 | >
146 | Delete
147 |
148 |
149 |
150 | ))}
151 |
152 |
153 | {workList.length < 3 && (
154 |
155 | Add More
156 |
157 | )}
158 | >
159 | );
160 | };
161 |
162 | export default Work;
163 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Builder.js:
--------------------------------------------------------------------------------
1 | import {
2 | TabList,
3 | Tabs,
4 | Tab,
5 | TabPanels,
6 | TabPanel,
7 | Box,
8 | Text,
9 | } from "@chakra-ui/react";
10 | import About from "./BuildSteps/About";
11 | import Education from "./BuildSteps/Education";
12 | import Projects from "./BuildSteps/Projects";
13 | import Skills from "./BuildSteps/Skills";
14 | import Work from "./BuildSteps/Work";
15 | import Template from "./BuildSteps/Template";
16 |
17 | const Builder = () => {
18 | return (
19 |
28 |
29 |
30 |
31 | About
32 |
33 |
34 | Education
35 |
36 |
37 | Skills
38 |
39 |
40 | Work
41 |
42 |
43 | Projects
44 |
45 |
46 | Template
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | );
72 | };
73 |
74 | export default Builder;
75 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Ceo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/src/components/ResumePage/element/Ceo.jpeg
--------------------------------------------------------------------------------
/src/components/ResumePage/element/ImageUploadButton/ImageUpload.component.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import "./ImageUpload.styles.css";
3 | import Files from "react-files";
4 | import { useResume } from "../../Context";
5 | import Alert from 'react-bootstrap/Alert';
6 | function ImageUpload() {
7 | const { about, setAbout } = useResume();
8 | const [error, setError] = useState(false);
9 |
10 | const onFilesChange = (files) => {
11 | console.log(files[0]?.preview.url);
12 | setAbout({ ...about, picture: files[0]?.preview.url });
13 | };
14 |
15 | const onFilesError = (error, file) => {
16 | console.log("error code " + error.code + ": " + error.message);
17 | setError(true);
18 | };
19 | return (
20 | <>
21 | {error && Only jpeg/png/jpg file types are allowed }
22 |
31 | Upload Image
32 |
33 | >
34 | );
35 | }
36 |
37 | export default ImageUpload;
38 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/ImageUploadButton/ImageUpload.styles.css:
--------------------------------------------------------------------------------
1 | .files-dropzone {
2 | display: flex;
3 | width: 100%;
4 |
5 | justify-content: center;
6 | align-items: center;
7 | height: 40px;
8 | font-family: Poppins;
9 | font-weight: bold;
10 | border-radius: 6px;
11 | border: 1px solid blue;
12 | color: blue;
13 | }
14 |
15 | .files-dropzone:hover {
16 | background-color: blue;
17 | color: white;
18 | cursor: pointer;
19 | transition: all 0.2s ease-in-out;
20 | -webkit-transition: all 0.2s ease-in-out;
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Main.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import {
3 | Box,
4 | Container,
5 | Stack,
6 | Heading,
7 | Button,
8 | IconButton,
9 | } from "@chakra-ui/react";
10 | import Builder from "./Builder";
11 | import Template1 from "./Template1.js";
12 | import Template2 from "./Template2.js";
13 | import ThemeSelect from "./Theme/ThemeSelect";
14 | import { useReactToPrint } from "react-to-print";
15 | import { useResume } from "../Context";
16 | import { MdOutlineFileDownload, MdShare } from "react-icons/md";
17 | import {
18 | FaFacebook,
19 | FaLinkedin,
20 | FaInstagram,
21 | FaWhatsapp,
22 | } from "react-icons/fa";
23 | import { SiGmail } from "react-icons/si";
24 | import {
25 | FacebookShareButton,
26 | LinkedinShareButton,
27 | EmailShareButton,
28 | WhatsappShareButton,
29 | InstapaperShareButton,
30 | } from "react-share";
31 | import styled from "styled-components";
32 | import Modal from "react-bootstrap/Modal";
33 |
34 | const Main = () => {
35 | const { printElem, template } = useResume(); // Add template state variable
36 |
37 | const handlePrint = useReactToPrint({
38 | content: () => printElem.current,
39 | });
40 |
41 | const RowElement = styled.div`
42 | display: flex;
43 | flex-direction: column;
44 | justify-content: center;
45 | align-items: center;
46 | margin: 0 15px;
47 | @media (max-width: 768px) {
48 | margin: 0 4px;
49 | }
50 | `;
51 |
52 | const [share, setShare] = useState(false);
53 | const handleShare = () => {
54 | setShare((prevShow) => !prevShow);
55 | };
56 |
57 | // Conditionally render the selected template
58 | const selectedTemplate =
59 | template === "template2" ? : ;
60 |
61 | return (
62 |
63 |
71 | Builder Dashboard
72 |
73 |
74 |
75 |
80 |
81 |
82 | }
84 | onClick={handlePrint}
85 | colorScheme={"blue"}
86 | aria-label="Download"
87 | />
88 | }
90 | onClick={handleShare}
91 | colorScheme={"blue"}
92 | aria-label="Share"
93 | />
94 |
95 |
96 |
97 |
98 |
108 |
109 | {selectedTemplate} {/* Render the selected template */}
110 |
111 |
112 | {/* Add a media query for smaller screens */}
113 |
114 |
115 | }
117 | onClick={handlePrint}
118 | colorScheme={"blue"}
119 | aria-label="Download"
120 | />
121 | }
123 | onClick={handleShare}
124 | colorScheme={"blue"}
125 | aria-label="Share"
126 | />
127 |
128 |
129 |
130 | Share
131 |
138 |
146 |
147 |
148 |
149 |
150 | Facebook
151 |
152 |
153 |
154 |
155 |
156 | LinkedIn
157 |
158 |
159 |
160 |
161 |
162 | Gmail
163 |
164 |
165 |
166 |
167 |
168 | WhatsApp
169 |
170 |
171 |
172 |
173 |
174 | Instagram
175 |
176 |
177 |
178 |
179 |
180 | Close
181 |
182 |
183 |
184 |
185 | );
186 | };
187 |
188 | export default Main;
189 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Template1.js:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Heading,
4 | HStack,
5 | Tag,
6 | TagLabel,
7 | Text,
8 | VStack,
9 | Wrap,
10 | UnorderedList,
11 | ListItem,
12 | } from "@chakra-ui/react";
13 | import { useResume } from "../Context";
14 | import { MdMail, MdLocalPhone, MdLocationPin } from "react-icons/md";
15 | import { RiLinkedinBoxFill, RiGithubFill, RiWindowFill } from "react-icons/ri";
16 | import { BiLinkExternal } from "react-icons/bi";
17 | import myIamge from "./Ceo.jpeg";
18 |
19 | const Template1 = () => {
20 | const { theme, about, educationList, skills, workList, projects, printElem } =
21 | useResume();
22 | const imgStyle = {
23 | width: "115px",
24 | height: "115px",
25 | margin: "15px",
26 | borderRadius: "50%",
27 | };
28 | return (
29 | <>
30 |
38 |
39 | {/* Main Header section which contain image & some personal information */}
40 |
41 |
42 |
43 | {about.name ? about.name : "Harry Potter"}
44 |
45 |
46 | {about.role ? about.role : "Full Stack Web Developer"}
47 |
48 |
49 |
50 | {" "}
51 |
52 | {about.email ? about.email : "HarryPotter@hogwarts.edu"}
53 |
54 |
55 |
56 | {" "}
57 | {about.phone ? about.phone : "+910000000000"}
58 |
59 |
60 | {" "}
61 | {about.address ? about.address : "Pune, MH"}
62 |
63 |
64 | {" "}
65 |
66 | Portfolio
67 |
68 |
69 |
70 | {" "}
71 |
72 | Github
73 |
74 |
75 |
76 | {" "}
77 |
78 | LinkedIn
79 |
80 |
81 |
82 |
83 | {about.addResumeImage && <>
84 | {about.picture ? (
85 |
86 | ) : (
87 |
88 | )}
89 | >}
90 |
91 |
92 |
102 |
103 | {/* Summary */}
104 |
105 |
106 |
107 | Summary
108 |
109 |
110 |
111 |
112 | {about.aboutMe
113 | ? about.aboutMe
114 | : "I am a skilled wizard, trained in the art of magical application development. Using the latest incantations and spells, I create enchanting web applications that are both visually stunning and functionally powerful. My focus on precision and quality magic ensures that every product I create is worthy of the highest praise from even the most critical of magical authorities."}
115 |
116 |
117 | {/* EDUCATION */}
118 |
119 |
120 |
121 | Education
122 |
123 |
124 | {educationList.map((education) => {
125 | const { degree, school, startYr, endYr, grade } = education;
126 |
127 | return (
128 |
134 |
135 | {degree
136 | ? degree
137 | : "Bachelor of Wizarding Science in Computer Engineering"}
138 |
139 |
140 | {school
141 | ? school
142 | : "Hogwarts School of Witchcraft and Wizardry"}
143 |
144 |
150 |
151 | {startYr ? startYr : 2018} - {endYr ? endYr : 2022}
152 |
153 | {grade ? grade : "10 CGPA"}
154 |
155 |
156 | );
157 | })}
158 |
159 | {/* EDUCATION WORK EXPERIENCE */}
160 |
161 |
162 |
163 | Work Experience
164 |
165 |
166 |
167 | {workList.map((work) => {
168 | const {
169 | position,
170 | type,
171 | company,
172 | startDate,
173 | endDate,
174 | description: desc,
175 | } = work;
176 |
177 | return (
178 |
184 |
185 | {position ? position : "Full Stack Developer"}
186 |
187 |
188 | {company ? company : "Nimbus Network Solutions"} -{" "}
189 | {type ? type : "Full-time"}
190 |
191 |
192 | {startDate ? startDate : "2022-06"} -{" "}
193 | {endDate ? endDate : "2023-02"}
194 |
195 |
196 | {desc
197 | ? desc
198 | : "Used wand (JavaScript) to vanquish bugs from existing websites and cast spells (implemented enhancements) that significantly improved web functionality and speed."}
199 |
200 |
201 | );
202 | })}
203 |
204 | {/* WORK EXPERIENCE */}
205 |
206 |
207 |
208 | {/* Objectives */}
209 |
210 |
211 |
212 | Objectives
213 |
214 |
215 |
216 | {about.objectives
217 | ? about.objectives
218 | : "To leverage my skills in magical application development to create visually stunning and functionally powerful web applications that meet the highest standards of quality and exceed the expectations of even the most critical magical authorities."}
219 |
220 |
221 | {/* SKILLS */}
222 |
223 |
224 |
225 | Skills
226 |
227 |
228 |
229 | {skills.map((skill, index) => (
230 |
237 | {skill.name}
238 |
239 | ))}
240 |
241 |
242 | {/* SKILLS PROJECTS */}
243 |
244 |
245 |
246 | Projects
247 |
248 |
249 | {projects.map((project) => {
250 | const { name, url, description: desc } = project;
251 | return (
252 |
258 |
259 |
260 | {name ? name : "Project Name"}{" "}
261 | {" "}
262 |
263 |
264 |
265 |
266 |
267 | {desc
268 | ? desc
269 | : "Lorem ipsum dolor sit amet consectetur adipisicing."}
270 |
271 |
272 |
273 |
274 | );
275 | })}
276 |
277 |
278 |
279 |
280 |
281 | >
282 | );
283 | };
284 |
285 | export default Template1;
286 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Template2.js:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Heading,
4 | HStack,
5 | Tag,
6 | TagLabel,
7 | Text,
8 | VStack,
9 | Wrap,
10 | UnorderedList,
11 | ListItem,
12 | } from "@chakra-ui/react";
13 | import { useResume } from "../Context";
14 | import { MdMail, MdLocalPhone, MdLocationPin } from "react-icons/md";
15 | import { RiLinkedinBoxFill, RiGithubFill, RiWindowFill } from "react-icons/ri";
16 | import { BiLinkExternal } from "react-icons/bi";
17 | import myIamge from "./Ceo.jpeg";
18 | const ResumePreview = () => {
19 | const { theme, about, educationList, skills, workList, projects, printElem } =
20 | useResume();
21 | const imgStyle = {
22 | width: "115px",
23 | height: "115px",
24 | margin: "15px",
25 | borderRadius: "50%",
26 | };
27 | return (
28 | <>
29 |
37 |
38 |
39 | {about.addResumeImage && (
40 | <>
41 | {about.picture ? (
42 |
43 | ) : (
44 |
45 | )}
46 | >
47 | )}
48 |
49 |
50 |
51 | {about.name ? about.name : "Harry Potter"}
52 |
53 |
54 | {about.role ? about.role : "Full Stack Web Developer"}
55 |
56 |
57 |
58 |
59 |
67 |
68 | {" "}
69 |
70 | {about.email ? about.email : "HarryPotter@hogwarts.edu"}
71 |
72 |
73 |
74 | {" "}
75 | {about.phone ? about.phone : "+910000000000"}
76 |
77 |
78 | {" "}
79 | {about.address ? about.address : "Pune, MH"}
80 |
81 |
82 | {" "}
83 | Portfolio
84 |
85 |
86 |
87 | {" "}
88 |
89 | LinkedIn
90 |
91 |
92 |
93 | {" "}
94 | GitHub
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | About Me
103 |
104 |
105 | {about.aboutMe
106 | ? about.aboutMe
107 | : "I am a skilled wizard, trained in the art of magical application development. Using the latest incantations and spells, I create enchanting web applications that are both visually stunning and functionally powerful. My focus on precision and quality magic ensures that every product I create is worthy of the highest praise from even the most critical of magical authorities."}
108 |
109 |
110 |
111 |
112 |
113 |
114 | Objectives
115 |
116 |
117 | {about.objectives
118 | ? about.objectives
119 | : "To leverage my skills in magical application development to create visually stunning and functionally powerful web applications that meet the highest standards of quality and exceed the expectations of even the most critical magical authorities."}
120 |
121 |
122 |
123 |
124 |
134 |
135 | {/* EDUCATION */}
136 |
137 |
138 | EDUCATION
139 |
140 |
141 | {educationList.map((education) => {
142 | const { degree, school, startYr, endYr, grade } = education;
143 |
144 | return (
145 |
152 |
153 | {degree
154 | ? degree
155 | : "Bachelor of Wizarding Science in Computer Engineering"}
156 |
157 |
158 | {school
159 | ? school
160 | : "Hogwarts School of Witchcraft and Wizardry"}
161 |
162 |
168 |
169 | {startYr ? startYr : 2018} - {endYr ? endYr : 2022}
170 |
171 | {grade ? grade : "10 CGPA"}
172 |
173 |
174 | );
175 | })}
176 |
177 | {/* EDUCATION WORK EXPERIENCE */}
178 |
179 |
180 | WORK EXPERIENCE
181 |
182 |
183 | {workList.map((work) => {
184 | const {
185 | position,
186 | type,
187 | company,
188 | startDate,
189 | endDate,
190 | description: desc,
191 | } = work;
192 |
193 | return (
194 |
201 |
202 | {position ? position : "Full Stack Developer"}
203 |
204 |
205 | {company ? company : "Nimbus Network Solutions"} -{" "}
206 | {type ? type : "Full-time"}
207 |
208 |
209 | {startDate ? startDate : "2022-06"} -{" "}
210 | {endDate ? endDate : "2023-02"}
211 |
212 |
213 | {desc
214 | ? desc
215 | : "Used wand (JavaScript) to vanquish bugs from existing websites and cast spells (implemented enhancements) that significantly improved web functionality and speed."}
216 |
217 |
218 | );
219 | })}
220 |
221 | {/* WORK EXPERIENCE */}
222 |
223 |
224 |
225 | {/* SKILLS */}
226 |
227 |
228 | SKILLS
229 |
230 |
231 | {skills.map((skill, index) => (
232 |
239 | {skill.name}
240 |
241 | ))}
242 |
243 |
244 | {/* SKILLS PROJECTS */}
245 |
246 |
247 | PROJECTS
248 |
249 |
250 | {projects.map((project) => {
251 | const { name, url, description: desc } = project;
252 | return (
253 |
260 |
261 |
262 | {name ? name : "Project Name"}{" "}
263 | {" "}
264 |
265 |
266 |
267 |
268 |
269 | {desc
270 | ? desc
271 | : "Lorem ipsum dolor sit amet consectetur adipisicing."}
272 |
273 |
274 |
275 |
276 | );
277 | })}
278 |
279 | {/* PROJECTS */}
280 |
281 |
282 |
283 |
284 | >
285 | );
286 | };
287 |
288 | export default ResumePreview;
289 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Theme/ThemeOption.js:
--------------------------------------------------------------------------------
1 | import { Box, useRadio } from "@chakra-ui/react";
2 | import React from "react";
3 |
4 | const ThemeOption = (props) => {
5 | const { getInputProps, getCheckboxProps } = useRadio(props);
6 |
7 | const input = getInputProps();
8 | const checkbox = getCheckboxProps();
9 |
10 | return (
11 |
12 |
13 |
25 |
26 | );
27 | };
28 |
29 | export default ThemeOption;
30 |
--------------------------------------------------------------------------------
/src/components/ResumePage/element/Theme/ThemeSelect.js:
--------------------------------------------------------------------------------
1 | import { HStack, useRadioGroup } from "@chakra-ui/react";
2 | import React, { useEffect, useRef, useState } from "react";
3 | import { ChromePicker } from "react-color";
4 | import { useResume } from "../../Context";
5 | import ThemeOption from "./ThemeOption";
6 |
7 | const ThemeSelect = () => {
8 | const [showColorPicker, setShowColorPicker] = useState(false);
9 | const [customColor, setCustomColor] = useState("#FFFFFF");
10 | const { theme, setTheme } = useResume();
11 | const ref = useRef();
12 | const options = [
13 | "blue",
14 | "#BD238D",
15 | "#6D2194",
16 | "#0B877C",
17 | "red.700",
18 | "orange.800",
19 | ];
20 |
21 | const { getRootProps, getRadioProps } = useRadioGroup({
22 | name: "color",
23 | value: theme,
24 | onChange: setTheme,
25 | });
26 |
27 | const group = getRootProps();
28 |
29 | const handleCustomColorChange = (color) => {
30 | setCustomColor(color.hex);
31 | setTheme(color.hex);
32 | };
33 |
34 | const handleShowColorPicker = () => {
35 | setShowColorPicker(!showColorPicker);
36 | };
37 |
38 | useEffect(() => {
39 | const checkIfClickedOutside = (e) => {
40 | // If the menu is open and the clicked target is not within the menu,
41 | // then close the menu
42 | if (showColorPicker && ref.current && !ref.current.contains(e.target)) {
43 | setShowColorPicker(!showColorPicker);
44 | }
45 | };
46 | document.addEventListener("mousedown", checkIfClickedOutside);
47 |
48 | return () => {
49 | // Cleanup the event listener
50 | document.removeEventListener("mousedown", checkIfClickedOutside);
51 | };
52 | }, [showColorPicker]);
53 |
54 | return (
55 |
64 | {options.map((value) => {
65 | const radio = getRadioProps({ value });
66 | return (
67 |
68 | {value}
69 |
70 | );
71 | })}
72 |
89 | {showColorPicker && (
90 |
102 |
106 |
107 | )}
108 |
109 | );
110 | };
111 |
112 | export default ThemeSelect;
113 |
--------------------------------------------------------------------------------
/src/components/Study.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 |
4 |
5 | const Container = styled.div`
6 | max-width: 100%;
7 | background-color: #d2ebf7;
8 | padding-top: 45px;
9 | display: flex;
10 | justify-content: center;
11 | `;
12 | const Card = styled.div`
13 | max-width: 100%;
14 | background-color: white;
15 | padding: 10px 10px;
16 | margin-bottom: 20px;
17 | border-radius: 10px;
18 | `;
19 | const WidthContainer = styled.div`
20 | max-width: 800px;
21 | `;
22 |
23 | const Title = styled.h2`
24 | font-size: 2.5rem;
25 | text-align: center;
26 | font-weight: 600;
27 | font-family: Garamond, serif;
28 | `;
29 | const TitleDiv = styled.div`
30 | display: flex;
31 | flex-direction: column;
32 | align-items: center;
33 | margin-bottom: 1.25rem;
34 | `;
35 |
36 | const Subtitle = styled.h3`
37 | font-size: 1.75rem;
38 | margin-bottom: 1.25rem;
39 | font-weight: 600;
40 | font-family: Garamond, serif;
41 | text-align: center;
42 | /* border-bottom: 2.5px solid dodgerblue; */
43 | `;
44 |
45 | const Text = styled.p`
46 | font-size: 1.25rem;
47 | line-height: 1.5;
48 | font-weight: 500;
49 | margin-bottom: 1.5rem;
50 | font-family: Perpetua;
51 | `;
52 |
53 | const List = styled.ol`
54 | font-size: 1.125rem;
55 | line-height: 1.5;
56 | margin-bottom: 1.5rem;
57 | `;
58 |
59 | const ListItem = styled.li`
60 | margin-bottom: 1rem;
61 | margin-left: 20px;
62 | `;
63 |
64 | const Strong = styled.strong`
65 | font-weight: bold;
66 | font-family: Garamond, serif;
67 | `;
68 |
69 | const Study = () => {
70 | return (
71 | <>
72 |
73 |
74 |
75 | A Resume Guide for Freshers
76 |
77 |
78 |
79 | A resume is the first point of contact between the recruiter & the
80 | candidate. A resume has the power to catch an eye of a recruiter within
81 | a few seconds.
82 |
83 |
84 | Especially if you are a fresher, the prospect of getting shortlisted for
85 | a job is directly dependent on your CV.
86 |
87 |
88 | Therefore resume for freshers looking for their first job needs to
89 | follow a proper direction & structure.
90 |
91 |
92 | Although prescribed structure for freshers to draft their resume cant be
93 | universal, but keeping professional trends in mind, we shall discuss
94 | important tips to create the best resume for freshers along with a
95 | resume template.
96 |
97 |
98 |
99 | What is a Resume?
100 |
101 |
102 |
103 | A resume is a formal document that gives a recruiter detailed
104 | information about the candidate’s education, professional experience
105 | & skills.
106 |
107 |
108 | A resume or CV is the first piece of document that is produced while
109 | applying for a job. Resume is literally an image of the candidate put on
110 | paper.
111 |
112 |
113 |
114 |
115 | Who is considered to be a Fresher?
116 |
117 |
118 |
119 | Well as the name already suggest, a fresher is considered to be someone
120 | who hasn’t professionally worked on a full time basis with any
121 | organization in the past.
122 |
123 |
124 | Having said that, in many organizations candidates who are switching
125 | over to a new professional field are also considered to be freshers.
126 |
127 | The question is, how to draft the best possible resume as a fresher? Well, here is how!
128 |
129 |
130 |
131 | Resume Tips for Freshers
132 |
133 |
134 |
135 |
136 | Be On Point
137 |
138 | A resume for freshers looking for the first job needs to be much
139 | more convincing than a normal resume. It needs to be apt & must
140 | give maximum information using minimum words.
141 |
142 |
143 | An unstructured, exhaustive resume can lower the chances of a
144 | fresher getting shortlisted drastically.
145 |
146 |
147 | Thus the most important thing to keep in mind before drafting a
148 | resume is that it should be precise &must be to the point.
149 |
150 |
151 |
152 | Highlight Your Education
153 |
154 | As a fresher, your educational qualifications play a vital role in
155 | your selection process. So, make sure to highlight your education
156 | section in your resume.
157 |
158 |
159 | Start with your latest degree and go backward in a reverse
160 | chronological order. Mention the name of the institution, degree
161 | name, and passing year.
162 |
163 |
164 |
165 | Focus on Skills & Internships
166 |
167 | Freshers don't have much work experience to showcase in their
168 | resumes. So, focus on your skills and internships.
169 |
170 |
171 | Mention any relevant internship or project experience that you have
172 | had during your college days. Highlight the skills you learned
173 | during those experiences, such as teamwork, communication,
174 | leadership, etc.
175 |
176 |
177 |
178 | Use Action Words
179 |
180 | Use action words in your resume that showcase your achievements and
181 | capabilities. Words like "managed", "led", "created", "designed",
182 | etc. can make your resume more impactful and impressive.
183 |
184 |
185 |
186 | Keep it Simple
187 |
188 | Avoid using fancy fonts, colors, or graphics in your resume. Keep
189 | it simple, professional, and easy to read. Use bullet points and
190 | short sentences instead of long paragraphs.
191 |
192 |
193 |
194 |
195 |
196 |
197 | >
198 | );
199 | };
200 |
201 | export default Study;
202 |
--------------------------------------------------------------------------------
/src/components/images/ContactUs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/src/components/images/ContactUs.png
--------------------------------------------------------------------------------
/src/components/images/chip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/src/components/images/chip.png
--------------------------------------------------------------------------------
/src/components/images/cv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y4sssh/Resume-Generator/7c8199be3beaa3d5c302d8100bda3ba5a29d2da3/src/components/images/cv.png
--------------------------------------------------------------------------------
/src/components/images/em1.jpg:
--------------------------------------------------------------------------------
1 | ���� JFIF H H �� �
2 | !'"#%%%),($+!$%$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$�� U �� 6 �� �
[�t����� {�^��Gm�G���_�� ��E+=
�uz2ݕ;�ʀ Km[�h ���~{���k5ɬ�'V�h G������^�}��=\@ 5����]}����<Go8 '��]�� g�*iS�pzo�� U��^�MaC� ����^s�h�����?A�� BY��9X�==@ >@ ����n;c#�x�]` iLg�#?&P�k�� � �߬�ﻹ��۞��{ ���n���n��lє�6'G�p sf%�# ;.P�y� �uF��:�� ���qI�<�I*ͮ%�ٯ��|����� �1=a�ْ��� ����#��� ��ZW����ϼ�1�����s�d ��O��(N� �??�>�g��� ��K�y,�e��|b�1��q������es1'�g�y;�z�� �e��h �U�����ն%(��cR���2ҏyzPW�<��?Ag�� ���́��� Bp�y��rH� n�͟��컟* �|KD�@Jr�Yk i�y10*���&