├── .gitattributes
├── public
├── robots.txt
├── favicon.png
├── manifest.json
└── index.html
├── Images
└── interface.png
├── src
├── Assets
│ ├── about.png
│ ├── home-bg.jpg
│ ├── sukrut_square.jpg
│ ├── pre.svg
│ ├── avatar.svg
│ └── home-main.svg
├── components
│ ├── Pre.js
│ ├── ScrollToTop.js
│ ├── Home
│ │ ├── Type.js
│ │ ├── Home.js
│ │ └── Home2.js
│ ├── About
│ │ ├── Techstack.js
│ │ ├── AboutCard.js
│ │ └── About.js
│ ├── Particle.js
│ ├── Navbar.js
│ └── Footer.js
├── setupTests.js
├── App.test.js
├── index.css
├── reportWebVitals.js
├── index.js
├── App.css
├── App.js
└── style.css
├── .gitignore
├── README.md
└── package.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sukrutrahane/Sukrut-Portfolio/HEAD/public/favicon.png
--------------------------------------------------------------------------------
/Images/interface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sukrutrahane/Sukrut-Portfolio/HEAD/Images/interface.png
--------------------------------------------------------------------------------
/src/Assets/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sukrutrahane/Sukrut-Portfolio/HEAD/src/Assets/about.png
--------------------------------------------------------------------------------
/src/Assets/home-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sukrutrahane/Sukrut-Portfolio/HEAD/src/Assets/home-bg.jpg
--------------------------------------------------------------------------------
/src/Assets/sukrut_square.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sukrutrahane/Sukrut-Portfolio/HEAD/src/Assets/sukrut_square.jpg
--------------------------------------------------------------------------------
/src/components/Pre.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | function Pre(props) {
3 | return
;
4 | }
5 |
6 | export default Pre;
7 |
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render( );
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/components/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;
13 |
--------------------------------------------------------------------------------
/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(27 20 41), rgb(20 15 35));
8 | }
9 |
--------------------------------------------------------------------------------
/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 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/src/components/Home/Type.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Typewriter from "typewriter-effect";
3 |
4 | function Type() {
5 | return (
6 |
18 | );
19 | }
20 |
21 | export default Type;
22 |
--------------------------------------------------------------------------------
/.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
17 | .env.local
18 | .env.development.local
19 | .env.test.local
20 | .env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | .eslintcache
27 |
28 | Server/node_modules
29 | Server/config.js
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.css";
4 | import App from "./App";
5 | import reportWebVitals from "./reportWebVitals";
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById("root")
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/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 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Another Purple & Black website
12 |
13 |
14 |
15 |
16 |
18 |
19 |
20 |
21 |
22 | You need to enable JavaScript to run this app.
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | Portfolio Website
3 | sukrutrahane
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | ## Built With
13 |
14 | This project was built using these technologies.
15 |
16 | - React.js
17 | - Node.js
18 | - Express.js
19 | - CSS3
20 | - VsCode
21 |
22 |
23 | ## Features
24 |
25 | **📖 Multi-Page Layout**
26 |
27 | **🎨 Styled with React-Bootstrap and Css with easy to customize colors**
28 |
29 | **📱 Fully Responsive**
30 |
31 | ## Getting Started
32 |
33 | Clone down this repository. You will need `node.js` and `git` installed globally on your machine.
34 |
35 | ## 🛠 Installation and Setup Instructions
36 |
37 | 1. Installation: `npm install`
38 |
39 | 2. In the project directory, you can run: `npm start`
40 |
41 | Runs the app in the development mode.\
42 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
43 | The page will reload if you make edits.
44 |
45 |
--------------------------------------------------------------------------------
/src/components/About/Techstack.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Col, Row } from "react-bootstrap";
3 | import { CgCPlusPlus } from "react-icons/cg";
4 | import {
5 | DiJavascript1,
6 | DiReact,
7 | DiNodejs,
8 | DiPython,
9 | DiGit,
10 | DiJava,
11 | } from "react-icons/di";
12 |
13 | function Techstack() {
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | );
43 | }
44 |
45 | export default Techstack;
46 |
--------------------------------------------------------------------------------
/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/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import Preloader from "../src/components/Pre";
3 | import Navbar from "./components/Navbar";
4 | import Home from "./components/Home/Home";
5 | import About from "./components/About/About";
6 | import Footer from "./components/Footer";
7 | import {
8 | BrowserRouter as Router,
9 | Route,
10 | Routes,
11 | Navigate
12 | } from "react-router-dom";
13 | import ScrollToTop from "./components/ScrollToTop";
14 | import "./style.css";
15 | import "./App.css";
16 | import "bootstrap/dist/css/bootstrap.min.css";
17 |
18 | function App() {
19 | const [load, upadateLoad] = useState(true);
20 |
21 | useEffect(() => {
22 | const timer = setTimeout(() => {
23 | upadateLoad(false);
24 | }, 1200);
25 |
26 | return () => clearTimeout(timer);
27 | }, []);
28 |
29 | return (
30 |
31 |
32 |
33 |
34 |
35 |
36 | } />
37 | } />
38 | } />
39 |
40 |
41 |
42 |
43 | );
44 | }
45 |
46 | export default App;
47 |
--------------------------------------------------------------------------------
/src/components/About/AboutCard.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Card from "react-bootstrap/Card";
3 | import { ImPointRight } from "react-icons/im";
4 |
5 | function AboutCard() {
6 | return (
7 |
8 |
9 |
10 |
11 | Hi Everyone, I am Sukrut Rahane
12 | from Nashik, India.
13 | I am a Third Year student pursuing B.E.
14 | in Artificial intelligence & Data Science from Pune University.
15 |
16 | Additionally, I am enthusiastic about Machine Learning.
17 |
18 |
19 | Some of my hobbies are
20 |
21 |
22 |
23 | Playing Games
24 |
25 |
26 | Partying
27 |
28 |
29 | EDM
30 |
31 |
32 |
33 |
34 |
35 |
36 | );
37 | }
38 |
39 | export default AboutCard;
40 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@react-pdf/renderer": "^2.2.0",
7 | "@testing-library/jest-dom": "^5.16.2",
8 | "@testing-library/react": "^12.1.4",
9 | "@testing-library/user-event": "^13.5.0",
10 | "axios": "^0.26.1",
11 | "bootstrap": "^5.1.3",
12 | "react": "^17.0.2",
13 | "react-bootstrap": "^2.2.1",
14 | "react-dom": "^17.0.2",
15 | "react-github-calendar": "^3.2.2",
16 | "react-icons": "^4.8.0",
17 | "react-parallax-tilt": "^1.7.42",
18 | "react-pdf": "^5.7.1",
19 | "react-router-dom": "^6.2.2",
20 | "react-scripts": "5.0.0",
21 | "react-tsparticles": "^1.42.2",
22 | "typewriter-effect": "^2.18.2",
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 | }
50 |
--------------------------------------------------------------------------------
/src/components/Home/Home.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import homeLogo from "../../Assets/home-main.svg";
4 | import Particle from "../Particle";
5 | import Home2 from "./Home2";
6 | import Type from "./Type";
7 |
8 | function Home() {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Hi There!{" "}
18 |
19 | 👋🏻
20 |
21 |
22 |
23 |
24 | I'M
25 | SUKRUT RAHANE
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
49 | export default Home;
50 |
--------------------------------------------------------------------------------
/src/components/About/About.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import Particle from "../Particle";
4 | import Techstack from "./Techstack";
5 | import Aboutcard from "./AboutCard";
6 | import laptopImg from "../../Assets/sukrut_square.jpg";
7 | import Tilt from "react-parallax-tilt";
8 |
9 | function About() {
10 | return (
11 |
12 |
13 |
14 |
15 |
23 |
24 | Know Who I'M
25 |
26 |
27 |
28 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Professional Skillset
48 |
49 |
50 |
51 |
52 |
53 |
54 | );
55 | }
56 |
57 | export default About;
58 |
--------------------------------------------------------------------------------
/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/components/Navbar.js:
--------------------------------------------------------------------------------
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 { Link } from "react-router-dom";
6 | import {
7 | AiOutlineHome,
8 | AiOutlineUser,
9 | } from "react-icons/ai";
10 |
11 | function NavBar() {
12 | const [expand, updateExpanded] = useState(false);
13 | const [navColour, updateNavbar] = useState(false);
14 |
15 | function scrollHandler() {
16 | if (window.scrollY >= 20) {
17 | updateNavbar(true);
18 | } else {
19 | updateNavbar(false);
20 | }
21 | }
22 |
23 | window.addEventListener("scroll", scrollHandler);
24 |
25 | return (
26 |
32 |
33 |
34 |
35 |
36 | {
39 | updateExpanded(expand ? false : "expanded");
40 | }}
41 | >
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | updateExpanded(false)}>
50 | Home
51 |
52 |
53 |
54 |
55 | updateExpanded(false)}
59 | >
60 | About
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | );
69 | }
70 |
71 | export default NavBar;
72 |
--------------------------------------------------------------------------------
/src/components/Footer.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import {
4 | AiFillGithub,
5 | AiOutlineTwitter,
6 | AiFillInstagram,
7 | } from "react-icons/ai";
8 | import { FaLinkedinIn } from "react-icons/fa";
9 |
10 | function Footer() {
11 | let date = new Date();
12 | let year = date.getFullYear();
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 | Copyright © {year} Sukrut Rahane
21 |
22 |
23 |
65 |
66 |
67 |
68 | );
69 | }
70 |
71 | export default Footer;
72 |
--------------------------------------------------------------------------------
/src/components/Home/Home2.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Row, Col } from "react-bootstrap";
3 | import myImg from "../../Assets/avatar.svg";
4 | import Tilt from "react-parallax-tilt";
5 | import {
6 | AiFillGithub,
7 | AiOutlineTwitter,
8 | AiFillInstagram,
9 | } from "react-icons/ai";
10 | import { FaLinkedinIn } from "react-icons/fa";
11 |
12 | function Home2() {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 | LET ME INTRODUCE MYSELF
20 |
21 |
22 | I am fluent in classics like
23 |
24 | C++ and Python.
25 |
26 |
27 |
28 | I debug more than I code.
29 |
30 |
31 | My pronouns are Jack of All Trades / Master of none
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | FIND ME ON
43 |
44 | Feel free to connect with me
45 |
46 |
88 |
89 |
90 |
91 |
92 | );
93 | }
94 | export default Home2;
95 |
--------------------------------------------------------------------------------
/src/style.css:
--------------------------------------------------------------------------------
1 | html {
2 | --section-background-color: linear-gradient(
3 | to bottom left,
4 | rgba(17, 16, 16, 0.582),
5 | rgba(12, 8, 24, 0.904)
6 | );
7 |
8 | --image-gradient: linear-gradient(
9 | to bottom left,
10 | rgba(17, 16, 16, 0.678),
11 | rgba(12, 10, 22, 0.863)
12 | );
13 |
14 | --imp-text-color: #c770f0;
15 | }
16 |
17 | .purple {
18 | color: var(--imp-text-color) !important;
19 | }
20 |
21 | button:focus {
22 | box-shadow: none !important;
23 | }
24 |
25 | /* --------- */
26 | /* Preloader */
27 | /* --------- */
28 | #preloader {
29 | position: fixed;
30 | top: 0;
31 | left: 0;
32 | width: 100%;
33 | height: 100%;
34 | z-index: 999999;
35 | background-color: #0c0513;
36 | background-image: url(./Assets/pre.svg);
37 | background-repeat: no-repeat;
38 | background-position: center;
39 | }
40 |
41 | #preloader-none {
42 | opacity: 0;
43 | }
44 |
45 | #no-scroll {
46 | overflow: hidden;
47 | height: 100vh;
48 | }
49 |
50 | /* --------- */
51 | /*Scrollbar */
52 | /* --------- */
53 |
54 | ::-webkit-scrollbar {
55 | width: 7px;
56 | }
57 |
58 | /* Track */
59 | ::-webkit-scrollbar-track {
60 | background: #2d1950;
61 | }
62 |
63 | /* Handle */
64 | ::-webkit-scrollbar-thumb {
65 | background: rgba(178, 121, 216, 0.959);
66 | border-radius: 12px;
67 | }
68 |
69 | /* Handle on hover */
70 | ::-webkit-scrollbar-thumb:hover {
71 | background: rgba(222, 130, 235, 0.911);
72 | border-radius: 12px;
73 | }
74 |
75 | /* --------- */
76 | /* Navbar Section */
77 | /* --------- */
78 | .sticky {
79 | background-color: #1b1a2ea9 !important;
80 | transition: all 0.3s ease-out 0s !important;
81 | box-shadow: 0px 10px 10px 0px rgba(9, 5, 29, 0.171) !important;
82 | backdrop-filter: blur(15px) !important;
83 | }
84 |
85 | .navbar {
86 | position: fixed !important;
87 | transition: all 0.3s ease-out 0s !important;
88 | padding: 0.3rem 2rem !important;
89 | font-size: 1.2rem !important;
90 | }
91 |
92 | .navbar-toggler {
93 | position: relative !important;
94 | background-color: transparent !important;
95 | border-color: transparent !important;
96 | }
97 |
98 | .navbar-toggler span {
99 | display: block !important;
100 | background-color: #be50f4 !important;
101 | height: 4px !important;
102 | width: 27px !important;
103 | margin-top: 5px !important;
104 | margin-bottom: 5px !important;
105 | transform: rotate(0deg) !important;
106 | left: 0 !important;
107 | opacity: 1 !important;
108 | }
109 |
110 | .navbar-toggler:focus,
111 | .navbar-toggler:active {
112 | outline: 0 !important;
113 | }
114 |
115 | .navbar-toggler span:nth-child(1),
116 | .navbar-toggler span:nth-child(3) {
117 | transition: transform 0.35s ease-in-out !important;
118 | transition: transform 0.35s ease-in-out !important;
119 | }
120 |
121 | .navbar-toggler:not(.collapsed) span:nth-child(1) {
122 | position: absolute !important;
123 | left: 12px !important;
124 | top: 10px !important;
125 | transform: rotate(135deg) !important;
126 | opacity: 0.9 !important;
127 | }
128 |
129 | .navbar-toggler:not(.collapsed) span:nth-child(2) {
130 | height: 12px !important;
131 | visibility: hidden !important;
132 | background-color: transparent !important;
133 | }
134 |
135 | .navbar-toggler:not(.collapsed) span:nth-child(3) {
136 | position: absolute !important;
137 | left: 12px !important;
138 | top: 10px !important;
139 | transform: rotate(-135deg) !important;
140 | opacity: 0.9 !important;
141 | }
142 |
143 | @media (max-width: 767px) {
144 | .navbar {
145 | padding: 1rem 2rem !important;
146 | font-size: 1.4rem !important;
147 | background-color: #181a27 !important;
148 | }
149 | .navbar-nav .nav-item a::after {
150 | display: none !important;
151 | }
152 | }
153 | .navbar-brand {
154 | color: rgb(250, 250, 250) !important;
155 | }
156 |
157 |
158 |
159 | .navbar-nav .nav-link {
160 | color: white !important;
161 | padding-right: 1rem !important;
162 | padding-left: 1rem !important;
163 | }
164 |
165 | .nav-link {
166 | padding: 0.8rem 1rem !important;
167 | }
168 |
169 | @media (max-width: 767px) {
170 | .nav-link {
171 | padding: 0.7rem 1rem !important;
172 | }
173 | }
174 |
175 | .navbar-nav .nav-item {
176 | position: relative;
177 | margin-left: 20px;
178 | }
179 |
180 | .navbar-nav .nav-item a {
181 | font-weight: 400;
182 | transition: all 0.3s ease-out 0s;
183 | position: relative;
184 | z-index: 1;
185 | }
186 |
187 | .navbar-nav .nav-item a::after {
188 | content: "";
189 | position: relative;
190 | display: block;
191 | height: 5px;
192 | width: 0;
193 | border-radius: 16px;
194 | background: #c95bf5;
195 | bottom: 1px;
196 | left: 0;
197 | z-index: -1;
198 | transition: all 0.3s ease-out 0s;
199 | }
200 |
201 | .navbar-nav .nav-item a:hover::after {
202 | width: 100%;
203 | }
204 |
205 | /* --------- */
206 | /* Home section */
207 | /* --------- */
208 | .wave {
209 | animation-name: wave-animation; /* Refers to the name of your @keyframes element below */
210 | animation-duration: 2.1s; /* Change to speed up or slow down */
211 | animation-iteration-count: infinite; /* Never stop waving :) */
212 | transform-origin: 70% 70%; /* Pivot around the bottom-left palm */
213 | display: inline-block;
214 | }
215 |
216 | @keyframes wave-animation {
217 | 0% {
218 | transform: rotate(0deg);
219 | }
220 | 10% {
221 | transform: rotate(14deg);
222 | } /* The following five values can be played with to make the waving more or less extreme */
223 | 20% {
224 | transform: rotate(-8deg);
225 | }
226 | 30% {
227 | transform: rotate(14deg);
228 | }
229 | 40% {
230 | transform: rotate(-4deg);
231 | }
232 | 50% {
233 | transform: rotate(10deg);
234 | }
235 | 60% {
236 | transform: rotate(0deg);
237 | } /* Reset for the last half to pause */
238 | 100% {
239 | transform: rotate(0deg);
240 | }
241 | }
242 | #tsparticles {
243 | position: fixed !important;
244 | background-repeat: no-repeat !important;
245 | background-size: cover !important;
246 | width: 100%;
247 | height: 100%;
248 | }
249 |
250 | .home-header {
251 | padding-top: 80px !important;
252 | }
253 |
254 | .home-section {
255 | position: relative;
256 | z-index: -1;
257 | background-image: var(--image-gradient), url(./Assets/home-bg.jpg);
258 | background-position: top center;
259 | background-repeat: no-repeat;
260 | padding-bottom: 30px !important;
261 | padding-top: 30px !important;
262 | }
263 |
264 | .home-content {
265 | padding: 9rem 0 2rem !important;
266 | color: whitesmoke;
267 | text-align: left;
268 | }
269 |
270 | .heading {
271 | font-size: 2.4em !important;
272 | padding-left: 50px !important;
273 | }
274 |
275 | .heading-name {
276 | font-size: 2.5em !important;
277 | padding-left: 45px !important;
278 | }
279 |
280 | .main-name {
281 | color: #cd5ff8;
282 | }
283 |
284 | .Typewriter__wrapper {
285 | font-size: 2.2em !important;
286 | color: #be6adf !important;
287 | font-weight: 600 !important;
288 | }
289 | .Typewriter__cursor {
290 | font-size: 2.4em !important;
291 | color: #b562d6 !important;
292 | }
293 |
294 | @media (max-width: 767px) {
295 | .Typewriter__wrapper {
296 | font-size: 1.4em !important;
297 | font-weight: 500 !important;
298 | position: absolute !important;
299 | }
300 | .Typewriter__cursor {
301 | display: none !important;
302 | }
303 | }
304 |
305 | .myAvtar {
306 | justify-content: center !important;
307 | padding-top: 9em !important;
308 | }
309 |
310 | @media (max-width: 767px) {
311 | .myAvtar {
312 | padding-top: 2em !important;
313 | padding-bottom: 2em !important;
314 | }
315 | }
316 |
317 | .home-about-section {
318 | position: relative;
319 | padding-bottom: 70px !important;
320 | padding-top: 70px !important;
321 | }
322 |
323 | .home-about-description {
324 | color: white !important;
325 | padding-top: 100px !important;
326 | padding-bottom: 20px !important;
327 | text-align: center;
328 | }
329 |
330 | .home-about-body {
331 | padding-top: 50px;
332 | font-size: 1.2em !important;
333 | text-align: left;
334 | }
335 |
336 | .home-about-social {
337 | text-align: center !important;
338 | padding-top: 25px;
339 | color: white !important;
340 | }
341 |
342 | .home-about-social-links {
343 | justify-content: center !important;
344 | padding-top: 15px !important;
345 | display: inline-block !important;
346 | position: relative !important;
347 | padding-inline-start: 0 !important;
348 | }
349 |
350 | .home-social-icons {
351 | position: relative !important;
352 | display: inline-block !important;
353 | width: 40px !important;
354 | height: 40px !important;
355 | text-align: center !important;
356 | font-size: 1.2em !important;
357 | line-height: 2em !important;
358 | background: rgba(255, 255, 255, 0.972) !important;
359 | border-radius: 50% !important;
360 | transition: 0.5s !important;
361 | }
362 |
363 | .home-social-icons::before {
364 | content: "";
365 | position: absolute;
366 | top: 0;
367 | left: 0;
368 | width: 100%;
369 | height: 100%;
370 | border-radius: 50%;
371 | background: #68187a;
372 | transition: 0.5s;
373 | transform: scale(0.9);
374 | z-index: -1;
375 | }
376 |
377 | .home-social-icons:hover::before {
378 | transform: scale(1.1);
379 | box-shadow: 0 0 15px #801f95;
380 | }
381 |
382 | .home-social-icons:hover {
383 | color: #87209e;
384 | box-shadow: 0 0 5px #87209e;
385 | text-shadow: 0 0 2px #87209e;
386 | }
387 |
388 | .social-icons {
389 | display: inline-block !important;
390 | padding-right: 15px;
391 | padding-left: 15px;
392 | }
393 |
394 | .icon-colour {
395 | color: #700c86 !important;
396 | }
397 |
398 | /* --------- */
399 | /* Footer */
400 | /* --------- */
401 | .footer {
402 | background-color: rgb(10, 4, 22);
403 | bottom: 0 !important;
404 | padding-top: 10px !important;
405 | padding-bottom: 8px !important ;
406 | }
407 | .footer-copywright {
408 | text-align: center !important;
409 | }
410 |
411 | .footer-body {
412 | z-index: 1;
413 | text-align: center !important;
414 | }
415 |
416 | @media (max-width: 767px) {
417 | .footer-copywright {
418 | text-align: center !important;
419 | }
420 |
421 | .footer-body {
422 | text-align: center !important;
423 | }
424 | }
425 |
426 | .footer h3 {
427 | font-size: 1em;
428 | color: white !important;
429 | margin-top: 0.5em !important;
430 | margin-bottom: 0.5em !important;
431 | }
432 | .footer-icons {
433 | margin-top: 0.5em !important;
434 | margin-bottom: 0.5em !important;
435 | padding: 0 !important;
436 | }
437 |
438 | .blockquote-footer {
439 | color: #a588c0 !important;
440 | }
441 |
442 |
443 | /* --------- */
444 | /* About */
445 | /* --------- */
446 |
447 | .about-section {
448 | position: relative !important;
449 | padding-top: 150px !important;
450 | padding-bottom: 30px !important;
451 | background-image: var(--section-background-color) !important;
452 | color: white !important;
453 | }
454 |
455 | .tech-icons {
456 | font-size: 4.5em !important;
457 | margin: 15px !important;
458 | padding: 10px !important;
459 | opacity: 0.93 !important;
460 | border: 1.7px solid rgba(200, 137, 230, 0.637) !important;
461 | vertical-align: middle !important;
462 | text-align: center !important;
463 | border-radius: 5px !important;
464 | display: table !important;
465 | box-shadow: 4px 5px 4px 3px rgba(89, 4, 168, 0.137) !important;
466 | overflow: hidden !important;
467 | transition: all 0.4s ease 0s !important;
468 | }
469 |
470 | @media (max-width: 767px) {
471 | .tech-icons {
472 | margin: 10px !important;
473 | }
474 | }
475 |
476 | .tech-icons:hover {
477 | transform: scale(1.05) !important;
478 | overflow: hidden !important;
479 | border: 2.2px solid rgba(197, 115, 230, 0.883) !important;
480 | }
481 | .tech-icon-images {
482 | padding: 20px !important;
483 | line-height: 1.6 !important;
484 | }
485 |
486 | .quote-card-view {
487 | border: none !important;
488 | color: white !important;
489 | background-color: transparent !important;
490 | }
491 |
492 | .about-activity {
493 | list-style: none !important;
494 | text-align: left !important;
495 | padding-left: 1px !important;
496 | }
497 |
498 | @media (max-width: 767px) {
499 | .about-img {
500 | padding-top: 0 !important;
501 | }
502 | }
503 |
504 |
505 |
506 |
--------------------------------------------------------------------------------
/src/Assets/avatar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | mf-avatar
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/src/Assets/home-main.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------