├── .gitignore
├── CONTRIBUTING.md
├── LICENCE
├── README.md
├── package-lock.json
├── package.json
├── public
├── index.html
├── manifest.json
├── robots.txt
└── sFav.png
└── src
├── App.css
├── App.js
├── assets
├── about.png
├── home-bg.jpg
├── home-main.svg
├── pre.svg
├── projects
│ ├── kickstart.png
│ ├── krypto.png
│ ├── lift.png
│ ├── pg.png
│ └── project.jpeg
├── s.png
├── sLogo.png
└── sajib.pdf
├── components
├── Contact
│ ├── Contact.css
│ ├── Contact.jsx
│ ├── Social.css
│ └── Social.jsx
├── Footer
│ └── Footer.jsx
├── Home
│ ├── About.jsx
│ └── Type.jsx
├── Navbar
│ └── Navbar.jsx
├── Particle.js
├── PreLoader.js
├── Projects
│ └── ProjectCard.jsx
├── ScrollToTop.js
└── Skillset
│ ├── Github.jsx
│ ├── Leetcode.jsx
│ ├── Techstack.jsx
│ └── Toolstack.jsx
├── index.css
├── index.js
├── pages
├── Contact.jsx
├── Home.jsx
├── Projects.jsx
├── Resume.jsx
└── Skillset.jsx
└── style.css
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Hacktoberfest 2023
2 |
3 | [🔗Live Demo🔗](https://sajib.vercel.app/)
4 |
5 | 
6 |
7 | ## Feel free to contribute to this repo
8 | **👉 Open a issue if you want to do any contribution, will assign you that**
9 |
10 | # Kind Of Pull Request Expecting
11 |
12 | **👉 📖 Convert this from React to Next JS**
13 |
14 | **👉 🎨 Change Style, Give some elegant colors**
15 |
16 | **👉 📱 Funtional Update or Changes (like add Experience, Achivement Section)**
17 |
18 | **👉 🗺️ Implement viewTransitionAPI**
19 |
20 | **👉 📖 Write Documetion For This Repo**
21 |
22 |
23 |
24 | ## 🚀 How to get started?
25 |
26 | Clone down this repository. You will need `node.js` and `git` installed globally on your machine.
27 |
28 | ## 🛠 Installation and Setup Instructions
29 |
30 | 1. Installation: `npm install`
31 |
32 | 2. In the project directory, you can run: `npm start`
33 |
34 | Runs the app in the development mode.\
35 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
36 | The page will reload if you make edits.
37 |
38 |
39 |
40 | ## Open your first pull request for the Hacktoberfest 2023 challenge.
41 |
42 |
43 |
44 |
45 |
46 |  [](http://makeapullrequest.com) [](https://github.com/ellerbrock/open-source-badges/)
47 |
48 |
49 |
50 |
51 |
52 | Project Stats
53 | 🌟 Stars
54 | 🍴 Forks
55 | 🐛 Issues
56 | 🔔 Open PRs
57 | 🔕 Close PRs
58 |
59 |
60 |
61 |
62 | Project
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | # 🚀 How to get started?
73 |
74 | You can refer to the following steps on the basics of Git and Github and also contact the Project Mentors, in case you are stuck:
75 |
76 |
77 |
78 | #### If you don't have git on your machine, [install it](https://help.github.com/articles/set-up-git/).
79 |
80 |
81 | ## Fork this repository
82 |
83 | Fork this repository by clicking on the fork button on the top of this page.
84 | This will create a copy of this repository in your account.
85 |
86 | ## Clone the repository
87 |
88 |
89 |
90 | Now clone the forked repository to your machine. Go to your GitHub account, open the forked repository, click on the code button and then click the _copy to clipboard_ icon.
91 |
92 | Open a terminal and run the following git command:
93 |
94 | ```
95 | git clone "url you just copied"
96 | ```
97 |
98 | where "url you just copied" (without the quotation marks) is the url to this repository (your fork of this project). See the previous steps to obtain the url.
99 |
100 |
101 |
102 | For example:
103 |
104 | ```
105 | git clone https://github.com/your-github-username/portfolio.git
106 | ```
107 |
108 | where `your-github-username` is your GitHub username. Here you're copying the contents of the portfolio repository on GitHub to your computer.
109 |
110 | ## Create a branch
111 |
112 | Change to the repository directory on your computer (if you are not already there):
113 |
114 | ```
115 | cd portfolio
116 | ```
117 |
118 | Now create a branch using the `git switch` command:
119 |
120 | ```
121 | git switch -c your-new-branch-name
122 | ```
123 |
124 | For example:
125 |
126 | ```
127 | git switch -c add-portfolio-project
128 | ```
129 |
130 | ## Make necessary changes and commit those changes
131 |
132 | Now open file in a code editor, add your changes to it. And, save the file.
133 |
134 | If you go to the project directory and execute the command `git status`, you'll see there are changes.
135 |
136 | Add those changes to the branch you just created using the `git add` command:
137 |
138 | ```
139 | git add .
140 | ```
141 |
142 | Now commit those changes using the `git commit` command:
143 |
144 | ```
145 | git commit -m "write about the changes you made"
146 | ```
147 |
148 | ## Push changes to GitHub
149 |
150 | Push your changes using the command `git push`:
151 |
152 | ```
153 | git push origin -u your-branch-name
154 | ```
155 |
156 | replacing `your-branch-name` with the name of the branch you created earlier.
157 |
158 | ## Submit your changes for review
159 |
160 | If you go to your repository on GitHub, you'll see a `Compare & pull request` button. Click on that button.
161 |
162 |
163 |
164 | Now submit the pull request.
165 |
166 |
167 |
168 |
169 | **Woo Hoo Yes** ! You have done it , You will get a notification email once the changes have been merged by maintainer.
170 |
171 | ## CONTRIBUTING A NEW PROJECT ?
172 |
173 | ### Please make sure you have followed to these guidelines
174 |
175 | 1. Create a Pull Request with the a proper comment of what have you done
176 |
177 | 2. Better if you share live url of your work.
178 |
179 | ✨ Contributors ✨
180 |
181 | 🚀 **Contributions** of any kind are welcome : Thanks go to these **Awesome People** 👨🏻💻
182 |
183 |
192 |
193 |
194 |
195 | Feel free to contribute to this repo.
196 |
197 | ### Show some ❤️ by giving the star :star: to this repository!!
198 | 🧠 Happy Hacking 🧠
199 |
--------------------------------------------------------------------------------
/LICENCE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Md Abu Bakkar Siddiqe Sajib
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JS Portfolio Website
2 |
3 | [🔗Live Demo🔗](https://sajib.vercel.app/)
4 |
5 | 
6 |
7 |
8 |
9 |  [](http://makeapullrequest.com) [](https://github.com/ellerbrock/open-source-badges/)
10 |
11 |
12 |
13 |
14 |
15 | Project Stats
16 | 🌟 Stars
17 | 🍴 Forks
18 | 🐛 Issues
19 | 🔔 Open PRs
20 | 🔕 Close PRs
21 |
22 |
23 |
24 |
25 | Project
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | ## Features
38 |
39 | **📖 Multi-Page Layout**
40 |
41 | **🎨 Styled with React-Bootstrap and CSS with easy to customize colors**
42 |
43 | **📱 Fully Responsive**
44 |
45 |
46 |
47 | ## 🚀 How to get started?
48 |
49 | Clone down this repository. You will need `node.js` and `git` installed globally on your machine.
50 |
51 | ## 🛠 Installation and Setup Instructions
52 |
53 | 1. Installation: `npm install`
54 |
55 | 2. In the project directory, you can run: `npm start`
56 |
57 | Runs the app in the development mode.\
58 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
59 | The page will reload if you make edits.
60 |
61 |
62 | Feel free to contribute to this repo.
63 |
64 | ### Show some ❤️ by giving the star :star: to this repository!!
65 | 🧠 Happy Hacking 🧠
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@emailjs/browser": "^3.10.0",
7 | "@testing-library/jest-dom": "^5.16.5",
8 | "@testing-library/react": "^13.4.0",
9 | "@testing-library/user-event": "^13.5.0",
10 | "bootstrap": "^5.2.3",
11 | "react": "^18.2.0",
12 | "react-bootstrap": "^2.7.0",
13 | "react-dom": "^18.2.0",
14 | "react-github-calendar": "^3.4.0",
15 | "react-icons": "^4.7.1",
16 | "react-markdown": "^8.0.5",
17 | "react-parallax-tilt": "^1.7.90",
18 | "react-pdf": "^6.2.2",
19 | "react-router-dom": "^6.7.0",
20 | "react-scripts": "5.0.1",
21 | "react-tsparticles": "^1.42.2",
22 | "typewriter-effect": "^2.19.0",
23 | "web-vitals": "^2.1.4"
24 | },
25 | "scripts": {
26 | "start": "react-scripts start",
27 | "build": "react-scripts build",
28 | "test": "react-scripts test",
29 | "eject": "react-scripts eject"
30 | },
31 | "eslintConfig": {
32 | "extends": [
33 | "react-app",
34 | "react-app/jest"
35 | ]
36 | },
37 | "browserslist": {
38 | "production": [
39 | ">0.2%",
40 | "not dead",
41 | "not op_mini all"
42 | ],
43 | "development": [
44 | "last 1 chrome version",
45 | "last 1 firefox version",
46 | "last 1 safari version"
47 | ]
48 | },
49 | "devDependencies": {
50 | "pdfjs-dist": "^3.2.146"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 | Sajib || Portfolio
14 |
15 |
16 | You need to enable JavaScript to run this app.
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/sFav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/public/sFav.png
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | height: 40vmin;
7 | pointer-events: none;
8 | }
9 |
10 | @media (prefers-reduced-motion: no-preference) {
11 | .App-logo {
12 | animation: App-logo-spin infinite 20s linear;
13 | }
14 | }
15 |
16 | .App-header {
17 | background-color: #282c34;
18 | min-height: 100vh;
19 | display: flex;
20 | flex-direction: column;
21 | align-items: center;
22 | justify-content: center;
23 | font-size: calc(10px + 2vmin);
24 | color: white;
25 | }
26 |
27 | .App-link {
28 | color: #61dafb;
29 | }
30 |
31 | @keyframes App-logo-spin {
32 | from {
33 | transform: rotate(0deg);
34 | }
35 | to {
36 | transform: rotate(360deg);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import {
3 | BrowserRouter as Router,
4 | Route,
5 | Routes,
6 | Navigate
7 | } from "react-router-dom";
8 |
9 | import Home from './pages/Home'
10 | import Skill from './pages/Skillset'
11 | import Project from './pages/Projects'
12 | import Resume from './pages/Resume'
13 | import Contact from './pages/Contact'
14 |
15 | import Navbar from "./components/Navbar/Navbar";
16 | import Footer from "./components/Footer/Footer";
17 | import Preloader from "./components/PreLoader"
18 | import ScrollToTop from "./components/ScrollToTop"
19 |
20 | import "./App.css";
21 | import "./style.css";
22 | import "bootstrap/dist/css/bootstrap.min.css";
23 |
24 | function App() {
25 | const [load, upadateLoad] = useState(true);
26 |
27 | useEffect(() => {
28 | const timer = setTimeout(() => {
29 | upadateLoad(false);
30 | }, 1200);
31 |
32 | return () => clearTimeout(timer);
33 | }, []);
34 |
35 | return (
36 |
37 |
38 |
39 |
40 |
41 |
42 | } />
43 | } />
44 | } />
45 | } />
46 | } />
47 | } />
48 |
49 |
50 |
51 |
52 | );
53 | }
54 |
55 | export default App;
56 |
--------------------------------------------------------------------------------
/src/assets/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/about.png
--------------------------------------------------------------------------------
/src/assets/home-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/home-bg.jpg
--------------------------------------------------------------------------------
/src/assets/home-main.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/src/assets/pre.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
17 |
18 |
19 |
25 |
31 |
32 |
33 |
38 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/assets/projects/kickstart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/projects/kickstart.png
--------------------------------------------------------------------------------
/src/assets/projects/krypto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/projects/krypto.png
--------------------------------------------------------------------------------
/src/assets/projects/lift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/projects/lift.png
--------------------------------------------------------------------------------
/src/assets/projects/pg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/projects/pg.png
--------------------------------------------------------------------------------
/src/assets/projects/project.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/projects/project.jpeg
--------------------------------------------------------------------------------
/src/assets/s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/s.png
--------------------------------------------------------------------------------
/src/assets/sLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/sLogo.png
--------------------------------------------------------------------------------
/src/assets/sajib.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/19sajib/portfolio/b2b7dd59b59f35ae5e33188069ce07260bde4527/src/assets/sajib.pdf
--------------------------------------------------------------------------------
/src/components/Contact/Contact.css:
--------------------------------------------------------------------------------
1 | .contact-form{
2 | padding: 0 3rem 0 3rem;
3 | display: flex;
4 | height: 80vh;
5 | margin-top: 4rem;
6 | /* scroll */
7 | padding-top: 3rem;
8 | }
9 |
10 | .c-left{
11 | text-align: center !important;
12 | padding-top: 25px;
13 | color: white !important;
14 | }
15 |
16 | .c-right{
17 | display: flex;
18 | justify-content: center;
19 | position: relative;
20 | flex: 1;
21 | }
22 |
23 | .c-right>form
24 | {
25 | display: flex;
26 | flex-direction: column;
27 | gap: 2rem;
28 | align-items: center;
29 |
30 | }
31 |
32 | .c-right .user{
33 | width: 24rem;
34 | height: 3rem;
35 | padding: 0.3em;
36 | outline: none;
37 | border: 2px solid #40008a;
38 | border-radius: 8px;
39 | font-size: 19px;
40 | color: white
41 | }
42 |
43 | .c-right .user:hover{
44 | box-shadow: 0 0 9px #7500fa;
45 | }
46 |
47 | input{
48 | background-color: var(--purple)
49 | }
50 | textarea{
51 | height: 5rem!important;
52 | background-color: var(--purple)
53 | }
54 |
55 | .done{
56 | font-size: 19px;
57 | color: green;
58 | }
59 | .not-done{
60 | font-size: 19px;
61 | color: red;
62 | }
63 |
64 | .c-blur1{
65 | top: 1rem;
66 | left: 8rem;
67 | }
68 |
69 | @media screen and (max-width: 480px) {
70 | .contact-form{
71 | padding: 0;
72 | flex-direction: column;
73 | gap: 5rem;
74 | height: 40rem;
75 | }
76 | .c-right .user{
77 | width: 16rem;
78 | }
79 |
80 | }
--------------------------------------------------------------------------------
/src/components/Contact/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React,{useState, useRef} from 'react'
2 | import emailjs from "@emailjs/browser";
3 | import { Container, Row, Col } from "react-bootstrap";
4 | import Button from 'react-bootstrap/Button';
5 | import './Contact.css'
6 |
7 | const Contact = () => {
8 | const form = useRef();
9 | const [done, setDone] = useState(false)
10 | const [notDone, setNotDone] = useState(false)
11 | const [formData, setFormData] = useState({});
12 |
13 | const handleChange = (e) => {
14 | setFormData({...formData, [e.target.name] : e.target.value})
15 | setDone(false)
16 | setNotDone(false)
17 | }
18 |
19 | const sendEmail = (e) => {
20 | e.preventDefault();
21 |
22 | if(!formData.from_name || !formData.reply_to ||!formData.message){
23 | setNotDone(true)
24 | } else {
25 |
26 | // Please use your own credentials from emailjs or i will recive your email
27 |
28 | emailjs
29 | .sendForm(
30 | "service_niilndo",
31 | "template_6z5idye",
32 | form.current,
33 | "VOBt6Akm1LhI5CZG-"
34 | )
35 | .then(
36 | (result) => {
37 | console.log(result.text);
38 | setDone(true);
39 | },
40 | (error) => {
41 | console.log(error.text);
42 | }
43 | );
44 | }
45 | };
46 |
47 |
48 | return(
49 |
50 |
51 |
52 | Get in Touch
53 | Contact me
54 |
55 |
56 |
64 |
65 |
66 |
67 | )
68 | }
69 |
70 | export default Contact
--------------------------------------------------------------------------------
/src/components/Contact/Social.css:
--------------------------------------------------------------------------------
1 | .contact-section {
2 | position: relative;
3 | padding-bottom: 70px !important;
4 | padding-top: 70px !important;
5 | }
6 |
7 | .contact-text{
8 | color: white
9 | }
10 |
11 | .contact-social-links {
12 | justify-content: center !important;
13 | padding-top: 15px !important;
14 | display: inline-block !important;
15 | position: relative !important;
16 | padding-inline-start: 0 !important;
17 | }
18 |
19 | .contact-social-icons {
20 | position: relative !important;
21 | display: inline-block !important;
22 | width: 70px !important;
23 | height: 70px !important;
24 | text-align: center !important;
25 | font-size: 2em !important;
26 | line-height: 2em !important;
27 | background: rgba(110, 110, 110, 0.972) !important;
28 | border-radius: 50% !important;
29 | transition: 0.5s !important;
30 | }
31 |
32 | .contact-social-icons::before {
33 | content: "";
34 | position: absolute;
35 | top: 0;
36 | left: 0;
37 | width: 100%;
38 | height: 100%;
39 | border-radius: 50%;
40 | background: #e9fa00;
41 | transition: 0.5s;
42 | transform: scale(0.9);
43 | z-index: -1;
44 | }
45 |
46 | .contact-social-icons:hover::before {
47 | transform: scale(1.1);
48 | box-shadow: 0 0 15px #fdf902;
49 | }
50 |
51 | .contact-social-icons:hover {
52 | color: #e5ff00;
53 | box-shadow: 0 0 7px #fdf901;
54 | text-shadow: 0 0 4px #fcf802;
55 | }
56 | .contact-icons {
57 | display: inline-block !important;
58 | padding-right: 15px;
59 | padding-left: 15px;
60 | }
61 |
62 | .icon-color {
63 | color: #e6ff01 !important;
64 | }
--------------------------------------------------------------------------------
/src/components/Contact/Social.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import {
4 | AiFillGithub,
5 | AiOutlineTwitter
6 | } from "react-icons/ai";
7 | import { FaLinkedinIn } from "react-icons/fa";
8 | import { SiLeetcode } from "react-icons/si";
9 | import './Social.css'
10 |
11 | const Social = () => {
12 | return (
13 |
14 |
15 |
16 |
17 |
FIND ME ON
18 |
19 | Please don't hesitate to reach out to me and connect.
20 |
21 |
22 |
64 |
65 |
66 |
67 | )
68 | }
69 |
70 | export default Social
--------------------------------------------------------------------------------
/src/components/Footer/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import {
4 | AiFillGithub,
5 | AiOutlineTwitter
6 | } from "react-icons/ai";
7 | import { FaLinkedinIn } from "react-icons/fa";
8 | import { SiLeetcode } from "react-icons/si";
9 | import logo from "../../assets/sLogo.png";
10 |
11 | const Footer = () => {
12 | let date = new Date();
13 | let year = date.getFullYear();
14 | return (
15 |
16 |
17 |
18 | Dedicated to creating impactful solutions!
19 |
20 |
21 | Copyright © {year}
22 |
23 |
24 |
25 |
71 |
72 |
73 |
74 | );
75 | }
76 |
77 | export default Footer
--------------------------------------------------------------------------------
/src/components/Home/About.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import LaptopImg from "../../assets/home-main.svg";
4 | import Tilt from "react-parallax-tilt";
5 | import {
6 | AiFillGithub,
7 | AiOutlineTwitter
8 | } from "react-icons/ai";
9 | import { FaLinkedinIn } from "react-icons/fa";
10 | import { SiLeetcode } from "react-icons/si";
11 |
12 |
13 |
14 | const About = () => {
15 | return (
16 |
17 |
18 |
19 |
20 |
21 | LET ME INTRODUCE MYSELF
22 |
23 |
24 | Hi, my name is Md Abu Bakkar Siddiqe Sajib
25 | and I'm from Dhaka, Bangladesh.
26 |
27 |
28 | I recently graduated with a Bachelor's degree in Computer Science and Engineering in 2021.
29 |
30 |
31 | As a
32 | Full-Stack developer,
33 | I enjoy tackling new challenges and continuously expanding my skillset.
34 |
35 | I am proficient in
36 | Javascript,
37 | as well as have knowledge in programming languages such as C, Java, Python,
38 | GraphQL, and Solidity.
39 |
40 |
41 | I have a passion for working
42 | with Node.js, MongoDB, and
43 |
44 |
45 | {" "}
46 | modern Javascript libraries and frameworks
47 |
48 |
49 | like
50 |
51 | React.js
52 |
53 |
54 |
55 | I am also interested in building new
56 |
57 | Web Technologies and Products,
58 | as well as exploring areas related to
59 | Artificial Intelligence.
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | FIND ME ON
74 |
75 | Please don't hesitate to reach out to me and connect.
76 |
77 |
123 |
124 |
125 |
126 |
127 | );
128 |
129 | }
130 |
131 | export default About
--------------------------------------------------------------------------------
/src/components/Home/Type.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Typewriter from "typewriter-effect";
3 |
4 | const Type = () => {
5 | return (
6 |
19 | )
20 | }
21 |
22 | export default Type
--------------------------------------------------------------------------------
/src/components/Navbar/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Navbar from "react-bootstrap/Navbar";
3 | import Nav from "react-bootstrap/Nav";
4 | import Container from "react-bootstrap/Container";
5 | import logo from "../../assets/sLogo.png";
6 | // import Button from "react-bootstrap/Button";
7 | import { Link } from "react-router-dom";
8 | // import { CgGitFork } from "react-icons/cg";
9 | import {
10 | // AiFillStar,
11 | AiOutlineHome,
12 | AiOutlineFundProjectionScreen,
13 | AiOutlineContacts
14 | } from "react-icons/ai";
15 | import { GiSkills } from "react-icons/gi"
16 | import { CgFileDocument } from "react-icons/cg";
17 |
18 |
19 | function NavBar() {
20 | const [expand, updateExpanded] = useState(false);
21 | const [navColour, updateNavbar] = useState(false);
22 |
23 | function scrollHandler() {
24 | if (window.scrollY >= 20) {
25 | updateNavbar(true);
26 | } else {
27 | updateNavbar(false);
28 | }
29 | }
30 |
31 | window.addEventListener("scroll", scrollHandler);
32 |
33 | return (
34 |
40 |
41 |
42 |
43 |
44 | {
47 | updateExpanded(expand ? false : "expanded");
48 | }}
49 | >
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | updateExpanded(false)}>
58 | Home
59 |
60 |
61 |
62 |
63 | updateExpanded(false)}
67 | >
68 | Skillset
69 |
70 |
71 |
72 |
73 | updateExpanded(false)}
77 | >
78 | {" "}
81 | Projects
82 |
83 |
84 |
85 |
86 | updateExpanded(false)}
90 | >
91 | Resume
92 |
93 |
94 |
95 |
96 | updateExpanded(false)}
100 | >
101 | Contact Me
102 |
103 |
104 |
105 | {/*
106 |
111 | {" "}
112 |
113 |
114 | */}
115 |
116 |
117 |
118 |
119 | );
120 | }
121 |
122 | export default NavBar;
123 |
--------------------------------------------------------------------------------
/src/components/Particle.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Particles from "react-tsparticles";
3 |
4 | function Particle() {
5 | return (
6 |
52 | );
53 | }
54 |
55 | export default Particle;
56 |
--------------------------------------------------------------------------------
/src/components/PreLoader.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | function PreLoader(props) {
3 | return
;
4 | }
5 |
6 | export default PreLoader;
--------------------------------------------------------------------------------
/src/components/Projects/ProjectCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Card from "react-bootstrap/Card";
3 | import Button from "react-bootstrap/Button";
4 | import { CgWebsite } from "react-icons/cg";
5 | import { BsGithub } from "react-icons/bs";
6 |
7 | const ProjectCard = (props) => {
8 | return (
9 |
18 |
29 |
37 | {props.title}
38 |
39 | {props.description}
40 |
41 |
55 |
56 | {props.isBlog ? "Blog" : "GitHub"}
57 |
58 | {"\n"}
59 | {"\n"}
60 |
61 | {/* If the component contains Demo link and if it's not a Blog then, it will render the below component */}
62 |
63 | {!props.isBlog && props.demoLink && (
64 |
79 |
80 | {"Demo"}
81 |
82 | )}
83 |
84 |
85 | );
86 | };
87 | export default ProjectCard;
88 |
--------------------------------------------------------------------------------
/src/components/ScrollToTop.js:
--------------------------------------------------------------------------------
1 | import { useEffect } from "react";
2 | import { useLocation } from "react-router-dom";
3 |
4 | function ScrollToTop() {
5 | const { pathname } = useLocation();
6 | useEffect(() => {
7 | window.scrollTo(0, 0);
8 | }, [pathname]);
9 | return null;
10 | }
11 |
12 | export default ScrollToTop;
--------------------------------------------------------------------------------
/src/components/Skillset/Github.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import GitHubCalendar from "react-github-calendar";
3 | import { Row } from "react-bootstrap";
4 |
5 | const Github = () => {
6 | return (
7 |
8 |
9 | Days I Code
10 |
11 |
18 |
19 | );
20 | }
21 |
22 | export default Github;
23 |
--------------------------------------------------------------------------------
/src/components/Skillset/Leetcode.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactMarkdown from 'react-markdown'
3 | import { Row } from "react-bootstrap";
4 |
5 | const Leetcode = () => {
6 | return (
7 |
8 |
9 | LeetCode Stat
10 |
11 |
12 | 
13 |
14 |
15 | );
16 | }
17 |
18 | export default Leetcode;
19 |
--------------------------------------------------------------------------------
/src/components/Skillset/Techstack.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Col, Row } from "react-bootstrap";
3 | import {
4 | DiJavascript1,
5 | DiReact,
6 | DiNodejs,
7 | DiGit,
8 | } from "react-icons/di";
9 | import {
10 | SiMaterialui,
11 | SiGraphql,
12 | SiSolidity,
13 | SiRedux,
14 | SiMongodb,
15 | SiHtml5
16 | } from "react-icons/si";
17 |
18 | const Techstack = () => {
19 | return (
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | );
53 | }
54 |
55 | export default Techstack;
56 |
--------------------------------------------------------------------------------
/src/components/Skillset/Toolstack.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Col, Row } from "react-bootstrap";
3 | import {
4 | SiVisualstudiocode,
5 | SiPostman,
6 | SiHeroku,
7 | SiVercel,
8 | SiNetlify
9 | } from "react-icons/si";
10 |
11 | const Toolstack = () => {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
33 | export default Toolstack;
34 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Raleway:wght@500&display=swap");
2 | body {
3 | margin: 0;
4 | font-family: "Raleway", serif !important;
5 | -webkit-font-smoothing: antialiased;
6 | -moz-osx-font-smoothing: grayscale;
7 | background-image: linear-gradient(to left, rgb(5, 8, 40), rgb(1, 4, 39));
8 | }
9 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
13 |
--------------------------------------------------------------------------------
/src/pages/Contact.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Container } from "react-bootstrap";
3 | import Particle from '../components/Particle';
4 | import ContactForm from '../components/Contact/Contact';
5 | import Social from '../components/Contact/Social';
6 |
7 | const Contact = () => {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 | )
15 | }
16 |
17 | export default Contact
--------------------------------------------------------------------------------
/src/pages/Home.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import homeLogo from '../assets/about.png'
4 | import Particle from '../components/Particle';
5 | import About from '../components/Home/About';
6 | import Type from '../components/Home/Type';
7 |
8 | const Home = () => {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Hi There!{" "}
18 |
19 | 👋🏻
20 |
21 |
22 |
23 |
24 | I'M
25 | Md Abu Bakkar Siddiqe Sajib
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
49 | export default Home
--------------------------------------------------------------------------------
/src/pages/Projects.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import ProjectCard from "../components/Projects/ProjectCard";
4 | import Particle from "../components/Particle";
5 | import pg from "../assets/projects/pg.png";
6 | import project from "../assets/projects/project.jpeg";
7 | import lift from "../assets/projects/lift.png";
8 | import krypto from "../assets/projects/krypto.png";
9 | import kickstart from "../assets/projects/kickstart.png";
10 |
11 | const Projects = () => {
12 | return (
13 |
14 |
15 |
16 |
17 | Recent Top Works
18 |
19 |
20 | Here are a few projects I've worked on recently.
21 |
22 |
23 |
24 |
31 |
32 |
33 |
34 |
41 |
42 |
43 |
44 |
51 |
52 |
53 |
54 |
61 |
62 |
63 |
64 |
72 |
73 |
74 |
75 |
82 |
83 |
84 |
85 |
86 | )
87 | }
88 |
89 | export default Projects
--------------------------------------------------------------------------------
/src/pages/Resume.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Container, Row } from "react-bootstrap";
3 | import Button from "react-bootstrap/Button";
4 | import { AiOutlineDownload } from "react-icons/ai";
5 |
6 | import Particle from '../components/Particle'
7 | import pdf from "../assets/sajib.pdf"
8 |
9 | import { Document, Page, pdfjs } from "react-pdf";
10 | import "react-pdf/dist/esm/Page/AnnotationLayer.css";
11 | import "react-pdf/dist/esm/Page/TextLayer.css";
12 | pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
13 |
14 | const resumeLink = `https://raw.githubusercontent.com/19sajib/portfolio/main/src/assets/sajib.pdf`
15 |
16 |
17 | const Resume = () => {
18 | const [width, setWidth] = useState(1200);
19 |
20 | useEffect(() => {
21 |
22 | setWidth(window.innerWidth);
23 | }, []);
24 |
25 | return (
26 |
27 |
28 |
29 |
30 |
36 |
37 | Download Resume
38 |
39 |
40 |
41 |
42 |
43 | 786 ? 1.7 : 0.6} />
44 |
45 |
46 |
47 |
48 |
54 |
55 | Download Resume
56 |
57 |
58 |
59 |
60 | )
61 | }
62 |
63 | export default Resume
--------------------------------------------------------------------------------
/src/pages/Skillset.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container } from "react-bootstrap";
3 |
4 | import Particle from '../components/Particle'
5 | import Techstack from "../components/Skillset/Techstack";
6 | import Toolstack from "../components/Skillset/Toolstack";
7 | import Leetcode from "../components/Skillset/Leetcode";
8 | import Github from "../components/Skillset/Github";
9 |
10 | const Skillset = () => {
11 | return (
12 |
13 |
14 |
15 |
16 | Professional Skillset
17 |
18 |
19 |
20 |
21 |
22 | Tools I use
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | )
31 | }
32 |
33 | export default Skillset
--------------------------------------------------------------------------------
/src/style.css:
--------------------------------------------------------------------------------
1 | html {
2 | --section-background-color: linear-gradient(
3 | to bottom left,
4 | rgb(5, 8, 40), rgb(1, 4, 39)
5 | );
6 |
7 | --image-gradient: linear-gradient(
8 | to bottom left,
9 | rgba(5, 8, 40, 0.87), rgba(1, 4, 39, 0.925)
10 | );
11 |
12 | --imp-text-color: #7500fa;
13 | --imp-bold-text-color: #7500fa;
14 | }
15 |
16 | .yellow {
17 | color: var(--imp-bold-text-color) !important;
18 | }
19 |
20 | .purple {
21 | color: var(--imp-text-color) !important;
22 | }
23 |
24 | button:focus {
25 | box-shadow: none !important;
26 | }
27 |
28 | /* --------- */
29 | /* Preloader */
30 | /* --------- */
31 | #preloader {
32 | position: fixed;
33 | top: 0;
34 | left: 0;
35 | width: 100%;
36 | height: 100%;
37 | z-index: 999999;
38 | background-color: #0c0513;
39 | background-image: url(./assets/pre.svg);
40 | background-repeat: no-repeat;
41 | background-position: center;
42 | }
43 |
44 | #preloader-none {
45 | opacity: 0;
46 | }
47 |
48 | #no-scroll {
49 | overflow: hidden;
50 | height: 100vh;
51 | }
52 |
53 | /* --------- */
54 | /*Scrollbar */
55 | /* --------- */
56 |
57 | ::-webkit-scrollbar {
58 | width: 7px;
59 | }
60 |
61 | /* Track */
62 | ::-webkit-scrollbar-track {
63 | background: #2d005c;
64 | }
65 |
66 | /* Handle */
67 | ::-webkit-scrollbar-thumb {
68 | background: rgba(77, 1, 165, 0.959);
69 | border-radius: 12px;
70 | }
71 |
72 | /* Handle on hover */
73 | ::-webkit-scrollbar-thumb:hover {
74 | background: rgb(121, 7, 250);
75 | border-radius: 12px;
76 | }
77 |
78 | /* --------- */
79 | /* Navbar Section */
80 | /* --------- */
81 | .sticky {
82 | background-color: #38007731 !important;
83 | transition: all 0.3s ease-out 0s !important;
84 | box-shadow: 0px 10px 10px 0px rgba(9, 5, 29, 0.171) !important;
85 | backdrop-filter: blur(15px) !important;
86 | }
87 |
88 | .navbar {
89 | position: fixed !important;
90 | transition: all 0.3s ease-out 0s !important;
91 | padding: 0.3rem 2rem !important;
92 | font-size: 1.2rem !important;
93 | }
94 |
95 | .navbar-toggler {
96 | position: relative !important;
97 | background-color: transparent !important;
98 | border-color: transparent !important;
99 | }
100 |
101 | .navbar-toggler span {
102 | display: block !important;
103 | background-color: #7500fa !important;
104 | height: 4px !important;
105 | width: 27px !important;
106 | margin-top: 5px !important;
107 | margin-bottom: 5px !important;
108 | transform: rotate(0deg) !important;
109 | left: 0 !important;
110 | opacity: 1 !important;
111 | }
112 |
113 | .navbar-toggler:focus,
114 | .navbar-toggler:active {
115 | outline: 0 !important;
116 | }
117 |
118 | .navbar-toggler span:nth-child(1),
119 | .navbar-toggler span:nth-child(3) {
120 | transition: transform 0.35s ease-in-out !important;
121 | transition: transform 0.35s ease-in-out !important;
122 | }
123 |
124 | .navbar-toggler:not(.collapsed) span:nth-child(1) {
125 | position: absolute !important;
126 | left: 12px !important;
127 | top: 10px !important;
128 | transform: rotate(135deg) !important;
129 | opacity: 0.9 !important;
130 | }
131 |
132 | .navbar-toggler:not(.collapsed) span:nth-child(2) {
133 | height: 12px !important;
134 | visibility: hidden !important;
135 | background-color: transparent !important;
136 | }
137 |
138 | .navbar-toggler:not(.collapsed) span:nth-child(3) {
139 | position: absolute !important;
140 | left: 12px !important;
141 | top: 10px !important;
142 | transform: rotate(-135deg) !important;
143 | opacity: 0.9 !important;
144 | }
145 |
146 | @media (max-width: 767px) {
147 | .navbar {
148 | padding: 1rem 2rem !important;
149 | font-size: 1.4rem !important;
150 | background-color: #181a27 !important;
151 | }
152 | .navbar-nav .nav-item a::after {
153 | display: none !important;
154 | }
155 | }
156 | .navbar-brand {
157 | color: rgb(250, 250, 250) !important;
158 | }
159 |
160 | .logo {
161 | height: 2em !important;
162 | width: 3.5em !important;
163 | }
164 |
165 | .navbar-nav .nav-link {
166 | color: white !important;
167 | padding-right: 1rem !important;
168 | padding-left: 1rem !important;
169 | }
170 |
171 | .nav-link {
172 | padding: 0.8rem 1rem !important;
173 | }
174 |
175 | @media (max-width: 767px) {
176 | .nav-link {
177 | padding: 0.7rem 1rem !important;
178 | }
179 | }
180 |
181 | .navbar-nav .nav-item {
182 | position: relative;
183 | margin-left: 20px;
184 | }
185 |
186 | .navbar-nav .nav-item a {
187 | font-weight: 400;
188 | transition: all 0.3s ease-out 0s;
189 | position: relative;
190 | z-index: 1;
191 | }
192 |
193 | .navbar-nav .nav-item a::after {
194 | content: "";
195 | position: relative;
196 | display: block;
197 | height: 5px;
198 | width: 0;
199 | border-radius: 16px;
200 | background: #6e00fd;
201 | bottom: 1px;
202 | left: 0;
203 | z-index: -1;
204 | transition: all 0.3s ease-out 0s;
205 | }
206 |
207 | .navbar-nav .nav-item a:hover::after {
208 | width: 100%;
209 | }
210 |
211 | /* --------- */
212 | /* Home section */
213 | /* --------- */
214 | .wave {
215 | animation-name: wave-animation; /* Refers to the name of your @keyframes element below */
216 | animation-duration: 2.1s; /* Change to speed up or slow down */
217 | animation-iteration-count: infinite; /* Never stop waving :) */
218 | transform-origin: 70% 70%; /* Pivot around the bottom-left palm */
219 | display: inline-block;
220 | }
221 |
222 | @keyframes wave-animation {
223 | 0% {
224 | transform: rotate(0deg);
225 | }
226 | 10% {
227 | transform: rotate(14deg);
228 | } /* The following five values can be played with to make the waving more or less extreme */
229 | 20% {
230 | transform: rotate(-8deg);
231 | }
232 | 30% {
233 | transform: rotate(14deg);
234 | }
235 | 40% {
236 | transform: rotate(-4deg);
237 | }
238 | 50% {
239 | transform: rotate(10deg);
240 | }
241 | 60% {
242 | transform: rotate(0deg);
243 | } /* Reset for the last half to pause */
244 | 100% {
245 | transform: rotate(0deg);
246 | }
247 | }
248 | #tsparticles {
249 | position: fixed !important;
250 | background-repeat: no-repeat !important;
251 | background-size: cover !important;
252 | width: 100%;
253 | height: 100%;
254 | }
255 |
256 | .home-header {
257 | padding-top: 80px !important;
258 | }
259 |
260 | .home-section {
261 | position: relative;
262 | z-index: -1;
263 | background-image: var(--image-gradient), url(./assets/home-bg.jpg);
264 | background-position: top center;
265 | background-repeat: no-repeat;
266 | padding-bottom: 30px !important;
267 | padding-top: 30px !important;
268 | }
269 |
270 | .home-content {
271 | padding: 9rem 0 2rem !important;
272 | color: whitesmoke;
273 | text-align: left;
274 | }
275 |
276 | .heading {
277 | font-size: 2.4em !important;
278 | padding-left: 50px !important;
279 | }
280 |
281 | .heading-name {
282 | font-size: 2.5em !important;
283 | padding-left: 45px !important;
284 | }
285 |
286 | .main-name {
287 | color: #7500fa;
288 | }
289 |
290 | .Typewriter__wrapper {
291 | font-size: 2.2em !important;
292 | color: #7500fa!important;
293 | /* color: #be6adf !important; */
294 | font-weight: 600 !important;
295 | }
296 | .Typewriter__cursor {
297 | font-size: 2.4em !important;
298 | color: #7500fa !important;
299 | }
300 |
301 | @media (max-width: 767px) {
302 | .Typewriter__wrapper {
303 | font-size: 1.4em !important;
304 | font-weight: 500 !important;
305 | position: absolute !important;
306 | }
307 | .Typewriter__cursor {
308 | display: none !important;
309 | }
310 | }
311 |
312 | .myAvtar {
313 | justify-content: center !important;
314 | padding-top: 9em !important;
315 | }
316 |
317 | @media (max-width: 767px) {
318 | .myAvtar {
319 | padding-top: 2em !important;
320 | padding-bottom: 2em !important;
321 | }
322 | }
323 |
324 | .home-about-section {
325 | position: relative;
326 | padding-bottom: 70px !important;
327 | padding-top: 70px !important;
328 | /* background-image: var(--image-gradient), url('./assets/home-bg.jpg'); */
329 | }
330 |
331 | .home-about-description {
332 | color: white !important;
333 | padding-top: 100px !important;
334 | padding-bottom: 20px !important;
335 | text-align: center;
336 | }
337 |
338 | .home-about-body {
339 | padding-top: 50px;
340 | font-size: 1.2em !important;
341 | text-align: left;
342 | }
343 |
344 | .home-about-social {
345 | text-align: center !important;
346 | padding-top: 25px;
347 | color: white !important;
348 | }
349 |
350 | .home-about-social-links {
351 | justify-content: center !important;
352 | padding-top: 15px !important;
353 | display: inline-block !important;
354 | position: relative !important;
355 | padding-inline-start: 0 !important;
356 | }
357 |
358 | .home-social-icons {
359 | position: relative !important;
360 | display: inline-block !important;
361 | width: 40px !important;
362 | height: 40px !important;
363 | text-align: center !important;
364 | font-size: 1.2em !important;
365 | line-height: 2em !important;
366 | background: rgba(110, 110, 110, 0.972) !important;
367 | border-radius: 50% !important;
368 | transition: 0.5s !important;
369 | }
370 |
371 | .home-social-icons::before {
372 | content: "";
373 | position: absolute;
374 | top: 0;
375 | left: 0;
376 | width: 100%;
377 | height: 100%;
378 | border-radius: 50%;
379 | background: #e9fa00;
380 | transition: 0.5s;
381 | transform: scale(0.9);
382 | z-index: -1;
383 | }
384 |
385 | .home-social-icons:hover::before {
386 | transform: scale(1.1);
387 | box-shadow: 0 0 15px #fdf902;
388 | }
389 |
390 | .home-social-icons:hover {
391 | color: #e5ff00;
392 | box-shadow: 0 0 5px #fdf901;
393 | text-shadow: 0 0 2px #fcf802;
394 | }
395 |
396 | .social-icons {
397 | display: inline-block !important;
398 | padding-right: 15px;
399 | padding-left: 15px;
400 | }
401 |
402 | .icon-colour {
403 | color: #e6ff01 !important;
404 | }
405 |
406 | /* --------- */
407 | /* Footer */
408 | /* --------- */
409 | .footer {
410 | background-color: rgb(1, 6, 36);
411 | bottom: 0 !important;
412 | padding-top: 10px !important;
413 | padding-bottom: 8px !important ;
414 | }
415 | .footer-copywright {
416 | display: flex;
417 | text-align: center !important;
418 | align-items: center;
419 | justify-content: center;
420 | }
421 |
422 | .footer-copywright span {
423 | color: white;
424 | font-size: 1.2rem;
425 | }
426 |
427 | .footer-body {
428 | z-index: 1;
429 | text-align: center !important;
430 | }
431 |
432 | @media (max-width: 767px) {
433 | .footer-copywright {
434 | text-align: center !important;
435 | }
436 |
437 | .footer-body {
438 | text-align: center !important;
439 | }
440 | }
441 |
442 | .footer h3 {
443 | font-size: 1em;
444 | color: white !important;
445 | margin-top: 0.5em !important;
446 | margin-bottom: 0.5em !important;
447 | }
448 | .footer-icons {
449 | margin-top: 0.5em !important;
450 | margin-bottom: 0.5em !important;
451 | padding: 0 !important;
452 | }
453 |
454 | .blockquote-footer {
455 | color: #a588c0 !important;
456 | }
457 | /* --------- */
458 | /* About */
459 | /* --------- */
460 |
461 | .about-section {
462 | position: relative !important;
463 | padding-top: 150px !important;
464 | padding-bottom: 30px !important;
465 | background-image: var(--section-background-color) !important;
466 | color: white !important;
467 | }
468 |
469 | .tech-icons {
470 | font-size: 4.5em !important;
471 | margin: 15px !important;
472 | padding: 10px !important;
473 | opacity: 0.93 !important;
474 | border: 1.7px solid rgb(89, 0, 190) !important;
475 | vertical-align: middle !important;
476 | text-align: center !important;
477 | border-radius: 5px !important;
478 | display: table !important;
479 | box-shadow: 4px 5px 4px 3px rgba(117, 0, 250, 0.37) !important;
480 | overflow: hidden !important;
481 | transition: all 0.4s ease 0s !important;
482 | }
483 |
484 | @media (max-width: 767px) {
485 | .tech-icons {
486 | margin: 10px !important;
487 | }
488 | }
489 |
490 | .tech-icons:hover {
491 | transform: scale(1.05) !important;
492 | overflow: hidden !important;
493 | border: 2.2px solid rgba(117, 0, 250, 1) !important;
494 | }
495 | .tech-icon-images {
496 | padding: 20px !important;
497 | line-height: 1.6 !important;
498 | }
499 |
500 | .quote-card-view {
501 | border: none !important;
502 | color: white !important;
503 | background-color: transparent !important;
504 | }
505 |
506 | .about-activity {
507 | list-style: none !important;
508 | text-align: left !important;
509 | padding-left: 1px !important;
510 | }
511 |
512 | @media (max-width: 767px) {
513 | .about-img {
514 | padding-top: 0 !important;
515 | }
516 | }
517 |
518 |
519 | /* --------- */
520 | /* Projects */
521 | /* --------- */
522 | .project-section {
523 | position: relative !important;
524 | padding-top: 150px !important;
525 | padding-bottom: 30px !important;
526 | background-image: var(--section-background-color) !important;
527 | }
528 |
529 | .project-card {
530 | padding-top: 50px !important;
531 | padding-bottom: 50px !important;
532 | padding-left: 25px !important;
533 | padding-right: 25px !important;
534 | height: auto !important;
535 | }
536 |
537 | .project-card-view {
538 | box-shadow: 0 4px 5px 3px rgb(72, 0, 155) !important;
539 | /* box-shadow: 0 4px 5px 3px rgba(119, 53, 136, 0.459) !important; */
540 | color: white !important;
541 | background-color: transparent !important;
542 | opacity: 0.9 !important;
543 | transition: all 0.5s ease 0s !important;
544 | height: 100% !important;
545 | }
546 | .project-card-view:hover {
547 | transform: scale(1.02) !important;
548 | overflow: hidden !important;
549 | /* box-shadow: 0 4px 4px 5px rgba(129, 72, 144, 0.561) !important; */
550 | box-shadow: 0 4px 5px 3px rgba(117, 0, 250, 1) !important;
551 | }
552 |
553 | .blog-card {
554 | padding-top: 50px !important;
555 | padding-bottom: 50px !important;
556 | padding-left: 25px !important;
557 | padding-right: 25px !important;
558 | height: auto !important;
559 | }
560 |
561 | .blog-card-view {
562 | background-color: transparent !important;
563 | box-shadow: 0 3px 3px 2px rgba(145, 77, 161, 0.459) !important;
564 | color: white !important;
565 | transition: all 0.5s ease 0s !important;
566 | height: 100% !important;
567 | }
568 |
569 | .blog-link {
570 | color: white !important;
571 | text-decoration: none !important;
572 | }
573 |
574 | .blog-link:hover {
575 | cursor: pointer !important;
576 | }
577 |
578 | .blog-card-view:hover {
579 | transform: scale(1.02) !important;
580 | overflow: hidden !important;
581 | box-shadow: 0 3px 3px 5px rgba(155, 88, 173, 0.65) !important;
582 | }
583 |
584 | .card-img-top {
585 | padding: 20px !important;
586 | opacity: 0.8 !important;
587 | border-radius: 10px !important;
588 | }
589 |
590 | .blog-img {
591 | padding: 0px !important;
592 | opacity: 0.8 !important;
593 | border-radius: 0px !important;
594 | }
595 |
596 | .btn-primary {
597 | /* color: #fff !important; */
598 | color: rgb(24, 2, 44) !important;
599 | background-color: #7500fa !important;
600 | border-color: #7500fa !important;
601 | /* background-color: #623686 !important;
602 | border-color: #623686 !important; */
603 | }
604 |
605 | .btn-primary:hover {
606 | color: #fff !important;
607 | background-color: #7500fa !important;
608 | border-color: #7500fa !important;
609 | /* background-color: #6d20c5d7 !important;
610 | border-color: #6d20c5d7 !important; */
611 | }
612 | .btn:focus {
613 | outline: none !important;
614 | box-shadow: none !important;
615 | }
616 | .project-heading {
617 | color: white !important;
618 | font-size: 2.3em !important;
619 | font-weight: 500 !important;
620 | padding-top: 10px !important;
621 | }
622 |
623 |
624 | /* --------- */
625 | /* Resume */
626 | /* --------- */
627 |
628 | .resume-section {
629 | position: relative !important;
630 | padding-top: 110px !important;
631 | padding-bottom: 30px !important;
632 | background-image: var(--section-background-color) !important;
633 | color: white !important;
634 | }
635 |
636 | .resume {
637 | padding-top: 50px;
638 | padding-bottom: 50px;
639 | justify-content: center;
640 | }
641 |
642 | .resume-left {
643 | padding-right: 80px !important;
644 | }
645 |
646 | .resume-right {
647 | padding-left: 80px !important;
648 | }
649 |
650 | @media (max-width: 767px) {
651 | .resume-left {
652 | padding-right: 15px !important;
653 | padding-left: 15px !important;
654 | }
655 |
656 | .resume-right {
657 | padding-right: 15px !important;
658 | padding-left: 15px !important;
659 | }
660 | }
661 | .resume .resume-title {
662 | font-size: 2em;
663 | font-weight: 700;
664 | padding-top: 30px;
665 | padding-bottom: 30px;
666 | }
667 |
668 | .resume .resume-item {
669 | padding: 0 0 10px 25px;
670 | margin-top: -2px;
671 | border-left: 2px solid #8a49a8;
672 | position: relative;
673 | }
674 |
675 | .resume .resume-item .resume-title {
676 | line-height: 18px;
677 | font-size: 0.9em;
678 | background: #5234795d;
679 | padding: 8px 15px;
680 | display: inline-block;
681 | font-weight: 600;
682 | margin-bottom: 10px;
683 | }
684 |
685 | .resume .resume-item ul {
686 | padding-left: 20px;
687 | text-align: justify;
688 | }
689 |
690 | .resume .resume-item ul li {
691 | padding-bottom: 10px;
692 | list-style: none;
693 | }
694 |
695 | .resume .resume-item:last-child {
696 | padding-bottom: 0;
697 | }
698 |
699 | .resume .resume-item::before {
700 | content: "";
701 | position: absolute;
702 | width: 16px;
703 | height: 16px;
704 | border-radius: 50px;
705 | left: -9px;
706 | top: 0;
707 | background: #fff;
708 | border: 2px solid #8a49a8;
709 | }
710 |
711 | .like-item {
712 | padding-top: 10px !important;
713 | font-size: 1.1em !important;
714 | font-family: sans-serif !important;
715 | }
716 |
717 | .like-btn {
718 | background-color: #934cce5e !important;
719 | border-color: #934cce5e !important;
720 | padding: 0.25rem 0.98rem !important;
721 | border-radius: 5px !important;
722 | line-height: 1.4 !important;
723 | transition: 0.3s ease !important;
724 | }
725 |
726 | .like-btn:hover {
727 | transform: translateY(-2px) !important;
728 | background-color: #a24dd386 !important;
729 | border-color: #a24dd386 !important;
730 | }
731 |
732 | .animate-like {
733 | animation-name: likeAnimation;
734 | animation-fill-mode: forwards;
735 | animation-duration: 0.85s;
736 | }
737 | @keyframes likeAnimation {
738 | 0% {
739 | transform: scale(1.5);
740 | }
741 | 100% {
742 | transform: scale(1);
743 | }
744 | }
745 |
746 | .fork-btn {
747 | font-size: 1.1em !important;
748 | padding-top: 10px !important;
749 | }
750 |
751 | .fork-btn-inner {
752 | line-height: 1.4em !important;
753 | background-color: #fceb0186 !important;
754 | padding: 0.25rem 1.1rem !important;
755 | vertical-align: middle !important;
756 | text-align: center !important;
757 | }
758 |
759 | .fork-btn-inner:hover {
760 | transform: translateY(-2px) !important;
761 | background-color: #fceb0186 !important;
762 | border-color: #fceb0186 !important;
763 | }
764 | .fork-btn-inner::after {
765 | display: none !important;
766 | }
--------------------------------------------------------------------------------