Compare commits

..

21 commits

Author SHA1 Message Date
TheThomaas ebbd2d3ec5 Add template content to timeline component 2025-06-09 19:01:01 +02:00
TheThomaas 2ae2354750 Fix issue with timeline list items 2025-06-09 19:00:45 +02:00
TheThomaas c745c49080 Update favicon 2025-06-09 18:47:01 +02:00
TheThomaas c1449d0a5b Update pdf template and styles 2025-06-09 18:32:52 +02:00
TheThomaas c957e34325 Update projects 2025-06-09 18:32:28 +02:00
TheThomaas 0309652be2 Update experiences 2025-06-09 18:31:58 +02:00
TheThomaas 3d230cdd6a Add collections dedicated to pdf template 2025-06-09 18:31:31 +02:00
TheThomaas 39a9ec10ca Update author.json 2025-06-09 18:30:58 +02:00
TheThomaas 7465735919 Rename frontmatter options for pdf 2025-06-09 18:30:35 +02:00
TheThomaas d37ad6b485 Fix clouds in mobile version 2025-06-09 10:41:02 +02:00
TheThomaas 89db9d66ad Update accent-font size in hero section 2025-06-09 10:40:49 +02:00
TheThomaas f0753d0e7a Fix footer in small screens 2025-06-09 10:40:21 +02:00
TheThomaas 22ca1dec59 Update site repository link 2025-06-09 10:40:04 +02:00
TheThomaas 6cb2d09e90 Update footer links style 2025-06-09 10:24:04 +02:00
TheThomaas 0d11cad3a8 Use underline style in header 2025-06-09 10:21:39 +02:00
TheThomaas 2abbdf84a4 Use underline style for section titles 2025-06-09 10:19:48 +02:00
TheThomaas c10055dda6 Move favicon file 2025-06-09 10:19:30 +02:00
TheThomaas c287bd7cef Create underline style 2025-06-09 10:19:00 +02:00
TheThomaas bc3fabec78 Update projects 2025-06-08 22:00:16 +02:00
TheThomaas 3bf1442ddc Update project link component 2025-06-08 22:00:01 +02:00
TheThomaas 057c7768df Move pdf plugin to separate package 2025-06-08 21:11:18 +02:00
39 changed files with 288 additions and 158 deletions

View file

@ -1,49 +0,0 @@
import PuppeteerHTMLPDF from "puppeteer-html-pdf";
import { nanoid } from 'nanoid';
import fs from 'fs';
const pluginDefaults = {
// Plugin defaults
tempDir: "dist", // Directory where the temporary files are created
debug: false, // Keep the generated temporary html file for debugging
format: "A4", // Default pdf format
margin: { // PDF file margins
top: "1cm",
right: "1.25cm",
bottom: "1cm",
left: "1.25cm",
}
};
export default function (eleventyConfig, options = {}) {
const pluginConfig = Object.assign(pluginDefaults, options);
eleventyConfig.addTransform("toPDF", async (content) => {
if (this.outputPath && this.outputPath.toLowerCase().endsWith('.pdf')) {
let tempFileName = pluginConfig.debug ? this.page.fileSlug : nanoid();
let htmlFile = `./${pluginConfig.tempDir}/${tempFileName}.html`;
let pdfFile = `./${pluginConfig.tempDir}/${tempFileName}.pdf`;
fs.writeFileSync(htmlFile, content);
const htmlPDF = new PuppeteerHTMLPDF();
const pdfOptions = {
format: pluginConfig.format,
margin: pluginConfig.margin,
path: pdfFile,
};
htmlPDF.setOptions(pdfOptions);
const pdfContent = await htmlPDF.readFile(htmlFile, "utf8");
await htmlPDF.create(pdfContent);
let contents = fs.readFileSync(pdfFile, 'binary');
if (!pluginConfig.debug) {
fs.unlinkSync(htmlFile);
fs.unlinkSync(pdfFile);
}
return Buffer.from(contents,'binary');
} else return content;
});
};

View file

@ -1,6 +1,6 @@
import { inspect } from "util"; import { inspect } from "util";
import eleventyPluginPDF from "eleventy-plugin-pdf";
import pluginIcons from 'eleventy-plugin-icons'; import pluginIcons from 'eleventy-plugin-icons';
import pluginPDF from "./_config/eleventy-plugin-pdf.js";
import pluginTokens from "./_config/eleventy-plugin-tokens.js"; import pluginTokens from "./_config/eleventy-plugin-tokens.js";
import shortcodes from "./_config/shortcodes.js"; import shortcodes from "./_config/shortcodes.js";
@ -16,6 +16,12 @@ export default async function (eleventyConfig) {
process.env.DEBUG && console.log(inspect(sections)); process.env.DEBUG && console.log(inspect(sections));
return sections; return sections;
}); });
eleventyConfig.addCollection("pdfSections", (collectionApi) => {
const sections = collectionApi.getFilteredByGlob("./src/pages/sections/**")
.sort((a, b) => (a.data?.pdf?.order ?? a.data.order) - (b.data?.pdf?.order ?? b.data.order));
process.env.DEBUG && console.log(inspect(sections));
return sections;
});
eleventyConfig.addCollection("projects", (collectionApi) => { eleventyConfig.addCollection("projects", (collectionApi) => {
const projects = collectionApi.getFilteredByGlob("./src/projects/**") const projects = collectionApi.getFilteredByGlob("./src/projects/**")
.sort((a, b) => a.data.order - b.data.order); .sort((a, b) => a.data.order - b.data.order);
@ -28,11 +34,11 @@ export default async function (eleventyConfig) {
.sort((a, b) => a.data.dates.start - b.data.dates.start).reverse(); .sort((a, b) => a.data.dates.start - b.data.dates.start).reverse();
}); });
eleventyConfig.addPassthroughCopy('src/favicon.ico') eleventyConfig.addPassthroughCopy({'src/assets': '/'})
eleventyConfig.addPlugin(shortcodes); eleventyConfig.addPlugin(shortcodes);
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" }); eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
eleventyConfig.addPlugin(pluginPDF); eleventyConfig.addPlugin(eleventyPluginPDF);
eleventyConfig.addPlugin(pluginIcons, { eleventyConfig.addPlugin(pluginIcons, {
sources: [ sources: [
{ name: 'lucide', path: 'node_modules/lucide-static/icons', default: true }, { name: 'lucide', path: 'node_modules/lucide-static/icons', default: true },

7
package-lock.json generated
View file

@ -11,6 +11,7 @@
"devDependencies": { "devDependencies": {
"@11ty/eleventy": "^3.0.0", "@11ty/eleventy": "^3.0.0",
"eleventy-plugin-icons": "^4.5.3", "eleventy-plugin-icons": "^4.5.3",
"eleventy-plugin-pdf": "^1.0.1",
"lucide-static": "^0.503.0", "lucide-static": "^0.503.0",
"nanoid": "^5.1.5", "nanoid": "^5.1.5",
"puppeteer-html-pdf": "^4.0.8", "puppeteer-html-pdf": "^4.0.8",
@ -1289,6 +1290,12 @@
"node": ">=16.20.2" "node": ">=16.20.2"
} }
}, },
"node_modules/eleventy-plugin-pdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/eleventy-plugin-pdf/-/eleventy-plugin-pdf-1.0.1.tgz",
"integrity": "sha512-kmbjyhSZnXJktYR8WHYQIATPvbSbC7kjxr22FUIx/khEnXG3aHDFcKOB4HNGpUeajee524AHgkBZZDV8sRmYwg==",
"dev": true
},
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",

View file

@ -14,6 +14,7 @@
"devDependencies": { "devDependencies": {
"@11ty/eleventy": "^3.0.0", "@11ty/eleventy": "^3.0.0",
"eleventy-plugin-icons": "^4.5.3", "eleventy-plugin-icons": "^4.5.3",
"eleventy-plugin-pdf": "^1.0.1",
"lucide-static": "^0.503.0", "lucide-static": "^0.503.0",
"nanoid": "^5.1.5", "nanoid": "^5.1.5",
"puppeteer-html-pdf": "^4.0.8", "puppeteer-html-pdf": "^4.0.8",

View file

@ -18,10 +18,13 @@
"Git" "Git"
], ],
"lang": [ "lang": [
"Français (langue maternelle)", "Français",
"Anglais", "Anglais",
"Allemand (Connaissance scolaires)" "Allemand (Connaissance scolaires)"
], ],
"other": [
"Permis de voiture (Catégorie B)"
],
"socials": [ "socials": [
{ {
"title": "Mon Github", "title": "Mon Github",

View file

@ -4,6 +4,6 @@ export default {
url: "http://localhost:8080", url: "http://localhost:8080",
description: "A blog built with Eleventy", description: "A blog built with Eleventy",
lang: "fr", lang: "fr",
repository: "https://github.com/TheThomaas", repository: "https://codeberg.org/TheThomaas/11ty-resume",
repoSrc: "Github" repoSrc: "Codeberg"
} }

View file

@ -1,6 +1,6 @@
<section id="{{ section.data.title | slug }}" class="{{ section.data.classes }} wrapper-full"> <section id="{{ section.data.title | slug }}" class="{{ section.data.classes }} wrapper-full">
{% if section.data.showTitle != false %} {% if section.data.showTitle != false %}
<h2>{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h2> <h2 class="underline">{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h2>
{% endif %} {% endif %}
{{ section.templateContent }} {{ section.templateContent }}
</section> </section>

View file

@ -4,7 +4,8 @@
<span></span> <span></span>
<div class="links"> <div class="links">
{%- for link in links -%} {%- for link in links -%}
{% link link.link, "_blank", "data-ghost-button" %}{% icon link.icon %} <span class="sr-only">{{ social.title }}</span>{% endlink %} {% render "partials/components/project-link",
link: link %}
{%- endfor -%} {%- endfor -%}
</div> </div>
</div> </div>

View file

@ -1,31 +1,80 @@
{% assign showTitle = true %}
{% if section.data.showTitle == true or section.data.showTitle == false %}
{% assign showTitle = section.data.showTitle %}
{% endif %}
{% if section.data.pdf.showTitle == true or section.data.pdf.showTitle == false %}
{% assign showTitle = section.data.pdf.showTitle %}
{% endif %}
{% assign title = section.data.title %}
{% if section.data.pdf.title %}
{% assign title = section.data.pdf.title %}
{% endif %}
<section> <section>
{% if section.data.showTitle != false %} {% if showTitle %}
<div class="title"> <div class="title">
<h2> <h2>{{ title }}</h2>
{% if section.data.displayedTitle %}
{{ section.data.displayedTitle }}
{% else %}
{{ section.data.title }}
{% endif %}
</h2>
<hr> <hr>
</div> </div>
{% endif %} {% endif %}
{% for item in items %} {% if items %}
<div class="subtitle"> {% for item in items %}
<h3>{{ item.data.title }}</h3> <div class="subtitle">
<p class="underline"> <h4>{{ item.data.title }}</h4>
<strong>{{ item.data.role }}</strong> {% if item.data.role %}
</p> <p class="underline">
{% if item.data.dates %} <strong>{{ item.data.role }}</strong>
<div class="timeSection"> </p>
<span>{{ item.data.location }}</span> {% else %}
<strong>{{ item.data.dates.start }} - {{ item.data.dates.end }}</strong> <span></span>
</div> {% endif %}
{% endif %} {% if item.data.dates %}
</div> <div class="timeSection">
<span>{{ item.data.location }}</span>
<strong>{{ item.data.dates.start }} - {{ item.data.dates.end }}</strong>
</div>
{% endif %}
{% if item.data.links %}
<ul class="list-inline">
{{ item.templateContent }} {% for link in item.data.links %}
{% endfor %} {% assign linkHref = link %}
{% if link.link %}
{% assign linkHref = link.link %}
{% endif %}
{% assign linkTitle = "Voir sur " | append: linkHref %}
{% if linkHref contains "codeberg.org" or linkHref contains "github.com" %}
{% assign linkTitle = "Source" %}
{% endif %}
{% if linkHref contains "npmjs.com" %}
{% assign linkTitle = "Demo" %}
{% endif %}
{% if link.title %}
{% assign linkTitle = link.title %}
{% endif %}
<li>
{% link linkHref, "_blank" %}{{ linkTitle }}{% endlink %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
{{ item.templateContent }}
{% endfor %}
{% else %}
<ul>
<li><strong>Compétences techniques</strong>: {{ author.skills | join: ", " }}</li>
<li><strong>Langues</strong>: {{ author.lang | join: ", " }}</li>
<li><strong>Autre</strong>: {{ author.other | join: ", " }}</li>
</ul>
{% endif %}
</section> </section>

View file

@ -0,0 +1,40 @@
{% assign linkHref = link %}
{% if link.link %}
{% assign linkHref = link.link %}
{% endif %}
{% assign iconName = "link" %}
{% if linkHref contains "codeberg.org" %}
{% assign iconName = "simple-icons:codeberg" %}
{% endif %}
{% if linkHref contains "npmjs.com" %}
{% assign iconName = "simple-icons:npm" %}
{% endif %}
{% if linkHref contains "github.com" %}
{% assign iconName = "simple-icons:github" %}
{% endif %}
{% if link.icon %}
{% assign iconName = link.icon %}
{% endif %}
{% assign linkTitle = "Voir sur " | append: linkHref %}
{% if linkHref contains "codeberg.org" %}
{% assign linkTitle = "Source sur Codeberg" %}
{% endif %}
{% if linkHref contains "npmjs.com" %}
{% assign linkTitle = "Voir sur NPM" %}
{% endif %}
{% if linkHref contains "github.com" %}
{% assign linkTitle = "Source sur Github" %}
{% endif %}
{% if link.title %}
{% assign linkTitle = link.title %}
{% endif %}
{% link linkHref, "_blank", "data-ghost-button" %}{% icon iconName %} <span class="sr-only">{{ linkTitle }}</span>{% endlink %}

View file

@ -8,7 +8,8 @@
link: data.link, link: data.link,
title: data.title, title: data.title,
location: data.location, location: data.location,
description: data.description %} description: data.description,
templateContent: elements.templateContent %}
{%- endfor -%} {%- endfor -%}
</ol> </ol>
{% endif %} {% endif %}

View file

@ -1,13 +1,12 @@
<footer class="wrapper-full"> <footer class="wrapper-full">
<div> <div>
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
<ul class="list-inline"> <ul class="list-inline">
<li>Réalisé avec {% render 'partials/components/link', label: "Eleventy", href: "https://11ty.dev/", target: "_blank", rel: "nofollow" %}</li> <li>Réalisé avec {% render 'partials/components/link', label: "Eleventy", href: "https://11ty.dev/", target: "_blank", rel: "nofollow" %}</li>
{% if site.repository and site.repository != "" %} {% if site.repository and site.repository != "" %}
<li>Source sur {% render 'partials/components/link', label: site.repoSrc, href: site.repository, target: "_blank", rel: "nofollow" %}</li> <li>Source sur {% render 'partials/components/link', label: site.repoSrc, href: site.repository, target: "_blank", rel: "nofollow" %}</li>
{% endif %} {% endif %}
</ul> </ul>
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
</div> </div>
</footer> </footer>

View file

@ -21,3 +21,5 @@
<meta property="og:url" content="{{ currentUrl }}" /> <meta property="og:url" content="{{ currentUrl }}" />
<link rel="icon" href="/favicon.ico" sizes="any"> <link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<meta name="theme-color" content="#4a7798">

BIN
src/assets/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

3
src/assets/favicon.svg Normal file
View file

@ -0,0 +1,3 @@
<svg width="513" height="512" viewBox="0 0 513 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M193.735 176.324C230.875 112.227 291.301 94.8749 342.331 109.561C393.504 124.288 435.509 171.284 435.509 236.933V240.933H439.509C462.102 240.933 479.224 251.012 490.768 266.21C502.388 281.51 508.402 302.095 508.254 322.848C508.106 343.597 501.801 364.144 489.25 379.423C476.784 394.599 457.974 404.82 432.143 404.82C419.241 404.82 340.344 405.127 260.395 405.434C180.56 405.741 99.6731 406.046 82.3157 406.047C56.4777 405.153 37.3048 394.406 24.4192 378.889C11.458 363.281 4.72155 342.665 4.27759 322.024C3.83347 301.373 9.69302 281.024 21.5002 265.929C33.2262 250.938 50.95 240.934 74.8645 240.934H79.0627L78.8606 236.741C77.096 200.273 94.3112 178.238 116.632 168.794C139.268 159.218 167.541 162.413 187.889 177.529L191.488 180.203L193.735 176.324Z" fill="#FAFAFA" stroke="#0A0A0A" stroke-width="8"/>
</svg>

After

Width:  |  Height:  |  Size: 919 B

1
src/assets/line.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="6.65 41.33 76.65 7.35"><path fill="#3e688b" d="M73.529 46.831c.428-.098.875-.162 1.334-.213.963-.115 1.953-.142 2.818-.256-2.631-.395-5.303-.28-7.434-.291-2.525-.011-5.484.01-9.316-.038-7.313-.088-17.271-.14-27.152.303-2.921.136-5.844.254-8.754.469l-3.281.25c-1.917.151-3.833.303-5.751.438-1.624.114-3.624.693-5.374.646-1.995-.054-3.385-1.032-3.818-2.912-.161-.683-.265-1.683.088-2.265.355-.584.552-.75.767-.907.52-.369 1.162-.656 1.468-.667 4.218-.12 8.926-.016 12.702.088 2.964.084 5.934.163 9.838.167 4.678.073 18.688.324 23.364.329 3.1.004 6.193.261 9.277.594 2.566.276 5.16.568 7.797.896 2.551.312 4.066.333 6.645.692.402.052.875.104 1.387.167.426.041.979.114 1.395.141.418.02.996.333 1.771 1.197.041 1.287-.313 1.958-.885 1.98-.521.254-.938.38-1.209.427-1.041.229-2.016.301-2.75.187-.494-.077-1.975.157-3.271.329-.957.135-1.5.156-2.984-.026-.781-.203-.801-.803.109-1.307a7.01 7.01 0 0 1 1.219-.418z"/></svg>

After

Width:  |  Height:  |  Size: 983 B

View file

@ -1,5 +1,7 @@
.clouds-zone { .clouds-zone {
top: 70px; overflow-x: hidden;
top: 0;
padding-top: 70px;
inset-inline: 0; inset-inline: 0;
position: absolute; position: absolute;
z-index: -1; z-index: -1;

View file

@ -18,7 +18,7 @@
margin-bottom: .4em; margin-bottom: .4em;
} }
.hero-title .accent-font { .hero-title .accent-font {
font-size: 1.5em; font-size: clamp(1.25em, 3vmax, 1.5em);
line-height: 1; line-height: 1;
font-weight: normal; font-weight: normal;
font-style: italic; font-style: italic;

View file

@ -14,20 +14,20 @@
position: absolute; position: absolute;
inset: 1.5rem 0 0 1.5rem; inset: 1.5rem 0 0 1.5rem;
} }
.timeline li { .timeline > li {
--size: 3rem; --size: 3rem;
padding: 0 0 0 calc(var(--size) + 0.8rem); padding: 0 0 0 calc(var(--size) + 0.8rem);
margin: 1.4rem 0; margin: 1.4rem 0;
position: relative; position: relative;
list-style: none; list-style: none;
} }
.timeline li:last-child { .timeline > li:last-child {
margin-bottom: 3rem; margin-bottom: 3rem;
} }
.timeline li:first-child { .timeline > li:first-child {
margin-top: -20px; margin-top: -20px;
} }
.timeline li:before { .timeline > li:before {
content: ""; content: "";
aspect-ratio: 1; aspect-ratio: 1;
inline-size: var(--size); inline-size: var(--size);
@ -41,6 +41,6 @@
inset-inline-start: 0; inset-inline-start: 0;
transform: translateY(50%); transform: translateY(50%);
} }
.timeline li:hover:before { .timeline > li:hover:before {
border-color: var(--color-secondary-600); border-color: var(--color-secondary-600);
} }

View file

@ -4,14 +4,18 @@ footer {
} }
footer > div { footer > div {
place-content: center space-between; place-content: center space-between;
align-items: center; align-items: start;
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column;
} }
footer .list-inline a { footer .list-inline a {
--item-color: var(--text-2); --item-color: var(--text-2);
text-decoration: underline; text-decoration: underline;
} }
footer .list-inline a:hover {
--item-color: var(--text);
}
footer .socials-list { footer .socials-list {
--item-gap: 0.2ch; --item-gap: 0.2ch;
--item-separator: ""; --item-separator: "";
@ -19,4 +23,10 @@ footer .socials-list {
} }
footer .button.button { footer .button.button {
--button-padding: .2em; --button-padding: .2em;
}
@media (min-width: 768px) {
footer > div {
align-items: center;
flex-direction: row-reverse;
}
} }

View file

@ -25,14 +25,20 @@ header nav li {
header nav a { header nav a {
text-underline-offset: 0.4rem; text-underline-offset: 0.4rem;
text-decoration: none; text-decoration: none;
position: relative;
} }
header nav a:hover { header nav a:hover,
text-decoration: underline;
text-decoration-thickness: 0.12rem;
}
header nav a[aria-current="page"] { header nav a[aria-current="page"] {
color: var(--text-2); color: var(--color-secondary-950);
font-weight: var(--font-weight-semibold); text-shadow: 1px 0 0 currentColor;
text-decoration: underline; }
text-decoration-thickness: 0.12rem; header nav a:hover::after,
header nav a[aria-current="page"]:after {
content: "";
background: no-repeat url("/line.svg");
position: absolute;
height: 7px;
width: 100%;
bottom: -6px;
left: 0;
} }

View file

@ -116,4 +116,18 @@ section {
color: var(--badge-color, var(--color-secondary-600)); color: var(--badge-color, var(--color-secondary-600));
background: color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 40%, white 100%); background: color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 40%, white 100%);
border: 1px solid color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 90%, white 100%); border: 1px solid color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 90%, white 100%);
}
.underline {
position: relative;
}
.underline::after {
content: "";
background: no-repeat url("/line.svg");
position: absolute;
height: 10px;
width: 100%;
bottom: 0;
left: 0;
} }

View file

@ -1,11 +1,10 @@
:root { :root {
--accent-color: blue; --accent-color: #1155CC;
--font-body: Arial, sans-serif; --font-body: Helvetica, Arial, sans-serif;
--font-display: 'Times New Roman', Times, serif;
} }
html { html {
font-family: var(--font-body, Arial, sans-serif); font-family: var(--font-body, Helvetica, Arial, sans-serif);
margin: 0; margin: 0;
} }
body { body {
@ -19,14 +18,13 @@ body {
} }
h1 { h1 {
text-align:center; text-align: center;
font-family: var(--font-display, 'Times New Roman', Times, serif); font-size: 1.8rem;
font-size: 2rem;
margin: 0; margin: 0;
line-height: 1.6; line-height: 1.6;
} }
h2 { h2 {
color : var(--accent-color, blue); color : var(--accent-color, #1155CC);
} }
p { p {
margin: 0; margin: 0;
@ -37,6 +35,7 @@ ul {
li::marker { li::marker {
color: var(--accent-color, blue); color: var(--accent-color, blue);
} }
a { color : var(--accent-color, #1155CC); }
section {margin-bottom: 1.2rem;} section {margin-bottom: 1.2rem;}
.justify-center { .justify-center {
@ -56,7 +55,7 @@ section {margin-bottom: 1.2rem;}
display: contents; display: contents;
} }
.list-inline li + li::before { .list-inline li + li::before {
content: '|'; content: var(--item-separator, '|');
} }
.title { .title {
@ -82,9 +81,12 @@ section ul {padding: 0;margin-left: 1.2rem;}
margin-inline: 1rem; margin-inline: 1rem;
margin-bottom: .4rem; margin-bottom: .4rem;
} }
.subtitle .list-inline { --item-separator: "•"; gap: .4rem; }
.subtitle .timeSection { font-size: .9rem; } .subtitle .timeSection { font-size: .9rem; }
.subtitle h3, .subtitle h3,
.subtitle h4,
.subtitle p { margin: 0; } .subtitle p { margin: 0; }
.subtitle a { font-size: .9em; }
.subtitle > :first-child {justify-self: start;} .subtitle > :first-child {justify-self: start;}
.subtitle > :last-child {justify-self: end;} .subtitle > :last-child {justify-self: end;}
.subtitle ~ ul {font-size: .9rem;} .subtitle ~ ul {font-size: .9rem;}

View file

@ -1,12 +1,14 @@
--- ---
title: Artionet - Web Agency title: Artionet - Web Agency
role: Stagiaire role: Stagiaire Front-End
description: Stage de 4ème année de CFC, développement web description: Stage de 4ème année de CFC, développement web
location: Delémont location: Delémont, JU
link: https://www.artionet.ch link: https://www.artionet.ch
dates: dates:
start: 2021 start: 2021
end: 2022 end: 2022
--- ---
* Stage de 4ème année de CFC, développement web * Stage de 4ème année de CFC
* **Travail de diplôme**: Amélioration d'un logiciel de l'entreprise en PHP
* Création et intégration de nouveaux sites à l'aide du CMS IceCube2.Net

View file

@ -1,12 +1,16 @@
--- ---
title: Artionet - Web Agency title: Artionet - Web Agency
role: Développeur role: Développeur Front-End
description: Développeur Front-End et Support Client description: Développeur Front-End et Support Client
location: Delémont location: Delémont, JU
link: https://www.artionet.ch link: https://www.artionet.ch
dates: dates:
start: 2022 start: 2022
end: 2025 end: 2025
--- ---
* Développeur Front-End et Support Client * Design et développement de sites web
* Intégration de nouveaux sites à l'aide du CMS IceCube2.Net
* Traitement des demandes du support client et maintenance des sites
* Améliorations du CMS IceCube2.Net
* **Technologies utilisées**: HTML, CSS, JS, Figma, jQuery, Booststrap

View file

@ -2,10 +2,11 @@
title: Ecole des métiers Technique title: Ecole des métiers Technique
role: Etudiant role: Etudiant
description: CFC d'informaticien d'entreprise description: CFC d'informaticien d'entreprise
location: Porrentruy location: Porrentruy, JU
dates: dates:
start: 2018 start: 2018
end: 2022 end: 2022
--- ---
* CFC d'informaticien d'entreprise * CFC d'informaticien d'entreprise
* **Sujets couverts**: HTML, CSS, JS, SQL, Git, Gestion de projet, Réseau/NAS, C++, Java, Linux, Docker

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -3,6 +3,9 @@ title: Compétences
displayedTitle: Mes compétences displayedTitle: Mes compétences
order: 1 order: 1
showTitle: false showTitle: false
pdf:
order: 3
showTitle: true
--- ---

View file

@ -3,6 +3,8 @@ title: Expériences
displayedTitle: Mes expériences displayedTitle: Mes expériences
collection: experiences collection: experiences
order: 3 order: 3
pdf:
order: 1
--- ---
{% assign experiences = collections[collection] %} {% assign experiences = collections[collection] %}

View file

@ -2,7 +2,8 @@
title: A propos title: A propos
order: 0 order: 0
template: 'hero' template: 'hero'
excludeFromPdf: true pdf:
exclude: true
eleventyComputed: eleventyComputed:
description: "{{ author.about }}" description: "{{ author.about }}"
displayedTitle: "Moi c'est <span class='accent-font'>{{ author.firstName }}</span><br>Et je suis {{ author.occupation }}" displayedTitle: "Moi c'est <span class='accent-font'>{{ author.firstName }}</span><br>Et je suis {{ author.occupation }}"

View file

@ -3,6 +3,8 @@ title: Projets
displayedTitle: Mes projets displayedTitle: Mes projets
collection: projects collection: projects
order: 2 order: 2
pdf:
order: 2
--- ---
{% assign projects = collections[collection] %} {% assign projects = collections[collection] %}

View file

@ -25,13 +25,10 @@ links:
</ul> </ul>
</section> </section>
<p> <p style="margin-bottom: 1ch;">{{ author.about }}</p>
The time is {{ "now" | date: "%Y-%m-%d %H:%M" }}
</p> {% for section in collections.pdfSections %}
{% if section.data.pdf.exclude != true %}
{% for section in collections.sections %}
{% if section.data.excludeFromPdf != true %}
{% assign items = collections[section.data.collection] %} {% assign items = collections[section.data.collection] %}
{% include 'partials/components/pdf/section' %} {% include 'partials/components/pdf/section' %}
{% endif %} {% endif %}

View file

@ -1,14 +1,13 @@
--- ---
title: Cancre Simulator title: Cancre Simulator
description: Un jeu fait pour les Portes Ouvertes 2020 description: Un jeu multijoueur réalisé pour les Portes Ouvertes 2020 de l'EMT
background: linear-gradient(45deg, rgb(255, 241, 241) 30%, rgb(255, 196, 196) 100%)
links: links:
- title: Voir sur Github - https://github.com/divtec-cejef/2020-JCO-CancreSimulator
link: https://github.com
icon: simple-icons:github
tags: tags:
- C# - C#
- Unity - Unity
--- ---
* desc1 * {{description}}
* desc2 * **Technologies** : {{ tags | join: ", " }}

View file

@ -0,0 +1,16 @@
---
title: eleventy-plugin-pdf
description: Un plugin pour Eleventy qui permet de créer un fichier PDF
background: linear-gradient(45deg, rgb(255, 226, 224) 30%, rgb(255, 157, 154) 100%)
order: 0
links:
- https://www.npmjs.com/package/eleventy-plugin-pdf
- https://codeberg.org/TheThomaas/eleventy-plugin-pdf
tags:
- 11ty
- NPM
- JS
---
* Un plugin pour Eleventy qui permet de créer un fichier PDF à l'aide de Puppeteer
* **Technologies** : {{ tags | join: ", " }}

View file

@ -1,10 +1,14 @@
--- ---
title: Qui est-ce ? title: Qui est-ce ?
description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms (Projet scolaire)
order: 9
links: links:
- title: Voir sur Github - https://github.com/divtec-cejef/2019-CCH-BrickPi7-Thomas-Mathieu
link: https://github.com
icon: simple-icons:github
tags: tags:
- Python - Python
--- - TTS
---
* {{description}}
* Le joueur affronte l'ordinateur. Les deux se posent des questions à l'aide d'un sélecteur rotatif
* Le robot pose également les questions à haute voix

View file

@ -1,14 +1,14 @@
--- ---
title: LDAP title: LDAP
description: Ajouter, voir et se connecter à des utilisateurs LDAP depuis un site description: Edition d'utilisateurs d'un annuaire LDAP depuis un site (Projet scolaire)
background: linear-gradient(45deg, rgb(220, 246, 255) 30%, rgb(178, 239, 255) 100%)
links: links:
- title: Voir le site - https://github.com/TheThomaas/PHP-M159-LDAP
link: https://google.com
icon: link
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags: tags:
- PHP - PHP
- LDAP - LDAP
--- - SQL
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}

View file

@ -1,4 +1,4 @@
{ {
"permalink": false, "permalink": false,
"order": 1 "order": 8
} }

View file

@ -1,14 +1,14 @@
--- ---
title: Sigfox Temperature title: Capteurs de temperature
description: Des capteurs de température affichés sur un tableau de bord description: Des capteurs de température affichés sur un tableau de bord (Projet scolaire)
background: linear-gradient(45deg, var(--color-secondary-100) 30%, var(--color-secondary-300) 100%)
links: links:
- title: Voir le site - https://github.com/TheThomaas/iot_temperature_humidity
link: https://google.com
icon: link
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags: tags:
- JS
- IOT - IOT
--- - PHP
- Arduino
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}

View file

@ -1,10 +1,11 @@
--- ---
title: Snake title: Snake
description: Un snake réalisé en Java description: Un snake réalisé en Java (Projet scolaire)
background: linear-gradient(45deg, var(--color-primary-50) 30%, var(--color-primary-200) 100%)
links: links:
- title: Voir sur Github - https://github.com/TheThomaas/snake
link: https://github.com
icon: simple-icons:github
tags: tags:
- Java - Java
--- ---
* {{description}}