├── .eslintrc.cjs
├── .gitignore
├── .prettierrc
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── public
├── My-logo4.ico
├── manifest.json
└── robots.txt
├── src
├── App.css
├── App.jsx
├── components
│ ├── Carousel
│ │ ├── Carousel.jsx
│ │ └── Carousel.module.css
│ ├── Education
│ │ ├── Education.jsx
│ │ └── Education.module.css
│ ├── Projects
│ │ ├── Projects.jsx
│ │ └── Projects.module.css
│ ├── about
│ │ ├── About.jsx
│ │ └── About.module.css
│ ├── images
│ │ ├── Hello.jpg
│ │ ├── Pencil.jpg
│ │ ├── bookheap.png
│ │ ├── chatGPT.png
│ │ ├── chess.png
│ │ ├── courseApp.png
│ │ ├── definition.png
│ │ ├── frontend-challenges.png
│ │ ├── frontenddev.png
│ │ ├── github.png
│ │ ├── gmail.png
│ │ ├── instagram.png
│ │ ├── jumpstart.png
│ │ ├── linkedin.png
│ │ ├── memes.png
│ │ ├── monorepo.png
│ │ ├── profilee.png
│ │ ├── sam.png
│ │ ├── shopping-app.png
│ │ ├── solanaaid.png
│ │ ├── superhero.png
│ │ ├── travel-log.png
│ │ ├── twitterx.png
│ │ └── youtube.png
│ ├── sidebar
│ │ ├── Sidebar.css
│ │ └── Sidebar.jsx
│ └── skills
│ │ ├── Interest.jsx
│ │ └── Interest.module.css
├── main.jsx
└── serviceWorker.js
└── vite.config.js
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: { browser: true, es2020: true },
4 | extends: [
5 | 'eslint:recommended',
6 | 'plugin:react/recommended',
7 | 'plugin:react/jsx-runtime',
8 | 'plugin:react-hooks/recommended',
9 | ],
10 | ignorePatterns: ['dist', '.eslintrc.cjs'],
11 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
12 | settings: { react: { version: '18.2' } },
13 | plugins: ['react-refresh'],
14 | rules: {
15 | 'react/jsx-no-target-blank': 'off',
16 | 'react-refresh/only-export-components': [
17 | 'warn',
18 | { allowConstantExport: true },
19 | ],
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "jsxSingleQuote": true,
4 | "printWidth": 100,
5 | "trailingComma": "none",
6 | "tabWidth": 2,
7 | "semi": true
8 | }
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React-Portfolio made with love and with beautiful UI.
2 |
3 | Live Preview at : https://myself.now.sh/
4 |
5 | ### Hi there 👋 I am Sachin, a full stack web and app developer. I love to build new things that excites me a lot.
6 |
7 | # buy-me-a-coffee
8 |
9 | Liked some of my work? Buy me a coffee (or more likely a beer) as it motivates me to build new things 😊
10 |
11 |
12 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
19 |
22 |
25 |
26 | Sachin Mittal
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sachin-mittal",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "animate.css": "^4.1.1",
14 | "framer-motion": "^11.0.3",
15 | "gh-pages": "^6.1.1",
16 | "react": "^18.2.0",
17 | "react-dom": "^18.2.0",
18 | "react-icons": "^5.0.1",
19 | "react-parallax-tilt": "^1.7.210",
20 | "react-responsive-carousel": "^3.2.23",
21 | "react-router": "^6.22.0",
22 | "react-router-dom": "^6.22.0",
23 | "react-router-hash-link": "^2.4.3"
24 | },
25 | "devDependencies": {
26 | "@types/react": "^18.2.55",
27 | "@types/react-dom": "^18.2.19",
28 | "@vitejs/plugin-react": "^4.2.1",
29 | "eslint": "^8.56.0",
30 | "eslint-plugin-react": "^7.33.2",
31 | "eslint-plugin-react-hooks": "^4.6.0",
32 | "eslint-plugin-react-refresh": "^0.4.5",
33 | "vite": "^5.1.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/public/My-logo4.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/public/My-logo4.ico
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Sachin Mittal portfolio",
3 | "name": "Sachin Mittal portfolio",
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 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Quicksand&display=swap');
2 | body {
3 | margin: 0;
4 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
5 | 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
12 | }
13 |
14 | .App {
15 | height: 710px;
16 | display: grid;
17 | grid-template-columns: 1fr 4fr;
18 | font-family: 'Quicksand', Arial, sans-serif;
19 | line-height: 1.3em;
20 | letter-spacing: 0.04em;
21 | }
22 | .side {
23 | width: 300px;
24 | }
25 | .main {
26 | overflow: scroll;
27 | overflow-x: hidden;
28 | }
29 |
30 | p {
31 | color: rgba(0, 0, 0, 0.7);
32 | font-weight: normal;
33 | }
34 |
35 | /*//////////////// Media Query/////////////////*/
36 |
37 | @media (max-width: 992px) {
38 | .App {
39 | height: 100%;
40 | display: flex;
41 | flex-direction: column;
42 | }
43 | h2 {
44 | font-weight: bold;
45 | }
46 | p {
47 | font-weight: bolder;
48 | }
49 | .main {
50 | margin-top: -40px;
51 | overflow-y: hidden;
52 | }
53 | }
54 |
55 | @media (max-width: 769px) {
56 | .App {
57 | display: flex;
58 | flex-direction: column;
59 | }
60 | .main {
61 | overflow: auto;
62 | overflow-x: hidden;
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import './App.css';
3 | import { BrowserRouter as Router } from 'react-router-dom';
4 | import Sidebar from './components/sidebar/Sidebar.jsx';
5 | import About from './components/about/About.jsx';
6 | import Education from './components/Education/Education.jsx';
7 | import Interest from './components/skills/Interest.jsx';
8 | import Projects from './components/Projects/Projects.jsx';
9 | import CarouselImages from './components/Carousel/Carousel.jsx';
10 |
11 | class App extends Component {
12 | render() {
13 | return (
14 |
15 |
16 |
17 |
18 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 | }
44 |
45 | export default App;
46 |
--------------------------------------------------------------------------------
/src/components/Carousel/Carousel.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Carousel } from 'react-responsive-carousel';
3 | import classes from './Carousel.module.css';
4 | import 'react-responsive-carousel/lib/styles/carousel.min.css';
5 | import 'animate.css/animate.min.css';
6 | import { GoProject } from 'react-icons/go';
7 | import { FaArrowCircleDown } from 'react-icons/fa';
8 | import Hello from '../images/Hello.jpg';
9 | import Pencil from '../images/Pencil.jpg';
10 | import { motion } from 'framer-motion';
11 |
12 | export default function CarouselImage() {
13 | return (
14 |
15 |
27 |
28 |
29 |
48 |
49 |
50 |
51 |
71 |
72 |
73 |
74 | );
75 | }
76 |
--------------------------------------------------------------------------------
/src/components/Carousel/Carousel.module.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Permanent+Marker&display=swap');
2 | .image {
3 | height: 734px;
4 | }
5 |
6 | .h1 {
7 | margin: 50px;
8 | font-size: 2rem;
9 | font-family: 'Permanent Marker', cursive;
10 | animation-name: text;
11 | animation-duration: 1s;
12 | animation-timing-function: ease-out;
13 | position: relative;
14 | top: -270px;
15 | left: 10px;
16 | color: rgba(255, 255, 255, 0.8);
17 | }
18 |
19 | .h2 {
20 | margin: 50px;
21 | font-size: 2rem;
22 | font-family: 'Permanent Marker', cursive;
23 | animation-name: text;
24 | animation-duration: 1s;
25 | animation-timing-function: ease-out;
26 | position: relative;
27 | top: -470px;
28 | left: -20px;
29 | text-align: right;
30 | color: black;
31 | }
32 |
33 | .h1 a {
34 | color: rgba(255, 255, 255, 0.8);
35 | width: 170px;
36 | margin: 50px;
37 | font-size: 1.1rem;
38 | font-family: 'Permanent Marker', cursive;
39 | animation-name: text;
40 | animation-duration: 1s;
41 | animation-timing-function: ease-out;
42 | position: relative;
43 | top: 20px;
44 | left: -7px;
45 | color: rgba(255, 255, 255, 0.8);
46 | padding: 11px 24px;
47 | box-shadow: 0px 10px 30px 0px rgba(21, 10, 82, 0.35);
48 | border-radius: 22px;
49 | background-image: linear-gradient(to left, rgba(75, 19, 79, 0.8), rgba(201, 75, 75, 0.6));
50 | }
51 | .h2 a {
52 | color: rgba(255, 255, 255, 0.8);
53 | width: 170px;
54 | margin: 50px;
55 | font-size: 1.1rem;
56 | font-family: 'Permanent Marker', cursive;
57 | animation-name: text;
58 | animation-duration: 1s;
59 | animation-timing-function: ease-out;
60 | position: relative;
61 | top: 20px;
62 | left: -7px;
63 | color: rgba(255, 255, 255, 0.8);
64 | padding: 11px 24px;
65 | box-shadow: 0px 10px 30px 0px rgba(21, 10, 82, 0.35);
66 | border-radius: 22px;
67 | background-image: linear-gradient(to left, rgba(75, 19, 79, 0.8), rgba(201, 75, 75, 0.6));
68 | }
69 | .secondButton {
70 | margin-top: 30px;
71 | }
72 | @keyframes text {
73 | from {
74 | transform: translateY(20px);
75 | opacity: 0.2;
76 | }
77 | to {
78 | opacity: 1;
79 | }
80 | }
81 |
82 | @media (max-width: 400px) {
83 | .image {
84 | height: 600px;
85 | }
86 | .h1 a {
87 | width: 120px;
88 | font-size: 0.8rem;
89 | margin: 20px;
90 | padding: 9px 18px;
91 | }
92 | .h2 a {
93 | width: 120px;
94 | font-size: 0.8rem;
95 | margin: 20px;
96 | padding: 9px 18px;
97 | position: relative;
98 | top: 20px;
99 | left: 17px;
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/components/Education/Education.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import classes from './Education.module.css';
3 | // import ScrollAnimation from 'react-animate-on-scroll';
4 | import 'animate.css/animate.min.css';
5 | import { MdSchool } from 'react-icons/md';
6 | import { MdWork } from 'react-icons/md';
7 | import { FaSchool } from 'react-icons/fa';
8 |
9 | class Education extends Component {
10 | render() {
11 | return (
12 |
13 | {/*
*/}
20 | MY JOURNEY
21 |
22 |
23 |
24 |
25 |
26 | {/*
*/}
33 |
34 |
35 |
36 |
37 |
38 |
Experience
39 |
40 |
- Graphy (Unacademy Group) (11/2024 - Present)
41 |
42 |
43 | Quickly onboarded to ongoing projects, gaining expertise in the
44 | company’s tech stack and understanding the product architecture.
45 |
46 |
47 | Contributed to socket chat feature enhancements and bug fixes, ensuring
48 | timely delivery of sprint objectives.
49 |
50 |
51 |
52 |
53 |
- Springworks (7/2021 - 10/2024)
54 |
55 |
56 | Developed multiple core features, improving platform engagement by 20%,
57 | using React and server-caching queries.{' '}
58 |
59 |
60 | Led multiple end-to-end projects (Springverify, SpringverifyDigital,
61 | Ex-Emp), with two projects built from the ground up, ensuring timely
62 | delivery and adherence to quality standards. Conducted detailed code
63 | reviews and provided suggestions for improvements. Integrated AI
64 | features to enhance UX.
65 |
66 |
67 |
68 |
69 |
70 | {/* */}
71 | {/*
*/}
78 |
79 |
80 |
81 |
82 |
83 |
84 | Undergraduation at SLIET 2017-2021
85 |
86 |
87 | I completed my undergraduation in CSE (Computer Science and Engineering)
88 | from
SLIET with overall 82.71%.
89 |
90 |
91 |
92 | {/* */}
93 | {/*
*/}
100 |
101 |
102 |
103 |
104 |
105 |
106 | Higher Education 2014-2016
107 |
108 |
109 | I have completed my higher education from HKIS with major subjects as
110 | Physics,Chemistry & Maths with 85% merit in CBSE board.{' '}
111 |
112 |
113 |
114 | {/* */}
115 |
116 | {/*
*/}
123 |
124 |
125 |
126 |
127 |
128 |
Internship
129 |
Completed one month Internship in React Js with Internity Foundation
130 |
131 |
134 |
135 | {/* */}
136 |
137 |
138 |
139 |
140 |
141 | {/* */}
142 |
143 | );
144 | }
145 | }
146 |
147 | export default Education;
148 |
--------------------------------------------------------------------------------
/src/components/Education/Education.module.css:
--------------------------------------------------------------------------------
1 | .box {
2 | margin: 15px;
3 | margin-top: 50px;
4 | }
5 | .head {
6 | display: inline-block;
7 | padding: 0px 12px;
8 | color: rgb(85, 85, 85);
9 | margin-bottom: 20px;
10 | margin-left: 30px;
11 | letter-spacing: 5px;
12 | font-size: 11px;
13 | }
14 |
15 | .container {
16 | width: 100%;
17 | margin-left: 30px;
18 | display: block;
19 | margin-top: 30px;
20 | border-radius: 3px;
21 | padding: 0 42px 0 10px;
22 | margin-left: 30px;
23 | /* background-color: red; */
24 | }
25 | .row:before {
26 | content: ' ';
27 | display: table;
28 | }
29 | .row:after {
30 | clear: both;
31 | }
32 | .row_md_12 {
33 | display: flex;
34 | flex-direction: column;
35 | }
36 | .timeline_centered {
37 | z-index: 1;
38 | position: relative;
39 | margin-bottom: 30px;
40 | }
41 | .timeline_centered:before {
42 | content: '';
43 | position: absolute;
44 | display: block;
45 | width: 4px;
46 | background: #f3f2f7;
47 | top: 20px;
48 | z-index: -1;
49 | bottom: 20px;
50 | margin-left: 19px;
51 | }
52 | .timeline_entry {
53 | margin-bottom: 10px;
54 | clear: both;
55 | }
56 | .timeline_icon {
57 | display: block;
58 | width: 40px;
59 | font-size: 20px;
60 | height: 40px;
61 | background-color: #FFD09B;
62 | -webkit-border-radius: 50%;
63 | -moz-border-radius: 50%;
64 | -ms-border-radius: 50%;
65 | border-radius: 50%;
66 | text-align: center;
67 | -moz-box-shadow: 0 0 0 5px #f2f3f7;
68 | -webkit-box-shadow: 0 0 0 5px #f2f3f7;
69 | box-shadow: 0 0 0 5px #f2f3f7;
70 | line-height: 35px;
71 | float: left;
72 | }
73 | .timeline_icon_2 {
74 | background: #F7C5CC;
75 | }
76 | .timeline_icon_5 {
77 | background: #A1D6B2;
78 | }
79 |
80 | .timeline_icon_4 {
81 | background: #8AAAE5;
82 | }
83 |
84 | .timeline_entry_inner {
85 | position: relative;
86 | top: 0px;
87 | margin-left: 11.5px;
88 | }
89 | .timeline_icon_3 {
90 | display: block;
91 | width: 20px;
92 | font-size: 20px;
93 | height: 20px;
94 | background: #fff;
95 | -webkit-border-radius: 50%;
96 | -moz-border-radius: 50%;
97 | -ms-border-radius: 50%;
98 | border-radius: 50%;
99 | text-align: center;
100 | -moz-box-shadow: 0 0 0 5px #f2f3f7;
101 | -webkit-box-shadow: 0 0 0 5px #f2f3f7;
102 | box-shadow: 0 0 0 5px #f2f3f7;
103 | line-height: 35px;
104 | float: left;
105 | }
106 |
107 | .label {
108 | position: relative;
109 | background: #f2f3f7;
110 | padding: 1.5em;
111 | margin-left: 60px;
112 | }
113 | .label h2 {
114 | font-size: 20px;
115 | font-family: 'Quicksand', Arial, sans-serif;
116 | font-weight: 500;
117 | margin: 0 0 10px 0;
118 | color: #000;
119 | }
120 | .label h2 span {
121 | -webkit-opacity: 0.4;
122 | -moz-opacity: 0.4;
123 | opacity: 0.4;
124 | -ms-filter: alpha(opacity=40);
125 | filter: alpha(opacity=40);
126 | font-size: 16px;
127 | }
128 | .subHeading{
129 | font-size: 16px;
130 | font-weight: 600;
131 | }
132 | .paraWithSubheading {
133 | margin-top: 0.8em;
134 | margin-bottom: 1.8em;
135 | font-size: 15px !important;
136 | }
137 |
138 | .points{
139 | margin-top: 8px;
140 | }
141 |
142 |
143 | .description {
144 | font-size: 15px;
145 | margin-bottom:5px ;
146 | }
147 |
148 | p > a {
149 | text-decoration: none;
150 | color: inherit;
151 | }
152 |
153 | a:hover {
154 | color: rgb(121, 189, 252);
155 | text-decoration: none;
156 | }
157 |
158 | @keyframes text {
159 | from {
160 | transform: translateX(-30px);
161 | opacity: 0.1;
162 | }
163 | }
164 |
165 | @media (max-width: 992px) {
166 | .box {
167 | text-align: center;
168 | }
169 | }
170 |
171 | @media (max-width: 440px) {
172 | .container {
173 | padding: 0 42px 0 0;
174 | }
175 | }
176 |
177 | .flexTitle{
178 | display: flex;
179 | align-items: center;
180 | justify-content: space-between;
181 | }
--------------------------------------------------------------------------------
/src/components/Projects/Projects.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import 'animate.css/animate.min.css';
3 | import Tilt from 'react-parallax-tilt';
4 | // import ScrollAnimation from 'react-animate-on-scroll';
5 |
6 | import classes from './Projects.module.css';
7 | import bookheap from '../images/bookheap.png';
8 | import chess from '../images/chess.png';
9 | import shopping from '../images/shopping-app.png';
10 | import travel from '../images/travel-log.png';
11 | import definition from '../images/definition.png';
12 | import memes from '../images/memes.png';
13 | import superhero from '../images/superhero.png';
14 | import monorepo from '../images/monorepo.png';
15 | import profilee from '../images/profilee.png';
16 | import courseApp from '../images/courseApp.png';
17 | import chatGPT from '../images/chatGPT.png';
18 | import challenges from '../images/frontend-challenges.png';
19 | import github from '../images/github.png';
20 | import frontenddev from '../images/frontenddev.png';
21 | import solanaaid from '../images/solanaaid.png';
22 | import jumpstart from '../images/jumpstart.png';
23 |
24 | // Web projects
25 | const webItem = [
26 | {
27 | link: 'https://www.frontenddev.site/',
28 | title: 'Frontend Dev',
29 | techStack: 'Useful repo for most common frontend challenges',
30 | desc: 'Technology used: React Js, Mantine UI, Context API',
31 | image: frontenddev,
32 | color: '#E5E483',
33 | githubLink: 'https://github.com/mittalsam98/frontenddev'
34 | },
35 | {
36 | link: 'https://www.profilee.site/',
37 | title: 'Profilee - An OS link in bio',
38 | techStack: 'Tech Stack: Next JS, Tailwind, Typescript, Prisma, AWS S3',
39 | desc: 'Profilee is an open source profile link bio page builder',
40 | image: profilee,
41 | color: '#0FFFFF',
42 | githubLink: 'https://github.com/mittalsam98/profilee'
43 | },
44 | {
45 | link: 'https://www.saasjumpstart.live/',
46 | title: 'Sass Boilerplate',
47 | techStack:
48 | 'Technology used: Typescript, Nextjs, Prisma, Tailwind CSS, AWS S3, React Drag and Drop, Zod',
49 | desc: 'Next.js boilerplate setup for the repetitive work. It comes with authentication with email verification, stripe payment integration, customizable components, email preview, and much more.',
50 | image: jumpstart,
51 | color: '#D2E0FB'
52 | // githubLink: 'https://github.com/mittalsam98'
53 | },
54 | {
55 | link: 'https://chess-web-online.netlify.app/',
56 | title: 'Realtime Online Chess',
57 | techStack: 'Tech Stack- ReactJs, NodeJS, Express, Socket.io.',
58 | desc: 'Play real time chess with your friends online by sharing a link.',
59 | image: chess,
60 | color: '#d5ebda',
61 | githubLink:
62 | 'https://github.com/mittalsam98?tab=repositories&q=chess&type=&language=javascript&sort=stargazers'
63 | },
64 | {
65 | link: 'https://solanaaid.now.sh/',
66 | title: 'Solana Aid',
67 | techStack: 'Tech Stack- Web3, React Js, Tailwind',
68 | desc: 'Solana web tools',
69 | image: solanaaid,
70 | color: '#f3e4f1',
71 | githubLink: 'https://github.com/mittalsam98/solanaaid'
72 | },
73 | {
74 | link: 'https://www.youtube.com/watch?v=Dlxz9RnltMA&ab_channel=SachinMittal',
75 | title: 'E-Commerce app',
76 | techStack: 'Tech Stack: Monorepo, Typescript, MERN',
77 | desc: 'It is a e-commerce app built in a MERN stack using Monorepo. This is 100% typescript.',
78 | image: monorepo,
79 | color: '#FEA1A1',
80 | githubLink: 'https://github.com/mittalsam98/E-commerce-app'
81 | },
82 | {
83 | link: 'https://courses-portal.netlify.app/',
84 | title: 'Course Selling App',
85 | techStack: 'Tech Stack: React JS, Tailwind CSS, Node JS, MongoDB, Razorpay for payments',
86 | desc: 'Separate User and Admin panels, User can purchase courses',
87 | image: courseApp,
88 | color: '#C1A4AA',
89 | githubLink: 'https://github.com/mittalsam98/Course-Selling-App'
90 | },
91 |
92 | {
93 | link: 'https://travel-log-frontend-two.vercel.app/',
94 | title: 'Travel Log',
95 | techStack: 'Tech Stack- MERN Stack, Mapbox',
96 | desc: 'A full stack application to store / list places you have visited. You can log every visit on map.',
97 | image: travel,
98 | color: '#EEA47F',
99 | githubLink:
100 | 'https://github.com/mittalsam98?tab=repositories&q=travel&type=&language=javascript&sort=stargazers'
101 | },
102 | {
103 | link: 'https://chit-chat-gpt-app.vercel.app/',
104 | title: 'ChatGPT clone',
105 | techStack:
106 | 'Tech Stack: Next.js 13, Tailwind CSS, Prisma, ZOD for validation, Recoil for state managements, TypeScript, OpenAI',
107 | desc: 'Chat GPT clone with signup and signin, previous chat save functionality',
108 | image: chatGPT,
109 | color: '#FFA6C9',
110 | githubLink: 'https://github.com/mittalsam98/chat-gpt-clone'
111 | },
112 | {
113 | link: 'https://bookheap-app.netlify.app/',
114 | title: 'Online Book Store',
115 | techStack: 'Tech Stack: MERN Stack',
116 | desc: 'It is a book selling web app built in a MERN stack . You can sell books by uploading images and can also see what others are selling.',
117 | image: bookheap,
118 | color: '#f3e4f1',
119 | githubLink:
120 | 'https://github.com/mittalsam98?tab=repositories&q=bookheap&type=&language=javascript&sort=stargazers'
121 | }
122 | ];
123 |
124 | const androidAppItems = [
125 | {
126 | link: 'https://play.google.com/store/apps/details?id=com.thesachin.your_dictionary',
127 | title: 'Definition Finder',
128 | techStack: 'Tech Stack: Flutter',
129 | desc: 'Definition Finder is absolutely free online dictionary with every word you look up. Millions of definitions from the most trusted source.',
130 | image: definition,
131 | color: '#CBD18F',
132 | githubLink:
133 | 'https://github.com/mittalsam98?tab=repositories&q=&type=&language=dart&sort=stargazers'
134 | },
135 | {
136 | link: 'https://play.google.com/store/apps/details?id=com.thesachin.superheroes',
137 | title: 'My Superhero',
138 | techStack: 'Tech Stack- Flutter',
139 | desc: 'My SuperHero app provides all SuperHeroes and Villians data like powerstats, full name from all the universes.',
140 | image: superhero,
141 | color: '#d0f4de',
142 | githubLink: 'https://github.com/mittalsam98/super_hero_app'
143 | },
144 | {
145 | link: 'https://play.google.com/store/apps/details?id=com.thesachin.memestemplate',
146 | title: 'Indian Memes Templates',
147 | techStack: 'Tech Stack- Flutter',
148 | desc: ' Indian meme templates - Memeशाला contains a wide range of Indian meme templates including Bollywood, political, Indian shows. You can edit and create memes too.',
149 | image: memes,
150 | color: '#e9c46a',
151 | githubLink:
152 | 'https://github.com/mittalsam98?tab=repositories&q=&type=&language=dart&sort=stargazers'
153 | }
154 | ];
155 |
156 | export default function Projects() {
157 | const getProjectCard = (cardItem) => {
158 | return (
159 |
160 |
161 |
162 |
163 |
164 | {
166 | if (cardItem?.githubLink) window.open(cardItem?.githubLink, '_blank');
167 | }}
168 | className={classes.card__title__container}
169 | >
170 |
{cardItem.title}
171 | {cardItem?.githubLink &&
}
172 |
173 |
174 |
175 | );
176 | };
177 |
178 | return (
179 |
180 | {/*
*/}
187 | MY WORK
188 | WEB APP PROJECTS
189 |
190 | {webItem.map((item) => {
191 | return getProjectCard(item);
192 | })}
193 |
194 | ANDROID APP PROJECTS
195 |
196 | {androidAppItems.map((item) => {
197 | return getProjectCard(item);
198 | })}
199 |
200 | {/* */}
201 |
202 | );
203 | }
204 |
--------------------------------------------------------------------------------
/src/components/Projects/Projects.module.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Permanent+Marker&display=swap');
2 |
3 | .box {
4 | margin: 15px;
5 | margin-top: 40px;
6 | }
7 | .head {
8 | display: inline-block;
9 | padding: 0px 12px;
10 | color: rgb(85, 85, 85);
11 | margin-bottom: 20px;
12 | margin-left: 30px;
13 | letter-spacing: 5px;
14 | font-size: 11px;
15 | }
16 |
17 | .heading {
18 | padding: 0px 12px;
19 | font-size: 18px;
20 | font-weight: 700;
21 | margin-left: 30px;
22 | text-transform: uppercase;
23 | letter-spacing: 5px;
24 | line-height: 1.8;
25 | }
26 | .cards {
27 | display: grid;
28 | grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
29 | gap: 2rem;
30 | margin: 4rem 2vw;
31 | padding: 0;
32 | list-style-type: none;
33 | }
34 |
35 | .card {
36 | display: block;
37 | border-radius: 21px 21px 0px 0px;
38 | overflow: hidden;
39 | box-shadow: rgba(0, 0, 0, 0.25) 2.4px 2.4px 3.2px;
40 | }
41 |
42 | .card__image {
43 | width: 100%;
44 | min-height: 300px;
45 | }
46 |
47 | .card__title__container {
48 | display: flex;
49 | justify-content: space-around;
50 | align-items: center;
51 | }
52 |
53 | .card__title {
54 | font-size: 1rem;
55 | margin: -2px 0 0.3em;
56 | color: #000;
57 | padding: 14px 0px 5px 0px;
58 | text-align: center;
59 | font-weight: bold;
60 | cursor: pointer;
61 | }
62 |
63 | .card__title__img {
64 | height: 20px;
65 | cursor: pointer;
66 | }
67 |
68 | @media (max-width: 450px) {
69 | .cards {
70 | grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/components/about/About.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import classes from './About.module.css';
3 | // import ScrollAnimation from 'react-animate-on-scroll';
4 | import 'animate.css/animate.min.css';
5 |
6 | class About extends Component {
7 | render() {
8 | return (
9 |
10 | {/*
*/}
17 | ABOUT ME
18 | Who Am I?
19 |
20 |
21 | Hi! My name is SACHIN MITTAL . I am a passionate developer having experience in{' '}
22 | Frontend development & Mobile App development complemented by backend expertise and I am much interested in developing new things
23 | which excite me a lot. :)
24 |
25 |
26 | I love exploring new technologies and being a practitioner, I like to stay on top of
27 | latest trends. I try to leave every line of code I write more readable, accessible, and
28 | modular. My problem-solving mindset and active GitHub profile showcase my commitment to
29 | innovative and collaborative coding.
30 |
31 |
32 | {/* */}
33 |
34 | );
35 | }
36 | }
37 |
38 | export default About;
39 |
--------------------------------------------------------------------------------
/src/components/about/About.module.css:
--------------------------------------------------------------------------------
1 | .box {
2 | margin: 15px;
3 | margin-top: 40px;
4 | }
5 | .About {
6 | margin-left: 20px;
7 | padding: 20px;
8 | }
9 |
10 | .br {
11 | margin-top: 20px;
12 | }
13 |
14 | .head {
15 | display: inline-block;
16 | padding: 0px 12px;
17 | color: rgb(85, 85, 85);
18 | margin-bottom: 20px;
19 | margin-left: 30px;
20 | letter-spacing: 5px;
21 | font-size: 11px;
22 | }
23 |
24 | .heading {
25 | padding: 0px 12px;
26 | font-size: 18px;
27 | font-weight: 700;
28 | margin-left: 30px;
29 | text-transform: uppercase;
30 | letter-spacing: 5px;
31 | line-height: 1.8;
32 | }
33 | .link {
34 | color: #333333;
35 | }
36 |
37 | @keyframes text {
38 | from {
39 | transform: translateX(-30px);
40 | opacity: 0.5;
41 | }
42 | }
43 |
44 | @media (max-width: 992px) {
45 | .box {
46 | text-align: center;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/components/images/Hello.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/Hello.jpg
--------------------------------------------------------------------------------
/src/components/images/Pencil.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/Pencil.jpg
--------------------------------------------------------------------------------
/src/components/images/bookheap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/bookheap.png
--------------------------------------------------------------------------------
/src/components/images/chatGPT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/chatGPT.png
--------------------------------------------------------------------------------
/src/components/images/chess.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/chess.png
--------------------------------------------------------------------------------
/src/components/images/courseApp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/courseApp.png
--------------------------------------------------------------------------------
/src/components/images/definition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/definition.png
--------------------------------------------------------------------------------
/src/components/images/frontend-challenges.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/frontend-challenges.png
--------------------------------------------------------------------------------
/src/components/images/frontenddev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/frontenddev.png
--------------------------------------------------------------------------------
/src/components/images/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/github.png
--------------------------------------------------------------------------------
/src/components/images/gmail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/gmail.png
--------------------------------------------------------------------------------
/src/components/images/instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/instagram.png
--------------------------------------------------------------------------------
/src/components/images/jumpstart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/jumpstart.png
--------------------------------------------------------------------------------
/src/components/images/linkedin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/linkedin.png
--------------------------------------------------------------------------------
/src/components/images/memes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/memes.png
--------------------------------------------------------------------------------
/src/components/images/monorepo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/monorepo.png
--------------------------------------------------------------------------------
/src/components/images/profilee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/profilee.png
--------------------------------------------------------------------------------
/src/components/images/sam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/sam.png
--------------------------------------------------------------------------------
/src/components/images/shopping-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/shopping-app.png
--------------------------------------------------------------------------------
/src/components/images/solanaaid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/solanaaid.png
--------------------------------------------------------------------------------
/src/components/images/superhero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/superhero.png
--------------------------------------------------------------------------------
/src/components/images/travel-log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/travel-log.png
--------------------------------------------------------------------------------
/src/components/images/twitterx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/twitterx.png
--------------------------------------------------------------------------------
/src/components/images/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mittalsam98/react-portfolio/79e3efb6b0fecf26448f8217c4ebf2d2f6982706/src/components/images/youtube.png
--------------------------------------------------------------------------------
/src/components/sidebar/Sidebar.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Aclonica&display=swap');
2 | @import url('https://fonts.googleapis.com/css?family=Comfortaa:400&display=swap');
3 | .sidebar {
4 | height: 100vh;
5 | width: 100%;
6 | background-color: #f2f3f7;
7 | overflow-y: scroll;
8 | text-align: center;
9 | padding-top: 40px;
10 | }
11 | .sidebar > h1 {
12 | padding-top: 20px;
13 | text-align: center;
14 | }
15 | .topHashtag {
16 | color: #000;
17 | font-weight: bold;
18 | }
19 |
20 | .h1_links {
21 | text-decoration: none;
22 | font-family: 'Aclonica', sans-serif;
23 | color: #000;
24 | font-size: 32px;
25 | }
26 | .h1_links:hover {
27 | color: #333;
28 | }
29 | .my-img {
30 | width: 120px;
31 | height: 120px;
32 | border-radius: 50%;
33 | margin-top: 10px;
34 | }
35 | .sidebar > p {
36 | margin-top: 20px;
37 | text-align: center;
38 | }
39 |
40 | .sidebar-nav {
41 | margin-left: -30px;
42 | margin-top: 30px;
43 | text-align: center;
44 | }
45 | .sidebar-nav-items {
46 | margin-bottom: 15px;
47 | }
48 | ul {
49 | list-style: none;
50 | }
51 |
52 | .links {
53 | background-image: linear-gradient(to right, #000, #000, #000);
54 | background-size: 200% 100%;
55 | background-position: -100%;
56 | display: inline-block;
57 | padding: 5px 0;
58 | position: relative;
59 | text-decoration: none;
60 | font-family: 'Comfortaa', cursive;
61 | font-size: larger;
62 | line-height: 1.4rem;
63 | -webkit-background-clip: text;
64 | -webkit-text-fill-color: transparent;
65 | transition: all 0.3s ease-in-out;
66 | }
67 |
68 | .links:before {
69 | content: '';
70 | background: linear-gradient(
71 | to right,
72 | rgba(255, 0, 0, 1),
73 | rgba(255, 0, 180, 1),
74 | rgba(0, 100, 200, 1)
75 | );
76 | display: block;
77 | position: absolute;
78 | bottom: -3px;
79 | left: 0;
80 | width: 0;
81 | height: 3px;
82 | transition: all 0.3s ease-in-out;
83 | }
84 |
85 | .links:hover {
86 | background-position: 0;
87 | background-image: linear-gradient(
88 | to right,
89 | rgba(255, 0, 0, 1),
90 | rgba(255, 0, 180, 1),
91 | rgba(0, 100, 200, 1)
92 | );
93 | }
94 |
95 | .links:hover::before {
96 | width: 100%;
97 | }
98 |
99 | .icon-img {
100 | height: 28px;
101 | margin-bottom: 15px;
102 | border-radius: 5px;
103 | }
104 | .icon-img:hover {
105 | scale: 1.2;
106 | cursor: pointer;
107 | }
108 | .heart {
109 | color: red;
110 | }
111 |
112 | /*//////////////media ////////////////////*/
113 | @media (max-width: 980px) {
114 | .sidebar {
115 | width: 106vw;
116 | }
117 | .h1_links {
118 | font-size: 29px;
119 | }
120 | }
121 |
122 | @media (max-width: 768px) {
123 | .sidebar {
124 | width: 106vw;
125 | }
126 | .h1_links {
127 | font-size: 28px;
128 | }
129 | .links {
130 | display: none;
131 | }
132 |
133 | .gmail {
134 | font-size: 16px;
135 | font-weight: normal;
136 | }
137 | }
138 |
139 | @media (max-width: 370px) {
140 | .sidebar {
141 | width: 106vw;
142 | }
143 | .h1_links {
144 | font-size: 24px;
145 | }
146 | .links {
147 | font-size: 16px;
148 | }
149 | }
150 |
151 | .templateTextBtn {
152 | background-color: #238636;
153 | color: white;
154 | border: none;
155 | font-size: 15px;
156 | padding: 3px 20px;
157 | font-weight: bold;
158 | margin: 10px 0px;
159 | border-radius: 8px;
160 | }
161 |
--------------------------------------------------------------------------------
/src/components/sidebar/Sidebar.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import './Sidebar.css';
3 | import { HashLink as Link } from 'react-router-hash-link';
4 | import { motion } from 'framer-motion';
5 |
6 | import logo from '../images/sam.png';
7 | import github from '../images/github.png';
8 | import instagram from '../images/instagram.png';
9 | import twitter from '../images/twitterx.png';
10 | import linkedin from '../images/linkedin.png';
11 | import gmail from '../images/gmail.png';
12 |
13 | export default function Sidebar() {
14 | const container = {
15 | hidden: { opacity: 1, scale: 0 },
16 | visible: {
17 | opacity: 1,
18 | scale: 1,
19 | transition: {
20 | delayChildren: 0.3,
21 | staggerChildren: 0.3
22 | }
23 | }
24 | };
25 | const iconList = [
26 | {
27 | component: github,
28 | href: 'https://github.com/mittalsam98'
29 | },
30 | {
31 | component: linkedin,
32 | href: 'https://www.linkedin.com/in/sachin-mittal-476174158?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_contact_details%3BoRhF2EUsQJ%2BygJpLEZb%2FFA%3D%3D'
33 | },
34 | {
35 | component: twitter,
36 | href: 'https://twitter.com/Sachin_Mittal98'
37 | },
38 | {
39 | component: instagram,
40 | href: 'https://www.instagram.com/decent_sachin.mittal'
41 | },
42 | {
43 | component: gmail,
44 | href: 'mailto:mittalsam98@gmail.com'
45 | }
46 | ];
47 | const item = {
48 | hidden: { y: 20, opacity: 0 },
49 | visible: {
50 | y: 0,
51 | opacity: 1
52 | }
53 | };
54 |
55 | return (
56 |
57 |
# programmer_life
58 |
# hello_world
59 |
# coding
60 |
61 |
62 | Sachin Mittal
63 |
64 |
65 |
69 |
70 |
71 |
72 |
78 | mittalsam98@gmail.com
79 |
80 |
81 |
82 |
83 |
84 | Projects
85 |
86 |
87 |
88 |
89 | About
90 |
91 |
92 |
93 |
94 | Interest
95 |
96 |
97 |
98 |
99 | Education
100 |
101 |
102 |
103 |
104 |
105 |
106 | {iconList.map((val, index) => (
107 |
108 | {
110 | window.open(val.href, '_blank');
111 | }}
112 | src={val.component}
113 | className='icon-img'
114 | />
115 |
116 | ))}
117 |
118 |
119 |
127 | Made with
by me.
128 |
129 |
{
131 | window.open('https://github.com/mittalsam98/react-portfolio', '_blank');
132 | }}
133 | className='templateTextBtn'
134 | >
135 | Use this template
136 |
137 |
138 | );
139 | }
140 |
--------------------------------------------------------------------------------
/src/components/skills/Interest.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import classes from './Interest.module.css';
3 | // import ScrollAnimation from 'react-animate-on-scroll';
4 | import 'animate.css/animate.min.css';
5 |
6 | export default function Interest() {
7 | return (
8 |
9 | {/*
*/}
16 | WHAT I DO?
17 | HERE ARE SOME OF MY EXPERTISE
18 |
19 | {/*
*/}
26 |
27 |
APP Develpoment
28 |
29 | I have knowledge of flutter development and have experience in building android and IOS
30 | applications. I also have live projects published on Google Play Store.
31 |
32 |
33 | {/*
34 |
*/}
41 |
42 |
Web Development
43 |
44 | Javascript/ Typescript, HTML/ CSS, ReactJs, Next.js, Prisma, tRPC, ZOD, Redux, Tailwind
45 | CSS, UI Libraries (React-Bootstrap, Mantine, MUI, Shadcn UI), Redux Toolkit, T3 Stack,
46 | JEST, Drizzle, Unit Testing.
47 |
48 |
49 | {/*
50 |
*/}
57 |
58 |
Expanded Expertise
59 |
60 | AWS, Docker, GitHub, Frontend System Design, Express.js, Node.js, MongoDB, MERN Stack,
61 | SQL, NOSQL, Socket.io, jQuery, Open to Monorepo architecture, Open Source Contribution, Learning Web3
62 |
63 |
64 | {/* */}
65 |
66 | {/* */}
67 |
68 | );
69 | }
70 |
--------------------------------------------------------------------------------
/src/components/skills/Interest.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | margin:15px;
3 | margin-top: 50px;
4 | /* box-shadow: 10px 10px 20px rgba(244,241,241,1) ; */
5 | border-radius:6px;
6 | /* animation-name: text;
7 | animation-duration: 7s;
8 | animation-timing-function: ease-out; */
9 | }
10 | .Interest {
11 | /* background-color:rgba(220, 220,220, 0.3); */
12 | border-radius:3px;
13 | margin-left:20px;
14 | margin-top:45px;
15 | padding:20px;
16 | display:grid;
17 | grid-template-columns:repeat(3,1fr);
18 | column-gap: 20px;
19 | }
20 | .head{
21 | display: inline-block;
22 | padding:0px 12px;
23 | color: rgb(85, 85, 85);
24 | margin-bottom: 20px;
25 | margin-left:30px;
26 | letter-spacing: 5px;
27 | font-size: 11px;
28 | }
29 |
30 | .heading {
31 | padding:0px 12px;
32 | font-size: 18px;
33 | font-weight: 700;
34 | margin-left:30px;
35 | text-transform: uppercase;
36 | letter-spacing: 5px;
37 | line-height: 1.8;
38 | }
39 | div>h3{
40 | font-size: 16px;
41 | font-weight: 900;
42 | text-transform: uppercase;
43 | margin: 20px 0 30px 0;
44 | }
45 | div>p{
46 | font-size: 15px;
47 | }
48 | .web{
49 | height: 100%;
50 | /* height:180px; */
51 | border:1px black;
52 | border-bottom:2px solid #2c98f0;
53 | text-align: center;
54 | padding:1.2rem;
55 | box-shadow: 0px 0px 56px -8px rgba(0, 0, 0, 0.17) ;
56 |
57 | }
58 | .app{
59 | /* height:180px; */
60 | height: 100%;
61 | border:1px black;
62 | border-bottom:2px solid #f9bf3f ;
63 | text-align: center;
64 | box-shadow: 10px 10px 20px rgba(244,241,241,1) ;
65 | position: relative;
66 | top:-20px;
67 | padding:1.2rem;
68 | }
69 | .other{
70 | height: 100%;
71 | /* height:180px; */
72 | border:1px black;
73 | padding:1.2rem;
74 | border-bottom:2px solid #2fa499;
75 | text-align: center;
76 | box-shadow: 10px 10px 20px rgba(244,241,241,1) ;
77 |
78 | }
79 |
80 | @keyframes text{
81 | from{transform: translateX(-30px);
82 | opacity:0;
83 | }
84 | }
85 |
86 | /*///////// Media Query //////////////*/
87 | @media (max-width:1027px){
88 |
89 | .Interest {
90 | grid-template-columns: 1fr;
91 | }
92 | .web{
93 | margin-bottom:25px
94 | }
95 | .app{
96 | margin-bottom:25px
97 | }
98 | .other{
99 | margin-bottom:25px
100 | }
101 | }
102 |
103 |
104 | @media (max-width:769px){
105 | .box{
106 | text-align: center;
107 | }
108 | .Interest {
109 | grid-template-columns: 1fr;
110 | }
111 | .app{
112 | margin-top:20px;
113 | height:100%;
114 | /* position: static; */
115 | }
116 | .other{
117 | margin-top:20px;
118 | }
119 | }
120 |
121 | @media (max-width:392px){
122 | .Interest {
123 | grid-template-columns: 1fr;
124 | }
125 | .app{
126 | position: static;
127 | }
128 | }
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.jsx'
4 |
5 | ReactDOM.createRoot(document.getElementById('root')).render(
6 |
7 |
8 | ,
9 | )
10 |
--------------------------------------------------------------------------------
/src/serviceWorker.js:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read https://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.1/8 is considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 | )
21 | );
22 |
23 | export function register(config) {
24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 | // The URL constructor is available in all browsers that support SW.
26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
27 | if (publicUrl.origin !== window.location.origin) {
28 | // Our service worker won't work if PUBLIC_URL is on a different origin
29 | // from what our page is served on. This might happen if a CDN is used to
30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 | return;
32 | }
33 |
34 | window.addEventListener('load', () => {
35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
36 |
37 | if (isLocalhost) {
38 | // This is running on localhost. Let's check if a service worker still exists or not.
39 | checkValidServiceWorker(swUrl, config);
40 |
41 | // Add some additional logging to localhost, pointing developers to the
42 | // service worker/PWA documentation.
43 | navigator.serviceWorker.ready.then(() => {
44 | console.log(
45 | 'This web app is being served cache-first by a service ' +
46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA'
47 | );
48 | });
49 | } else {
50 | // Is not localhost. Just register service worker
51 | registerValidSW(swUrl, config);
52 | }
53 | });
54 | }
55 | }
56 |
57 | function registerValidSW(swUrl, config) {
58 | navigator.serviceWorker
59 | .register(swUrl)
60 | .then(registration => {
61 | registration.onupdatefound = () => {
62 | const installingWorker = registration.installing;
63 | if (installingWorker == null) {
64 | return;
65 | }
66 | installingWorker.onstatechange = () => {
67 | if (installingWorker.state === 'installed') {
68 | if (navigator.serviceWorker.controller) {
69 | // At this point, the updated precached content has been fetched,
70 | // but the previous service worker will still serve the older
71 | // content until all client tabs are closed.
72 | console.log(
73 | 'New content is available and will be used when all ' +
74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
75 | );
76 |
77 | // Execute callback
78 | if (config && config.onUpdate) {
79 | config.onUpdate(registration);
80 | }
81 | } else {
82 | // At this point, everything has been precached.
83 | // It's the perfect time to display a
84 | // "Content is cached for offline use." message.
85 | console.log('Content is cached for offline use.');
86 |
87 | // Execute callback
88 | if (config && config.onSuccess) {
89 | config.onSuccess(registration);
90 | }
91 | }
92 | }
93 | };
94 | };
95 | })
96 | .catch(error => {
97 | console.error('Error during service worker registration:', error);
98 | });
99 | }
100 |
101 | function checkValidServiceWorker(swUrl, config) {
102 | // Check if the service worker can be found. If it can't reload the page.
103 | fetch(swUrl)
104 | .then(response => {
105 | // Ensure service worker exists, and that we really are getting a JS file.
106 | const contentType = response.headers.get('content-type');
107 | if (
108 | response.status === 404 ||
109 | (contentType != null && contentType.indexOf('javascript') === -1)
110 | ) {
111 | // No service worker found. Probably a different app. Reload the page.
112 | navigator.serviceWorker.ready.then(registration => {
113 | registration.unregister().then(() => {
114 | window.location.reload();
115 | });
116 | });
117 | } else {
118 | // Service worker found. Proceed as normal.
119 | registerValidSW(swUrl, config);
120 | }
121 | })
122 | .catch(() => {
123 | console.log(
124 | 'No internet connection found. App is running in offline mode.'
125 | );
126 | });
127 | }
128 |
129 | export function unregister() {
130 | if ('serviceWorker' in navigator) {
131 | navigator.serviceWorker.ready.then(registration => {
132 | registration.unregister();
133 | });
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------