Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ability to automatically fill in data from LinkedIn Data Archive #75

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,30 @@ You can get a github token as described [here](https://docs.github.com/en/github
Now, you need to run following command.

```python
node git_data_fetcher.js
node extra/git_data_fetcher.js
```

This will fetch all the data from your github and it will automatically replace my data with yours.
Whenever you want to update the github related information on the website you need to run this command.

### LinkedIn Information

LinkedIn doesn't provide API access to profile data. Hence we use a workaround by extracting the necessary data from LinkedIn personal account data archive.

- Go to https://www.linkedin.com/psettings/member-data, click `Get a copy of your data`.
- Select `Download larger data archive` and click `Download archive`.
- Wait for a while (typically 15 mins) till you receive a mail saying your archive is ready to download.
- Download the archive, it is typically of the format Basic_LinkedInDataExportXXXXXXX.zip .
- Unzip the file and copy the inner contents into `extra/BasicProfile` folder.
- Now run the command:
`bash node extra/csvToJson.js`
- That's it. Now all your pages should reflect data about your Patents, Publications, Projects, Certificates, Achievements and Work Experience.

**Note:**

- To read more on how to download your data: [click here](https://www.linkedin.com/help/linkedin/answer/50191/downloading-your-account-data?lang=en).
- All the data from your Archive isn't necessary, only: Honors.csv, Certifications.csv, Patents.csv, Positions.csv, Projects.csv, Publications.csv and Education.csv is sufficient.

### Splash Logo

Note here that if you click [my portfolio](https://ashutosh1919.github.io), you can see animating the logo at the beginning. I have designed that logo in [`Figma`](https://www.figma.com/) and then animated it using css.
Expand Down Expand Up @@ -175,6 +193,7 @@ If you are stuck somewhere and want to observe the deployment process in depth,
- [baseui](https://github.com/uber/baseweb)
- [react-reveal](https://www.react-reveal.com/)
- [styled-components](https://styled-components.com/)
- [clearbit](https://clearbit.com/logo)

# illustrations 🍥

Expand Down
10 changes: 10 additions & 0 deletions extra/BasicProfile/Certifications.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Name,Url,Authority,Started On,Finished On,License Number
"Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization",https://www.coursera.org/account/accomplishments/certificate/GP3SP2WQVVVW,Coursera,Jun 2019,,GP3SP2WQVVVW
Deep Learning,https://www.coursera.org/account/accomplishments/specialization/certificate/NJK3M8HTEBR5,Coursera,Jul 2019,,NJK3M8HTEBR5
Convolutional Neural Networks in TensorFlow,https://www.coursera.org/account/accomplishments/certificate/ZJZDWUL9DMV7,Coursera,Apr 2020,,ZJZDWUL9DMV7
Sequence Models,https://www.coursera.org/account/accomplishments/certificate/WJ4JP3ZF9PPG,Coursera,Jul 2019,,WJ4JP3ZF9PPG
"Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning",https://www.coursera.org/account/accomplishments/certificate/QANE8YGLSX74,Coursera,Apr 2020,,QANE8YGLSX74
Convolutional Neural Networks,https://www.coursera.org/account/accomplishments/certificate/TR6RGJNFWAJW,Coursera,Jun 2019,,TR6RGJNFWAJW
Neural Networks and Deep Learning,https://www.coursera.org/account/accomplishments/certificate/7X9P8VETUWEQ,Coursera,Jun 2019,,7X9P8VETUWEQ
Structuring Machine Learning Projects,https://www.coursera.org/account/accomplishments/certificate/RVK5UE4ADVT4,Coursera,Jun 2019,,RVK5UE4ADVT4
Neo4j Certified Professional,https://graphacademy.neo4j.com/certificates/0b3b1ba7f4cd6e244fa8ed1cd619913da4d1bdcaf6beadb112ca9fcfe891a400.pdf,Neo4j,Jul 2020,,17030787
3 changes: 3 additions & 0 deletions extra/BasicProfile/Education.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
School Name,Start Date,End Date,Notes,Degree Name,Activities
Vellore Institute of Technology,2017,2021,,Bachelor of Technology - BTech,
alwin memorial public school,2016,2017,"secured 475 marks in physics, chemistry, math , computer science and english",cbse class 12,
11 changes: 11 additions & 0 deletions extra/BasicProfile/Honors.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Title,Description,Issued On
Smart India Hackathon 2019 ,"Grand Finalist at NIT Warangal for SIH 2019. National Level Hackathon, Grand Finalist, developed an automation tool for Scada systems using Django Framework.",Mar 2019
Renaissance Startup Hunt Hackathon,Secured 1st place Developed a multi phase driver monitoring system for reducing road accidents with AI parking system. ,Dec 2018
SSN Invente - Webaholic Web Development Contest,Secured 1st place ,Sep 2018
Valeo Codeathon 2018,Secured 1st place Valeo conducted codeathon at VIT. ,Sep 2018
Valeo Codeathon 2019,Secured 1st place Valeo conducted codeathon at VIT. ,Sep 2019
SSN Invente 3.0 - In-a-way-te,Secured 1st Place SSN TechFest’s Algorithmic Coding competition. ,Sep 2018
Smart India Hackathon 2020 - Grand Finalist,"National Level Hackathon, Grand Finalist, developed a Virtual Reality yoga instructor using Posenet based correction AI to enhance in a Unreal VR environment.",
1st Place SRM HackSummit,First Place in HealthCare. Developed a Blockchain system and quick diagnostic solution AI to create a robust platform for medical care.,Sep 2019
Consolation Prize ACM Hackathon,Secured Consolation Prize for building blockchain based decentralized elections. ,
2nd Prize Microsoft Innovation Club HackDay Hackathon ,,
2 changes: 2 additions & 0 deletions extra/BasicProfile/Patents.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Title,Description,Url,Issuer,Application Number,Filed On,Issued On,Patent Number
AI based Diet Management using IoT system,"An AI based diet management system to monitor, track and correct diet using an hand-held IoT device.",http://ipindiaservices.gov.in/PatentSearch/PatentSearch/,in,202041031475,"Jul 31, 2020","Jul 31, 2020",AI BASED DIETARY NEEDS MANAGEMENT SYSTEM
5 changes: 5 additions & 0 deletions extra/BasicProfile/Positions.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Company Name,Title,Description,Location,Started On,Finished On
"GUVI Geek Networks, IITM Research Park",Summer Intern,"Worked on Flask Backend, WebSocket Servers, Bootstrap and React JS custom UI rendering framework and Data Analytics dashboard as an intern to create an Adaptive Learning and Assessment Platform called ARC which helps learners with a non-standardised tests that adapts to the user’s current learning level.","Chennai Area, India",May 2019,Jun 2019
Nurtem,Summer Intern,DevOps intern working on CI/CD pipelines and cloud infrastructure. ,"Chennai Area, India",Apr 2019,May 2019
Siam Computing,Freelance Software Engineer,Worked as a freelance React Native developer to create creative and interactive user interfaces for their project.,"Chennai, Tamil Nadu, India",Jan 2019,Feb 2019
Vellore Institute of Technology,Internship,Worked on stress testing using Selenium and Selenium Grid for complex actions testing and LocustIO for endpoints testing.,"Chennai Area, India",Apr 2018,Jun 2018
4 changes: 4 additions & 0 deletions extra/BasicProfile/Projects.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Title,Description,Url,Started On,Finished On
VPROPEL,"A portal for competitive programming , placement coordination for VIT university. Stress testing and load testing with automation on cloud.",,Dec 2018,Feb 2019
NotFFCS,"A complete College lifestyle management app: From calculating attendance, monitoring grades to homework notifications and class reminders, it has everything required by a student to manage his/her FFCS activities. It has over 2000 downloads and active users. ",https://play.google.com/store/apps/details?id=com.not_ffcs,Sep 2019,
SugrFree,An AI based diet recommendation and management system. To monitor calorie and protein intake along with recipe app. ,https://github.com/trevahok/sugrfree,Mar 2020,
4 changes: 4 additions & 0 deletions extra/BasicProfile/Publications.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Name,Published On,Description,Publisher,Url
High Performance Cluster Computing based MapReduce,, Researching machine learning algorithms in MapReduce paradigm on OpenMP/MPI based distributed HPC systems using Containerized C++17 environments,Submitted to Degruyter Publications,https://arxiv.org/abs/2005.07600/
Application of Neuroevolution in Autonomous Cars,,Presented at IVCPS conference at VIT Chennai. To be published in Springer. Research on the application of NeuroEvolution in self driving cars simulated using Unreal Environment and NEAT algorithm.,Accepted to Springer CCIS,https://arxiv.org/abs/2006.15175
Deep Residual Network Based Food Recognition for Enhanced Augmented Reality Application,,Research on real-time integration of Deep Convolutional Neural Networks with Augmented Reality. Submitted to Scopus indexed De Gruyter Open Computer Science Journal.,Submitted to DeGruyter Publications,https://arxiv.org/abs/2005.04292
33 changes: 33 additions & 0 deletions extra/csvToJson.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
var fs = require("fs");
var path = require("path");
var csv = require("csvtojson");

// Reads csv files from BasicProfile folder and writes it to ../src/shared/profile/*.json
// The data in BasicProfile/ is fetched from LinkedIn Personal Data Archive

// yah I know i can generated ths output filenames, I'm writing this so it is obvious for later debugging `when` it inevitably stops working
var jsonfiles = {
"Certifications.csv": "certifications.json",
"Education.csv": "education.json",
"Honors.csv": "honors.json",
"Patents.csv": "patents.json",
"Positions.csv": "positions.json",
"Projects.csv": "projects.json",
"Publications.csv": "publications.json",
};

var inputbase = "./BasicProfile/";
var outputbase = "../src/shared/profile/";

for (let file of Object.keys(jsonfiles)) {
var filePath = path.join(__dirname, inputbase + file);

csv()
.fromFile(filePath)
.then((json) => {
var outPath = path.join(__dirname, outputbase + jsonfiles[file]);
fs.writeFileSync(outPath, JSON.stringify(json), "utf8", function (err) {
console.log(err);
});
});
}
File renamed without changes.
28 changes: 24 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "masterPortfolio",
"homepage": ".",
"name": "trevahok",
"homepage": "https://trevahok.github.io",
"version": "0.1.0",
"scripts": {
"build": "react-scripts build",
Expand All @@ -17,6 +17,7 @@
"baseui": "^9.65.3",
"bootstrap": "^4.4.1",
"chart.js": "^2.9.3",
"csvtojson": "^2.0.10",
"fs": "0.0.1-security",
"gh-pages": "^2.1.1",
"graphql": "^14.5.8",
Expand Down
Binary file added src/assests/images/certi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 11 additions & 10 deletions src/components/certificationCard/CertificationCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ class CertificationCard extends Component {
<Fade bottom duration={2000} distance="20px">
<div className="cert-card">
<div className="content">
<a
href={certificate.certificate_link}
target="_blank"
rel="noopener noreferrer"
>
<a href={certificate.Url} target="_blank" rel="noopener noreferrer">
<div className="content-overlay"></div>
<div
className="cert-header"
style={{ backgroundColor: certificate.color_code }}
style={{ backgroundColor: theme.headerColor }}
>
<img
className="logo_img"
src={require(`../../assests/images/${certificate.logo_path}`)}
alt={certificate.alt_name}
// src={require(`../../assests/images/certi.png`)}
src={`https://logo.clearbit.com/${certificate.Authority}.com`}
onerror={() => {
this.onerror = null;
this.src = require(`../../assests/images/certi.png`);
}}
alt={certificate.Title}
/>
</div>
<div className="content-details fadeIn-top">
Expand All @@ -35,13 +36,13 @@ class CertificationCard extends Component {
</div>
<div className="cert-body">
<h2 className="cert-body-title" style={{ color: theme.text }}>
{certificate.title}
{certificate.Name}
</h2>
<h3
className="cert-body-subtitle"
style={{ color: theme.secondaryText }}
>
{certificate.subtitle}
{certificate.Authority}
</h3>
</div>
</div>
Expand Down
24 changes: 12 additions & 12 deletions src/components/experienceCard/ExperienceCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@ class ExperienceCard extends Component {
render() {
const experience = this.props.experience;
const theme = this.props.theme;
const renderDuration = () => {
if ("Issued On" in experience) return experience["Issued On"];
else
return `${experience["Started On"]} - ${
experience["Finished On"] || "Present"
} `;
};
return (
<div
className="experience-card"
style={{ border: `1px solid ${experience["color"]}` }}
>
<div className="experience-card-logo-div">
<img
className="experience-card-logo"
src={require(`../../assests/images/${experience["logo_path"]}`)}
alt=""
/>
</div>
<div className="experience-card-body-div">
<div className="experience-card-header-div">
<div className="experience-card-heading-left">
<h3
className="experience-card-title"
style={{ color: theme.text }}
>
{experience["title"]}
{experience["Company Name"]}
</h3>
<p
className="experience-card-company"
Expand All @@ -35,7 +35,7 @@ class ExperienceCard extends Component {
target="_blank"
rel="noopener noreferrer"
>
{experience["company"]}
{experience["Title"]}
</a>
</p>
</div>
Expand All @@ -44,21 +44,21 @@ class ExperienceCard extends Component {
className="experience-card-duration"
style={{ color: theme.secondaryText }}
>
{experience["duration"]}
{renderDuration()}
</p>
<p
className="experience-card-location"
style={{ color: theme.secondaryText }}
>
{experience["location"]}
{experience["Location"]}
</p>
</div>
</div>
<p
className="experience-card-description"
style={{ color: theme.text }}
>
{experience["description"]}
{experience["Description"]}
</p>
</div>
</div>
Expand Down
Loading