11 Commits

Author SHA1 Message Date
amantahiliani
654012bc5c Added Contact ME 2025-01-12 23:42:32 -05:00
Aman Tahiliani
323e9474f9 Linting 2024-06-24 00:15:38 -04:00
Aman Tahiliani
2cc88cdf72 Cleaned up code structure 2024-06-24 00:12:52 -04:00
Aman Tahiliani
4aed6b824d Updated Devtools and Full Time position 2024-06-23 23:46:08 -04:00
Aman Tahiliani
86c08a95e1 Updated Rimidi info 2023-06-25 19:08:05 -04:00
Aman Tahiliani
b17cdcc7bc Updated TA work and publications 2023-01-10 03:13:50 -05:00
Aman Tahiliani
dbc791915e Changed hyperlink 2022-11-24 18:04:18 -05:00
Aman Tahiliani
16150f39c4 Updated Resume and status 2022-11-24 00:19:44 -05:00
Aman Tahiliani
3c66ae69dc Optimizations 2022-07-19 00:39:23 +05:30
Aman Tahiliani
5dd2413463 Changed Logo 2022-07-19 00:16:57 +05:30
Aman Tahiliani
fde5b601b6 Added experience and updated info 2022-07-18 23:17:31 +05:30
59 changed files with 17589 additions and 1763 deletions

14843
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,17 @@
{
"name": "my-app",
"version": "0.1.0",
"proxy": "http://localhost:8000",
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1",
"bootstrap": "^5.1.3",
"prettier": "^3.3.2",
"react": "^18.1.0",
"react-bootstrap": "^2.3.1",
"react-dom": "^18.1.0",
@@ -14,6 +19,7 @@
"react-router-dom": "^6.3.0",
"react-scripts": "5.0.1",
"react-slick": "^0.29.0",
"react-transition-group": "^4.4.5",
"slick-carousel": "^1.8.1",
"web-vitals": "^2.1.0"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,20 +1,17 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="manifest" href="manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
@@ -24,8 +21,9 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
<title>Aman Tahiliani</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -1,25 +1,19 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"name": "",
"short_name": "",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

View File

@@ -1,27 +1,28 @@
.App {
.App {
text-align: center;
background-color: #282c34;
background-color: black;
position: absolute;
top: 0px;
right: 0px;
left: 0px;
font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif;
color: azure;
}
overflow: hidden;
}
.App-logo {
.App-logo {
height: 40vmin;
pointer-events: none;
}
}
@media (prefers-reduced-motion: no-preference) {
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
}
.App-header {
background-color: #282c34;
.App-header {
background-color: black;
min-height: 100vh;
display: flex;
flex-direction: column;
@@ -29,45 +30,45 @@
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
}
.App-link {
.App-link {
color: #61dafb;
}
}
@keyframes App-logo-spin {
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
}
.About {
.About {
width: 100%;
position: absolute;
top: 120px;
bottom: 0px;
left: 0px;
right: 0px;
}
}
hr {
hr {
width: 70%;
margin-left: 15% !important;
margin-right: 15% !important;
border: 10px solid aquamarine;
}
}
.publications {
.publications {
margin-top: 230px;
}
}
.slick-dots button:before {
.slick-dots button:before {
color: grey !important;
}
}
.slick-dots li.slick-active button:before {
.slick-dots li.slick-active button:before {
color: White !important;
}
}

View File

@@ -1,25 +1,123 @@
import logo from "./logo.svg";
import React, { useState, useEffect } from "react";
import {
BrowserRouter as Router,
Route,
Routes,
useLocation,
} from "react-router-dom";
import { CSSTransition, TransitionGroup } from "react-transition-group";
import "./App.css";
import "./css/home.css";
import Header from "./components/Header";
import About from "./components/About";
import Publication from "./components/Publication";
import publicationData from "./components/publications.json"
import { getByTitle } from "@testing-library/react";
import SimpleSlider from "./components/publicationSlider";
import Experience from "./components/Experience";
import Contact from "./components/contact";
import DevToolsComponent from "./components/devtools";
import SocialMedia from "./components/SocialMedia";
function App() {
function Portfolio() {
return (
<div className="App">
<meta name="Aman Tahiliani's Portfolio"></meta>
<Header />
<hr></hr>
<About className ="About" id="About"/>
<About className="About" id="About" />
<div className="publications" id="Publications">
<h2 style={{color:"salmon", fontSize:"50px"}}><b>Publications</b></h2>
<SimpleSlider/>
<h2 style={{ color: "salmon", fontSize: "50px" }}>
<b>Publications</b>
</h2>
<SimpleSlider />
</div>
<div className="Experience" id="Experience">
<h2 style={{ color: "salmon", fontSize: "50px", marginTop: "110px" }}>
<b>Experience</b>
</h2>
<Experience />
</div>
<div className="DevTools" id="DevTools" style={{ marginBottom: "100px" }}>
<h2 style={{ color: "salmon", fontSize: "50px" }}>
<b>Dev Tools</b>
</h2>
<DevToolsComponent />
</div>
<hr />
<div className="Contact" id="Contact" style={{ marginTop: "100px" }}>
<h2 style={{ color: "cyan", fontSize: "50px" }}>
<b>Contact Me!</b>
</h2>
<SocialMedia
style={{ color: "white" }}
useColorIcons={false}
whiteIcons={true}
/>
</div>
{/* <div className="Contact" id="Contact">
<h2 style={{color:"salmon", fontSize:"50px", marginTop:"60px"}}><b>Contact Me!</b></h2>
<Contact/>
</div> */}
</div>
);
}
function Books() {
return (
<div>
<h2>Books Page</h2>
{/* Add your books content here */}
</div>
);
}
function Home() {
return (
<div className="home">
<div className="content">
<div className="intro">
<h1>Welcome to Aman Tahiliani's Space</h1>
<p>Software Developer | Tech Enthusiast</p>
<nav>
<ul>
<li>
<a href="/portfolio">Developer Portfolio</a>
</li>
<li>
<a href="/reviews">Book, TV and Movie Reviews</a>
</li>
</ul>
</nav>
</div>
</div>
<div className="footer">
<SocialMedia />
</div>
</div>
);
}
function AnimatedRoutes() {
const location = useLocation();
return (
<TransitionGroup>
<CSSTransition key={location.key} classNames="fade" timeout={300}>
<Routes location={location}>
<Route path="/portfolio" element={<Portfolio />} />
<Route path="/" element={<Portfolio />} />
<Route path="/books" element={<Books />} />
{/* <Route path="/" element={<Home />} /> */}
</Routes>
</CSSTransition>
</TransitionGroup>
);
}
function App() {
return (
<Router>
<AnimatedRoutes />
</Router>
);
}
export default App;

View File

@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import App from './App';
import { render, screen } from "@testing-library/react";
import App from "./App";
test('renders learn react link', () => {
test("renders learn react link", () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();

View File

@@ -1,11 +1,16 @@
import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
import { Grid, Row, Col } from "react-bootstrap";
import "./about.css";
import "../css/about.css";
import AmanTahilianiPortfolio from "../media/AmanTahilianiPortfolio.png";
import { Button } from "bootstrap";
import resume from "../media/AmanTahilianiResumeMay22.pdf"
import resume from "../media/Aman_Tahiliani_Resume.pdf";
// const img = '../media/AmanTahilianiPortfolio.png'
import { library } from "@fortawesome/fontawesome-svg-core";
import { faFileDownload } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
library.add(faFileDownload);
class About extends Component {
render() {
@@ -25,21 +30,47 @@ class About extends Component {
<Row className="Info">
<ul>
<li>
I am a final Year BTech CSE student at Jaypee Institute of
Information Technology in Noida, India.{" "}
Currently working at <a href="https://rimidi.com/">Rimidi</a>,
a Software as a Service (SaaS) startup, full-time as a
Software Engineer with a special emphasis on data
interoperabiltiy and building a robust set of tools to enable
secure flow of sensitive patient health information across
health systems.
</li>
<li>
Graduated from Georgia Tech in 2024 with a Master's Of Science
degree in Computer Science (MSCS), with emphasis on Computing
Systems and Machine Learning. (#GoJackets{" \uD83D\uDC1D"})
</li>{" "}
<li>
Currently working as an SDE Intern(Backend) at{" "}
<a href="https://innovaccer.com/"> Innovaccer </a> as part of
the DAP(Data Activation Platform).{" "}
</li>{" "}
<li>
I enjoy designing and creating the backend logic for projects
and am also proficient in frontend development.{" "}
Interned as an SDE (Backend) at{" "}
<a href="https://innovaccer.com/">Innovaccer</a> twice as part
of the Data Activation Platform and Licence
Management/Platform Configuration Teams.{" "}
</li>{" "}
</ul>{" "}
</Row>{" "}
<button style={{borderRadius:"0.8em", width:"auto",height:"40px", fontSize:"larger", backgroundColor:"rgb(5, 255, 180)"}}><a href={resume} style= {{color: "black", textDecoration: "none"}} download="AmanTahilianiResume.pdf">My Resume</a></button>
<button
style={{
borderRadius: "0.8em",
width: "auto",
height: "40px",
fontSize: "larger",
backgroundColor: "rgb(5, 255, 180)",
}}
onClick={() => {
const link = document.createElement("a");
link.href = resume;
link.download = "Aman_Tahiliani_Resume.pdf";
link.click();
window.open(resume, "_blank");
}}
>
<FontAwesomeIcon icon="file-download" style={{color: "black", marginRight: "4px"}} />{" "}
<span style={{ color: "black", textDecoration: "none" }}>
Resume
</span>
</button>
</Col>{" "}
</Row>{" "}
</div>

View File

@@ -0,0 +1,40 @@
import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
// import { Row, Col} from "react-bootstrap";
import "../css/experience.css";
import ExperienceCard from "./experienceCard";
import experienceData from "../data/experience.json";
import InnovaccerLogo from "../media/logos/companies/innovaccerLogo.png";
import Medsupervision from "../media/logos/companies/logo.png";
import GeorgiaTech from "../media/logos/companies/GeorgiaTech.png";
import Rimidi from "../media/logos/companies/rimidi.png";
const logos = {
Innovaccer: InnovaccerLogo,
Medsupervision: Medsupervision,
"Georgia Tech": GeorgiaTech,
Rimidi: Rimidi,
};
class Experience extends Component {
render() {
return (
<div className="ExperienceComponent">
{experienceData.map(({ company, title, points, term }) => (
<div>
<ExperienceCard
company={company}
title={title}
points={points}
photo={logos[company]}
term={term}
/>
<hr />
</div>
))}
</div>
);
}
}
export default Experience;

View File

@@ -1,7 +1,7 @@
import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
import { Row, Col } from "react-bootstrap";
import "./header.css";
import "../css/header.css";
class Header extends Component {
render() {
@@ -29,13 +29,17 @@ class Header extends Component {
<Col xs={12} md={5}>
<Row className="navRow nonNameCol">
<Col>
<a>Experience</a>
<a href="#Experience">Experience</a>
</Col>
<Col>
<a>Devtools</a>
<a href="#DevTools">Devtools</a>
</Col>
<Col>
<a>Contact Me!</a>
<a
href="#Contact"
>
Contact Me!
</a>
</Col>
</Row>
</Col>

View File

@@ -1,7 +1,7 @@
import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
import { Row, Col, TabContainer } from "react-bootstrap";
import "./publication.css";
import "../css/publication.css";
class Publication extends Component {
render() {
@@ -14,12 +14,12 @@ class Publication extends Component {
<Row>
<div>Publish Date: {this.props.publish_date}</div>
</Row>
<div>Link: <a href={this.props.link}>{this.props.link}</a></div>
<br/>
<div style={{fontWeight:"bolder"}}>Abstract:</div>
<div>
Link: <a href={this.props.link}>{this.props.link}</a>
</div>
<br />
<div style={{ fontWeight: "bolder" }}>Abstract:</div>
<div>{this.props.abstract}</div>
</div>
);
}

View File

@@ -0,0 +1,52 @@
import React from 'react';
import PropTypes from 'prop-types';
import '../css/socialmedia.css';
const socialIcons = {
instagram: {
flat: 'https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/instagram.svg',
color: 'https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png',
link: 'https://instagram.com/amantahiliani'
},
linkedin: {
flat: 'https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/linkedin.svg',
color: 'https://upload.wikimedia.org/wikipedia/commons/c/ca/LinkedIn_logo_initials.png',
link: 'https://www.linkedin.com/in/amantahiliani/'
},
github: {
flat: 'https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/github.svg',
color: 'https://upload.wikimedia.org/wikipedia/commons/9/91/Octicons-mark-github.svg',
link: 'https://github.com/AmanTahiliani'
},
goodreads: {
flat: 'https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/goodreads.svg',
color: 'https://upload.wikimedia.org/wikipedia/commons/4/4e/Goodreads_%27g%27_logo.svg',
link: 'https://www.goodreads.com/amantahiliani'
}
};
function SocialMedia({ useColorIcons = false, whiteIcons = false }) {
const iconType = useColorIcons ? 'color' : 'flat';
const iconClass = whiteIcons ? 'social-icon white' : 'social-icon';
return (
<div className="social-media">
{/* <h2>Contact Me!</h2> */}
<ul>
{Object.entries(socialIcons).map(([platform, obj]) => (
<li key={platform}>
<a href={obj['link']} target="_blank" rel="noopener noreferrer">
<img src={obj[iconType]} alt={platform} className={iconClass} />
</a>
</li>
))}
</ul>
</div>
);
}
SocialMedia.propTypes = {
useColorIcons: PropTypes.bool,
whiteIcons: PropTypes.bool
};
export default SocialMedia;

View File

@@ -1,54 +0,0 @@
.AboutComponent {
opacity: 5;
width: 100%;
margin-top: 80px;
padding-top: 5.5%;
padding-bottom: 4%;
}
h1 {
position: relative;
}
.NameImage {
height: 350px;
width: 350px;
border-radius: 5.7em;
border: 2px solid black;
}
.InfoColumn h2 {
color: rgb(5, 255, 180);
font-size: 40px;
}
.InfoColumn h3 {
margin-bottom: 30px;
color: salmon;
}
ul {
list-style-position: inside;
}
li {
text-align: justify;
padding-left: 5%;
}
.InfoColumn {
padding-right: 5%;
}
li>a {
color: hotpink;
}
.Info {
font-size: larger;
}
.Info li {
margin-top: 10px;
list-style-type: square;
}

72
src/components/contact.js Normal file
View File

@@ -0,0 +1,72 @@
import React, { Component, useState } from "react";
import "bootstrap/dist/css/bootstrap.css";
// import { Row, Col, TabContainer } from "react-bootstrap";
import "../css/contact.css";
function Contact() {
const [name, setName] = useState("");
const [organization, setOrganization] = useState("");
const [message, setMessage] = useState("");
const [popup, setPopup] = useState("");
let handleSubmit = async (e) => {
e.preventDefault();
try {
let res = await fetch("http://localhost:8000/sendMail", {
method: "POST",
body: JSON.stringify({
name: name,
organization: organization,
message: message,
}),
});
// let resJson = await res.json();
console.log(res.status);
if (res.status === 200) {
setName("");
setOrganization("");
setMessage("");
setPopup("Message sent successfully");
} else {
setPopup("Some error occured");
}
} catch (err) {
console.log(err);
}
};
return (
<div>
<form onSubmit={handleSubmit}>
<input
type="text"
value={name}
placeholder="Name"
onChange={(e) => setName(e.target.value)}
required="true"
/>
<br />
<input
type="text"
value={organization}
placeholder="Organization"
onChange={(e) => setOrganization(e.target.value)}
/>
<br />
<textarea
className="MessageBox"
type="textarea"
value={message}
placeholder="Message"
onChange={(e) => setMessage(e.target.value)}
required="true"
/>
<br />
<button type="submit">Send!</button>
<div className="popup">{popup ? <p>{popup}</p> : null}</div>
</form>
</div>
);
}
export default Contact;

View File

@@ -0,0 +1,28 @@
import React, { Component } from "react";
import "../css/devtools.css";
import Languages from "../data/programmingLaguages.json";
const logos = {
Python: "https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg",
Java: "https://upload.wikimedia.org/wikipedia/en/3/30/Java_programming_language_logo.svg",
"C++": "https://upload.wikimedia.org/wikipedia/commons/1/18/ISO_C%2B%2B_Logo.svg",
JavaScript: "https://upload.wikimedia.org/wikipedia/commons/6/6a/JavaScript-logo.png",
};
class DevToolsComponent extends Component {
render() {
return (
<div>
<div className="dev-tools-container">
{Languages.map(({ name }) => (
<div className="dev-tool" key={name}>
<img src={logos[name]} alt={name} className="dev-tool-logo" />
</div>
))}
</div>
</div>
);
}
}
export default DevToolsComponent;

View File

@@ -0,0 +1,54 @@
import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
import { Row, Col, TabContainer } from "react-bootstrap";
import "../css/experience.css";
class ExperienceCard extends Component {
render() {
return (
<div
className="experience-detail"
style={{ marginTop: "30px", marginBottom: "30px" }}
>
<Row>
<Col xs={12} md={5} className="Company1">
<img src={this.props.photo} className="Company-Image" />
{/* <h3 className="Company">{this.props.company}</h3> */}
<h4>({this.props.term})</h4>
</Col>
<Col xs={12} md={7}>
<div className="experience-details">
<h3 className="JobTitle">{this.props.title}</h3>
<hr />
<div>
<ul>
{this.props.points.map((item, i) => (
<li>{item}</li>
))}
</ul>
</div>
</div>
</Col>
</Row>
</div>
// <div className="experience-detail">
// <h3>{this.props.title}</h3>
// <Row>
// <Col>Authors: {this.props.authors}</Col>
// </Row>
// <Row>
// <div>Publish Date: {this.props.publish_date}</div>
// </Row>
// <div>
// Link: <a href={this.props.link}>{this.props.link}</a>
// </div>
// <br />
// <div style={{ fontWeight: "bolder" }}>Abstract:</div>
// <div>{this.props.abstract}</div>
// </div>
);
}
}
export default ExperienceCard;

View File

@@ -1,45 +0,0 @@
.menu-header {
padding-left: 50px;
padding-right: 50px;
height: "50px";
margin-bottom: 40px;
}
.navRow {
height: 100%;
margin-top: 40px;
line-height: 100%;
}
.NameCol {
font-size: xx-large;
font-weight: bold;
color: salmon;
font-style: italic;
}
.nonNameCol {
font-size: larger;
padding-top: 1%;
color: aquamarine;
}
.header a:link {
text-decoration: none;
color: aquamarine;
}
.header a:visited {
text-decoration: none;
color: aquamarine;
}
.header a:hover {
text-decoration: none;
color: aquamarine;
}
.header a:active {
text-decoration: none;
color: aquamarine;
}

View File

@@ -1,41 +0,0 @@
table,
th,
td {
border-collapse: collapse;
}
th,
td {
padding: 15px;
text-align: left;
}
tr {
height: auto;
}
tr:hover {
background-color: salmon;
}
.publication-detail {
padding: 30px;
margin: 40px;
border: 1px solid white;
border-radius: 2em;
white-space: normal;
overflow: auto;
text-overflow: ellipsis;
text-align: justify;
padding-left: 5%;
padding-right: 5%;
}
.publication-detail h3 {
font-size: xx-large;
color: aquamarine;
}
.publication-detail a {
color: aquamarine
}

View File

@@ -1,10 +1,10 @@
import React, { Component } from "react";
import Slider from "react-slick";
import publicationData from "./publications.json"
import publicationData from "../data/publications.json";
import Publication from "./Publication";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import {FaArrowAltCircleRight,FaArrowAltCircleLeft} from "react-icons/fa"
import { FaArrowAltCircleRight, FaArrowAltCircleLeft } from "react-icons/fa";
export default class SimpleSlider extends Component {
constructor(props) {
super(props);
@@ -26,16 +26,43 @@ export default class SimpleSlider extends Component {
slidesToScroll: 1,
};
return (
<div style={{height:"auto"}}>
<Slider ref={c => (this.slider = c)} {...settings}>
{publicationData.map(({title,authors, publish_date, abstract,link}) =>(
<Publication title={title} authors={authors} publish_date={publish_date} abstract={abstract} link={link}/>
))}
<div style={{ height: "auto" }}>
<Slider ref={(c) => (this.slider = c)} {...settings}>
{publicationData.map(
({ title, authors, publish_date, abstract, link }) => (
<Publication
title={title}
authors={authors}
publish_date={publish_date}
abstract={abstract}
link={link}
/>
),
)}
</Slider>
<div style={{ textAlign: "center"}}>
<FaArrowAltCircleLeft onClick={this.previous} style={{marginTop:"40px",marginBottom:"40px",borderRadius:"3em" ,fontSize:"40px", color:"aquamarine"}}/>
<div style={{ textAlign: "center" }}>
<FaArrowAltCircleLeft
onClick={this.previous}
style={{
marginTop: "40px",
marginBottom: "40px",
borderRadius: "3em",
fontSize: "40px",
color: "aquamarine",
}}
/>
<FaArrowAltCircleRight onClick={this.next} style={{marginTop:"40px", marginBottom:"40px", borderRadius:"3em",fontSize:"40px",marginLeft:"30px", color:"salmon"}}/>
<FaArrowAltCircleRight
onClick={this.next}
style={{
marginTop: "40px",
marginBottom: "40px",
borderRadius: "3em",
fontSize: "40px",
marginLeft: "30px",
color: "salmon",
}}
/>
</div>
</div>
);

View File

@@ -1,22 +0,0 @@
[{
"title": "Framework for determining the suitability of blockchain: Criteria and issues to consider",
"authors": "Vikas Hassija, Sherali Zeadally, Ishan Jain, Aman Tahiliani, Vinay Chamola, Shashank Gupta",
"publish_date": "29 July 2021",
"abstract": "Various distributed ledger technologies (DLTs), such as blockchain, have evolved significantly in recent years. These technologies provide a robust and effective solution for providing confidentiality, integrity, nonrepudiation, authentication, and transparency. While blockchain has many advantages, it has various limitations as well, such as complexity, low throughput, privacy, and so on. We discuss the issues that must be considered when deciding whether to use these technologies in a given case or not. We describe the operation of blockchain, application areas where blockchain is suitable, and those where it is not. We also discuss the applicability of other emerging DLTs, apart from blockchain technology, such as Hashgraph, Zcash, Nano coin, and IOTA.",
"link": "https://onlinelibrary.wiley.com/doi/abs/10.1002/ett.4334"
},
{
"title": "Privacy-Preserving and Incentivized Contact Tracing for COVID-19 Using Blockchain",
"authors": "Naren, Aman Tahiliani, Vikas Hassija, Vinay Chamola, Salil S. Kanhere, Mohsen Guizani",
"publish_date": "27 September 2021",
"abstract": "Many countries across the world have not been entirely successful in their attempts to contain the spread of the COVID-19 virus, which has caused, quite possibly, one of the greatest disasters of the 21st century. A rich variety of contact tracing applications, each offering its own unique set of features, are currently being used to track the spread of the virus from person to person, and isolate/quarantine suspected individuals. However, existing approaches have not been very successful since they lack incentives to motivate users to use them actively. Although each solution provides some form of privacy protection and data security, loopholes do exist, and there is scope for improvement. In this context, we explore the use of blockchain to help in advancing contact tracing applications. In this article, we describe how blockchain could offer enhanced data security and functionality without compromising users' privacy. The effectiveness of contact tracing applications improves with the user base. In this regard, we explore how blockchain-based smart contracts can be used to offer incentives to users at various stages of the contact tracing process. Next, we lay down a plan for future contact tracing frameworks that provide the advantages of blockchain and user incentives, and all the best features available in current solutions.",
"link": "https://ieeexplore.ieee.org/abstract/document/9548968"
},
{
"title": "Machine Unlearning: Its Need and Implementation Strategies",
"authors": "Aman Tahiliani, Vikas Hassija, Vinay Chamola, Mohsen Guizani",
"publish_date": "05 August 2021",
"abstract": " Generally when users share information about themselves on some online platforms, they knowingly or unknowingly allow this data to be used by the companies behind these companies for various purposes including selling this information to advertisers as well as using it to better enrich their predictive models. In the event of the user changing their minds on allowing such data about them to be able to be used by the companies, it becomes a strenuous task for the companies to get rid of the influence of this collected data, especially when it has been used to train their machine learning models. Recent legislations by governing bodies, like the European Union, grant people the right to choose where data about them may be used, including a right to have their data and its resulting influence be completely removed from a companys databases and machine learning models. To be able to do this at scale new machine unlearning solutions need to be invented. In this paper, we look at some of these early models of machine unlearning strategies that have been proposed.",
"link": "https://dl.acm.org/doi/abs/10.1145/3474124.3474158"
}
]

54
src/css/about.css Normal file
View File

@@ -0,0 +1,54 @@
.AboutComponent {
opacity: 5;
width: 100%;
margin-top: 80px;
padding-top: 5.5%;
padding-bottom: 4%;
}
h1 {
position: relative;
}
.NameImage {
height: 350px;
width: 350px;
border-radius: 5.7em;
border: 2px solid black;
}
.InfoColumn h2 {
color: rgb(5, 255, 180);
font-size: 40px;
}
.InfoColumn h3 {
margin-bottom: 30px;
color: salmon;
}
ul {
list-style-position: inside;
}
li {
text-align: justify;
padding-left: 5%;
}
.InfoColumn {
padding-right: 5%;
}
li > a {
color: hotpink;
}
.Info {
font-size: larger;
}
.Info li {
margin-top: 10px;
list-style-type: square;
}

42
src/css/contact.css Normal file
View File

@@ -0,0 +1,42 @@
input,
textarea {
background-color: black;
width: 35%;
height: 40px;
margin-top: 25px;
margin-bottom: 5px;
color: white;
/* padding-top: 5.5%;
padding-bottom: 4%; */
padding: auto;
padding-left: 15px;
border: none;
border-bottom: 2px solid aquamarine;
font-size: larger;
}
input[type="text"]:focus {
border: none;
border-bottom: 3px solid salmon;
outline: none;
}
.MessageBox {
height: auto;
display: inline-block;
/* text-overflow: ellipsis; */
}
.MessageBox[type="textarea"]:focus {
border: 3px solid salmon;
outline: none;
}
button {
margin-top: 20px;
margin-bottom: 30px;
border: 2px solid rgb(122, 224, 143);
color: darkblue;
border-radius: 0.8em;
width: auto;
height: 40px;
font-size: larger;
font-weight: 600;
background-color: rgb(5, 255, 180);
}

50
src/css/devtools.css Normal file
View File

@@ -0,0 +1,50 @@
.dev-tools-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 20px;
padding: 20px;
}
.dev-tool {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding-left: 3%;
padding-right: 3%;
}
.dev-tool-logo {
width: 80px;
height: 80px;
object-fit: contain;
transition: transform 0.3s ease;
}
.dev-tool-logo:hover {
transform: scale(1.1);
}
@keyframes toolAnimation {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media screen and (max-width: 768px) {
.dev-tool {
width: 150px;
}
}
@media screen and (max-width: 480px) {
.dev-tool {
width: 120px;
}
}

52
src/css/experience.css Normal file
View File

@@ -0,0 +1,52 @@
.ExperienceComponent {
opacity: 5;
margin-top: 60px;
padding-top: 20px;
padding-bottom: 3%;
margin-left: 4%;
margin-right: 4%;
}
.Company-Image {
width: 65%;
border: 3px solid #b5ead7;
border-radius: 10px;
margin-bottom: 10%;
margin-top: 10%;
padding: 20px;
}
.Company {
font-size: 50px;
font-weight: bold;
font-style: normal;
color: lightyellow;
margin-bottom: 5%;
margin-top: 10%;
}
li {
list-style-position: outside;
margin-bottom: 10px;
}
.Company1 {
margin-bottom: 20px;
}
.experience-details {
padding-left: 3%;
padding-top: 2%;
padding-right: 3%;
width: 90%;
border: 2px solid white;
border-radius: 15px;
margin-left: auto;
margin-right: auto;
}
.JobTitle {
color: #baffc9;
font-weight: bold;
font-size: 30px;
}

45
src/css/header.css Normal file
View File

@@ -0,0 +1,45 @@
.menu-header {
padding-left: 50px;
padding-right: 50px;
height: "50px";
margin-bottom: 40px;
}
.navRow {
height: 100%;
margin-top: 40px;
line-height: 100%;
}
.NameCol {
font-size: xx-large;
font-weight: bold;
color: salmon;
font-style: italic;
}
.nonNameCol {
font-size: larger;
padding-top: 1%;
color: aquamarine;
}
.header a:link {
text-decoration: none;
color: aquamarine;
}
.header a:visited {
text-decoration: none;
color: aquamarine;
}
.header a:hover {
text-decoration: none;
color: aquamarine;
}
.header a:active {
text-decoration: none;
color: aquamarine;
}

103
src/css/home.css Normal file
View File

@@ -0,0 +1,103 @@
.home {
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 100vh;
background-color: #f0f0f0;
}
.content {
flex-grow: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.intro {
text-align: center;
animation: fadeIn 1s ease-in-out;
}
.intro h1 {
font-size: 3em;
color: #333;
animation: slideIn 1s ease-in-out;
}
.intro p {
font-size: 1.5em;
color: #666;
animation: slideIn 1s ease-in-out;
}
.intro nav ul {
list-style-type: none;
padding: 0;
}
.intro nav ul li {
display: inline;
margin: 0 15px;
animation: fadeIn 1s ease-in-out;
}
.intro nav ul li a {
text-decoration: none;
color: #3498db;
font-size: 1.2em;
}
.intro nav ul li a:hover {
text-decoration: underline;
}
/* Transition animations */
.fade-enter {
opacity: 0;
transform: scale(0.9);
}
.fade-enter-active {
opacity: 1;
transform: scale(1);
transition: opacity 300ms, transform 300ms;
}
.fade-exit {
opacity: 1;
transform: scale(1);
}
.fade-exit-active {
opacity: 0;
transform: scale(0.9);
transition: opacity 300ms, transform 300ms;
}
/* Keyframes for animations */
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slideIn {
from {
transform: translateY(-20px);
}
to {
transform: translateY(0);
}
}
.footer {
width: 100%;
padding: 20px 0;
background-color: #f0f0f0;
text-align: center;
}

41
src/css/publication.css Normal file
View File

@@ -0,0 +1,41 @@
table,
th,
td {
border-collapse: collapse;
}
th,
td {
padding: 15px;
text-align: left;
}
tr {
height: auto;
}
tr:hover {
background-color: salmon;
}
.publication-detail {
padding: 30px;
margin: 40px;
border: 1px solid white;
border-radius: 2em;
white-space: normal;
overflow: auto;
text-overflow: ellipsis;
text-align: justify;
padding-left: 5%;
padding-right: 5%;
}
.publication-detail h3 {
font-size: xx-large;
color: aquamarine;
}
.publication-detail a {
color: aquamarine;
}

47
src/css/socialmedia.css Normal file
View File

@@ -0,0 +1,47 @@
.social-media {
margin-top: 50px;
margin-bottom: 100px;
text-align: center;
}
.social-media h2 {
font-size: 1.5em;
color: #333;
}
.social-media ul {
list-style-type: none;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
}
.social-media ul li {
display: flex;
justify-content: center;
align-items: center;
margin: 0 10px;
padding-left: 3%;
padding-right: 3%;
}
.social-media ul li a {
display: flex;
justify-content: center;
align-items: center;
}
.social-icon {
width: 50px;
height: 50px;
transition: fill 0.3s ease;
}
.social-icon.white {
filter: invert(1);
}
.social-media ul li a:hover .social-icon {
fill: salmon;
}

62
src/data/experience.json Normal file
View File

@@ -0,0 +1,62 @@
[
{
"company": "Rimidi",
"title": "Software Engineer",
"points": [
"Building Interoperable Health data parsers in order to be able to ingest health information from any US Electronic Health Record systems and write information back to them.",
"Focused on upgrades to the existing Rimidi Infrastructure to aid with efforts towards containerization and integration of cloud-first architecture.",
"Owner of the Rimidify (Data interpretation) and EhrMes (Data Writeback) micro-services and domain expert on FHIR and HL7 specs."
],
"term": "June 2024 - Present"
},
{
"company": "Georgia Tech",
"title": "Graduate Teaching Assistant (CS 6440)",
"points": [
"Working under the guidance of Dr. Jon Duke as a teaching assistant for his course CS-6440 Introduction to Health Informatics in Spring 2023 to mentor students about Healthcare IT, including technologies such as HL7 FHIR. Interoperability, Clinical Decision Support (CDS) and the use of LLMs in healthcare.",
"Helped students gain hands on experience with new healthcare technologies such as Hapi FHIR (R4), Mirth Connect, creation of SMART on FHIR applications and more using Python, Java, Docker and Heroku. ",
"Responsibilities include grading of student assignments and examinations for the first half of the semester and mentoring students for their course projects by guiding them on the scope and viability of their project."
],
"term": "Jan 2023 - Present"
},
{
"company": "Rimidi",
"title": "Software Engineering Intern",
"points": [
"Spearheaded the creation of a universal data-standardization microservice capable of processing patient health information, including smart-device and lab data from 7 EHRs (including Epic and Cerner) regardless of FHIR API variations (DSTU, STU3, and R4), facilitating a 30% improvement in patient data refresh times compared to the monolith.",
"Slashed 3+ hours of integration effort per week through enabling push-pull based tenant mapping sync functionality.",
"Championed code cleanliness and maintainability, achieving robust 94% test coverage and logging, guaranteeing efficiency and scalability for future growth"
],
"term": "May 2023 - Dec 2023"
},
{
"company": "Innovaccer",
"title": "Software Development Engineer Intern (Data Platform)",
"points": [
"Worked as part of the Data Activation Platform team to create and maintain FHIR enabling microservices responsible for parsing and standardizing healthcare data from different sources spanning different data formats such as HL7, CCLF, CCDA etc.",
"Developed the Aggregator Metrics microservice to collect metadata of time taken by DAP microservices to process data for each customer and source type and aggregating them into Snowflake tables in order to represent them in graphical manner.",
"Created a framework for reporting of success and failure metrics of Merge and Split jobs in EMPI (Enterprise Master Patient Index) service."
],
"term": "Feb 2022 - July 2022"
},
{
"company": "Innovaccer",
"title": "Summer Intern SDE (Backend- License Management)",
"points": [
"Created and maintained the backend for two platform level services, License Management and Platform Configuration, as one of three Backend engineers in a team of 9.",
"Maintained over 25 API endpoints using Django RestFramework and ported existing MongoDB collections to PostgreSQL.",
"Optimized a critical API endpoint by reducing the response time from 16 seconds down to under 3 using Redis Caching and bulk creation/updation."
],
"term": "May 2021 - August 2021"
},
{
"company": "Medsupervision",
"title": "Web Development Intern",
"points": [
"Created frontend views and components for the MEDSupervision healthcare platform as per design, using ReactJs framework",
"Designed the frontend as well as backend for a Medicine Comparison tool, which suggests alternate medicines containing same or similar salts, using Flask and React.",
"Optimized website load times."
],
"term": "Oct 2020 - April 2021"
}
]

View File

@@ -0,0 +1,14 @@
[
{
"name": "Python"
},
{
"name": "Java"
},
{
"name": "C++"
},
{
"name": "JavaScript"
}
]

View File

@@ -0,0 +1,30 @@
[
{
"title": "Framework for determining the suitability of blockchain: Criteria and issues to consider",
"authors": "Vikas Hassija, Sherali Zeadally, Ishan Jain, Aman Tahiliani, Vinay Chamola, Shashank Gupta",
"publish_date": "29 July 2021",
"abstract": "Various distributed ledger technologies (DLTs), such as blockchain, have evolved significantly in recent years. These technologies provide a robust and effective solution for providing confidentiality, integrity, nonrepudiation, authentication, and transparency. While blockchain has many advantages, it has various limitations as well, such as complexity, low throughput, privacy, and so on. We discuss the issues that must be considered when deciding whether to use these technologies in a given case or not. We describe the operation of blockchain, application areas where blockchain is suitable, and those where it is not. We also discuss the applicability of other emerging DLTs, apart from blockchain technology, such as Hashgraph, Zcash, Nano coin, and IOTA.",
"link": "https://onlinelibrary.wiley.com/doi/abs/10.1002/ett.4334"
},
{
"title": "Privacy-Preserving and Incentivized Contact Tracing for COVID-19 Using Blockchain",
"authors": "Naren, Aman Tahiliani, Vikas Hassija, Vinay Chamola, Salil S. Kanhere, Mohsen Guizani",
"publish_date": "27 September 2021",
"abstract": "Many countries across the world have not been entirely successful in their attempts to contain the spread of the COVID-19 virus, which has caused, quite possibly, one of the greatest disasters of the 21st century. A rich variety of contact tracing applications, each offering its own unique set of features, are currently being used to track the spread of the virus from person to person, and isolate/quarantine suspected individuals. However, existing approaches have not been very successful since they lack incentives to motivate users to use them actively. Although each solution provides some form of privacy protection and data security, loopholes do exist, and there is scope for improvement. In this context, we explore the use of blockchain to help in advancing contact tracing applications. In this article, we describe how blockchain could offer enhanced data security and functionality without compromising users' privacy. The effectiveness of contact tracing applications improves with the user base. In this regard, we explore how blockchain-based smart contracts can be used to offer incentives to users at various stages of the contact tracing process. Next, we lay down a plan for future contact tracing frameworks that provide the advantages of blockchain and user incentives, and all the best features available in current solutions.",
"link": "https://ieeexplore.ieee.org/abstract/document/9548968"
},
{
"title": "Machine Unlearning: Its Need and Implementation Strategies",
"authors": "Aman Tahiliani, Vikas Hassija, Vinay Chamola, Mohsen Guizani",
"publish_date": "05 August 2021",
"abstract": " Generally when users share information about themselves on some online platforms, they knowingly or unknowingly allow this data to be used by the companies behind these companies for various purposes including selling this information to advertisers as well as using it to better enrich their predictive models. In the event of the user changing their minds on allowing such data about them to be able to be used by the companies, it becomes a strenuous task for the companies to get rid of the influence of this collected data, especially when it has been used to train their machine learning models. Recent legislations by governing bodies, like the European Union, grant people the right to choose where data about them may be used, including a right to have their data and its resulting influence be completely removed from a companys databases and machine learning models. To be able to do this at scale new machine unlearning solutions need to be invented. In this paper, we look at some of these early models of machine unlearning strategies that have been proposed.",
"link": "https://dl.acm.org/doi/abs/10.1145/3474124.3474158"
},
{
"title": "A Solution to Evade Social Media Distraction",
"authors": " Aman Tahiliani, Adarsh Kumar Verma, Shubham Agrawal, Kavita Pandey",
"publish_date": "04 August 2022",
"abstract": " With the rapidly growing numbers of people who have access to a smartphone and an internet connection, the usage of these mobile devices, especially to consume content on social media has also seen a drastic increase. This was accelerated even more due to the pandemic. Such an increased screen time due to social media consumption has left many people feeling less productive, instead focusing on their screens even while at work. A common method people try in order to combat this problem is by deleting or disabling their social media accounts altogether. However, such a tactic more often than not is only a temporary fix as most of the people who try it revert back to their habits in less than a week, or, start feeling a common fear of missing out on their social media updates. In this paper we detail the negative effects of social media addiction, look at suggested methods of combating social media addiction and also propose a method to be able to keep up with the happenings of your social media without feeling the constant need to check their phones repeatedly.",
"link": "https://dl.acm.org/doi/abs/10.1145/3549206.3549298"
}
]

View File

@@ -1,13 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}

View File

@@ -1,14 +1,14 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
const root = ReactDOM.createRoot(document.getElementById('root'));
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
</React.StrictMode>,
);
// If you want to start measuring performance in your app, pass a function

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x31_42-github"><g><path d="M179.858,392.884c0,1.855-2.133,3.339-4.822,3.339c-3.062,0.277-5.193-1.205-5.193-3.339c0-1.854,2.132-3.34,4.823-3.34 C177.448,389.267,179.858,390.75,179.858,392.884z M151.017,388.709c-0.649,1.857,1.205,3.988,3.987,4.544 c2.411,0.928,5.194,0,5.75-1.853c0.558-1.856-1.205-3.988-3.987-4.824C154.355,385.929,151.666,386.855,151.017,388.709 L151.017,388.709z M192.008,387.133c-2.689,0.65-4.544,2.411-4.267,4.544c0.279,1.854,2.69,3.063,5.473,2.413 c2.69-0.65,4.544-2.413,4.266-4.267C197.201,388.06,194.698,386.855,192.008,387.133z M253.032,31.747 c-128.634,0-227.031,97.656-227.031,226.291c0,102.851,64.732,190.862,157.197,221.839c11.871,2.133,16.044-5.194,16.044-11.223 c0-5.75-0.277-37.469-0.277-56.942c0,0-64.921,13.911-78.554-27.639c0,0-10.572-26.988-25.782-33.944 c0,0-21.238-14.56,1.484-14.281c0,0,23.094,1.856,35.799,23.928c20.31,35.799,54.346,25.505,67.607,19.383 c2.134-14.839,8.162-25.133,14.84-31.254c-51.843-5.75-104.149-13.263-104.149-102.479c0-25.504,7.048-38.302,21.888-54.625 c-2.411-6.028-10.295-30.882,2.411-62.972c19.383-6.028,63.99,25.041,63.99,25.041c18.55-5.194,38.489-7.883,58.242-7.883 c19.755,0,39.694,2.689,58.241,7.883c0,0,44.611-31.161,63.993-25.041c12.705,32.181,4.822,56.944,2.412,62.972 c14.84,16.415,23.926,29.212,23.926,54.625c0,89.496-54.625,96.636-106.466,102.479c8.532,7.325,15.765,21.238,15.765,43.032 c0,31.253-0.277,69.928-0.277,77.531c0,6.028,4.266,13.355,16.044,11.223c92.742-30.79,155.62-118.802,155.62-221.652 C485.999,129.403,381.665,31.747,253.032,31.747z M116.146,351.614c-1.206,0.927-0.928,3.061,0.647,4.82 c1.484,1.485,3.617,2.133,4.823,0.93c1.205-0.93,0.927-3.061-0.649-4.823C119.484,351.057,117.352,350.408,116.146,351.614z M106.129,344.102c-0.648,1.205,0.278,2.688,2.134,3.616c1.483,0.929,3.339,0.649,3.988-0.649 c0.648-1.205-0.278-2.688-2.133-3.617C108.263,342.895,106.777,343.174,106.129,344.102z M136.178,377.116 c-1.483,1.206-0.927,3.989,1.205,5.75c2.133,2.134,4.822,2.413,6.028,0.927c1.205-1.204,0.649-3.987-1.206-5.748 C140.165,375.912,137.383,375.633,136.178,377.116z M125.605,363.485c-1.484,0.926-1.484,3.337,0,5.47 c1.484,2.134,3.988,3.061,5.193,2.134c1.483-1.206,1.483-3.617,0-5.75C129.5,363.207,127.09,362.278,125.605,363.485 L125.605,363.485z"/></g></g><g id="Layer_1"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x31_49-goodreads"><g><path d="M121.789,388.382h2.515c11.413,0,22.914,0,34.324,0.094c1.439,0,2.786-0.361,3.236,1.886 c6.379,31.358,26.956,49.061,56.519,57.416c24.17,6.828,48.61,7.009,73.051,1.618c30.37-6.65,50.318-25.429,61.101-54.273 c7.188-19.319,9.613-39.354,9.884-59.753c0.09-5.21,0.27-42.231-0.18-47.441l-0.808-0.27c-0.72,1.348-1.53,2.605-2.248,3.953 c-19.856,38.729-55.081,60.562-94.707,62.09c-92.549,3.594-152.211-51.218-154.547-158.324 c-0.449-21.295,1.618-42.141,7.458-62.628c18.509-63.886,67.03-106.208,138.285-106.746c55.08-0.36,91.201,34.773,104.41,63.167 c0.45,0.987,1.167,2.066,2.156,1.707V35.529h39.806c0,251.86,0.089,298.495,0.089,298.495 c-0.089,70.534-23.989,129.121-92.55,145.742c-62.448,15.185-142.867,4.313-176.112-51.396 C126.282,416.239,122.867,402.941,121.789,388.382L121.789,388.382z M253.244,58.801c-47.173-0.45-97.491,36.57-103.332,120.223 c-3.684,53.014,13.298,109.802,64.245,133.525c24.801,11.59,66.763,13.477,97.312-7.819 c42.771-29.83,56.339-87.158,49.241-138.375C351.994,102.469,317.759,58.531,253.244,58.801z" style="fill:#7D5024;"/></g></g><g id="Layer_1"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x31_73-instagram"><g><linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="74.3496" x2="393.8339" y1="83.7275" y2="386.7129"><stop offset="0" style="stop-color:#FEC053"/><stop offset="0.3273" style="stop-color:#F2203E"/><stop offset="0.6485" style="stop-color:#B729A8"/><stop offset="1" style="stop-color:#5342D6"/></linearGradient><path d="M256.052,138.088c-65.268,0-117.913,52.646-117.913,117.912 c0,65.267,52.645,117.91,117.913,117.91c65.267,0,117.911-52.644,117.911-117.91C373.963,190.734,321.318,138.088,256.052,138.088 z M256.052,332.659c-42.177,0-76.659-34.38-76.659-76.659c0-42.279,34.378-76.657,76.659-76.657 c42.277,0,76.657,34.378,76.657,76.657C332.709,298.279,298.229,332.659,256.052,332.659L256.052,332.659z M406.288,133.266 c0,15.291-12.315,27.502-27.502,27.502c-15.292,0-27.502-12.314-27.502-27.502c0-15.188,12.313-27.503,27.502-27.503 C393.973,105.763,406.288,118.077,406.288,133.266z M484.382,161.177c-1.743-36.839-10.158-69.474-37.148-96.36 c-26.886-26.887-59.52-35.302-96.36-37.148c-37.971-2.155-151.777-2.155-189.747,0c-36.739,1.743-69.372,10.159-96.361,37.046 c-26.99,26.887-35.302,59.52-37.149,96.36c-2.155,37.969-2.155,151.777,0,189.747c1.745,36.842,10.159,69.473,37.149,96.361 c26.989,26.887,59.521,35.301,96.361,37.148c37.969,2.154,151.776,2.154,189.747,0c36.841-1.744,69.475-10.161,96.36-37.148 c26.887-26.889,35.302-59.52,37.148-96.361C486.538,312.853,486.538,199.147,484.382,161.177z M435.329,391.563 c-8.004,20.112-23.5,35.61-43.716,43.716c-30.273,12.009-102.108,9.236-135.562,9.236c-33.456,0-105.393,2.669-135.563-9.236 c-20.114-8.005-35.611-23.498-43.717-43.716C64.766,361.29,67.538,289.455,67.538,256s-2.669-105.391,9.234-135.562 c8.006-20.114,23.5-35.61,43.717-43.716c30.273-12.007,102.107-9.236,135.563-9.236c33.453,0,105.391-2.668,135.562,9.236 c20.113,8.002,35.609,23.5,43.716,43.716c12.007,30.272,9.237,102.107,9.237,135.562S447.336,361.392,435.329,391.563z" style="fill:url(#SVGID_1_);"/></g></g><g id="Layer_1"/></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="_x32_01-linkedin"><g><rect height="316.249" style="fill:#0274B3;" width="102.59" x="26.623" y="169.75"/><path d="M408.65,173.458c-1.092-0.341-2.123-0.715-3.268-1.037c-1.381-0.313-2.754-0.577-4.16-0.8 c-5.443-1.095-11.414-1.871-18.408-1.871c-59.805,0-97.746,43.617-110.238,60.461V169.75h-102.59v316.249h102.588V313.501 c0,0,77.525-108.273,110.24-28.754v201.252h102.563V272.588C485.377,224.804,452.717,184.986,408.65,173.458z" style="fill:#0274B3;"/><path d="M76.802,126.626c27.708,0,50.176-22.522,50.176-50.313c0-27.785-22.469-50.312-50.176-50.312 c-27.71,0-50.179,22.526-50.179,50.312C26.623,104.103,49.092,126.626,76.802,126.626z" style="fill:#0274B3;"/></g></g><g id="Layer_1"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,6 +1,6 @@
const reportWebVitals = onPerfEntry => {
const reportWebVitals = (onPerfEntry) => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);

View File

@@ -2,4 +2,4 @@
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';
import "@testing-library/jest-dom";

2
src/views/Portfolio.js Normal file
View File

@@ -0,0 +1,2 @@
import React from "react";
import "./App.css";

3074
yarn.lock

File diff suppressed because it is too large Load Diff