├── .eslintignore
├── __mocks__
├── file-mock.js
└── gatsby.js
├── loadershim.js
├── .prettierignore
├── .husky
└── pre-commit
├── gatsby-browser.js
├── src
├── images
│ ├── mdg.png
│ ├── Discord-Logo.png
│ ├── github-profile-readme-generator.gif
│ └── icons
│ │ ├── Social
│ │ ├── linked-in.svg
│ │ ├── stack-overflow.svg
│ │ ├── hackerearth.svg
│ │ ├── hashnode.svg
│ │ ├── medium.svg
│ │ ├── kaggle.svg
│ │ ├── codepen.svg
│ │ ├── facebook-alt.svg
│ │ ├── hackerrank.svg
│ │ ├── team.svg
│ │ ├── twitter-alt.svg
│ │ ├── google.svg
│ │ ├── facebook.svg
│ │ ├── twitch.svg
│ │ ├── rss.svg
│ │ ├── messenger.svg
│ │ ├── discord.svg
│ │ ├── behance.svg
│ │ ├── envato.svg
│ │ ├── myspace.svg
│ │ ├── vimeo.svg
│ │ ├── linked-in-alt.svg
│ │ ├── dropbox.svg
│ │ ├── photo.svg
│ │ ├── tumblr.svg
│ │ ├── path.svg
│ │ ├── picasa.svg
│ │ ├── myspace-alt.svg
│ │ ├── viddler.svg
│ │ ├── youtube.svg
│ │ ├── vine.svg
│ │ ├── blogger.svg
│ │ ├── twitter.svg
│ │ ├── soundcloud.svg
│ │ ├── pinterest.svg
│ │ ├── yahoo.svg
│ │ ├── github.svg
│ │ ├── spotify.svg
│ │ ├── whatsapp.svg
│ │ ├── vk.svg
│ │ ├── geeks-for-geeks.svg
│ │ ├── dribbble.svg
│ │ ├── reddit.svg
│ │ └── wordpress.svg
│ │ ├── FrontendDevelopment
│ │ ├── bulma.svg
│ │ ├── vuetify.svg
│ │ ├── vuejs.svg
│ │ ├── backbonejs.svg
│ │ ├── angularjs.svg
│ │ ├── css.svg
│ │ ├── html.svg
│ │ ├── tailwind.svg
│ │ ├── webpack.svg
│ │ ├── bootstrap.svg
│ │ ├── meteor.svg
│ │ ├── gtk.svg
│ │ ├── redux.svg
│ │ ├── qt.svg
│ │ ├── svelte.svg
│ │ └── reactjs.svg
│ │ ├── Devops
│ │ ├── azure.svg
│ │ ├── vagrant.svg
│ │ ├── circleci.svg
│ │ ├── gcp.svg
│ │ ├── bash.svg
│ │ └── docker.svg
│ │ ├── StaticSiteGenerators
│ │ ├── hexo.svg
│ │ ├── gatsby.svg
│ │ ├── nuxtjs.svg
│ │ ├── gridsome.svg
│ │ ├── nextjs.svg
│ │ ├── middleman.svg
│ │ ├── sapper.svg
│ │ └── scully.svg
│ │ ├── AIML
│ │ ├── opencv.svg
│ │ ├── pytorch.svg
│ │ └── tensorflow.svg
│ │ ├── Database
│ │ ├── oracle.svg
│ │ ├── couchdb.svg
│ │ ├── sqlite.svg
│ │ ├── cockroachdb.svg
│ │ └── elasticsearch.svg
│ │ ├── GameEngines
│ │ ├── unity.svg
│ │ └── unreal.svg
│ │ ├── Testing
│ │ ├── karma.svg
│ │ ├── cypress.svg
│ │ └── jasmine.svg
│ │ ├── Software
│ │ ├── framer.svg
│ │ ├── figma.svg
│ │ ├── invision.svg
│ │ ├── sketch.svg
│ │ ├── solidworks.svg
│ │ └── illustrator.svg
│ │ ├── BaaS
│ │ ├── heroku.svg
│ │ ├── firebase.svg
│ │ └── amplify.svg
│ │ ├── ProgrammingLanguages
│ │ ├── typescript.svg
│ │ ├── haskell.svg
│ │ ├── javascript.svg
│ │ ├── swift.svg
│ │ ├── python.svg
│ │ ├── clojure.svg
│ │ ├── php.svg
│ │ ├── c.svg
│ │ ├── java.svg
│ │ ├── cpp.svg
│ │ ├── csharp.svg
│ │ ├── coffeescript.svg
│ │ ├── erlang.svg
│ │ ├── objectivec.svg
│ │ └── go.svg
│ │ ├── Automation
│ │ ├── ifttt.svg
│ │ └── zapier.svg
│ │ ├── DataVisualization
│ │ ├── kibana.svg
│ │ └── chartjs.svg
│ │ ├── BackendDevelopment
│ │ ├── rabbitmq.svg
│ │ ├── express.svg
│ │ ├── solr.svg
│ │ ├── nginx.svg
│ │ ├── spring.svg
│ │ ├── nodejs.svg
│ │ └── graphql.svg
│ │ ├── MobileAppDevelopment
│ │ ├── ionic.svg
│ │ ├── android.svg
│ │ ├── xamarin.svg
│ │ ├── nativescript.svg
│ │ ├── dart.svg
│ │ └── kotlin.svg
│ │ ├── Other
│ │ └── git.svg
│ │ └── Framework
│ │ ├── codeigniter.svg
│ │ ├── symfony.svg
│ │ └── laravel.svg
├── designs
│ └── GPRG Style Guide.png
├── constants
│ └── page-links.js
├── pages
│ └── 404.jsx
├── components
│ ├── __tests__
│ │ ├── donate.test.js
│ │ ├── loader.test.js
│ │ ├── footer.test.js
│ │ ├── header.test.js
│ │ ├── __snapshots__
│ │ │ ├── loader.test.js.snap
│ │ │ ├── subtitle.test.js.snap
│ │ │ └── title.test.js.snap
│ │ ├── subtitle.test.js
│ │ ├── title.test.js
│ │ ├── work.test.js
│ │ ├── skills.test.js
│ │ └── social.test.js
│ ├── layout.jsx
│ ├── subtitle.jsx
│ ├── title.jsx
│ ├── loader.jsx
│ ├── support.jsx
│ └── seo.jsx
├── utils
│ ├── validation.js
│ ├── __tests__
│ │ └── validation.test.js
│ └── link-generators.js
├── templates
│ └── blogTemplate.js
└── html.jsx
├── .travis.yml
├── setupTests.js
├── jest-preprocess.js
├── .prettierrc
├── .eslintrc.json
├── tailwind.config.js
├── .github
├── FUNDING.yml
├── config.yml
├── ISSUE_TEMPLATE
│ ├── feature-enhancement-request.md
│ └── bug_report.md
└── PULL_REQUEST_TEMPLATE.md
├── jest.config.js
├── gatsby-node.js
├── .gitignore
├── CONTRIBUTING.md
└── gatsby-config.js
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules/**
--------------------------------------------------------------------------------
/__mocks__/file-mock.js:
--------------------------------------------------------------------------------
1 | module.exports = 'test-file-stub';
2 |
--------------------------------------------------------------------------------
/loadershim.js:
--------------------------------------------------------------------------------
1 | global.___loader = {
2 | enqueue: jest.fn(),
3 | };
4 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .cache
2 | package.json
3 | package-lock.json
4 | public
5 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx --no-install lint-staged
5 |
--------------------------------------------------------------------------------
/gatsby-browser.js:
--------------------------------------------------------------------------------
1 | import './src/styles/tailwind.css';
2 | require('prismjs/themes/prism-okaidia.css');
3 |
--------------------------------------------------------------------------------
/src/images/mdg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilyesw/github-profile-readme-generator/HEAD/src/images/mdg.png
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "14"
4 | cache:
5 | directories:
6 | - "node_modules"
7 |
--------------------------------------------------------------------------------
/src/images/Discord-Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilyesw/github-profile-readme-generator/HEAD/src/images/Discord-Logo.png
--------------------------------------------------------------------------------
/src/designs/GPRG Style Guide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilyesw/github-profile-readme-generator/HEAD/src/designs/GPRG Style Guide.png
--------------------------------------------------------------------------------
/setupTests.js:
--------------------------------------------------------------------------------
1 | import { configure } from 'enzyme';
2 | import Adapter from 'enzyme-adapter-react-16';
3 |
4 | configure({ adapter: new Adapter() });
5 |
--------------------------------------------------------------------------------
/src/images/github-profile-readme-generator.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilyesw/github-profile-readme-generator/HEAD/src/images/github-profile-readme-generator.gif
--------------------------------------------------------------------------------
/jest-preprocess.js:
--------------------------------------------------------------------------------
1 | const babelOptions = {
2 | presets: ['babel-preset-gatsby'],
3 | };
4 |
5 | module.exports = require('babel-jest').createTransformer(babelOptions);
6 |
--------------------------------------------------------------------------------
/src/constants/page-links.js:
--------------------------------------------------------------------------------
1 | const links = {
2 | home: '/',
3 | about: '/about',
4 | addons: '/addons',
5 | support: '/support',
6 | };
7 | export default links;
8 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "jsxSingleQuote": false,
4 | "tabWidth": 2,
5 | "printWidth": 120,
6 | "trailingComma": "all",
7 | "semi": true,
8 | "exclude": ["node_modules", "codepipeline"]
9 | }
10 |
--------------------------------------------------------------------------------
/src/pages/404.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import SEO from '../components/seo';
3 |
4 | const NotFoundPage = () => (
5 |
6 |
7 |
NOT FOUND
8 |
You just hit a route that doesn't exist... the sadness.
9 |
10 | );
11 |
12 | export default NotFoundPage;
13 |
--------------------------------------------------------------------------------
/src/components/__tests__/donate.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import toJson from 'enzyme-to-json';
3 | import { shallow } from 'enzyme';
4 | import Donate from '../donate';
5 |
6 | describe('Donate', () => {
7 | it('renders correctly', () => {
8 | const component = shallow();
9 | expect(toJson(component)).toMatchSnapshot();
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/src/components/__tests__/loader.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Loader from '../loader';
6 |
7 | describe('Loader', () => {
8 | const component = shallow();
9 |
10 | it('renders correctly', () => {
11 | expect(toJson(component)).toMatchSnapshot();
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/__tests__/footer.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Footer from '../footer';
6 |
7 | describe('Footer component', () => {
8 | const component = shallow();
9 |
10 | it('renders correctly', () => {
11 | expect(toJson(component)).toMatchSnapshot();
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/__tests__/header.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Header from '../header';
6 |
7 | describe('Header', () => {
8 | const component = shallow();
9 |
10 | it('renders correctly', () => {
11 | expect(toJson(component)).toMatchSnapshot();
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/__tests__/__snapshots__/loader.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Loader renders correctly 1`] = `
4 |
7 |
8 | ↓
9 |
10 |
11 | ↓
12 |
13 |
14 | ↓
15 |
16 |
17 | ↓
18 |
19 |
20 | ↓
21 |
22 |
23 | `;
24 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true
5 | },
6 | "extends": ["plugin:react/recommended", "airbnb", "prettier"],
7 | "parserOptions": {
8 | "ecmaFeatures": {
9 | "jsx": true
10 | },
11 | "ecmaVersion": 12,
12 | "sourceType": "module"
13 | },
14 | "plugins": ["react"],
15 | "rules": {
16 | "react/forbid-prop-types": 0
17 | },
18 | "ignorePatterns": ["**/*.test.js"]
19 | }
20 |
--------------------------------------------------------------------------------
/src/images/icons/Social/linked-in.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/validation.js:
--------------------------------------------------------------------------------
1 | const isGitHubUsernameValid = (username) => {
2 | const pattern = /^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$/i;
3 | return pattern.test(username);
4 | };
5 | const isMediumUsernameValid = (username) => {
6 | if (username) {
7 | return username[0] === '@';
8 | }
9 | return true;
10 | };
11 |
12 | const isTwitterUsernameValid = (username) => {
13 | const pattern = /^[a-zA-Z0-9_]{1,15}$/;
14 | return pattern.test(username);
15 | };
16 |
17 | export { isGitHubUsernameValid, isMediumUsernameValid, isTwitterUsernameValid };
18 |
--------------------------------------------------------------------------------
/__mocks__/gatsby.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef */
2 | const React = require('react');
3 |
4 | const gatsby = jest.requireActual('gatsby');
5 |
6 | module.exports = {
7 | ...gatsby,
8 | graphql: jest.fn(),
9 | Link: jest.fn().mockImplementation(
10 | // these props are invalid for an `a` tag
11 | ({ activeClassName, activeStyle, getProps, innerRef, partiallyActive, ref, replace, to, ...rest }) =>
12 | React.createElement('a', {
13 | ...rest,
14 | href: to,
15 | }),
16 | ),
17 | StaticQuery: jest.fn(),
18 | useStaticQuery: jest.fn(),
19 | };
20 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/bulma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/images/icons/Social/stack-overflow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: [],
3 | theme: {
4 | extend: {},
5 | fontSize: {
6 | xxs: '.60rem',
7 | xs: '.75rem',
8 | sm: '.875rem',
9 | tiny: '.875rem',
10 | base: '1rem',
11 | lg: '1.125rem',
12 | xl: '1.25rem',
13 | '2xl': '1.5rem',
14 | '3xl': '1.875rem',
15 | '4xl': '2.25rem',
16 | '5xl': '3rem',
17 | '6xl': '4rem',
18 | '7xl': '5rem',
19 | },
20 | fontFamily: {
21 | title: ['Lato', 'sans-serif'],
22 | body: ['Roboto Mono', 'monospace'],
23 | },
24 | },
25 | variants: {},
26 | plugins: [],
27 | };
28 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/azure.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/images/icons/Social/hackerearth.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/components/layout.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import Header from './header';
4 | import Footer from './footer';
5 |
6 | const Layout = ({ children }) => (
7 |
8 |
11 | {children}
12 |
15 |
16 | );
17 | export default Layout;
18 |
19 | Layout.defaultProps = {
20 | children: '',
21 | };
22 |
23 | Layout.propTypes = {
24 | children: PropTypes.element,
25 | };
26 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/hexo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/components/__tests__/__snapshots__/subtitle.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Subtitle renders correctly 1`] = `
4 |
7 |
10 | Subtitle
11 |
12 |
18 |
19 | `;
20 |
--------------------------------------------------------------------------------
/src/images/icons/Social/hashnode.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/AIML/opencv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Database/oracle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: github-profile-readme-generator
6 | ko_fi: rahuldkjain
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 | custom:
13 | ["https://paypal.me/rahuldkjain", "https://www.buymeacoffee.com/rahuldkjain"]
14 |
--------------------------------------------------------------------------------
/src/images/icons/Social/medium.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/GameEngines/unity.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/src/images/icons/Social/kaggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Testing/karma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/vuetify.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/vuejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/Software/framer.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/utils/__tests__/validation.test.js:
--------------------------------------------------------------------------------
1 | import { isGitHubUsernameValid, isMediumUsernameValid, isTwitterUsernameValid } from '../validation';
2 |
3 | describe('validation', () => {
4 | it('isGitHubUsernameValid', () => {
5 | expect(isGitHubUsernameValid('Lorem ipsum dolor sit amet, consectetur adipiscing elit')).toBe(false);
6 | expect(isGitHubUsernameValid('rahuldkjain')).toBe(true);
7 | });
8 |
9 | it('isMediumUsernameValid', () => {
10 | expect(isMediumUsernameValid('rahuldkjain')).toBe(false);
11 | expect(isMediumUsernameValid('@rahuldkjain')).toBe(true);
12 | });
13 |
14 | it('isTwitterUsernameValid', () => {
15 | expect(isTwitterUsernameValid('Lorem ipsum dolor sit amet, consectetur adipiscing elit')).toBe(false);
16 | expect(isTwitterUsernameValid('rahuldkjain')).toBe(true);
17 | });
18 | });
19 |
--------------------------------------------------------------------------------
/src/components/__tests__/subtitle.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Subtitle from '../subtitle';
6 |
7 | describe('Subtitle', () => {
8 | const mockEvent = { target: { value: 'This is a mock event' } };
9 | const props = {
10 | data: {
11 | subtitle: 'A frontend developer',
12 | },
13 | handleDataChange: jest.fn().mockReturnValue({}),
14 | };
15 |
16 | const component = shallow();
17 |
18 | it('renders correctly', () => {
19 | expect(toJson(component)).toMatchSnapshot();
20 | });
21 |
22 | it('calls onChange', () => {
23 | component.find('input').at(0).simulate('change', mockEvent);
24 | expect(props.handleDataChange).toBeCalledWith('subtitle', mockEvent);
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/src/images/icons/AIML/pytorch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/Social/codepen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/vagrant.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/BaaS/heroku.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/backbonejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/Social/facebook-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
38 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/angularjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/typescript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/Automation/ifttt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/src/components/subtitle.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | const Subtitle = (props) => {
5 | const { data, handleDataChange } = props;
6 | return (
7 |
8 |
Subtitle
9 |
handleDataChange('subtitle', event)}
14 | />
15 |
16 | );
17 | };
18 |
19 | export default Subtitle;
20 | Subtitle.propTypes = {
21 | data: PropTypes.object.isRequired,
22 | handleDataChange: PropTypes.func.isRequired,
23 | };
24 |
--------------------------------------------------------------------------------
/src/images/icons/GameEngines/unreal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | transform: {
3 | '^.+\\.jsx?$': `/jest-preprocess.js`,
4 | },
5 | moduleNameMapper: {
6 | '.+\\.(css|styl|less|sass|scss)$': `identity-obj-proxy`,
7 | '.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': `/__mocks__/file-mock.js`,
8 | },
9 | testPathIgnorePatterns: [`node_modules`, `\\.cache`, `.*/public`],
10 | transformIgnorePatterns: [`node_modules/(?!(gatsby)/)`],
11 | globals: {
12 | __PATH_PREFIX__: ``,
13 | __BASE_PATH__: ``,
14 | },
15 | setupFiles: [`/loadershim.js`],
16 | setupFilesAfterEnv: ['/setupTests.js'],
17 | snapshotSerializers: ['enzyme-to-json/serializer'],
18 | coverageThreshold: {
19 | global: {
20 | branches: 0,
21 | functions: 75,
22 | lines: 68,
23 | statements: 68,
24 | },
25 | },
26 | };
27 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/haskell.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/BaaS/firebase.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/Social/hackerrank.svg:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/src/images/icons/Social/team.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
39 |
--------------------------------------------------------------------------------
/src/images/icons/DataVisualization/kibana.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/css.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/rabbitmq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.github/config.yml:
--------------------------------------------------------------------------------
1 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
2 |
3 | # Comment to be posted to on first time issues
4 | newIssueWelcomeComment: >
5 | Thanks for opening your first issue here! Your contribution means alot. 🙌 Join Discord Server (https://discord.gg/HHMs7Eg) for discussing issues, pull-requests, new features, etc.
6 |
7 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
8 |
9 | # Comment to be posted to on PRs from first time contributors in your repository
10 | newPRWelcomeComment: >
11 | Thanks for opening this pull request! Make sure you have assigned an issue to this respective PR 😇
12 |
13 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
14 |
15 | # Comment to be posted to on pull requests merged by a first time user
16 | firstPRMergeComment: >
17 | Congrats on merging your first pull request🎉! Thanks alot for your contribution. 🙏
18 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/html.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/express.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/src/images/icons/Social/twitter-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
38 |
--------------------------------------------------------------------------------
/src/images/icons/Social/google.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
39 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/circleci.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/ionic.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/components/__tests__/title.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Title from '../title';
6 |
7 | describe('Title', () => {
8 | const mockEvent = { target: { value: 'This is a mock event' } };
9 | const props = {
10 | prefix: {
11 | title: 'test_title',
12 | currentWork: 'test_currentwork',
13 | },
14 | data: { title: 'test_data' },
15 | link: { currentWork: 'test_currentwork' },
16 | handlePrefixChange: jest.fn().mockReturnValue({}),
17 | handleLinkChange: jest.fn().mockReturnValue({}),
18 | handleDataChange: jest.fn().mockReturnValue({}),
19 | };
20 |
21 | it('renders title component correctly', () => {
22 | const component = shallow();
23 | component.find('input').at(0).simulate('change', mockEvent);
24 | component.find('input').at(1).simulate('change', mockEvent);
25 | expect(toJson(component)).toMatchSnapshot();
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/gatsby-node.js:
--------------------------------------------------------------------------------
1 | exports.createPages = async ({ actions, graphql, reporter }) => {
2 | const { createPage } = actions;
3 |
4 | const blogPostTemplate = require.resolve(`./src/templates/blogTemplate.js`);
5 |
6 | const result = await graphql(`
7 | {
8 | allMarkdownRemark(sort: { order: DESC, fields: [frontmatter___date] }, limit: 1000) {
9 | edges {
10 | node {
11 | frontmatter {
12 | slug
13 | }
14 | }
15 | }
16 | }
17 | }
18 | `);
19 |
20 | // Handle errors
21 | if (result.errors) {
22 | reporter.panicOnBuild(`Error while running GraphQL query.`);
23 | return;
24 | }
25 |
26 | result.data.allMarkdownRemark.edges.forEach(({ node }) => {
27 | createPage({
28 | path: node.frontmatter.slug,
29 | component: blogPostTemplate,
30 | context: {
31 | // additional data can be passed via context
32 | slug: node.frontmatter.slug,
33 | },
34 | });
35 | });
36 | };
37 |
--------------------------------------------------------------------------------
/src/components/__tests__/work.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Work from '../work';
6 |
7 | describe('Work', () => {
8 | const mockEvent = { target: { value: 'This is a mock event' } };
9 | const props = {
10 | prefix: {
11 | title: 'test_title',
12 | currentWork: 'test_currentwork',
13 | },
14 | data: { title: 'test_data' },
15 | link: { currentWork: 'test_currentwork' },
16 | handlePrefixChange: jest.fn().mockReturnValue({}),
17 | handleLinkChange: jest.fn().mockReturnValue({}),
18 | handleDataChange: jest.fn().mockReturnValue({}),
19 | };
20 |
21 | it('renders work component correctly', () => {
22 | const component = shallow();
23 | for (let i = 0; i < component.find('input').length; i++) {
24 | component.find('input').at(i).simulate('change', mockEvent);
25 | }
26 | expect(toJson(component)).toMatchSnapshot();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/images/icons/Software/figma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/solr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/javascript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/BaaS/amplify.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/Social/facebook.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
40 |
--------------------------------------------------------------------------------
/src/images/icons/Social/twitch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-enhancement-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature/Enhancement request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement, hacktoberfest
6 | assignees: ''
7 | ---
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **Additional context**
19 | Add any other context or screenshots about the feature request here.
20 |
21 | Join the **Discord Server** for further discussions.
22 |
23 |
24 |
25 |
26 |
27 | Server Link: https://discord.gg/HHMs7Eg
28 |
--------------------------------------------------------------------------------
/src/images/icons/Database/couchdb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/Social/rss.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/images/icons/AIML/tensorflow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/swift.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/Other/git.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/Social/messenger.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
40 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/android.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/components/__tests__/__snapshots__/title.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Title renders title component correctly 1`] = `
4 |
30 | `;
31 |
--------------------------------------------------------------------------------
/src/images/icons/Social/discord.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Social/behance.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/xamarin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/Social/envato.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
40 |
--------------------------------------------------------------------------------
/src/images/icons/Testing/cypress.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/tailwind.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/webpack.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/Automation/zapier.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/nginx.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/Framework/codeigniter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/nativescript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/bootstrap.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/spring.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/Social/myspace.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
44 |
--------------------------------------------------------------------------------
/src/images/icons/DataVisualization/chartjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/gatsby.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/Social/vimeo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
41 |
--------------------------------------------------------------------------------
/src/components/__tests__/skills.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Skills from '../skills';
6 |
7 | jest.mock('../../constants/skills', () => ({
8 | __esModule: true,
9 | categorizedSkills: {
10 | language: {
11 | title: 'Programming Languages',
12 | skills: ['javascript'],
13 | },
14 | frontend_dev: {
15 | title: 'Frontend Development',
16 | skills: ['react', 'svelte'],
17 | },
18 | },
19 | icons: {
20 | javascript: 'javascript.svg',
21 | react: 'react.svg',
22 | svelte: 'svelte.svg',
23 | },
24 | }));
25 |
26 | describe('Skills', () => {
27 | it('renders correctly', () => {
28 | const component = shallow();
29 | expect(toJson(component)).toMatchSnapshot();
30 | });
31 |
32 | it('calls handleSkillsChange prop when a skill is clicked', () => {
33 | const mockFn = jest.fn();
34 | const component = shallow();
35 |
36 | component.find('#javascript').simulate('change');
37 |
38 | expect(mockFn).toHaveBeenCalledTimes(1);
39 | });
40 | });
41 |
--------------------------------------------------------------------------------
/src/images/icons/Social/linked-in-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
43 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/python.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | # Logs
3 | logs
4 | *.log
5 | npm-debug.log*
6 | yarn-debug.log*
7 | yarn-error.log*
8 |
9 | # Runtime data
10 | pids
11 | *.pid
12 | *.seed
13 | *.pid.lock
14 |
15 | # Directory for instrumented libs generated by jscoverage/JSCover
16 | lib-cov
17 |
18 | # Coverage directory used by tools like istanbul
19 | coverage
20 |
21 | # nyc test coverage
22 | .nyc_output
23 |
24 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
25 | .grunt
26 |
27 | # Bower dependency directory (https://bower.io/)
28 | bower_components
29 |
30 | # node-waf configuration
31 | .lock-wscript
32 |
33 | # Compiled binary addons (http://nodejs.org/api/addons.html)
34 | build/Release
35 |
36 | # Dependency directories
37 | node_modules/
38 | jspm_packages/
39 |
40 | # Typescript v1 declaration files
41 | typings/
42 |
43 | # Optional npm cache directory
44 | .npm
45 |
46 | # Optional eslint cache
47 | .eslintcache
48 |
49 | # Optional REPL history
50 | .node_repl_history
51 |
52 | # Output of 'npm pack'
53 | *.tgz
54 |
55 | # dotenv environment variable files
56 | .env*
57 |
58 | # gatsby files
59 | .cache/
60 | public
61 |
62 | # Mac files
63 | .DS_Store
64 |
65 | # Yarn
66 | yarn-error.log
67 | .pnp/
68 | .pnp.js
69 | # Yarn Integrity file
70 | .yarn-integrity
71 |
--------------------------------------------------------------------------------
/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 |
7 |
8 |
9 |
10 | Please note we have a code of conduct, please follow it in all your interactions with the project.
11 |
12 | ## Pull Request Process
13 |
14 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a
15 | build.
16 | 2. Update the README.md with details of changes to the interface, this includes new environment
17 | variables, exposed ports, useful file locations and container parameters.
18 | 3. Increase the version numbers in any examples files and the README.md to the new version that this
19 | Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
20 | 4. You may merge the Pull Request once you have the sign-off of two other developers, or if you
21 | do not have permission to do that, you may request the second reviewer merge it for you.
22 |
--------------------------------------------------------------------------------
/src/images/icons/Testing/jasmine.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
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 |
42 | Join the **Discord Server** for further discussions.
43 |
44 |
45 |
46 |
47 |
48 | Server Link: https://discord.gg/HHMs7Eg
49 |
--------------------------------------------------------------------------------
/src/images/icons/Database/sqlite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Social/dropbox.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
44 |
--------------------------------------------------------------------------------
/src/images/icons/Social/photo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
44 |
--------------------------------------------------------------------------------
/src/images/icons/Software/invision.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/gcp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/meteor.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/gtk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/Social/tumblr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/images/icons/Social/path.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/images/icons/Social/picasa.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
45 |
--------------------------------------------------------------------------------
/src/templates/blogTemplate.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { graphql } from 'gatsby';
3 | // import Header from '../components/header'
4 | // import Footer from '../components/footer'
5 | import { Helmet } from 'react-helmet';
6 | import Layout from '../components/layout';
7 |
8 | export default function Template({
9 | data, // this prop will be injected by the GraphQL query below.
10 | }) {
11 | const { markdownRemark } = data; // data.markdownRemark holds your post data
12 | const { frontmatter, html } = markdownRemark;
13 | return (
14 |
15 |
16 |
17 | {frontmatter.title}
18 |
19 |
20 |
21 |
22 |
{frontmatter.title}
23 |
24 |
25 |
26 |
27 | );
28 | }
29 |
30 | export const pageQuery = graphql`
31 | query($slug: String!) {
32 | markdownRemark(frontmatter: { slug: { eq: $slug } }) {
33 | html
34 | frontmatter {
35 | date(formatString: "MMMM DD, YYYY")
36 | slug
37 | title
38 | }
39 | }
40 | }
41 | `;
42 |
--------------------------------------------------------------------------------
/src/images/icons/Social/myspace-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
47 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/clojure.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/php.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/src/images/icons/Software/sketch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
30 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/nuxtjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/Social/viddler.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/images/icons/Social/youtube.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
45 |
--------------------------------------------------------------------------------
/src/images/icons/Social/vine.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
42 |
--------------------------------------------------------------------------------
/src/components/__tests__/social.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { shallow } from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 |
5 | import Social from '../social';
6 |
7 | describe('Social', () => {
8 | const mockEvent = { target: { value: 'This is a mock event' } };
9 | const props = {
10 | social: {
11 | github: 'github ',
12 | twitter: 'twitter',
13 | dev: 'dev',
14 | codepen: 'codepen',
15 | codesandbox: 'codesandbodx',
16 | stackoverflow: 'stackoverflow',
17 | linkedin: 'linkedin',
18 | kaggle: 'kaggle',
19 | fb: 'fb',
20 | instagram: 'instagram',
21 | dribble: 'dribble',
22 | behance: 'behance',
23 | medium: 'medium',
24 | youtube: 'youtube',
25 | codechef: 'codechef',
26 | hackerrack: 'hackerranck',
27 | codeforces: 'codeforces',
28 | leetcode: 'leetcode',
29 | topcoder: 'topcoder',
30 | hackerearth: '@hackerearth',
31 | geeks_for_geeks: 'geeks_for_geeks',
32 | discord: 'discord',
33 | rssurl: 'rssurl',
34 | },
35 | handleSocialChange: jest.fn().mockReturnValue({}),
36 | };
37 | it('renders correctly', () => {
38 | const component = shallow();
39 | for (let i = 0; i < component.find('input').length; i++) {
40 | component.find('input').at(i).simulate('change', mockEvent);
41 | }
42 | expect(toJson(component)).toMatchSnapshot();
43 | });
44 | });
45 |
--------------------------------------------------------------------------------
/src/components/title.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | const Title = (props) => {
5 | const { data, prefix, handlePrefixChange, handleDataChange } = props;
6 | return (
7 |
25 | );
26 | };
27 |
28 | export default Title;
29 | Title.propTypes = {
30 | prefix: PropTypes.object.isRequired,
31 | data: PropTypes.object.isRequired,
32 | handlePrefixChange: PropTypes.func.isRequired,
33 | handleDataChange: PropTypes.func.isRequired,
34 | };
35 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/dart.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
25 |
--------------------------------------------------------------------------------
/src/images/icons/Social/blogger.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
43 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/c.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/redux.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/nodejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/src/images/icons/Social/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
44 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/java.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/Social/soundcloud.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
16 |
17 | ## What type of PR is this? (check all applicable)
18 |
19 | - [ ] Refactor
20 | - [ ] Feature
21 | - [ ] Bug Fix
22 | - [ ] Enhancement
23 | - [ ] Documentation Update
24 |
25 | ## Description
26 |
27 | ## Related Tickets & Documents
28 |
29 | ## QA Instructions, Screenshots, Recordings
30 |
31 | _Please replace this line with instructions on how to test your changes, as well
32 | as any relevant images for UI changes._
33 |
34 |
39 |
40 | ## Added to documentation?
41 |
42 | - [ ] readme
43 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/gridsome.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
27 |
--------------------------------------------------------------------------------
/src/images/icons/Social/pinterest.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
44 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/nextjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/qt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/html.jsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/jsx-props-no-spreading */
2 | import React from 'react';
3 | import PropTypes from 'prop-types';
4 |
5 | export default function HTML(props) {
6 | const { htmlAttributes, headComponents, bodyAttributes, preBodyComponents, postBodyComponents, body } = props;
7 | return (
8 |
9 |
10 |
11 |
12 |
13 | {headComponents}
14 |
25 |
26 |
27 | {preBodyComponents}
28 |
29 | {postBodyComponents}
30 |
31 |
32 | );
33 | }
34 |
35 | HTML.propTypes = {
36 | htmlAttributes: PropTypes.object.isRequired,
37 | headComponents: PropTypes.array.isRequired,
38 | bodyAttributes: PropTypes.object.isRequired,
39 | preBodyComponents: PropTypes.array.isRequired,
40 | body: PropTypes.string.isRequired,
41 | postBodyComponents: PropTypes.array.isRequired,
42 | };
43 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/middleman.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/cpp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/images/icons/BackendDevelopment/graphql.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/csharp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/images/icons/Database/cockroachdb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/src/images/icons/Framework/symfony.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/utils/link-generators.js:
--------------------------------------------------------------------------------
1 | const githubStatsStylingQueryString = (options) => {
2 | const params = {
3 | show_icons: true,
4 | ...(options.theme && options.theme !== 'none' && { theme: options.theme }),
5 | ...(options.titleColor && { title_color: options.titleColor }),
6 | ...(options.textColor && { text_color: options.textColor }),
7 | ...(options.bgColor && { bg_color: options.bgColor }),
8 | ...(options.hideBorder && { hide_border: options.hideBorder }),
9 | ...(options.cacheSeconds && { cache_seconds: options.cacheSeconds }),
10 | ...(options.locale && { locale: options.locale }),
11 | };
12 | const queryString = Object.entries(params)
13 | .map(([key, value]) => `${key}=${value}`)
14 | .join('&');
15 | return queryString;
16 | };
17 |
18 | const streakStatsStylingQueryString = (options) => {
19 | const params = {
20 | ...(options.theme && options.theme !== 'none' && { theme: options.theme }),
21 | };
22 | const queryString = Object.entries(params)
23 | .map(([key, value]) => `${key}=${value}`)
24 | .join('&');
25 | return queryString;
26 | };
27 |
28 | export const githubStatsLinkGenerator = ({ github, options }) =>
29 | `https://github-readme-stats.vercel.app/api?username=${github}&${githubStatsStylingQueryString(options)}`;
30 |
31 | export const topLanguagesLinkGenerator = ({ github, options }) =>
32 | `https://github-readme-stats.vercel.app/api/top-langs?username=${github}&${githubStatsStylingQueryString(
33 | options,
34 | )}&layout=compact`;
35 |
36 | export const streakStatsLinkGenerator = ({ github, options }) =>
37 | `https://github-readme-streak-stats.herokuapp.com/?user=${github}&${streakStatsStylingQueryString(options)}`;
38 |
--------------------------------------------------------------------------------
/src/components/loader.jsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useEffect } from 'react';
2 | import gsap from 'gsap';
3 |
4 | const Loader = () => {
5 | const arrow = useRef([]);
6 | useEffect(() => {
7 | const tl = gsap.timeline({ repeat: -1 });
8 | tl.fromTo(
9 | arrow.current,
10 | {
11 | y: 0,
12 | color: '#3b3b4f',
13 | },
14 | {
15 | y: -50,
16 | color: '#d0d0d5',
17 | stagger: 0.1,
18 | duration: 0.5,
19 | ease: 'Linear.easeNone',
20 | },
21 | );
22 | tl.add('cp');
23 | tl.fromTo(
24 | arrow.current,
25 | {
26 | y: -50,
27 | color: '#d0d0d5',
28 | },
29 | {
30 | y: 0,
31 | color: '#3b3b4f',
32 | stagger: 0.1,
33 | duration: 0.5,
34 | ease: 'Linear.easeNone',
35 | },
36 | 'cp-=0.3',
37 | );
38 | });
39 | return (
40 |
41 | {
43 | arrow.current[0] = el;
44 | }}
45 | >
46 | ↓
47 |
48 | {
50 | arrow.current[1] = el;
51 | }}
52 | >
53 | ↓
54 |
55 | {
57 | arrow.current[2] = el;
58 | }}
59 | >
60 | ↓
61 |
62 | {
64 | arrow.current[3] = el;
65 | }}
66 | >
67 | ↓
68 |
69 | {
71 | arrow.current[4] = el;
72 | }}
73 | >
74 | ↓
75 |
76 |
77 | );
78 | };
79 |
80 | export default Loader;
81 |
--------------------------------------------------------------------------------
/src/images/icons/Social/yahoo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/sapper.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/svelte.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/Social/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
45 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/coffeescript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/src/images/icons/Software/solidworks.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/erlang.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/Social/spotify.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/bash.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/images/icons/Social/whatsapp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
46 |
--------------------------------------------------------------------------------
/src/images/icons/Software/illustrator.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
33 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/objectivec.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/images/icons/Devops/docker.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
28 |
--------------------------------------------------------------------------------
/src/images/icons/Database/elasticsearch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
34 |
--------------------------------------------------------------------------------
/src/images/icons/Social/vk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
47 |
--------------------------------------------------------------------------------
/src/images/icons/Social/geeks-for-geeks.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons/Social/dribbble.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
49 |
--------------------------------------------------------------------------------
/src/images/icons/Framework/laravel.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
24 |
--------------------------------------------------------------------------------
/src/images/icons/MobileAppDevelopment/kotlin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
36 |
--------------------------------------------------------------------------------
/src/images/icons/StaticSiteGenerators/scully.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
30 |
--------------------------------------------------------------------------------
/src/components/support.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | const Support = (props) => {
5 | const { support, handleSupportChange } = props;
6 | return (
7 |
8 |
Support
9 |
10 |
11 |

16 |
handleSupportChange('buyMeACoffee', event)}
22 | />
23 |
24 |
25 |

30 |
handleSupportChange('buyMeAKofi', event)}
36 | />
37 |
38 |
39 |
40 | );
41 | };
42 |
43 | export default Support;
44 | Support.propTypes = {
45 | support: PropTypes.object.isRequired,
46 | handleSupportChange: PropTypes.func.isRequired,
47 | };
48 |
--------------------------------------------------------------------------------
/src/images/icons/Social/reddit.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
55 |
--------------------------------------------------------------------------------
/src/images/icons/Social/wordpress.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
49 |
--------------------------------------------------------------------------------
/src/components/seo.jsx:
--------------------------------------------------------------------------------
1 | /**
2 | * SEO component that queries for data with
3 | * Gatsby's useStaticQuery React hook
4 | *
5 | * See: https://www.gatsbyjs.org/docs/use-static-query/
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { Helmet } from 'react-helmet';
11 | import { useStaticQuery, graphql } from 'gatsby';
12 |
13 | function SEO({ description, lang, meta, title }) {
14 | const { site } = useStaticQuery(
15 | graphql`
16 | query {
17 | site {
18 | siteMetadata {
19 | title
20 | description
21 | author
22 | }
23 | }
24 | }
25 | `,
26 | );
27 |
28 | const metaDescription = description || site.siteMetadata.description;
29 |
30 | return (
31 |
72 | );
73 | }
74 |
75 | SEO.defaultProps = {
76 | lang: `en`,
77 | meta: [],
78 | description: ``,
79 | };
80 |
81 | SEO.propTypes = {
82 | description: PropTypes.string,
83 | lang: PropTypes.string,
84 | meta: PropTypes.arrayOf(PropTypes.object),
85 | title: PropTypes.string.isRequired,
86 | };
87 |
88 | export default SEO;
89 |
--------------------------------------------------------------------------------
/gatsby-config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | pathPrefix: `/gh-profile-readme-generator`,
3 | siteMetadata: {
4 | title: `GitHub Profile Readme Generator`,
5 | description: `Prettify your github profile using this amazing readme generator.`,
6 | author: `@rahuldkjain`,
7 | },
8 | plugins: [
9 | `gatsby-plugin-react-helmet`,
10 | {
11 | resolve: `gatsby-source-filesystem`,
12 | options: {
13 | name: `images`,
14 | path: `${__dirname}/src/images`,
15 | },
16 | },
17 | {
18 | resolve: `gatsby-source-filesystem`,
19 | options: {
20 | name: `markdown-pages`,
21 | path: `${__dirname}/src/markdown-pages`,
22 | },
23 | },
24 | {
25 | resolve: `gatsby-transformer-remark`,
26 | options: {
27 | plugins: [`gatsby-remark-prismjs`],
28 | },
29 | },
30 | `gatsby-transformer-sharp`,
31 | `gatsby-plugin-sharp`,
32 | {
33 | resolve: `gatsby-plugin-manifest`,
34 | options: {
35 | name: `gatsby-starter-default`,
36 | short_name: `starter`,
37 | start_url: `/`,
38 | background_color: `#663399`,
39 | theme_color: `#663399`,
40 | display: `minimal-ui`,
41 | icon: `src/images/mdg.png`, // This path is relative to the root of the site.
42 | },
43 | },
44 | {
45 | resolve: `gatsby-plugin-google-analytics`,
46 | options: {
47 | trackingId: 'UA-168596085-3',
48 | // this option places the tracking script into the head of the DOM
49 | head: true,
50 | // other options
51 | },
52 | },
53 | {
54 | resolve: `gatsby-plugin-postcss`,
55 | options: {
56 | postCssPlugins: [require('tailwindcss')],
57 | },
58 | },
59 | {
60 | resolve: `gatsby-plugin-purgecss`,
61 | options: {
62 | printRejected: false,
63 | develop: false,
64 | tailwind: true,
65 | },
66 | },
67 | `gatsby-plugin-twitter`,
68 | ],
69 | // this (optional) plugin enables Progressive Web App + Offline functionality
70 | // To learn more, visit: https://gatsby.dev/offline
71 | // `gatsby-plugin-offline`,
72 | };
73 |
--------------------------------------------------------------------------------
/src/images/icons/ProgrammingLanguages/go.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
30 |
--------------------------------------------------------------------------------
/src/images/icons/FrontendDevelopment/reactjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
30 |
--------------------------------------------------------------------------------