Make portfolio + highlights a re-usable macro

- Use more generic metadata key names for portfolio
This commit is contained in:
Sravan Balaji
2025-01-02 17:06:27 -05:00
parent f612212911
commit 668a89a276
29 changed files with 153 additions and 164 deletions

View File

@@ -3,9 +3,9 @@ module.exports = function (eleventyConfig) {
eleventyConfig.addPassthroughCopy("./src/assets");
eleventyConfig.addPassthroughCopy("./src/scripts");
eleventyConfig.addFilter('findProjectAssociatedWithExperience', function (projects, associatedExperience) {
return projects.filter(function(project) {
return project.data.associatedExperience == associatedExperience;
eleventyConfig.addFilter('findAssociation', function (entries, associatedEntry) {
return entries.filter(function(entry) {
return entry.data.associatedEntry == associatedEntry;
});
})
@@ -15,18 +15,19 @@ module.exports = function (eleventyConfig) {
.sort((a, b) => (Number(a.data.displayOrder) < Number(b.data.displayOrder) ? 1 : -1));
});
eleventyConfig.addCollection('professionalExperienceProjects', (collection) => {
return collection
.getFilteredByGlob('./src/portfolio/professionalExperience/projects/*.md')
.sort((a, b) => (Number(a.data.displayOrder) > Number(b.data.displayOrder) ? 1 : -1));
});
eleventyConfig.addCollection('degrees', (collection) => {
eleventyConfig.addCollection('education', (collection) => {
return collection
.getFilteredByGlob('./src/portfolio/education/*.md')
.sort((a, b) => (Number(a.data.displayOrder) < Number(b.data.displayOrder) ? 1 : -1));
});
eleventyConfig.addCollection('highlights', (collection) => {
return collection
.getFilteredByGlob('./src/portfolio/highlights/*.md')
.sort((a, b) => (Number(a.data.displayOrder) > Number(b.data.displayOrder) ? 1 : -1));
});
return {
markdownTemplateEngine: "njk",
dataTemplateEngine: "njk",

View File

@@ -8,3 +8,51 @@
</div>
</div>
{% endmacro %}
{% macro portfolioWithHighlights(portfolio, highlights) %}
{% for entry in portfolio %}
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-4">
<a href="{{ entry.data.url }}" target="_blank">
<img
class="img-fluid mx-auto d-block"
src="{{ entry.data.logo }}"
/>
</a>
</div>
<div class="col-md-8">
<h2><b>{{ entry.data.association }}</b></h2>
<h3>{{ entry.data.entryTitle }}</h3>
<h4>{{ entry.data.location }}</h4>
<h5><i>{{ entry.data.startDate }} - {{ entry.data.endDate }}</i></h5>
{{ entry.content | safe }}
</div>
</div>
</div>
{% set associatedHighlights = (highlights | findAssociation(entry.data.id)) %}
{% if associatedHighlights.length > 0 %}
<div class="col-md-6">
<div class="accordion accordion-flush" id="{{ entry.data.id }}">
{% for highlight in associatedHighlights %}
{% set highlightSlug = (entry.data.id + '-' + highlight.data.name | slugify) %}
<div class="accordion-item">
<div class="accordion-header"">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#{{ highlightSlug }}">
<b>{{ highlight.data.name }}</b>
</button>
</div>
<div id="{{ highlightSlug }}" class="accordion-collapse collapse" data-bs-parent="#{{ entry.data.id }}">
<div class="accordion-body">
{{ highlight.content | safe }}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
</div>
{% endfor %}
{% endmacro %}

View File

@@ -2,26 +2,5 @@
{% from "macros.html" import sectionHeading %}
{{ sectionHeading("Education") }}
{% for degree in collections.degrees %}
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-4">
<a href="{{ degree.data.degreeUrl }}" target="_blank">
<img
class="img-fluid mx-auto d-block"
src="{{ degree.data.degreeLogo }}"
/>
</a>
</div>
<div class="col-md-8">
<h2><b>{{ degree.data.schoolName }}</b></h2>
<h3>{{ degree.data.degreeName }}</h3>
<h4>{{ degree.data.schoolLocation }}</h4>
<h5><i>{{ degree.data.startDate }} - {{ degree.data.endDate }}</i></h5>
{{ degree.content | safe }}
</div>
</div>
</div>
</div>
{% endfor %}
{% from "macros.html" import portfolioWithHighlights %}
{{ portfolioWithHighlights(collections.education, collections.highlights) }}

View File

@@ -2,47 +2,5 @@
{% from "macros.html" import sectionHeading %}
{{ sectionHeading("Professional Experience") }}
{% for profExp in collections.professionalExperience %}
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-4">
<a href="{{ profExp.data.companyUrl }}" target="_blank">
<img
class="img-fluid mx-auto d-block"
src="{{ profExp.data.companyLogo }}"
/>
</a>
</div>
<div class="col-md-8">
<h2><b>{{ profExp.data.companyName }}</b></h2>
<h3>{{ profExp.data.jobTitle }}</h3>
<h4>{{ profExp.data.workLocation }}</h4>
<h5><i>{{ profExp.data.startDate }} - {{ profExp.data.endDate }}</i></h5>
{{ profExp.content | safe }}
</div>
</div>
</div>
{% if collections.professionalExperienceProjects.length > 0 %}
<div class="col-md-6">
<div class="accordion accordion-flush" id="{{ profExp.data.id }}">
{% for project in (collections.professionalExperienceProjects | findProjectAssociatedWithExperience(profExp.data.id)) %}
{% set projectSlug = (profExp.data.id + '-' + project.data.name | slugify) %}
<div class="accordion-item">
<div class="accordion-header"">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#{{ projectSlug }}">
<b>{{ project.data.name }}</b>
</button>
</div>
<div id="{{ projectSlug }}" class="accordion-collapse collapse" data-bs-parent="#{{ profExp.data.id }}">
<div class="accordion-body">
{{ project.content | safe }}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
</div>
{% endfor %}
{% from "macros.html" import portfolioWithHighlights %}
{{ portfolioWithHighlights(collections.professionalExperience, collections.highlights) }}

View File

@@ -1,10 +1,11 @@
---
displayOrder: 1
degreeUrl: "https://cse.engin.umich.edu"
degreeLogo: "/assets/education/logo-computer-science.jpg"
schoolName: "University of Michigan"
degreeName: "B.S.E. in Computer Science"
schoolLocation: "Ann Arbor, MI"
id: "umich-1"
url: "https://cse.engin.umich.edu"
logo: "/assets/education/logo-computer-science.jpg"
association: "University of Michigan"
entryTitle: "B.S.E. in Computer Science"
location: "Ann Arbor, MI"
startDate: "September 2016"
endDate: "December 2020"
---

View File

@@ -1,10 +1,11 @@
---
displayOrder: 2
degreeUrl: "https://me.engin.umich.edu"
degreeLogo: "/assets/education/logo-mechanical-engineering.jpg"
schoolName: "University of Michigan"
degreeName: "B.S.E. in Mechanical Engineering"
schoolLocation: "Ann Arbor, MI"
id: "umich-2"
url: "https://me.engin.umich.edu"
logo: "/assets/education/logo-mechanical-engineering.jpg"
association: "University of Michigan"
entryTitle: "B.S.E. in Mechanical Engineering"
location: "Ann Arbor, MI"
startDate: "September 2016"
endDate: "December 2020"
---

View File

@@ -1,10 +1,11 @@
---
displayOrder: 3
degreeUrl: "https://robotics.umich.edu"
degreeLogo: "/assets/education/logo-robotics.png"
schoolName: "University of Michigan"
degreeName: "M.S. in Robotics"
schoolLocation: "Ann Arbor, MI"
id: "umich-3"
url: "https://robotics.umich.edu"
logo: "/assets/education/logo-robotics.png"
association: "University of Michigan"
entryTitle: "M.S. in Robotics"
location: "Ann Arbor, MI"
startDate: "January 2021"
endDate: "December 2021"
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "hughes-1"
associatedEntry: "hughes-1"
name: "Mobile Terminal Configuration Tool"
displayOrder: 1
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "hughes-1"
associatedEntry: "hughes-1"
name: "Location Based Services"
displayOrder: 2
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "mitre-1"
associatedEntry: "mitre-1"
name: "PNT Defense & Threat Library"
displayOrder: 1
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "mitre-1"
associatedEntry: "mitre-1"
name: "PNT Assurance"
displayOrder: 2
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "mitre-1"
associatedEntry: "mitre-1"
name: "AI Learning Track"
displayOrder: 3
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "mitre-1"
associatedEntry: "mitre-1"
name: "AWS DeepRacer"
displayOrder: 4
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-1"
associatedEntry: "rivian-1"
name: "Requirements Management and System Diagrams"
displayOrder: 1
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-1"
associatedEntry: "rivian-1"
name: "Simulation Data Analysis Tool"
displayOrder: 2
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-2"
associatedEntry: "rivian-2"
name: "Bill of Materials Analysis"
displayOrder: 1
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-2"
associatedEntry: "rivian-2"
name: "Internal Website"
displayOrder: 2
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-2"
associatedEntry: "rivian-2"
name: "IT Service Desk"
displayOrder: 3
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-3"
associatedEntry: "rivian-3"
name: "Model-In-Loop Test Case Generation"
displayOrder: 1
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-3"
associatedEntry: "rivian-3"
name: "Simulink Software Integration"
displayOrder: 2
---

View File

@@ -1,5 +1,5 @@
---
associatedExperience: "rivian-3"
associatedEntry: "rivian-3"
name: "Testing Data Processing"
displayOrder: 3
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 3
id: "hughes-1"
companyUrl: "https://www.hughes.com"
companyLogo: "/assets/professional_experience/logo-hughes.jpg"
companyName: "Hughes Network Systems"
jobTitle: "Software Development Intern"
workLocation: "San Diego, CA"
url: "https://www.hughes.com"
logo: "/assets/professional_experience/logo-hughes.jpg"
association: "Hughes Network Systems"
entryTitle: "Software Development Intern"
location: "San Diego, CA"
startDate: "May 20, 2019"
endDate: "August 23, 2019"
---

View File

@@ -1,10 +1,11 @@
---
displayOrder: 8
companyUrl: "https://www.metsci.com"
companyLogo: "/assets/professional_experience/logo-metron.jpeg"
companyName: "Metron"
jobTitle: "Software Engineer I"
workLocation: "Reston, VA"
id: "metron-1"
url: "https://www.metsci.com"
logo: "/assets/professional_experience/logo-metron.jpeg"
assocation: "Metron"
entryTitle: "Software Engineer I"
location: "Reston, VA"
startDate: "April 3, 2023"
endDate: "Present"
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 5
id: "mitre-1"
companyUrl: "https://www.mitre.org"
companyLogo: "/assets/professional_experience/logo-mitre.jpeg"
companyName: "MITRE"
jobTitle: "Graduate Navigation Intern"
workLocation: "Remote"
url: "https://www.mitre.org"
logo: "/assets/professional_experience/logo-mitre.jpeg"
association: "MITRE"
entryTitle: "Graduate Navigation Intern"
location: "Remote"
startDate: "May 10, 2021"
endDate: "August 20, 2021"
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 6
id: "mitre-2"
companyUrl: "https://www.mitre.org"
companyLogo: "/assets/professional_experience/logo-mitre.jpeg"
companyName: "MITRE"
jobTitle: "Associate Autonomous Systems Engineer"
workLocation: "McLean, VA"
url: "https://www.mitre.org"
logo: "/assets/professional_experience/logo-mitre.jpeg"
association: "MITRE"
entryTitle: "Associate Autonomous Systems Engineer"
location: "McLean, VA"
startDate: "January 31, 2022"
endDate: "September 12, 2022"
---

View File

@@ -1,12 +1,11 @@
---
displayOrder: 7
id: "mitre-3"
companyUrl: "https://www.mitre.org"
companyLogo: "/assets/professional_experience/logo-mitre.jpeg"
companyName: "MITRE"
jobTitle: "Intermediate Autonomous Systems Engineer"
workLocation: "McLean, VA"
url: "https://www.mitre.org"
logo: "/assets/professional_experience/logo-mitre.jpeg"
association: "MITRE"
entryTitle: "Intermediate Autonomous Systems Engineer"
location: "McLean, VA"
startDate: "September 12, 2022"
endDate: "March 31, 2023"
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 1
id: "rivian-1"
companyUrl: "https://rivian.com"
companyLogo: "/assets/professional_experience/logo-rivian.png"
companyName: "Rivian"
jobTitle: "Vehicle Integration Intern"
workLocation: "Livonia, MI"
url: "https://rivian.com"
logo: "/assets/professional_experience/logo-rivian.png"
association: "Rivian"
entryTitle: "Vehicle Integration Intern"
location: "Livonia, MI"
startDate: "May 30, 2017"
endDate: "August 25, 2017"
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 2
id: "rivian-2"
companyUrl: "https://rivian.com"
companyLogo: "/assets/professional_experience/logo-rivian.png"
companyName: "Rivian"
jobTitle: "Business Technology Intern"
workLocation: "Plymouth, MI"
url: "https://rivian.com"
logo: "/assets/professional_experience/logo-rivian.png"
association: "Rivian"
entryTitle: "Business Technology Intern"
location: "Plymouth, MI"
startDate: "May 7, 2018"
endDate: "December 7, 2018"
---

View File

@@ -1,11 +1,11 @@
---
displayOrder: 4
id: "rivian-3"
companyUrl: "https://rivian.com"
companyLogo: "/assets/professional_experience/logo-rivian.png"
companyName: "Rivian"
jobTitle: "ADAS Controls Intern"
workLocation: "Remote"
url: "https://rivian.com"
logo: "/assets/professional_experience/logo-rivian.png"
association: "Rivian"
entryTitle: "ADAS Controls Intern"
location: "Remote"
startDate: "June 1, 2020"
endDate: "August 21, 2020"
---