├── .env.example ├── .eslintrc ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── api └── utils │ └── db.ts ├── components ├── connect │ └── index.tsx ├── home │ ├── contact.tsx │ ├── index.tsx │ ├── landing.tsx │ ├── projects.tsx │ ├── repo.tsx │ ├── skills-icon.tsx │ ├── skills.tsx │ ├── wordcloud.tsx │ └── work.tsx ├── index.ts ├── notfound │ └── index.tsx ├── project-details │ ├── details.tsx │ ├── index.tsx │ └── landing.tsx ├── projects │ └── index.tsx └── work │ ├── company-details.tsx │ ├── details.tsx │ ├── index.tsx │ └── landing.tsx ├── docs └── logo-dark.svg ├── next-env.d.ts ├── package.json ├── pages ├── 404.tsx ├── _app.tsx ├── api │ ├── companies.ts │ ├── health.ts │ ├── me.ts │ └── projects.ts ├── connect.tsx ├── index.tsx ├── project │ └── [slug].tsx ├── projects.tsx └── work.tsx ├── postcss.config.js ├── public ├── HARSH_GOEL_RESUME.pdf ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── images │ ├── 1.png │ ├── bob.png │ ├── companies │ │ ├── bharatpe.png │ │ ├── coding_blocks.svg │ │ ├── dezigndia.png │ │ ├── hashbinary.svg │ │ ├── headout.svg │ │ ├── heiphen.svg │ │ ├── iec.svg │ │ ├── inception_wave.svg │ │ ├── insolvers.svg │ │ ├── social_dukan.svg │ │ ├── workmailcommunity.svg │ │ └── zoob_labs.svg │ ├── harsh_goel.svg │ ├── icons │ │ ├── call.svg │ │ ├── facebook.svg │ │ ├── fork.svg │ │ ├── github.svg │ │ ├── instagram.svg │ │ ├── linkedin.svg │ │ ├── mail.svg │ │ ├── star.svg │ │ ├── warning.svg │ │ └── watch.svg │ ├── logo-dark.svg │ ├── logo-light.svg │ ├── projects │ │ ├── brinecleanup.webp │ │ ├── carl.webp │ │ ├── connekt.webp │ │ ├── daa.webp │ │ ├── desk.png │ │ ├── doceasy.png │ │ ├── dr-jeewan.webp │ │ ├── goco.webp │ │ ├── hhs.webp │ │ ├── idy-dashboard.webp │ │ ├── inception_wave.webp │ │ ├── insolvers.webp │ │ ├── jack.webp │ │ ├── kzilla-xyz.webp │ │ ├── labelfuse.webp │ │ ├── mediseen.png │ │ ├── milan-20.webp │ │ ├── mirate.webp │ │ ├── mozofest21.png │ │ ├── portfolio_v1.webp │ │ ├── pricinger.png │ │ ├── recruitments-srmkzilla.webp │ │ ├── social_dukan.webp │ │ ├── srm_sce.webp │ │ ├── srmiec-2020.webp │ │ └── workmailcommunity.webp │ ├── skills │ │ ├── angular.svg │ │ ├── css.svg │ │ ├── discordjs.png │ │ ├── express.svg │ │ ├── figma.svg │ │ ├── firebase.svg │ │ ├── git.svg │ │ ├── html.svg │ │ ├── js.svg │ │ ├── mongodb.svg │ │ ├── mysql.png │ │ ├── nextjs.svg │ │ ├── node.svg │ │ ├── php.svg │ │ ├── react-native.svg │ │ ├── react.svg │ │ ├── svelte.svg │ │ └── ts.svg │ ├── srmkzilla_logo_white_mono.png │ └── vectors │ │ ├── 404-hero.svg │ │ ├── 404-polygon.svg │ │ ├── arrows-right.svg │ │ ├── boxes.svg │ │ ├── circle-spin.svg │ │ ├── contact.svg │ │ ├── cylinder.svg │ │ ├── ellipse.svg │ │ ├── heart.svg │ │ ├── l-vector.svg │ │ ├── nav_active.svg │ │ ├── quater-spin.svg │ │ └── triangle.svg ├── mstile-150x150.png ├── safari-pinned-tab.svg ├── site.webmanifest └── sitemap.xml ├── shared ├── components │ ├── buttons.tsx │ ├── cookie-alert.tsx │ ├── footer.tsx │ ├── header-small.tsx │ ├── index.ts │ ├── loader.tsx │ ├── navbar.tsx │ ├── project-card.tsx │ ├── socialbar.tsx │ └── text-cards.tsx ├── cursor.tsx └── utils │ ├── apiService.tsx │ ├── constants.ts │ ├── contexts.tsx │ ├── skills.tsx │ ├── types.tsx │ └── words.tsx ├── styles └── global.css ├── tailwind.config.js ├── tsconfig.json └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | MONGODB_URI = ( put a mongodb url here) 2 | BASE_URL = https://harshgoel.me (this is my api URL, change it to http://localhost:3000, in case you tend to use your database) 3 | ENV = (environment) 4 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "extends": [ 4 | "airbnb-typescript", 5 | "eslint:recommended", 6 | "prettier", 7 | "prettier/react", 8 | "prettier/@typescript-eslint", 9 | "plugin:prettier/recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended" 12 | ], 13 | "plugins": ["@typescript-eslint", "react", "prettier"], 14 | "rules": { 15 | "react/react-in-jsx-scope": "off", 16 | "prettier/prettier": [ 17 | "error", 18 | { 19 | "endOfLine": "auto" 20 | } 21 | ], 22 | "jsx-a11y/anchor-is-valid": [ 23 | "error", 24 | { 25 | "components": ["Link"], 26 | "specialLink": ["hrefLeft", "hrefRight"], 27 | "aspects": ["invalidHref", "preferButton"] 28 | } 29 | ], 30 | "react/jsx-props-no-spreading": "off" 31 | }, 32 | "globals": { 33 | "React": "writable" 34 | }, 35 | "parserOptions": { 36 | "ecmaVersion": 2020, 37 | "sourceType": "module", 38 | "ecmaFeatures": { 39 | "jsx": true 40 | }, 41 | "project": "./tsconfig.json" 42 | }, 43 | "settings": { 44 | "react": { 45 | "version": "detect" 46 | } 47 | }, 48 | "env": { 49 | "browser": true, 50 | "amd": true, 51 | "node": true 52 | }, 53 | "ignorePatterns": ["./.next/*"] 54 | } 55 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [harshgoel05] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Expected Behavior 2 | 3 | Please describe the behavior you are expecting 4 | 5 | # Current Behavior 6 | 7 | What is the current behavior? 8 | 9 | # Failure Information (for bugs) 10 | 11 | Please help provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template. 12 | 13 | ## Steps to Reproduce 14 | 15 | Please provide detailed steps for reproducing the issue. 16 | 17 | 1. step 1 18 | 2. step 2 19 | 3. you get it... 20 | 21 | ## Context 22 | 23 | Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. 24 | 25 | - Firmware Version: 26 | - Operating System: 27 | - SDK version: 28 | - Toolchain version: 29 | 30 | ## Failure Logs 31 | 32 | Please include any relevant log snippets or files here. 33 | -------------------------------------------------------------------------------- /.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 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 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 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. 4 | 5 | Fixes # (issue) 6 | 7 | ## Type of change 8 | 9 | Please delete options that are not relevant. 10 | 11 | - [ ] Bug fix (non-breaking change which fixes an issue) 12 | - [ ] New feature (non-breaking change which adds functionality) 13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 14 | - [ ] This change requires a documentation update 15 | 16 | # How Has This Been Tested? 17 | 18 | Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration 19 | 20 | - [ ] Test A 21 | - [ ] Test B 22 | 23 | **Test Configuration**: 24 | 25 | - Firmware version: 26 | - Hardware: 27 | - Toolchain: 28 | - SDK: 29 | 30 | # Checklist: 31 | 32 | - [ ] My code follows the style guidelines of this project 33 | - [ ] I have performed a self-review of my own code 34 | - [ ] I have commented my code, particularly in hard-to-understand areas 35 | - [ ] I have made corresponding changes to the documentation 36 | - [ ] My changes generate no new warnings 37 | - [ ] I have added tests that prove my fix is effective or that my feature works 38 | - [ ] New and existing unit tests pass locally with my changes 39 | - [ ] Any dependent changes have been merged and published in downstream modules 40 | -------------------------------------------------------------------------------- /.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 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | .env 18 | # misc 19 | .DS_Store 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # local env files 27 | .env.local 28 | .env.development.local 29 | .env.test.local 30 | .env.production.local 31 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "tabWidth": 2, 4 | "printWidth": 100, 5 | "singleQuote": true, 6 | "trailingComma": "none", 7 | "jsxBracketSameLine": true 8 | } 9 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at harshgoel05@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | Please note we have a code of conduct, please follow it in all your interactions with the project. 7 | 8 | ## Pull Request Process 9 | 10 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a build. 11 | 2. Update the README.md with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters. 12 | 3. Use [Gitmoji](https://gitmoji.dev/) for your commits. 13 | 4. Increase the version numbers in any examples files and the README.md to the new version that this Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). 14 | 5. Create a PR from your forked repository feature branch to master of the main repository. 15 | 6. The owner/developer will merge the Pull Request if it aligns with the practises we follow and is valid. One should not merge, and ask for a reviewer to merge it. 16 | 17 | ## Code of Conduct 18 | 19 | ### Our Pledge 20 | 21 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, 22 | nationality, personal appearance, race, religion, or sexual identity and orientation. 23 | 24 | ### Our Standards 25 | 26 | Examples of behavior that contributes to creating a positive environment 27 | include: 28 | 29 | - Using welcoming and inclusive language 30 | - Being respectful of differing viewpoints and experiences 31 | - Gracefully accepting constructive criticism 32 | - Focusing on what is best for the community 33 | - Showing empathy towards other community members 34 | 35 | Examples of unacceptable behavior by participants include: 36 | 37 | - The use of sexualized language or imagery and unwelcome sexual attention or 38 | advances 39 | - Trolling, insulting/derogatory comments, and personal or political attacks 40 | - Public or private harassment 41 | - Publishing others' private information, such as a physical or electronic 42 | address, without explicit permission 43 | - Other conduct which could reasonably be considered inappropriate in a 44 | professional setting 45 | 46 | ### Our Responsibilities 47 | 48 | Project maintainers are responsible for clarifying the standards of acceptable 49 | behavior and are expected to take appropriate and fair corrective action in 50 | response to any instances of unacceptable behavior. 51 | 52 | Project maintainers have the right and responsibility to remove, edit, or 53 | reject comments, commits, code, wiki edits, issues, and other contributions 54 | that are not aligned to this Code of Conduct, or to ban temporarily or 55 | permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 56 | 57 | ### Scope 58 | 59 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 60 | 61 | ### Enforcement 62 | 63 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 64 | reported by contacting the project team at [INSERT EMAIL ADDRESS]. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 65 | 66 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 67 | 68 | ### Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [http://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: http://contributor-covenant.org 74 | [version]: http://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2021 Harsh Goel 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | HG_LOGO 3 |
4 | 5 |
6 |

7 | Another Porfolio 8 |

9 |

10 | crafted with by Harsh Goel. 11 |

12 |

13 | version 1.0.0 14 | license MIT 15 | 16 | 17 | author Harsh Goel 18 |

19 | 20 | > Harsh's Developer Portfolio built on NextJS! 21 | 22 | ## Built With 23 | 24 | This website is built with on [NextJS](https://nextjs.org/), statically typed in [TypeScript](https://www.typescriptlang.org/) following the best practises in the market. 25 | 26 | ## Installation 🔧 27 | 28 | Install dependencies 29 | 30 | ``` 31 | $ yarn 32 | ``` 33 | 34 | Building 35 | 36 | ``` 37 | $ yarn build 38 | ``` 39 | 40 | ## Running Server 🚀 41 | 42 | Start the development server 43 | 44 | ``` 45 | $ yarn dev 46 | ``` 47 | 48 | Start the server 49 | 50 | ``` 51 | $ yarn start 52 | ``` 53 | 54 | ## Other Commands 🚧 55 | 56 | Use ESLint to check all files 57 | 58 | ``` 59 | $ yarn lint 60 | ``` 61 | 62 | Format the code using Prettier 63 | 64 | ``` 65 | $ yarn format 66 | ``` 67 | 68 | ## License 📜 69 | 70 | `Portfolio` is available under the MIT license. See the LICENSE file for more info. 71 | 72 | ## Contributing 🤝 73 | 74 | 1. Find an issue to work on from [here](https://github.com/harshgoel05/another-portfolio/issues) 75 | 2. Ask the owner/maintainer for permission to work on the issue. 76 | 3. Fork this repository. [For help, click here](https://docs.github.com/en/get-started/quickstart/fork-a-repo) 77 | 4. Clone the forked repository in your local machine [For help, click here](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) 78 | 5. Create a new branch [For help, click here](https://github.com/Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches) 79 | 6. Add and commit your changes to the new branch [For help, click here](https://stackoverflow.com/questions/14655816/how-to-commit-changes-to-another-pre-existent-branch#:~:text=First%2C%20checkout%20to%20your%20new,show%20up%20on%20the%20remote.) 80 | 7. Please use [GitMoji](https://gitmoji.dev/) for all commits that you make. 81 | 8. Create a Pull Request, add proper description, screenshots, comments and ask a review from owner/maintainer [For help, click here](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 82 | 9. The owner/developer will merge the Pull Request if it aligns with the practises we follow and is valid. One should not merge, and ask for a reviewer to merge it. 83 | 84 | Please read `Contributing.md` for details on our code of conduct, and the process for submitting pull requests to us. 85 | 86 | ## Forking this repo 🚨 87 | 88 | Many people have contacted us asking if they can use this code for their own websites. The answer to that question is usually **yes**, but with credits and approval. There are some cases, such as using this code for a business or something that is greater than a personal project, that we may be less comfortable saying yes to. If in doubt, please don't hesitate to ask us. 89 | 90 | We value keeping this site open source, but as you all know, _**plagiarism is bad**_. We spent a non-negligible amount of effort developing, designing, and trying to perfect this iteration of our website, and we are proud of it! All we ask is to not claim this effort as your own. 91 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /api/utils/db.ts: -------------------------------------------------------------------------------- 1 | import { MongoClient } from 'mongodb'; 2 | 3 | let dbClient: MongoClient; 4 | export async function initDbClient(): Promise { 5 | dbClient = await MongoClient.connect(process.env.MONGODB_URI || '', { 6 | useNewUrlParser: true, 7 | useUnifiedTopology: true, 8 | ignoreUndefined: true 9 | }); 10 | 11 | // eslint-disable-next-line no-console 12 | console.log('✔️ Connected to Database'); 13 | return dbClient; 14 | } 15 | 16 | export async function getDbClient(): Promise { 17 | if (!dbClient) { 18 | await initDbClient(); 19 | } 20 | return dbClient; 21 | } 22 | -------------------------------------------------------------------------------- /components/connect/index.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | import { InlineWidget } from 'react-calendly'; 3 | import { PersonalDetailsContext } from 'shared/utils/contexts'; 4 | import { PersonalDetails } from 'shared/utils/types'; 5 | 6 | export default function Connect(): JSX.Element { 7 | const { calendyUrl, socialMedia }: PersonalDetails = useContext(PersonalDetailsContext); 8 | return ( 9 | <> 10 |
11 |
12 |
13 |
14 |

15 | Meet and Greet 16 |

17 |

18 | Schedule a 30 minutes call with me via Google meet. 19 |

20 |
21 | {socialMedia.map(({ alt_text, image_file, link }) => { 22 | return ( 23 | 24 | {alt_text} 29 | 30 | ); 31 | })} 32 |
33 |
34 |
35 |
36 | 41 |
42 |
43 |
44 | 45 | ); 46 | } 47 | -------------------------------------------------------------------------------- /components/home/contact.tsx: -------------------------------------------------------------------------------- 1 | import { Button, HeaderSmall } from '@shared-components'; 2 | import { useRouter } from 'next/router'; 3 | 4 | export default function Contact(): JSX.Element { 5 | const router = useRouter(); 6 | return ( 7 | <> 8 |
9 |
10 |
11 | {/* Hero Header */} 12 |
13 | 14 |

15 | Impressed Already? Schedule a call with him. 16 | {/* Gender specific????? */} 17 |

18 |

19 | Let’s grab a cup of coffee. 20 |

21 |
22 |
23 |
24 | 25 |
26 |
27 |
28 |
34 |
35 | 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /components/home/index.tsx: -------------------------------------------------------------------------------- 1 | import Landing from './landing'; 2 | import Skills from './skills'; 3 | import Work from './work'; 4 | import Projects from './projects'; 5 | import Contact from './contact'; 6 | import RepoDetails from './repo'; 7 | // import WordCloud from './wordcloud'; 8 | 9 | const HomePage = (): JSX.Element => { 10 | return ( 11 | <> 12 |
13 |
14 | 15 | 16 | 17 | {/* */} 18 | 19 | 20 | 21 |
22 |
23 | 24 | ); 25 | }; 26 | 27 | export default HomePage; 28 | -------------------------------------------------------------------------------- /components/home/landing.tsx: -------------------------------------------------------------------------------- 1 | import { Button, HeaderSmall } from '@shared-components'; 2 | import { motion } from 'framer-motion'; 3 | import { useRouter } from 'next/router'; 4 | import { useContext } from 'react'; 5 | import { PersonalDetailsContext } from 'shared/utils/contexts'; 6 | import { PersonalDetails } from 'shared/utils/types'; 7 | 8 | export default function Landing(): JSX.Element { 9 | const config = { 10 | type: 'spring', 11 | damping: 10, 12 | stiffness: 80 13 | }; 14 | const personalDetails: PersonalDetails = useContext(PersonalDetailsContext); 15 | const router = useRouter(); 16 | return ( 17 | <> 18 | Ellipse Vector 23 | Triangle 3d Vector 28 | 33 |
34 |
35 | {/* Hero Header */} 36 |
37 | Triangle 3d Vector 42 | 43 |

44 | {personalDetails.name} 45 |

46 |
47 | {personalDetails.about} 48 |
49 |
50 |
51 |
57 |
58 |
65 |
66 |
67 |
68 |
69 | Harsh Goel 74 |
75 |
76 |
77 | 78 | ); 79 | } 80 | -------------------------------------------------------------------------------- /components/home/projects.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | import { useRouter } from 'next/router'; 3 | import { useContext } from 'react'; 4 | import TextCards from 'shared/components/text-cards'; 5 | import { Button, HeaderSmall, ProjectCard } from '@shared-components'; 6 | import { ProjectDetailsContext } from 'shared/utils/contexts'; 7 | import { Project } from 'shared/utils/types'; 8 | 9 | export default function Projects(): JSX.Element { 10 | const router = useRouter(); 11 | const projectDetails: Project[] = useContext(ProjectDetailsContext); 12 | return ( 13 | <> 14 |
15 |
16 | Circle Vector 21 |
22 |
23 | {/* Hero Header */} 24 |
25 | Box Vector 30 | 31 | {/* TODO Add dynamic taglines */} 32 | 33 |

34 | Some awesome products for the awesome 35 | poeple 36 |

37 |

38 | Something he has built. 39 |

40 |
41 | 42 | Next 47 | 48 |
49 |
50 |
51 | {/* FIXME Make thie cards of this page dyanmic */} 52 |
53 |
54 | 59 |
60 |
61 | 66 |
67 |
68 | 73 |
74 |
75 |
76 |
77 |
78 |
79 | {projectDetails.map((project: Project) => ( 80 | 85 | ))} 86 |
87 |
88 |
94 |
95 |
96 | 97 | ); 98 | } 99 | -------------------------------------------------------------------------------- /components/home/repo.tsx: -------------------------------------------------------------------------------- 1 | import { HeaderSmall } from '@shared-components'; 2 | import { useEffect, useState } from 'react'; 3 | import { getGithubDetails } from '@utils/apiService'; 4 | import Tilt from 'react-tilt'; 5 | 6 | export default function RepoDetails(): JSX.Element { 7 | const [repoData, setRepoData] = useState(undefined); 8 | useEffect(() => { 9 | getGithubDetails().then((result) => { 10 | setRepoData(result); 11 | }); 12 | }, []); 13 | return ( 14 | <> 15 |
16 |
17 |
18 | {/* Hero Header */} 19 |
20 | 21 |

22 | Loved this portfolio? Make this yours by forking. 23 | {/* Gender specific????? */} 24 |

25 |

26 | Visit Github Repository 27 |

28 |

29 | *Credits to the owners for the vectors/icons used. These are picked from various 30 | sources from the internet.
31 | *Feel free to fork and make this repo your own, but make sure to give credits to 32 | the owner 33 |

34 |
35 |
36 | {repoData && ( 37 | 68 | )} 69 |
70 |
71 | 72 | ); 73 | } 74 | -------------------------------------------------------------------------------- /components/home/skills-icon.tsx: -------------------------------------------------------------------------------- 1 | import SKILLS from '@utils/skills'; 2 | import { Skill } from '@utils/types'; 3 | 4 | export default function SkillsIcons(): JSX.Element { 5 | return ( 6 |
7 | {SKILLS.map(({ src, name }: Skill) => { 8 | return {name}; 9 | })} 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /components/home/skills.tsx: -------------------------------------------------------------------------------- 1 | import { HeaderSmall } from '@shared-components'; 2 | import SkillsIcons from './skills-icon'; 3 | 4 | export default function Skills(): JSX.Element { 5 | return ( 6 | <> 7 | {/* FIXME Make this whole page dyanmic */} 8 | 9 |
10 | Cylinder Vector 15 | L Vector 20 |
21 |
22 | {/* Hero Header */} 23 |
24 | 25 |

26 | He creates elegant, logical web and mobile app solutions. In his hobby time, he 27 | designs. 28 |

29 |

30 | Think. Code. Debug. 31 |

32 |
33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /components/home/wordcloud.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactWordcloud, { OptionsProp } from 'react-wordcloud'; 3 | import words from '@utils/words'; 4 | 5 | const options: OptionsProp = { 6 | colors: ['#768EC8', '#EEBBC3', '#c7c7c7'], 7 | enableTooltip: false, 8 | deterministic: true, 9 | fontFamily: 'impact', 10 | fontSizes: [40, 100], 11 | fontWeight: 'normal', 12 | padding: 1, 13 | rotations: 2, 14 | rotationAngles: [0, 90], 15 | scale: 'sqrt', 16 | spiral: 'archimedean' 17 | }; 18 | 19 | export default function WordCloud(): JSX.Element { 20 | return ( 21 |
22 | 23 |
24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /components/home/work.tsx: -------------------------------------------------------------------------------- 1 | import { HeaderSmall } from '@shared-components'; 2 | import Link from 'next/link'; 3 | import { useContext } from 'react'; 4 | import { PersonalDetailsContext } from 'shared/utils/contexts'; 5 | import { PersonalDetails } from 'shared/utils/types'; 6 | 7 | export default function Work(): JSX.Element { 8 | const personalDetails: PersonalDetails = useContext(PersonalDetailsContext); 9 | return ( 10 | <> 11 |
12 | Circle Vector 17 |
18 |
19 | {/* Hero Header */} 20 |
21 | Box Vector 26 | 27 |

28 | Currently enhancing travelling at{' '} 29 | {personalDetails.work.company} as a 30 |

31 |

32 | {personalDetails.work.designation} 33 |

34 |
35 | 36 | Next 41 | 42 |
43 |
44 |
45 |
46 | Works at 51 |
52 |
53 |
54 | 55 | ); 56 | } 57 | -------------------------------------------------------------------------------- /components/index.ts: -------------------------------------------------------------------------------- 1 | import HomePage from './home'; 2 | import NotFoundPage from './notfound'; 3 | import WorkPage from './work'; 4 | import ProjectDetailedPage from './project-details'; 5 | import Connect from './connect'; 6 | 7 | export { HomePage, NotFoundPage, WorkPage, ProjectDetailedPage, Connect }; 8 | -------------------------------------------------------------------------------- /components/notfound/index.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@shared-components'; 2 | import { useRouter } from 'next/router'; 3 | 4 | export default function NotFoundPage(): JSX.Element { 5 | const router = useRouter(); 6 | return ( 7 |
8 |
9 | 404 hero 14 | 404 vector 19 |
20 |

21 | Hey! You seem to be lost :( 22 |

23 |

24 | 404.
Not Found. 25 |

26 |
27 |
29 |
30 |
31 |
32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /components/project-details/details.tsx: -------------------------------------------------------------------------------- 1 | import { Project } from '@utils/types'; 2 | import { technologies } from 'shared/utils/constants'; 3 | 4 | type Props = { 5 | project: Project; 6 | }; 7 | 8 | export default function Details({ project }: Props): JSX.Element { 9 | return ( 10 | <> 11 | {project.launch_video && ( 12 |
13 |
14 |
15 |

16 | Don't like to read? 17 |

18 |
19 | Well,We got you covered. Here's an awesome video for you which walks you 20 | through the whole product 21 |
22 |
23 |
24 |
25 |