Compare commits

..

No commits in common. "main" and "v240208-1903" have entirely different histories.

17 changed files with 48 additions and 1864 deletions

View file

@ -1,31 +1,13 @@
const UpgradeHelper = require("@11ty/eleventy-upgrade-help");
const markdownIt = require("markdown-it");
module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(UpgradeHelper);
// Copying static assets
eleventyConfig.addPassthroughCopy("src/style.css");
eleventyConfig.addPassthroughCopy("src/photo.png");
eleventyConfig.addPassthroughCopy("src/advent_pro_500.woff2");
eleventyConfig.addPassthroughCopy("src/advent_pro_600.woff2");
eleventyConfig.addPassthroughCopy("src/updock_400.woff2");
eleventyConfig.addPassthroughCopy("src/LMRoman10-Bold.woff2");
eleventyConfig.addPassthroughCopy("src/LMRoman10-Regular.woff2");
// Configuring permalinks to be ~.html instead of ~/
eleventyConfig.addGlobalData("permalink", () => {
return (data) => `${data.page.filePathStem}.${data.page.outputFileExtension}`;
});
eleventyConfig.addFilter("formatDate", (dateString) => {
if (!dateString) return "Present";
const date = new Date(dateString);
return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short' });
});
eleventyConfig.addFilter("markdown", (str) => markdownIt().render(str));
// Options
return {
dir: {

View file

@ -7,15 +7,15 @@ jobs:
build:
runs-on: docker
container:
image: node:21-bullseye # Required by actions/checkout and actions/upload-artifact
image: node:16-bullseye # Required by actions/checkout and actions/upload-artifact
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v3
- name: Install dependencies
run: npm install
- name: Build
run: npx @11ty/eleventy
- name: Upload artifact
uses: https://data.forgejo.org/forgejo/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
@ -23,9 +23,9 @@ jobs:
needs: [build]
runs-on: docker
container:
image: node:21-bullseye # Required by actions/download-artifact
image: node:16-bullseye # Required by actions/download-artifact
steps:
- uses: https://data.forgejo.org/forgejo/download-artifact@v4
- uses: actions/download-artifact@v3
with:
name: dist
- name: rsync deployment

View file

@ -1,6 +1,6 @@
# Louis Guidez
# Monsieur Louis, le site web
Site web de https://louis.hostux.fr/
Site web de https://monsieurlouis.se/.
## Develop

View file

@ -6,9 +6,6 @@
"author": "Louis Guidez",
"license": "",
"devDependencies": {
"@11ty/eleventy": "^3.1.2"
},
"dependencies": {
"@11ty/eleventy-upgrade-help": "^3.0.1"
"@11ty/eleventy": "^2.0.1"
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,4 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"prHourlyLimit": 0
}

Binary file not shown.

Binary file not shown.

View file

@ -1,9 +0,0 @@
module.exports = function() {
return {
email: 'louis+homepage@hostux.fr',
phone: '+33 6 99 39 23 90',
linkedin: 'https://www.linkedin.com/in/louis-guidez-42a4a0170/',
instagram: 'https://www.instagram.com/wingsofxiv/',
git: 'https://git.hostux.fr/louis/'
};
};

View file

@ -1,4 +0,0 @@
module.exports = function() {
const resume = require("./resumes/engineering.resume.json");
return resume;
};

View file

@ -1,221 +0,0 @@
{
"basics": {
"name": "Louis Guidez",
"label": "Mechanical Engineer",
"image": "",
"email": "louis.guidez@volvo.com",
"phone": "+46 73 902 67 81",
"url": "https://louis.hostux.fr",
"summary": "with a thorough approach to product development and strong understanding of underlying physics.\n\nThrough concept design, verification and cross-functional collaboration, I aim to create robust solutions that meet requirements effectively.",
"location": {
"address": "Virvelvindsgatan 28",
"postalCode": "417 14",
"city": "Göteborg",
"countryCode": "SE",
"region": ""
},
"profiles": [
{
"url": "https://www.linkedin.com/in/louis-guidez-42a4a0170/",
"network": "Linkedin",
"username": "Louis Guidez"
}]
},
"work": [{
"name": "🇸🇪 Volvo Trucks (Pack Enclosures, Electromobility)",
"position": "Component Owner",
"url": "",
"startDate": "2024-09-01",
"endDate": "",
"summary": "* Mechanical design of a battery enclosure (consisting of e.g. stamped steel and aluminium HPDC parts), including GD&T and simple simulations.\n* Lead discussions with cross-functional teams (mechanical, electrical, simulation, thermal...) and suppliers.",
"highlights": [
"Cross-functional leader", "Creo Parametric", "KOLA"
]
},
{
"name": "🇸🇪 Volvo Trucks (Pack Enclosures, Electromobility)",
"position": "Design Engineer",
"url": "",
"startDate": "2022-05-01",
"endDate": "2024-08-31",
"summary": "* Design battery packs to fulfill energy and packaging requirements as well as durability and safety.",
"highlights": [
"Creo Parametric", "Creo Simulate", "KOLA"
]
},
{
"name": "🇫🇷 CMD Gears",
"position": "R&D Mechanical Engineer",
"url": "",
"startDate": "2021-08-30",
"endDate": "2022-02-11",
"summary": "* Main project: design of a new cost-effective self-aligning gearbox. Gear and shaft calculations; cast iron housing design; dynamic analysis.\n* Side projects: development of an IoT sensor (embedded C++ on Arduino, implementation of network protocol, data acquisition and visualisation); development of a macro to automatise processing of FEM simulation.",
"highlights": [
"SolidEdge", "FEMAP/Nastran", "Modelica", "Arduino"
]
},
{
"name": "🇫🇷 Vitibot",
"position": "Mechanical Design Engineer, Assistant",
"url": "",
"startDate": "2019-08-31",
"endDate": "2020-02-13",
"summary": "* Design and sizing of parts for a vineyard robot to meet requirements.\n* Manufacturing: drawings and exploded views, communication with subcontractors, participation in the production.",
"highlights": [
"SolidWorks", "3D Printing"
]
},
{
"name": "🇫🇷 Stellantis",
"position": "Production Line Worker",
"url": "",
"startDate": "2017-01-15",
"endDate": "2017-02-15",
"summary": "",
"highlights": []
}],
"volunteer": [{
"organization": "Aeroklubben i Göteborg",
"position": "Board Member",
"url": "https://www.aeroklubben.se/",
"startDate": "2023-11-01",
"endDate": "",
"summary": "",
"highlights": []
}],
"education": [{
"institution": "🇫🇷 Université de Technologie de Compiègne",
"url": "https://www.utc.fr/",
"area": "Mechanical Engineering",
"studyType": "Master's Degree",
"startDate": "2016-09-01",
"endDate": "2022-02-11",
"score": "GPA 5/5.",
"courses": []
},
{
"institution": "🇸🇪 Linköpings Universitet",
"url": "https://liu.se/",
"area": "Mechanical & Aeronautical Engineering",
"studyType": "Erasmus (Master's Level)",
"startDate": "2020-08-24",
"endDate": "2021-07-30",
"score": "",
"courses": []
},
{
"institution": "🇪🇸 Universidad de Valladolid",
"url": "https://www.uva.es/",
"area": "Mechanical Engineering, Computer Science",
"studyType": "Erasmus (Bachelor's Level)",
"startDate": "2018-01-31",
"endDate": "2018-06-29",
"score": "Valedictorian.",
"courses": []
}],
"awards": [],
"certificates": [{
"name": "Certificate",
"date": "2021-11-07",
"issuer": "Company",
"url": "https://certificate.com"
}],
"publications": [],
"skills": [{
"name": "CAD Design",
"level": "Master",
"keywords": [
"Creo Parametric",
"CATIA (V5 / 3DExperience)",
"SolidEdge",
"SolidWorks"
]
},
{
"name": "Simulation and modelling",
"level": "Basic",
"keywords": [
"FEA",
"MATLAB/Simulink",
"Modelica",
"KISSsoft/KISSsys"
]
},
{
"name": "IT/Computer Science",
"level": "Advanced",
"keywords": [
"Full-stack web",
"Rust",
"C++",
"VBA",
"Python",
"Networks",
"Containers",
"Linux"
]
}],
"languages": [{
"language": "🇬🇧 English",
"fluency": "C2 (Advanced)"
},
{
"language": "🇸🇪 Swedish",
"fluency": "B2 (Proficient)"
},
{
"language": "🇫🇷 French",
"fluency": "Native"
},
{
"language": "🇪🇸 Spanish",
"fluency": "C1 (Advanced)"
},
{
"language": "🇩🇪 German",
"fluency": "B1 (Intermediate)"
}],
"interests": [{
"name": "Private Pilot",
"keywords": [
"Fire watch (brandflyg)",
"Swedish civil defense"
]
},{
"name": "Music",
"keywords": [
"Piano",
"Orchestra"
]
},
{
"name": "Sports",
"keywords": [
"Rope climbing",
"Hiking",
"Cycling"
]
},
{
"name": "Theatre",
"keywords": [
"Volunteer at festival"
]
},
{
"name": "IT",
"keywords": [
"Programming",
"Self-hosting (email, cloud, web...)"
]
}],
"references": [{
"name": "Shreyas Nanjunda Swamy",
"reference": "Former Global Component Responsible, Volvo Trucks (Pack Enclosures, Electromobility)"
},
{
"name": "Michel Alfaro",
"reference": "Former Design Engineer, Volvo Trucks (Pack Enclosures, Electromobility)"
}],
"projects": []
}

Binary file not shown.

Binary file not shown.

View file

@ -4,211 +4,39 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="{{ eleventy.generator }}">
<title>Louis Guidez</title>
<title>Monsieur Louis</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="scroll">
<div class="page" id="splashscreen">
<div>
<h1>Louis Guidez</h1>
<h2 id="subtitle" style="--n: 6">
<span>
<span>Mechanical Engineer.</span>
<span>Private Pilot.</span>
<span>Geek.</span>
<span>Pianist.</span>
<span>Hiker.</span>
<span>Board-"gamer".</span>
</span>
</h2>
</div>
<img id="photo" alt="Photo of Louis Guidez" src="photo.png">
<ul id="contact">
<li title="Phone: {{ contact.phone }}"><a href="tel:{{ contact.phone | replace(" ", "") }}"><i>{% include "ionicons/call-outline.svg" %}</i></a></li>
<li title="Email: {{ contact.email }}"><a href="mailto:{{ contact.email }}"><i>{% include "ionicons/mail-outline.svg" %}</i></a></li>
<li title="LinkedIn"><a href="{{ contact.linkedin }}"><i>{% include "ionicons/logo-linkedin.svg" %}</i></a></li>
<li title="Instagram: @wingsofxiv"><a href="{{ contact.instagram }}"><i>{% include "ionicons/logo-instagram.svg" %}</i></a></li>
<li title="Git"><a href="https://git.hostux.fr/louis/"><i>{% include "ionicons/git-branch-outline.svg" %}</i></a></li>
</ul>
</div>
<div class="page" id="resume">
<aside>
<h1>
{{ resume.basics.name }}
{% for profile in resume.basics.profiles %}
<a href="{{ profile.url }}"><i>{% include "ionicons/logo-" + profile.network.toLowerCase() + ".svg" %}</i></a>
{% endfor %}
</h1>
📧 <a href="mailto:{{ resume.basics.email }}">{{ resume.basics.email }}</a><br>
📱 <a href="tel:{{ resume.basics.phone }}">{{ resume.basics.phone }}</a><br>
📍 {{ resume.basics.location.city }}
{# Skills #}
{% if resume.skills and resume.skills.length > 0 %}
<h2>Skills</h2>
{% for skill in resume.skills %}
<section class="skill">
<h3>{{ skill.name }}</h3>
<br>
{% for keyword in skill.keywords %}
<span class="tag">{{ keyword }}</span>
{% endfor %}
</section>
{% endfor %}
{% endif %}
{# Languages #}
{% if resume.languages and resume.languages.length > 0 %}
<h2>Languages</h2>
{% for language in resume.languages %}
<section class="language">
<h3>{{ language.language }}</h3>
<span class="tag">{{ language.fluency }}</span>
</section>
{% endfor %}
{% endif %}
{# Interests #}
{% if resume.interests and resume.interests.length > 0 %}
<h2>Interests</h2>
{% for interest in resume.interests %}
<section class="interest">
<h3>{{ interest.name }}</h3>
{% for keyword in interest.keywords %}
<span class="tag">{{ keyword }}</span>
{% endfor %}
</section>
{% endfor %}
{% endif %}
{# Volunteer #}
{% if resume.volunteer and resume.volunteer.length > 0 %}
<h2>Volunteer</h2>
{% for vol in resume.volunteer %}
<section class="volunteer">
<div>
{% if not vol.endDate %}<span class="current">●</span>{% endif %}
<h3>{{ vol.position }}</h3>
<span class="date">{{ vol.startDate | formatDate }} - {{ vol.endDate | formatDate }}</span>
</div>
<div>
{{ vol.organization }}
</div>
{% if vol.summary %}
<div>
{{ vol.summary | markdown | safe }}
</div>
{% endif %}
</section>
{% endfor %}
{% endif %}
</aside>
<main>
<header>
<h1>{{ resume.basics.label }}</h1>
{{ resume.basics.summary | markdown | safe }}
</header>
{# Work Experience #}
{% if resume.work and resume.work.length > 0 %}
<h2>Work Experience</h2>
{% for job in resume.work %}
<section class="work">
<div>
{% if not job.endDate %}<span class="current">●</span>{% endif %}
<h3>{{ job.position }}</h3>
<span class="date">{{ job.startDate | formatDate }} - {{ job.endDate | formatDate }}</span>
</div>
<div>
{{ job.name }}
</div>
{% if job.highlights and job.highlights.length > 0 %}
<div>
{% for highlight in job.highlights %}
<span class="tag">{{ highlight }}</span>
{% endfor %}
</div>
{% endif %}
{% if job.summary %}
<div>
{{ job.summary | markdown | safe }}
</div>
{% endif %}
</section>
{% endfor %}
{% endif %}
{# Education #}
{% if resume.education and resume.education.length > 0 %}
<h2>Education</h2>
{% for edu in resume.education %}
<section class="education">
<div>
{% if not edu.endDate %}<span class="current">●</span>{% endif %}
<h3>{{ edu.studyType }} in {{ edu.area }}</h3>
<span class="date">{{ edu.startDate | formatDate }} - {{ edu.endDate | formatDate }}</span>
</div>
<div>
{{ edu.institution }}
{% if edu.score %}
<span class="tag">{{ edu.score }}</span>
{% endif %}
</div>
</section>
{% endfor %}
{% endif %}
{# Projects #}
{% if resume.projects and resume.projects.length > 0 %}
<h2>Projects</h2>
{% for project in resume.projects %}
<section class="project">
<h3>{{ project.name }}</h3>
{{ project.description }}
{% if project.highlights and project.highlights.length > 0 %}
{% for highlight in project.highlights %}
<span class="tag">{{ highlight }}</span>
{% endfor %}
{% endif %}
</section>
{% endfor %}
{% endif %}
{# References #}
{% if resume.references and resume.references.length > 0 %}
<h2>References</h2>
{% if false %}
{% for reference in resume.references %}
<section>
<h3>{{ reference.name }}</h3>
{{ reference.reference }}
</section>
{% endfor %}
{% else %}
<p>
Contact me.
</p>
{% endif %}
{% endif %}
</main>
<div class="page">
<div>
<h1>Louis Guidez</h1>
<h2 id="subtitle" style="--n: 6">
<span>
<span>Mechanical Engineer.</span>
<span>Private Pilot.</span>
<span>Geek.</span>
<span>Pianist.</span>
<span>Hiker.</span>
<span>Board-"gamer".</span>
</span>
</h2>
</div>
<img id="photo" alt="Photo of Louis Guidez" src="photo.png">
<ul id="contact">
<li title="Phone: +33 6 99 39 23 90"><a href="tel:+33699392390"><i>{% include "ionicons/call-outline.svg" %}</i></a></li>
<li title="Email: louis@hostux.fr"><a href="mailto:louis@hostux.fr"><i>{% include "ionicons/mail-outline.svg" %}</i></a></li>
<li title="LinkedIn"><a href="https://www.linkedin.com/in/louis-guidez-42a4a0170/"><i>{% include "ionicons/logo-linkedin.svg" %}</i></a></li>
<li title="Instagram: @wingsofxiv"><a href="https://www.instagram.com/wingsofxiv/"><i>{% include "ionicons/logo-instagram.svg" %}</i></a></li>
<li title="Git"><a href="https://git.hostux.fr/louis/"><i>{% include "ionicons/git-branch-outline.svg" %}</i></a></li>
</ul>
</div>
{#
<div class="page">
Hey
</div>
#}
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View file

@ -1,55 +1,5 @@
/**
* Fonts
*/
/* latin */
@font-face {
font-family: 'Advent Pro';
font-style: normal;
font-weight: 500;
font-stretch: 100%;
font-display: swap;
src: url("advent_pro_500.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Advent Pro';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("advent_pro_600.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Updock';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("updock_400.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Latin Modern Roman';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("LMRoman10-Regular.woff2") format('woff2');
}
@font-face {
font-family: 'Latin Modern Roman';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("LMRoman10-Bold.woff2") format('woff2');
}
@import url('https://fonts.googleapis.com/css2?family=Updock&family=Advent+Pro:wght@500&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Updock&family=Advent+Pro:wght@600&display=swap');
/**
* Styles
@ -65,9 +15,6 @@ html, body {
body::-webkit-scrollbar {
display: none;
}
html {
overflow-y: hidden; /* Needed for scroll snap */
}
body {
font-family: "Advent Pro", sans-serif;
@ -75,17 +22,16 @@ body {
font-weight: 500;
font-style: normal;
font-variation-settings: "wdth" 100;
max-height: 100vh;
overflow-y: scroll; /* Needed for scroll snap */
scroll-snap-type: y mandatory;
}
.page {
.page:first-of-type {
height: 100vh;
border: none;
background: rgb(133,141,143);
background: linear-gradient(178deg, #F2F2F2 0%, #D5E7F2 85%, #4D6F8C 100%);
background: linear-gradient(178deg, #F2F2F2 0%, #D5E7F2 85%, #4D6F8C 100%);
}
.page {
position: relative;
margin: 0;
padding: 1em;
@ -94,42 +40,27 @@ body {
flex-direction: column;
justify-content: space-between;
align-items: center;
border: 1em solid #4D6F8C;
background: #D5E7F2;
scroll-snap-align: start;
}
.page:has(+ .page) {
margin-bottom: .2em;
}
#resume {
overflow-y: auto;
align-items: start;
}
h1 {
font-family: "Updock", cursive;
font-size: 2rem;
font-weight: 400;
font-style: normal;
margin: 0;
font-size: 7rem;
color: #252C40;
margin-bottom: -0.4em;
position: relative;
}
h2 {
font-weight: 600;
font-size: 1.2rem;
}
h3 {
font-weight: 600;
font-size: 1rem;
}
#splashscreen h1 {
position: relative;
font-size: 7rem;
margin-bottom: -0.4em;
}
#splashscreen h2 {
font-size: 2rem;
}
@ -209,117 +140,6 @@ ul#contact {
align-self: flex-end;
}
#resume {
display: flex;
flex-direction: row;
gap: 1em;
align-items: start;
font-family: 'Latin Modern Roman';
}
#resume aside {
min-width: 15rem;
max-width: 20rem;
}
#resume h2 {
border-bottom: .1em solid black;
}
section.work h3, section.education h3, section.skill h3, section.interest h3, section.language h3, section.volunteer h3 {
display: inline-block;
margin: 0;
padding: 0;
}
span.date {
color: #777;
font-size: .9em;
}
#resume aside h1 {
text-align: center;
font-family: 'Latin Modern Roman';
font-weight: bold;
font-size: 2rem;
}
#resume aside h1 i svg {
height: 1em;
vertical-align: -10%;
}
#resume aside a {
text-decoration: none;
color: inherit;
}
#resume main h1 {
display: inline;
}
#resume .language h3 {
width: 6em;
}
span.tag {
display: inline-block;
color: white;
padding: .1em .3em;
border-radius: .2em;
margin: .1em;
font-size: .9em;
}
#resume main header {
margin-top: .8rem;
text-align: justify;
}
#resume main header h1 {
line-height: 1rem;
}
#resume main header p:first-of-type {
display: inline;
}
#resume main header p {
margin: 0;
}
#resume main ul {
margin-top: 0;
padding-left: 1rem;
text-align: justify;
}
/*span.tag:nth-child(1) { background: #4D6F8C; } /* Blue */
/*span.tag:nth-child(2) { background: #8C4D6F; } /* Magenta */
/*span.tag:nth-child(3) { background: #6F8C4D; } /* Green */
/*span.tag:nth-child(4) { background: #8C6F4D; } /* Brown */
/*span.tag:nth-child(5) { background: #4D8C6F; } /* Teal */
/*span.tag:nth-child(6) { background: #6F4D8C; } /* Purple */
/*span.tag:nth-child(7) { background: #8C4D4D; } /* Red */
/*span.tag:nth-child(8) { background: #4D8C8C; } /* Cyan */
/*span.tag:nth-child(9) { background: #8C8C4D; } /* Yellow-green */
/*span.tag:nth-child(10) { background: #4D4D8C; } /* Indigo */
span.tag {
background: #4D6F8C;
}
span.current {
color: #24b500;
}
span.date {
float: right;
}
@media (max-width: 480px) {
h1 {
@ -329,7 +149,7 @@ span.date {
max-height: 50vh;
max-width: none;
}
ul#contact, #resume {
ul#contact {
flex-direction: column;
}
}
@ -339,44 +159,4 @@ span.date {
height: 3em;
padding: .5em 0;
}
}
@page {
margin: 0.5cm 0.3cm;
}
@media print
{
#splashscreen {
display: none;
}
html, body, #resume {
background-color: transparent;
padding: 0;
margin: 0;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
height: auto;
max-height: none;
}
#resume {
overflow: visible;
}
#resume aside h1 {
text-align: center;
font-family: 'Latin Modern Roman';
font-weight: bold;
font-size: 1.5rem;
}
span.tag {
background: #eff8ff;
color: #2d4253;
}
}

Binary file not shown.