├── .gitignore ├── LICENSE ├── README.md ├── craco.config.js ├── package-lock.json ├── package.json ├── public ├── index.html ├── logo.ico ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── src ├── App.js ├── App.test.js ├── assets │ └── logo.svg ├── components │ ├── LandingPage.js │ ├── Nav.js │ ├── Resume.js │ ├── TemplateData.js │ └── Templates │ │ ├── Minimalist.js │ │ └── TwoColumn.js ├── index.css ├── index.js ├── logo.svg ├── reportWebVitals.js └── setupTests.js └── tailwind.config.js /.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) 2021 Piyush Sinha 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 | # Tech Resume 2 | ## A resume builder which helps you to effortlessly make a job-worthy resume. Easy to use and done within minutes - try now for free! 3 | Live: [https://main.doo2i0aqct9l.amplifyapp.com/](https://main.doo2i0aqct9l.amplifyapp.com/) 4 | 5 | 6 | 7 | ## :dizzy: Features 8 | * Ready-to-use templates 9 | * Color picker 10 | * Download PDF 11 | 12 | 13 | ## :man_technologist: Technology Stack 14 | * [React](https://reactjs.org) 15 | * [Tailwind CSS](https://tailwindcss.com/) 16 | * [Hero Icons](https://heroicons.com/) 17 | * [AWS Amplify](https://aws.amazon.com/amplify/) 18 | 19 | ## :zap: Installation 20 | 1. Clone / Download this repo. 21 | 2. Inside the project open a terminal and run: 22 | ```bash 23 | npm install 24 | ``` 25 | This will install all the project dependencies. 26 | 27 | 3. To start the development server run: 28 | ```bash 29 | npm start 30 | ``` 31 | 32 | ## :page_facing_up: License 33 | 34 | All the code available under the MIT license. See [LICENSE](LICENSE). 35 | 36 | ```sh 37 | MIT License 38 | 39 | Copyright (c) 2021 Piyush Sinha 40 | 41 | Permission is hereby granted, free of charge, to any person obtaining a copy 42 | of this software and associated documentation files (the "Software"), to deal 43 | in the Software without restriction, including without limitation the rights 44 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 45 | copies of the Software, and to permit persons to whom the Software is 46 | furnished to do so, subject to the following conditions: 47 | 48 | The above copyright notice and this permission notice shall be included in all 49 | copies or substantial portions of the Software. 50 | 51 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 52 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 53 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 54 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 55 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 56 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 57 | SOFTWARE. 58 | ``` 59 | -------------------------------------------------------------------------------- /craco.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | style: { 3 | postcss: { 4 | plugins: [ 5 | require('tailwindcss'), 6 | require('autoprefixer'), 7 | ], 8 | }, 9 | }, 10 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tech-resume", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@craco/craco": "^6.1.0", 7 | "@tailwindcss/postcss7-compat": "^2.0.2", 8 | "@testing-library/jest-dom": "^5.11.9", 9 | "@testing-library/react": "^11.2.5", 10 | "@testing-library/user-event": "^12.6.3", 11 | "autoprefixer": "^9.8.6", 12 | "postcss": "^7.0.35", 13 | "react": "^17.0.1", 14 | "react-dom": "^17.0.1", 15 | "react-router-dom": "^5.2.0", 16 | "react-scripts": "4.0.2", 17 | "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.2", 18 | "web-vitals": "^1.1.0" 19 | }, 20 | "scripts": { 21 | "start": "craco start", 22 | "build": "craco build", 23 | "test": "craco test", 24 | "eject": "react-scripts eject" 25 | }, 26 | "eslintConfig": { 27 | "extends": [ 28 | "react-app", 29 | "react-app/jest" 30 | ] 31 | }, 32 | "browserslist": { 33 | "production": [ 34 | ">0.2%", 35 | "not dead", 36 | "not op_mini all" 37 | ], 38 | "development": [ 39 | "last 1 chrome version", 40 | "last 1 firefox version", 41 | "last 1 safari version" 42 | ] 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | 28 | 29 | Tech Resume 30 | 31 | 32 | 33 |
34 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /public/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyushsinha24/tech-resume/13ecee1852af568972405c105cc75340d3d4f610/public/logo.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyushsinha24/tech-resume/13ecee1852af568972405c105cc75340d3d4f610/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piyushsinha24/tech-resume/13ecee1852af568972405c105cc75340d3d4f610/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "logo.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 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {Route, Switch } from "react-router-dom"; 3 | import LandingPage from '../src/components/LandingPage'; 4 | import TemplateData from '../src/components/TemplateData'; 5 | 6 | function App() { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | } 16 | 17 | export default App; 18 | -------------------------------------------------------------------------------- /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/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 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 | -------------------------------------------------------------------------------- /src/components/LandingPage.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { withRouter } from "react-router-dom"; 3 | import Logo from "../assets/logo.svg"; 4 | 5 | class LandingPage extends Component { 6 | constructor(props) { 7 | super(props); 8 | this.handleClick = this.handleClick.bind(this); 9 | } 10 | 11 | handleClick(e) { 12 | let url = "/templates"; 13 | this.props.history.push(url); 14 | } 15 | 16 | render() { 17 | return ( 18 |
19 | tech-resume-logo 20 |
21 |

Tech Resume

22 |

23 | Effortlessly make a job-worthy resume 24 |

25 |
26 | 33 | 39 | Live Demo 40 | 41 |
42 |
43 |
44 | ); 45 | } 46 | } 47 | 48 | export default withRouter(LandingPage); 49 | -------------------------------------------------------------------------------- /src/components/Nav.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Logo from "../assets/logo.svg"; 3 | 4 | class Nav extends Component { 5 | render() { 6 | return ( 7 |
8 | 9 | tech-resume-logo 14 | 15 | {this.props.showDownloadBtn?:""} 38 |
39 | ); 40 | } 41 | } 42 | 43 | export default Nav; 44 | -------------------------------------------------------------------------------- /src/components/Resume.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Minimalist from "./Templates/Minimalist"; 3 | import TwoColumn from "./Templates/TwoColumn"; 4 | 5 | class Resume extends React.Component { 6 | render() { 7 | return ( 8 | 9 | {this.props.type === "minimalist" ? ( 10 | 21 | ) : ( 22 | 33 | )} 34 | 35 | ); 36 | } 37 | } 38 | 39 | export default Resume; 40 | -------------------------------------------------------------------------------- /src/components/TemplateData.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Nav from "./Nav"; 3 | import Resume from "./Resume"; 4 | 5 | class TemplateData extends Component { 6 | constructor(props) { 7 | super(props); 8 | let employment = { 9 | jobTitles: {}, 10 | emp: {}, 11 | jobDesc: {}, 12 | jobStartDate: {}, 13 | jobEndDate: {}, 14 | }; 15 | let education = { 16 | qual: {}, 17 | edu: {}, 18 | eduDesc: {}, 19 | eduStartDate: {}, 20 | eduEndDate: {}, 21 | }; 22 | let project = { 23 | projectTitles: {}, 24 | projectDesc: {}, 25 | projectStartDate: {}, 26 | projectEndDate: {}, 27 | }; 28 | 29 | this.state = { 30 | data: {}, 31 | type: "two-column", 32 | headerColor: "#7F1D1D", 33 | headerTextColor: "#ffffff", 34 | empTemplate: [], 35 | eduTemplate: [], 36 | projectTemplate: [], 37 | empCount: 0, 38 | eduCount: 0, 39 | projectCount: 0, 40 | employment: employment, 41 | education: education, 42 | project: project, 43 | }; 44 | this.handleChange = this.handleChange.bind(this); 45 | this.handleEmpClick = this.handleEmpClick.bind(this); 46 | this.handleProjectClick = this.handleProjectClick.bind(this); 47 | this.handleEduClick = this.handleEduClick.bind(this); 48 | } 49 | 50 | handleEmpClick(e) { 51 | e.preventDefault(); 52 | let i = this.state.empCount; 53 | ++i; 54 | const template = ( 55 |
56 |
57 | 60 | 67 | 70 | 77 |
78 | 86 | 94 |