mirror of
https://github.com/AmanTahiliani/Portfolio.git
synced 2026-08-07 11:52:48 -04:00
Linting
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
"@testing-library/react": "^13.0.0",
|
"@testing-library/react": "^13.0.0",
|
||||||
"@testing-library/user-event": "^13.2.1",
|
"@testing-library/user-event": "^13.2.1",
|
||||||
"bootstrap": "^5.1.3",
|
"bootstrap": "^5.1.3",
|
||||||
|
"prettier": "^3.3.2",
|
||||||
"react": "^18.1.0",
|
"react": "^18.1.0",
|
||||||
"react-bootstrap": "^2.3.1",
|
"react-bootstrap": "^2.3.1",
|
||||||
"react-dom": "^18.1.0",
|
"react-dom": "^18.1.0",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="favicon.ico" />
|
<link rel="icon" href="favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
Learn how to configure a non-root public URL by running `npm run build`.
|
Learn how to configure a non-root public URL by running `npm run build`.
|
||||||
-->
|
-->
|
||||||
<title>Aman Tahiliani</title>
|
<title>Aman Tahiliani</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<!--
|
<!--
|
||||||
@@ -37,6 +36,5 @@
|
|||||||
To begin the development, run `npm start` or `yarn start`.
|
To begin the development, run `npm start` or `yarn start`.
|
||||||
To create a production bundle, use `npm run build` or `yarn build`.
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
-->
|
-->
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1 +1,19 @@
|
|||||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
{
|
||||||
|
"name": "",
|
||||||
|
"short_name": "",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#ffffff",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
|
|||||||
148
src/App.css
148
src/App.css
@@ -1,74 +1,74 @@
|
|||||||
.App {
|
.App {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: black;
|
background-color: black;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
left: 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;
|
color: azure;
|
||||||
overflow: hidden
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
.App-logo {
|
||||||
height: 40vmin;
|
height: 40vmin;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
@media (prefers-reduced-motion: no-preference) {
|
||||||
.App-logo {
|
.App-logo {
|
||||||
animation: App-logo-spin infinite 20s linear;
|
animation: App-logo-spin infinite 20s linear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header {
|
.App-header {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
font-size: calc(10px + 2vmin);
|
font-size: calc(10px + 2vmin);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-link {
|
.App-link {
|
||||||
color: #61dafb;
|
color: #61dafb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
@keyframes App-logo-spin {
|
||||||
from {
|
from {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.About {
|
.About {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 120px;
|
top: 120px;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin-left: 15% !important;
|
margin-left: 15% !important;
|
||||||
margin-right: 15% !important;
|
margin-right: 15% !important;
|
||||||
border: 10px solid aquamarine;
|
border: 10px solid aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.publications {
|
.publications {
|
||||||
margin-top: 230px;
|
margin-top: 230px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slick-dots button:before {
|
.slick-dots button:before {
|
||||||
color: grey !important;
|
color: grey !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slick-dots li.slick-active button:before {
|
.slick-dots li.slick-active button:before {
|
||||||
color: White !important;
|
color: White !important;
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/App.js
25
src/App.js
@@ -9,29 +9,34 @@ import DevToolsComponent from "./components/devtools";
|
|||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
<div className="App" >
|
<div className="App">
|
||||||
<meta name="Aman Tahiliani's Portfolio"></meta>
|
<meta name="Aman Tahiliani's Portfolio"></meta>
|
||||||
<Header />
|
<Header />
|
||||||
<hr></hr>
|
<hr></hr>
|
||||||
<About className ="About" id="About"/>
|
<About className="About" id="About" />
|
||||||
<div className="publications" id="Publications">
|
<div className="publications" id="Publications">
|
||||||
<h2 style={{color:"salmon", fontSize:"50px"}}><b>Publications</b></h2>
|
<h2 style={{ color: "salmon", fontSize: "50px" }}>
|
||||||
<SimpleSlider/>
|
<b>Publications</b>
|
||||||
|
</h2>
|
||||||
|
<SimpleSlider />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="Experience" id="Experience">
|
<div className="Experience" id="Experience">
|
||||||
<h2 style={{color:"salmon", fontSize:"50px", marginTop:"110px"}}><b>Experience</b></h2>
|
<h2 style={{ color: "salmon", fontSize: "50px", marginTop: "110px" }}>
|
||||||
<Experience/>
|
<b>Experience</b>
|
||||||
|
</h2>
|
||||||
|
<Experience />
|
||||||
</div>
|
</div>
|
||||||
<div className="DevTools" id="DevTools">
|
<div className="DevTools" id="DevTools">
|
||||||
<h2 style={{color:"salmon", fontSize:"50px"}}><b>Dev Tools</b></h2>
|
<h2 style={{ color: "salmon", fontSize: "50px" }}>
|
||||||
<DevToolsComponent/>
|
<b>Dev Tools</b>
|
||||||
|
</h2>
|
||||||
|
<DevToolsComponent />
|
||||||
</div>
|
</div>
|
||||||
{/* <div className="Contact" id="Contact">
|
{/* <div className="Contact" id="Contact">
|
||||||
<h2 style={{color:"salmon", fontSize:"50px", marginTop:"60px"}}><b>Contact Me!</b></h2>
|
<h2 style={{color:"salmon", fontSize:"50px", marginTop:"60px"}}><b>Contact Me!</b></h2>
|
||||||
<Contact/>
|
<Contact/>
|
||||||
</div> */}
|
</div> */}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { render, screen } from '@testing-library/react';
|
import { render, screen } from "@testing-library/react";
|
||||||
import App from './App';
|
import App from "./App";
|
||||||
|
|
||||||
test('renders learn react link', () => {
|
test("renders learn react link", () => {
|
||||||
render(<App />);
|
render(<App />);
|
||||||
const linkElement = screen.getByText(/learn react/i);
|
const linkElement = screen.getByText(/learn react/i);
|
||||||
expect(linkElement).toBeInTheDocument();
|
expect(linkElement).toBeInTheDocument();
|
||||||
|
|||||||
@@ -31,10 +31,11 @@ class About extends Component {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
Currently working at <a href="https://rimidi.com/">Rimidi</a>,
|
Currently working at <a href="https://rimidi.com/">Rimidi</a>,
|
||||||
a Software as a Service (SaaS) startup, full-time as a Software
|
a Software as a Service (SaaS) startup, full-time as a
|
||||||
Engineer with a special emphasis on data interoperabiltiy and
|
Software Engineer with a special emphasis on data
|
||||||
building a robust set of tools to enable secure flow of
|
interoperabiltiy and building a robust set of tools to enable
|
||||||
sensitive patient health information across health systems.
|
secure flow of sensitive patient health information across
|
||||||
|
health systems.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Graduated from Georgia Tech in 2024 with a Master's Of Science
|
Graduated from Georgia Tech in 2024 with a Master's Of Science
|
||||||
@@ -63,7 +64,7 @@ class About extends Component {
|
|||||||
href={resume}
|
href={resume}
|
||||||
style={{ color: "black", textDecoration: "none" }}
|
style={{ color: "black", textDecoration: "none" }}
|
||||||
download="Aman_Tahiliani_Resume.pdf"
|
download="Aman_Tahiliani_Resume.pdf"
|
||||||
>
|
>
|
||||||
Resume
|
Resume
|
||||||
</a>
|
</a>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -3,27 +3,38 @@ import "bootstrap/dist/css/bootstrap.css";
|
|||||||
// import { Row, Col} from "react-bootstrap";
|
// import { Row, Col} from "react-bootstrap";
|
||||||
import "../css/experience.css";
|
import "../css/experience.css";
|
||||||
import ExperienceCard from "./experienceCard";
|
import ExperienceCard from "./experienceCard";
|
||||||
import experienceData from "../data/experience.json"
|
import experienceData from "../data/experience.json";
|
||||||
import InnovaccerLogo from "../media/logos/companies/innovaccerLogo.png";
|
import InnovaccerLogo from "../media/logos/companies/innovaccerLogo.png";
|
||||||
import Medsupervision from "../media/logos/companies/logo.png"
|
import Medsupervision from "../media/logos/companies/logo.png";
|
||||||
import GeorgiaTech from "../media/logos/companies/GeorgiaTech.png"
|
import GeorgiaTech from "../media/logos/companies/GeorgiaTech.png";
|
||||||
import Rimidi from "../media/logos/companies/rimidi.png"
|
import Rimidi from "../media/logos/companies/rimidi.png";
|
||||||
|
|
||||||
const logos = {Innovaccer:InnovaccerLogo,Medsupervision:Medsupervision,"Georgia Tech":GeorgiaTech,Rimidi:Rimidi}
|
const logos = {
|
||||||
|
Innovaccer: InnovaccerLogo,
|
||||||
|
Medsupervision: Medsupervision,
|
||||||
|
"Georgia Tech": GeorgiaTech,
|
||||||
|
Rimidi: Rimidi,
|
||||||
|
};
|
||||||
|
|
||||||
class Experience extends Component {
|
class Experience extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="ExperienceComponent">
|
<div className="ExperienceComponent">
|
||||||
{experienceData.map(({company,title, points, term}) =>(
|
{experienceData.map(({ company, title, points, term }) => (
|
||||||
<div>
|
<div>
|
||||||
<ExperienceCard company={company} title={title} points={points} photo={logos[company]} term={term}/>
|
<ExperienceCard
|
||||||
<hr/>
|
company={company}
|
||||||
|
title={title}
|
||||||
|
points={points}
|
||||||
|
photo={logos[company]}
|
||||||
|
term={term}
|
||||||
|
/>
|
||||||
|
<hr />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
export default Experience;
|
|
||||||
|
export default Experience;
|
||||||
|
|||||||
@@ -7,20 +7,20 @@ class Publication extends Component {
|
|||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="publication-detail">
|
<div className="publication-detail">
|
||||||
<h3>{this.props.title}</h3>
|
<h3>{this.props.title}</h3>
|
||||||
<Row>
|
<Row>
|
||||||
<Col>Authors: {this.props.authors}</Col>
|
<Col>Authors: {this.props.authors}</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<div>Publish Date: {this.props.publish_date}</div>
|
<div>Publish Date: {this.props.publish_date}</div>
|
||||||
</Row>
|
</Row>
|
||||||
<div>Link: <a href={this.props.link}>{this.props.link}</a></div>
|
<div>
|
||||||
<br/>
|
Link: <a href={this.props.link}>{this.props.link}</a>
|
||||||
<div style={{fontWeight:"bolder"}}>Abstract:</div>
|
|
||||||
<div>{this.props.abstract}</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<br />
|
||||||
|
<div style={{ fontWeight: "bolder" }}>Abstract:</div>
|
||||||
|
<div>{this.props.abstract}</div>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,72 +3,70 @@ import "bootstrap/dist/css/bootstrap.css";
|
|||||||
// import { Row, Col, TabContainer } from "react-bootstrap";
|
// import { Row, Col, TabContainer } from "react-bootstrap";
|
||||||
import "../css/contact.css";
|
import "../css/contact.css";
|
||||||
|
|
||||||
|
function Contact() {
|
||||||
|
const [name, setName] = useState("");
|
||||||
|
const [organization, setOrganization] = useState("");
|
||||||
|
const [message, setMessage] = useState("");
|
||||||
|
const [popup, setPopup] = useState("");
|
||||||
|
|
||||||
function Contact () {
|
let handleSubmit = async (e) => {
|
||||||
const [name, setName] = useState("");
|
e.preventDefault();
|
||||||
const [organization, setOrganization] = useState("");
|
try {
|
||||||
const [message, setMessage] = useState("");
|
let res = await fetch("http://localhost:8000/sendMail", {
|
||||||
const [popup, setPopup] = useState("");
|
method: "POST",
|
||||||
|
body: JSON.stringify({
|
||||||
let handleSubmit = async (e) => {
|
name: name,
|
||||||
e.preventDefault();
|
organization: organization,
|
||||||
try {
|
message: message,
|
||||||
let res = await fetch("http://localhost:8000/sendMail", {
|
}),
|
||||||
method: "POST",
|
});
|
||||||
body: JSON.stringify({
|
// let resJson = await res.json();
|
||||||
name: name,
|
console.log(res.status);
|
||||||
organization: organization,
|
if (res.status === 200) {
|
||||||
message: message,
|
setName("");
|
||||||
}),
|
setOrganization("");
|
||||||
});
|
setMessage("");
|
||||||
// let resJson = await res.json();
|
setPopup("Message sent successfully");
|
||||||
console.log(res.status)
|
} else {
|
||||||
if (res.status === 200) {
|
setPopup("Some error occured");
|
||||||
setName("");
|
|
||||||
setOrganization("");
|
|
||||||
setMessage("");
|
|
||||||
setPopup("Message sent successfully");
|
|
||||||
} else {
|
|
||||||
setPopup("Some error occured");
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.log(err);
|
|
||||||
}
|
}
|
||||||
};
|
} catch (err) {
|
||||||
return (
|
console.log(err);
|
||||||
<div>
|
}
|
||||||
<form onSubmit={handleSubmit}>
|
};
|
||||||
<input
|
return (
|
||||||
type="text"
|
<div>
|
||||||
value={name}
|
<form onSubmit={handleSubmit}>
|
||||||
placeholder="Name"
|
<input
|
||||||
onChange={(e) => setName(e.target.value)}
|
type="text"
|
||||||
required = "true"
|
value={name}
|
||||||
/>
|
placeholder="Name"
|
||||||
<br/>
|
onChange={(e) => setName(e.target.value)}
|
||||||
<input
|
required="true"
|
||||||
type="text"
|
/>
|
||||||
value={organization}
|
<br />
|
||||||
placeholder="Organization"
|
<input
|
||||||
onChange={(e) => setOrganization(e.target.value)}
|
type="text"
|
||||||
/>
|
value={organization}
|
||||||
<br/>
|
placeholder="Organization"
|
||||||
<textarea
|
onChange={(e) => setOrganization(e.target.value)}
|
||||||
className="MessageBox"
|
/>
|
||||||
type="textarea"
|
<br />
|
||||||
value={message}
|
<textarea
|
||||||
placeholder="Message"
|
className="MessageBox"
|
||||||
onChange={(e) => setMessage(e.target.value)}
|
type="textarea"
|
||||||
required = "true"
|
value={message}
|
||||||
/>
|
placeholder="Message"
|
||||||
<br/>
|
onChange={(e) => setMessage(e.target.value)}
|
||||||
<button type="submit">Send!</button>
|
required="true"
|
||||||
|
/>
|
||||||
<div className="popup">{popup ? <p>{popup}</p> : null}</div>
|
<br />
|
||||||
</form>
|
<button type="submit">Send!</button>
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
<div className="popup">{popup ? <p>{popup}</p> : null}</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default Contact;
|
export default Contact;
|
||||||
|
|||||||
@@ -1,37 +1,34 @@
|
|||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import PythonLogo from "../media/logos/languages/python-logo.png"
|
import PythonLogo from "../media/logos/languages/python-logo.png";
|
||||||
import JavaLogo from "../media/logos/languages/java-logo.png"
|
import JavaLogo from "../media/logos/languages/java-logo.png";
|
||||||
import CplusLogo from "../media/logos/languages/c++.png"
|
import CplusLogo from "../media/logos/languages/c++.png";
|
||||||
import JavaScriptLogo from "../media/logos/languages/JavaScript.webp"
|
import JavaScriptLogo from "../media/logos/languages/JavaScript.webp";
|
||||||
import '../css/devtools.css'
|
import "../css/devtools.css";
|
||||||
import Languages from "../data/programmingLaguages.json"
|
import Languages from "../data/programmingLaguages.json";
|
||||||
|
|
||||||
const logos = {
|
const logos = {
|
||||||
"Python":PythonLogo,
|
Python: PythonLogo,
|
||||||
"Java":JavaLogo,
|
Java: JavaLogo,
|
||||||
"C++":CplusLogo,
|
"C++": CplusLogo,
|
||||||
"JavaScript": JavaScriptLogo
|
JavaScript: JavaScriptLogo,
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class DevToolsComponent extends Component {
|
|
||||||
|
|
||||||
render(){
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
{/* <h2>Programming Languages</h2> */}
|
|
||||||
<div className="dev-tools-container">
|
|
||||||
{Languages.map(({name}) => (
|
|
||||||
<div className="dev-tool">
|
|
||||||
<img src={logos[name]} alt={name} className="dev-tool-logo" />
|
|
||||||
<h3>{name}</h3>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default DevToolsComponent;
|
class DevToolsComponent extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{/* <h2>Programming Languages</h2> */}
|
||||||
|
<div className="dev-tools-container">
|
||||||
|
{Languages.map(({ name }) => (
|
||||||
|
<div className="dev-tool">
|
||||||
|
<img src={logos[name]} alt={name} className="dev-tool-logo" />
|
||||||
|
<h3>{name}</h3>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DevToolsComponent;
|
||||||
|
|||||||
@@ -6,48 +6,47 @@ import "../css/experience.css";
|
|||||||
class ExperienceCard extends Component {
|
class ExperienceCard extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="experience-detail" style={{marginTop:"30px", marginBottom:"30px"}}>
|
<div
|
||||||
<Row>
|
className="experience-detail"
|
||||||
<Col xs={12} md={5} className="Company1">
|
style={{ marginTop: "30px", marginBottom: "30px" }}
|
||||||
<img src={this.props.photo} className="Company-Image"/>
|
>
|
||||||
{/* <h3 className="Company">{this.props.company}</h3> */}
|
<Row>
|
||||||
<h4>({this.props.term})</h4>
|
<Col xs={12} md={5} className="Company1">
|
||||||
</Col>
|
<img src={this.props.photo} className="Company-Image" />
|
||||||
<Col xs={12} md={7} >
|
{/* <h3 className="Company">{this.props.company}</h3> */}
|
||||||
<div className="experience-details">
|
<h4>({this.props.term})</h4>
|
||||||
<h3 className="JobTitle">{this.props.title}</h3>
|
</Col>
|
||||||
<hr/>
|
<Col xs={12} md={7}>
|
||||||
<div>
|
<div className="experience-details">
|
||||||
<ul>
|
<h3 className="JobTitle">{this.props.title}</h3>
|
||||||
{this.props.points.map((item,i) =>(
|
<hr />
|
||||||
<li>{item}</li>
|
<div>
|
||||||
))}
|
<ul>
|
||||||
</ul>
|
{this.props.points.map((item, i) => (
|
||||||
</div>
|
<li>{item}</li>
|
||||||
</div>
|
))}
|
||||||
</Col>
|
</ul>
|
||||||
</Row>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
// <div className="experience-detail">
|
||||||
|
// <h3>{this.props.title}</h3>
|
||||||
|
// <Row>
|
||||||
// <div className="experience-detail">
|
// <Col>Authors: {this.props.authors}</Col>
|
||||||
// <h3>{this.props.title}</h3>
|
// </Row>
|
||||||
// <Row>
|
// <Row>
|
||||||
// <Col>Authors: {this.props.authors}</Col>
|
// <div>Publish Date: {this.props.publish_date}</div>
|
||||||
// </Row>
|
// </Row>
|
||||||
// <Row>
|
// <div>
|
||||||
// <div>Publish Date: {this.props.publish_date}</div>
|
// Link: <a href={this.props.link}>{this.props.link}</a>
|
||||||
// </Row>
|
// </div>
|
||||||
// <div>
|
// <br />
|
||||||
// Link: <a href={this.props.link}>{this.props.link}</a>
|
// <div style={{ fontWeight: "bolder" }}>Abstract:</div>
|
||||||
// </div>
|
// <div>{this.props.abstract}</div>
|
||||||
// <br />
|
// </div>
|
||||||
// <div style={{ fontWeight: "bolder" }}>Abstract:</div>
|
|
||||||
// <div>{this.props.abstract}</div>
|
|
||||||
// </div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import Slider from "react-slick";
|
import Slider from "react-slick";
|
||||||
import publicationData from "../data/publications.json"
|
import publicationData from "../data/publications.json";
|
||||||
import Publication from "./Publication";
|
import Publication from "./Publication";
|
||||||
import "slick-carousel/slick/slick.css";
|
import "slick-carousel/slick/slick.css";
|
||||||
import "slick-carousel/slick/slick-theme.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 {
|
export default class SimpleSlider extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.next = this.next.bind(this);
|
this.next = this.next.bind(this);
|
||||||
this.previous = this.previous.bind(this);
|
this.previous = this.previous.bind(this);
|
||||||
@@ -26,16 +26,43 @@ export default class SimpleSlider extends Component {
|
|||||||
slidesToScroll: 1,
|
slidesToScroll: 1,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div style={{height:"auto"}}>
|
<div style={{ height: "auto" }}>
|
||||||
<Slider ref={c => (this.slider = c)} {...settings}>
|
<Slider ref={(c) => (this.slider = c)} {...settings}>
|
||||||
{publicationData.map(({title,authors, publish_date, abstract,link}) =>(
|
{publicationData.map(
|
||||||
<Publication title={title} authors={authors} publish_date={publish_date} abstract={abstract} link={link}/>
|
({ title, authors, publish_date, abstract, link }) => (
|
||||||
))}
|
<Publication
|
||||||
|
title={title}
|
||||||
|
authors={authors}
|
||||||
|
publish_date={publish_date}
|
||||||
|
abstract={abstract}
|
||||||
|
link={link}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Slider>
|
</Slider>
|
||||||
<div style={{ textAlign: "center"}}>
|
<div style={{ textAlign: "center" }}>
|
||||||
<FaArrowAltCircleLeft onClick={this.previous} style={{marginTop:"40px",marginBottom:"40px",borderRadius:"3em" ,fontSize:"40px", color:"aquamarine"}}/>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,54 +1,54 @@
|
|||||||
.AboutComponent {
|
.AboutComponent {
|
||||||
opacity: 5;
|
opacity: 5;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 80px;
|
margin-top: 80px;
|
||||||
padding-top: 5.5%;
|
padding-top: 5.5%;
|
||||||
padding-bottom: 4%;
|
padding-bottom: 4%;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.NameImage {
|
.NameImage {
|
||||||
height: 350px;
|
height: 350px;
|
||||||
width: 350px;
|
width: 350px;
|
||||||
border-radius: 5.7em;
|
border-radius: 5.7em;
|
||||||
border: 2px solid black;
|
border: 2px solid black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.InfoColumn h2 {
|
.InfoColumn h2 {
|
||||||
color: rgb(5, 255, 180);
|
color: rgb(5, 255, 180);
|
||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.InfoColumn h3 {
|
.InfoColumn h3 {
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
color: salmon;
|
color: salmon;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
list-style-position: inside;
|
list-style-position: inside;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
padding-left: 5%;
|
padding-left: 5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.InfoColumn {
|
.InfoColumn {
|
||||||
padding-right: 5%;
|
padding-right: 5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
li>a {
|
li > a {
|
||||||
color: hotpink;
|
color: hotpink;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Info {
|
.Info {
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Info li {
|
.Info li {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
list-style-type: square;
|
list-style-type: square;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,44 +1,42 @@
|
|||||||
input ,textarea {
|
input,
|
||||||
background-color: black;
|
textarea {
|
||||||
width: 35%;
|
background-color: black;
|
||||||
height: 40px;
|
width: 35%;
|
||||||
margin-top: 25px;
|
height: 40px;
|
||||||
margin-bottom: 5px;
|
margin-top: 25px;
|
||||||
color: white;
|
margin-bottom: 5px;
|
||||||
/* padding-top: 5.5%;
|
color: white;
|
||||||
|
/* padding-top: 5.5%;
|
||||||
padding-bottom: 4%; */
|
padding-bottom: 4%; */
|
||||||
padding: auto;
|
padding: auto;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 2px solid aquamarine;
|
border-bottom: 2px solid aquamarine;
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
input[type=text]:focus {
|
input[type="text"]:focus {
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 3px solid salmon;
|
border-bottom: 3px solid salmon;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
.MessageBox{
|
.MessageBox {
|
||||||
height: auto;
|
height: auto;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
/* text-overflow: ellipsis; */
|
/* text-overflow: ellipsis; */
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
.MessageBox[type=textarea]:focus {
|
.MessageBox[type="textarea"]:focus {
|
||||||
border: 3px solid salmon;
|
border: 3px solid salmon;
|
||||||
outline: none;
|
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);
|
||||||
}
|
}
|
||||||
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);
|
|
||||||
}
|
|
||||||
@@ -1,55 +1,54 @@
|
|||||||
.dev-tools-container {
|
.dev-tools-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dev-tool {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
animation: toolAnimation 0.5s ease-in-out;
|
||||||
|
width: 200px;
|
||||||
|
max-width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dev-tool-logo {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
border-radius: 50%;
|
||||||
|
object-fit: cover;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
transition: transform 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 {
|
.dev-tool {
|
||||||
display: flex;
|
width: 150px;
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
margin-top: 20px;
|
|
||||||
animation: toolAnimation 0.5s ease-in-out;
|
|
||||||
width: 200px;
|
|
||||||
max-width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.dev-tool-logo {
|
|
||||||
width: 100px;
|
@media screen and (max-width: 480px) {
|
||||||
height: 100px;
|
.dev-tool {
|
||||||
border-radius: 50%;
|
width: 120px;
|
||||||
object-fit: cover;
|
|
||||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
||||||
transition: transform 0.3s ease-in-out;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,52 +1,52 @@
|
|||||||
.ExperienceComponent {
|
.ExperienceComponent {
|
||||||
opacity: 5;
|
opacity: 5;
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
padding-bottom: 3%;
|
padding-bottom: 3%;
|
||||||
margin-left: 4%;
|
margin-left: 4%;
|
||||||
margin-right: 4%;
|
margin-right: 4%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Company-Image {
|
.Company-Image {
|
||||||
width: 65%;
|
width: 65%;
|
||||||
border: 3px solid #B5EAD7;
|
border: 3px solid #b5ead7;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin-bottom: 10%;
|
margin-bottom: 10%;
|
||||||
margin-top: 10%;
|
margin-top: 10%;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Company {
|
.Company {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
color: lightyellow;
|
color: lightyellow;
|
||||||
margin-bottom: 5%;
|
margin-bottom: 5%;
|
||||||
margin-top: 10%;
|
margin-top: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
list-style-position: outside;
|
list-style-position: outside;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Company1 {
|
.Company1 {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.experience-details {
|
.experience-details {
|
||||||
padding-left: 3%;
|
padding-left: 3%;
|
||||||
padding-top: 2%;
|
padding-top: 2%;
|
||||||
padding-right: 3%;
|
padding-right: 3%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
border: 2px solid white;
|
border: 2px solid white;
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.JobTitle {
|
.JobTitle {
|
||||||
color: #baffc9;
|
color: #baffc9;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,45 @@
|
|||||||
.menu-header {
|
.menu-header {
|
||||||
padding-left: 50px;
|
padding-left: 50px;
|
||||||
padding-right: 50px;
|
padding-right: 50px;
|
||||||
height: "50px";
|
height: "50px";
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navRow {
|
.navRow {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-top: 40px;
|
margin-top: 40px;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.NameCol {
|
.NameCol {
|
||||||
font-size: xx-large;
|
font-size: xx-large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: salmon;
|
color: salmon;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nonNameCol {
|
.nonNameCol {
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
padding-top: 1%;
|
padding-top: 1%;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header a:link {
|
.header a:link {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header a:visited {
|
.header a:visited {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header a:hover {
|
.header a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header a:active {
|
.header a:active {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +1,41 @@
|
|||||||
table,
|
table,
|
||||||
th,
|
th,
|
||||||
td {
|
td {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
th,
|
th,
|
||||||
td {
|
td {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr {
|
tr {
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr:hover {
|
tr:hover {
|
||||||
background-color: salmon;
|
background-color: salmon;
|
||||||
}
|
}
|
||||||
|
|
||||||
.publication-detail {
|
.publication-detail {
|
||||||
padding: 30px;
|
padding: 30px;
|
||||||
margin: 40px;
|
margin: 40px;
|
||||||
border: 1px solid white;
|
border: 1px solid white;
|
||||||
border-radius: 2em;
|
border-radius: 2em;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
padding-left: 5%;
|
padding-left: 5%;
|
||||||
padding-right: 5%;
|
padding-right: 5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.publication-detail h3 {
|
.publication-detail h3 {
|
||||||
font-size: xx-large;
|
font-size: xx-large;
|
||||||
color: aquamarine;
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|
||||||
.publication-detail a {
|
.publication-detail a {
|
||||||
color: aquamarine
|
color: aquamarine;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,61 +1,62 @@
|
|||||||
[ {
|
[
|
||||||
|
{
|
||||||
"company": "Rimidi",
|
"company": "Rimidi",
|
||||||
"title": "Software Engineer",
|
"title": "Software Engineer",
|
||||||
"points":[
|
"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.",
|
"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.",
|
"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."
|
"Owner of the Rimidify (Data interpretation) and EhrMes (Data Writeback) micro-services and domain expert on FHIR and HL7 specs."
|
||||||
],
|
],
|
||||||
"term": "June 2024 - Present"
|
"term": "June 2024 - Present"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"company": "Georgia Tech",
|
"company": "Georgia Tech",
|
||||||
"title": "Graduate Teaching Assistant (CS 6440)",
|
"title": "Graduate Teaching Assistant (CS 6440)",
|
||||||
"points": [
|
"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.",
|
"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. ",
|
"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."
|
"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"
|
"term": "Jan 2023 - Present"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"company": "Rimidi",
|
"company": "Rimidi",
|
||||||
"title": "Software Engineering Intern",
|
"title": "Software Engineering Intern",
|
||||||
"points": [
|
"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.",
|
"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.",
|
"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"
|
"Championed code cleanliness and maintainability, achieving robust 94% test coverage and logging, guaranteeing efficiency and scalability for future growth"
|
||||||
],
|
],
|
||||||
"term": "May 2023 - Dec 2023"
|
"term": "May 2023 - Dec 2023"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"company": "Innovaccer",
|
"company": "Innovaccer",
|
||||||
"title": "Software Development Engineer Intern (Data Platform)",
|
"title": "Software Development Engineer Intern (Data Platform)",
|
||||||
"points": [
|
"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.",
|
"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.",
|
"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."
|
"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"
|
"term": "Feb 2022 - July 2022"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"company": "Innovaccer",
|
"company": "Innovaccer",
|
||||||
"title": "Summer Intern SDE (Backend- License Management)",
|
"title": "Summer Intern SDE (Backend- License Management)",
|
||||||
"points": [
|
"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.",
|
"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.",
|
"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."
|
"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"
|
"term": "May 2021 - August 2021"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"company": "Medsupervision",
|
"company": "Medsupervision",
|
||||||
"title": "Web Development Intern",
|
"title": "Web Development Intern",
|
||||||
"points": [
|
"points": [
|
||||||
"Created frontend views and components for the MEDSupervision healthcare platform as per design, using ReactJs framework",
|
"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.",
|
"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."
|
"Optimized website load times."
|
||||||
],
|
],
|
||||||
"term": "Oct 2020 - April 2021"
|
"term": "Oct 2020 - April 2021"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "Python"
|
"name": "Python"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Java"
|
"name": "Java"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "C++"
|
"name": "C++"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "JavaScript"
|
"name": "JavaScript"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,29 +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",
|
"title": "Framework for determining the suitability of blockchain: Criteria and issues to consider",
|
||||||
"publish_date": "29 July 2021",
|
"authors": "Vikas Hassija, Sherali Zeadally, Ishan Jain, Aman Tahiliani, Vinay Chamola, Shashank Gupta",
|
||||||
"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.",
|
"publish_date": "29 July 2021",
|
||||||
"link": "https://onlinelibrary.wiley.com/doi/abs/10.1002/ett.4334"
|
"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",
|
"title": "Privacy-Preserving and Incentivized Contact Tracing for COVID-19 Using Blockchain",
|
||||||
"publish_date": "27 September 2021",
|
"authors": "Naren, Aman Tahiliani, Vikas Hassija, Vinay Chamola, Salil S. Kanhere, Mohsen Guizani",
|
||||||
"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.",
|
"publish_date": "27 September 2021",
|
||||||
"link": "https://ieeexplore.ieee.org/abstract/document/9548968"
|
"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",
|
"title": "Machine Unlearning: Its Need and Implementation Strategies",
|
||||||
"publish_date": "05 August 2021",
|
"authors": "Aman Tahiliani, Vikas Hassija, Vinay Chamola, Mohsen Guizani",
|
||||||
"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 company’s 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.",
|
"publish_date": "05 August 2021",
|
||||||
"link": "https://dl.acm.org/doi/abs/10.1145/3474124.3474158"
|
"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 company’s 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",
|
"title": "A Solution to Evade Social Media Distraction",
|
||||||
"publish_date": "04 August 2022",
|
"authors": " Aman Tahiliani, Adarsh Kumar Verma, Shubham Agrawal, Kavita Pandey",
|
||||||
"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.",
|
"publish_date": "04 August 2022",
|
||||||
"link": "https://dl.acm.org/doi/abs/10.1145/3549206.3549298"
|
"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"
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
|
||||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
||||||
sans-serif;
|
sans-serif;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
|
||||||
monospace;
|
monospace;
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/index.js
14
src/index.js
@@ -1,14 +1,14 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from "react-dom/client";
|
||||||
import './index.css';
|
import "./index.css";
|
||||||
import App from './App';
|
import App from "./App";
|
||||||
import reportWebVitals from './reportWebVitals';
|
import reportWebVitals from "./reportWebVitals";
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
const root = ReactDOM.createRoot(document.getElementById("root"));
|
||||||
root.render(
|
root.render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<App />
|
<App />
|
||||||
</React.StrictMode>
|
</React.StrictMode>,
|
||||||
);
|
);
|
||||||
|
|
||||||
// If you want to start measuring performance in your app, pass a function
|
// If you want to start measuring performance in your app, pass a function
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const reportWebVitals = onPerfEntry => {
|
const reportWebVitals = (onPerfEntry) => {
|
||||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
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);
|
getCLS(onPerfEntry);
|
||||||
getFID(onPerfEntry);
|
getFID(onPerfEntry);
|
||||||
getFCP(onPerfEntry);
|
getFCP(onPerfEntry);
|
||||||
|
|||||||
@@ -2,4 +2,4 @@
|
|||||||
// allows you to do things like:
|
// allows you to do things like:
|
||||||
// expect(element).toHaveTextContent(/react/i)
|
// expect(element).toHaveTextContent(/react/i)
|
||||||
// learn more: https://github.com/testing-library/jest-dom
|
// learn more: https://github.com/testing-library/jest-dom
|
||||||
import '@testing-library/jest-dom';
|
import "@testing-library/jest-dom";
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import "./App.css";
|
import "./App.css";
|
||||||
|
|||||||
@@ -7044,6 +7044,11 @@ prelude-ls@~1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
||||||
|
|
||||||
|
prettier@^3.3.2:
|
||||||
|
version "3.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
|
||||||
|
integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
|
||||||
|
|
||||||
pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
|
pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
|
||||||
version "5.6.0"
|
version "5.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
|
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
|
||||||
|
|||||||
Reference in New Issue
Block a user