diff --git a/public/myresume.pdf b/public/myresume.pdf new file mode 100644 index 0000000..bb1fab9 Binary files /dev/null and b/public/myresume.pdf differ diff --git a/src/components/Career.js b/src/components/Career.js new file mode 100644 index 0000000..7b08ac2 --- /dev/null +++ b/src/components/Career.js @@ -0,0 +1,117 @@ +import { Divider, List, ListItem, ListItemText, Typography } from '@mui/material' +import React from 'react' + +export const experiencesData = [ + { + key: 'sde-intern-rq', type: 'prof', location: 'RootQuotient Technologies', designation: 'Software Developer Intern', + desc: [ + 'Developed interactive user interfaces for client applications using ReactJS, TypeScript, and the Ant Design library.', + 'Implemented a comprehensive admin dashboard for a client’s banking administration application, following MVC\ + patterns for seamless backend integration.', + 'Actively contributed to bug fixes and enhanced an internal package by adding API documentation.' + ], + startDate: 'May 2022', endDate: 'July 2022' + }, + { + key: 'tech-sd-ctf', type: 'extra', location: 'CEG Tech Forum', designation: 'Student Director of Technical Operations', + desc: [ + 'Headed a 20-member strong technical operations team as the Lead Developer, Sysadmin, and Project Manager.', + 'Spearheaded multiple web apps developed for various purposes, such as a custom ERP mobile app, admin dashboards,\ + and the flagship website for Kurukshetra, the international techno-management fest of CEG.', + 'Organized a technical summit on "Innovation and Transformation: AI, Autonomous Systems, and Disruptive Trends"\ + featuring projects by local innovators and keynotes from BNY Mellon, Microsoft, and startups.' + ], + startDate: 'July 2022', endDate: 'July 2023' + }, + { + key: 'sec-nss', type: 'extra', location: 'National Service Scheme', designation: 'Secretary', + desc: [ + 'Organized cleanliness campaigns, awareness rallies, and the annual village development camp.', + 'Conducted a 3-day city-wide waste collection and awareness drive in collaboration with AWCEM, Chennai.' + ], + startDate: 'Nov 2021', endDate: 'Oct 2022' + }, + { + key: 'cs-ms-asu', type: 'edu', location: 'Arizona State University', designation: 'MS, Computer Science', + desc: [ + // Add relevant coursework in the future + ], + startDate: 'Aug 2023', endDate: 'May 2025' + }, + { + key: 'cse-be-ceg', type: 'edu', location: 'College of Engineering, Guindy', designation: 'BE, Computer Science and Engineering', + desc: [ + 'Graduated first-class with distinction with a 9.12 CGPA', + 'Relevant coursework: DBMS, OOPS, full-stack development, cloud computing, deep learning, computer networks', + ], + startDate: 'Aug 2023', endDate: 'May 2025' + }, +]; + +const Career = () => { + return ( + <> + + Professional + + {experiencesData.filter(exp => exp.type === 'prof').map(exp => + <> + + {exp.designation}, {exp.location}, {exp.startDate} - {exp.endDate} + + + + {exp.desc.map((line, index) => + + + + )} + + + + )} + + + Education + + {experiencesData.filter(exp => exp.type === 'edu').map(exp => + <> + + {exp.designation}, {exp.location}, {exp.startDate} - {exp.endDate} + + + + {exp.desc.map((line, index) => + + + + )} + + + + )} + + + Volunteering + + {experiencesData.filter(exp => exp.type === 'extra').map(exp => + <> + + {exp.designation}, {exp.location}, {exp.startDate} - {exp.endDate} + + + + {exp.desc.map((line, index) => + + + + )} + + + + )} + + ) +} + +export default Career; \ No newline at end of file diff --git a/src/components/Experiences.js b/src/components/Experiences.js deleted file mode 100644 index 3f17e67..0000000 --- a/src/components/Experiences.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' - -const Experiences = () => { - return ( -
Experiences
- ) -} - -export default Experiences \ No newline at end of file diff --git a/src/components/Landing.js b/src/components/Landing.js index 18b595d..54fe352 100644 --- a/src/components/Landing.js +++ b/src/components/Landing.js @@ -1,11 +1,12 @@ import React from 'react'; -import { Button, ButtonGroup, List, ListItem, ListItemText, Typography } from '@mui/material'; -import { handleButtonClick } from '../utils/linkClick'; +import { Button, ButtonGroup, Divider, List, ListItem, ListItemText, Typography } from '@mui/material'; +import { handleLinkClick } from '../utils/linkClick'; import GitHubIcon from '@mui/icons-material/GitHub'; import LinkedInIcon from '@mui/icons-material/LinkedIn'; import EmailIcon from '@mui/icons-material/Email'; import { projectsData } from './Projects'; +import { experiencesData } from './Career'; const socialsData = [ { key: 'github', socialText: 'GitHub', socialLink: 'https://github.com/20kaushik02', socialIcon: }, @@ -20,7 +21,7 @@ const Landing = () => { {/* one-liner summary */} {/* intro with education */} @@ -29,13 +30,28 @@ const Landing = () => { primary={"I'm currently pursuing my masters in computer\ science at ASU, and will be graduating in the summer of 2025."} /> - {/* current stuff and last stint */} + {/* current stuff */} + primary={"Recently, I've been tinkering with " + projectsData[0].oneliner + "."} /> + + {/* last stint */} + + exp.type === 'prof')[0].location + " as a " + + experiencesData.filter(exp => exp.type === 'prof')[0].designation + "."} /> + + + Reach me at: @@ -46,7 +62,7 @@ const Landing = () => { {socialsData.map((social) => ( diff --git a/src/components/Menu.js b/src/components/Menu.js index e23fef2..3176291 100644 --- a/src/components/Menu.js +++ b/src/components/Menu.js @@ -15,51 +15,69 @@ import ListItemText from '@mui/material/ListItemText'; import MenuIcon from '@mui/icons-material/Menu'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; -import Link from '@mui/material/Link'; +// import Link from '@mui/material/Link'; import LandingIcon from '@mui/icons-material/Home'; import ProjIcon from '@mui/icons-material/AccountTree'; import ExpIcon from '@mui/icons-material/Work'; -import SkilIcon from '@mui/icons-material/Build'; -import EduIcon from '@mui/icons-material/School'; +import SkilIcon from '@mui/icons-material/Laptop'; import IntsIcon from '@mui/icons-material/SportsEsports'; import ArticleIcon from '@mui/icons-material/Article'; import Landing from './Landing'; import LoremIpsum from './LoremIpsum'; import Projects from './Projects'; +import Career from './Career'; +import { handleLinkClick } from '../utils/linkClick'; const drawerWidth = 240; const menuSections = [ - { key: 'landing', display_name: 'Home', appbar_text: 'Hello There!', display_icon: , }, - { key: 'proj', display_name: 'Projects', appbar_text: 'My Projects', display_icon: , }, - { key: 'exp', display_name: 'Experiences', appbar_text: 'My Career', display_icon: , }, - { key: 'skil', display_name: 'Skills', appbar_text: 'My Skills', display_icon: , }, - { key: 'edu', display_name: 'Education', appbar_text: 'My Education', display_icon: , }, - { key: 'ints', display_name: 'Interests', appbar_text: 'My Interests', display_icon: , }, - { key: 'resume', display_name: 'Resume', appbar_text: 'My Resume', display_icon: , }, -]; - -const menuSectionsData = [ - { key: 'landing', component: }, - { key: 'proj', component: }, - { key: 'exp', component: }, - { key: 'skil', component: }, - { key: 'edu', component: }, - { key: 'ints', component: }, - { key: 'resume', component: }, + { + key: 'landing', display_name: 'Home', appbar_text: 'Hello There!', display_icon: , + extLink: false, component: + }, + { + key: 'proj', display_name: 'Projects', appbar_text: 'My Projects', display_icon: , + extLink: false, component: + }, + { + key: 'exp', display_name: 'Career', appbar_text: 'My Journey', display_icon: , + extLink: false, component: + }, + { + key: 'skil', display_name: 'Skills', appbar_text: 'My Skills', display_icon: , + extLink: false, component: + }, + { + key: 'ints', display_name: 'Interests', appbar_text: 'My Interests', display_icon: , + extLink: false, component: + }, + { + key: 'resume', display_name: 'Resume', appbar_text: 'My Resume', display_icon: , + extLink: true, link: process.env.PUBLIC_URL + "myresume.pdf" + }, ]; export default function Menu(props) { const { window } = props; const [mobileOpen, setMobileOpen] = React.useState(false); - const [activeSection, setActiveSection] = React.useState('landing'); + const [activeSection, setActiveSection] = React.useState(menuSections[0]); const handleDrawerToggle = () => { setMobileOpen(!mobileOpen); }; + const handleDrawerSelect = (selectedSectionKey) => { + handleDrawerToggle(); + const menuSection = menuSections.filter((menuItem) => menuItem.key === selectedSectionKey)[0]; + if (menuSection.extLink === true) { + handleLinkClick(menuSection.link); + return; + } + setActiveSection(menuSection); + } + const drawer = (
{/* */} @@ -70,8 +88,8 @@ export default function Menu(props) { {menuSections.map((menuItem, index) => ( - { handleDrawerToggle(); setActiveSection(menuItem.key); }} key={menuItem.key} disablePadding> - + { handleDrawerSelect(menuItem.key); }} key={menuItem.key} disablePadding> + {menuItem.display_icon} @@ -112,7 +130,7 @@ export default function Menu(props) { - {menuSections.filter((menuItem) => menuItem.key === activeSection)[0].appbar_text} + {activeSection.appbar_text} @@ -153,7 +171,7 @@ export default function Menu(props) { sx={{ flexGrow: 1, padding: 1, width: { sm: `calc(100% - ${drawerWidth}px)` } }} > - {menuSectionsData.filter((menuItem) => menuItem.key === activeSection)[0].component} + {activeSection.component} ); diff --git a/src/components/Projects.js b/src/components/Projects.js index be48efe..2b8e34a 100644 --- a/src/components/Projects.js +++ b/src/components/Projects.js @@ -1,11 +1,11 @@ import React, { useContext } from 'react'; -import { Box, Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Chip, List, ListItem, ListItemText, Stack, Typography } from '@mui/material'; +import { Box, Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Chip, List, ListItem, ListItemText, Typography } from '@mui/material'; import { Swiper, SwiperSlide } from 'swiper/react'; import "swiper/css"; import { Pagination, Navigation, EffectFade } from "swiper/modules"; import { WidthContext } from '../App'; -import { handleButtonClick } from '../utils/linkClick'; +import { handleLinkClick } from '../utils/linkClick'; export const projectsData = [ { @@ -13,6 +13,7 @@ export const projectsData = [ name: 'TCP-RL', img: 'fyp-arch-diag.png', desc: [ + // eslint-disable-next-line 'Implemented RL based TCP congestion control (deep Q-learning and PPO models), which were 2% more performant\ compared to TCPNewReno.', 'Demonstrated that performance under simple adversarial attacks was dampened by 40%.', @@ -27,7 +28,7 @@ export const projectsData = [ img: 'k-site-landing.png', desc: [ 'Flagship website for the 2023 edition of Kurukshetra, CEG\'s international techno-management fest.', - 'Handled a peak of 10,000 daily users and transactions', + 'Avg. traffic of 1,000 daily users and transactions', 'Built with React and Express.js', ], tools: ['React', 'Express.js', 'AWS'], @@ -39,7 +40,7 @@ export const projectsData = [ img: 'donut-eat-me-gameplay.png', desc: [ 'An isometric 3D pastry-themed action platformer where you play as a donut and fight other pastries!', - 'Made with Unity, all assets designed with Blender.', + 'Made with Unity, designed in Blender.', ], tools: ['Blender', 'Unity'], link: 'https://kirangeorge.itch.io/donut-eat-me' @@ -67,7 +68,7 @@ const Projects = () => { height="140" image={process.env.PUBLIC_URL + "Projects/" + project.img} alt={project.name} - onClick={() => handleButtonClick(process.env.PUBLIC_URL + "Projects/" + project.img)} + onClick={() => handleLinkClick(process.env.PUBLIC_URL + "Projects/" + project.img)} /> @@ -88,7 +89,7 @@ const Projects = () => { - diff --git a/src/utils/linkClick.js b/src/utils/linkClick.js index 2cc67b9..0c1fd9b 100644 --- a/src/utils/linkClick.js +++ b/src/utils/linkClick.js @@ -1,3 +1,3 @@ -export const handleButtonClick = (link) => { +export const handleLinkClick = (link) => { window.open(link, "_blank", "noopener") } \ No newline at end of file