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 eleventyPluginPDF from "eleventy-plugin-pdf";
import pluginIcons from 'eleventy-plugin-icons';
import pluginPDF from "./_config/eleventy-plugin-pdf.js";
import pluginTokens from "./_config/eleventy-plugin-tokens.js";
import shortcodes from "./_config/shortcodes.js";
@ -16,6 +16,12 @@ export default async function (eleventyConfig) {
process.env.DEBUG && console.log(inspect(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) => {
const projects = collectionApi.getFilteredByGlob("./src/projects/**")
.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();
});
eleventyConfig.addPassthroughCopy('src/favicon.ico')
eleventyConfig.addPassthroughCopy({'src/assets': '/'})
eleventyConfig.addPlugin(shortcodes);
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
eleventyConfig.addPlugin(pluginPDF);
eleventyConfig.addPlugin(eleventyPluginPDF);
eleventyConfig.addPlugin(pluginIcons, {
sources: [
{ name: 'lucide', path: 'node_modules/lucide-static/icons', default: true },

7
package-lock.json generated
View file

@ -11,6 +11,7 @@
"devDependencies": {
"@11ty/eleventy": "^3.0.0",
"eleventy-plugin-icons": "^4.5.3",
"eleventy-plugin-pdf": "^1.0.1",
"lucide-static": "^0.503.0",
"nanoid": "^5.1.5",
"puppeteer-html-pdf": "^4.0.8",
@ -1289,6 +1290,12 @@
"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": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
<section id="{{ section.data.title | slug }}" class="{{ section.data.classes }} wrapper-full">
{% 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 %}
{{ section.templateContent }}
</section>

View file

@ -4,7 +4,8 @@
<span></span>
<div class="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 -%}
</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>
{% if section.data.showTitle != false %}
{% if showTitle %}
<div class="title">
<h2>
{% if section.data.displayedTitle %}
{{ section.data.displayedTitle }}
{% else %}
{{ section.data.title }}
{% endif %}
</h2>
<h2>{{ title }}</h2>
<hr>
</div>
{% endif %}
{% for item in items %}
<div class="subtitle">
<h3>{{ item.data.title }}</h3>
<p class="underline">
<strong>{{ item.data.role }}</strong>
</p>
{% if item.data.dates %}
<div class="timeSection">
<span>{{ item.data.location }}</span>
<strong>{{ item.data.dates.start }} - {{ item.data.dates.end }}</strong>
</div>
{% endif %}
</div>
{% if items %}
{% for item in items %}
<div class="subtitle">
<h4>{{ item.data.title }}</h4>
{% if item.data.role %}
<p class="underline">
<strong>{{ item.data.role }}</strong>
</p>
{% else %}
<span></span>
{% endif %}
{% if item.data.dates %}
<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 }}
{% endfor %}
{% for link in item.data.links %}
{% 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>

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,
title: data.title,
location: data.location,
description: data.description %}
description: data.description,
templateContent: elements.templateContent %}
{%- endfor -%}
</ol>
{% endif %}

View file

@ -1,13 +1,12 @@
<footer class="wrapper-full">
<div>
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
<ul class="list-inline">
<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 != "" %}
<li>Source sur {% render 'partials/components/link', label: site.repoSrc, href: site.repository, target: "_blank", rel: "nofollow" %}</li>
{% endif %}
</ul>
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
</div>
</footer>

View file

@ -21,3 +21,5 @@
<meta property="og:url" content="{{ currentUrl }}" />
<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 {
top: 70px;
overflow-x: hidden;
top: 0;
padding-top: 70px;
inset-inline: 0;
position: absolute;
z-index: -1;

View file

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

View file

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

View file

@ -4,14 +4,18 @@ footer {
}
footer > div {
place-content: center space-between;
align-items: center;
align-items: start;
width: 100%;
display: flex;
flex-direction: column;
}
footer .list-inline a {
--item-color: var(--text-2);
text-decoration: underline;
}
footer .list-inline a:hover {
--item-color: var(--text);
}
footer .socials-list {
--item-gap: 0.2ch;
--item-separator: "";
@ -19,4 +23,10 @@ footer .socials-list {
}
footer .button.button {
--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 {
text-underline-offset: 0.4rem;
text-decoration: none;
position: relative;
}
header nav a:hover {
text-decoration: underline;
text-decoration-thickness: 0.12rem;
}
header nav a:hover,
header nav a[aria-current="page"] {
color: var(--text-2);
font-weight: var(--font-weight-semibold);
text-decoration: underline;
text-decoration-thickness: 0.12rem;
color: var(--color-secondary-950);
text-shadow: 1px 0 0 currentColor;
}
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));
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%);
}
.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 {
--accent-color: blue;
--font-body: Arial, sans-serif;
--font-display: 'Times New Roman', Times, serif;
--accent-color: #1155CC;
--font-body: Helvetica, Arial, sans-serif;
}
html {
font-family: var(--font-body, Arial, sans-serif);
font-family: var(--font-body, Helvetica, Arial, sans-serif);
margin: 0;
}
body {
@ -19,14 +18,13 @@ body {
}
h1 {
text-align:center;
font-family: var(--font-display, 'Times New Roman', Times, serif);
font-size: 2rem;
text-align: center;
font-size: 1.8rem;
margin: 0;
line-height: 1.6;
}
h2 {
color : var(--accent-color, blue);
color : var(--accent-color, #1155CC);
}
p {
margin: 0;
@ -37,6 +35,7 @@ ul {
li::marker {
color: var(--accent-color, blue);
}
a { color : var(--accent-color, #1155CC); }
section {margin-bottom: 1.2rem;}
.justify-center {
@ -56,7 +55,7 @@ section {margin-bottom: 1.2rem;}
display: contents;
}
.list-inline li + li::before {
content: '|';
content: var(--item-separator, '|');
}
.title {
@ -82,9 +81,12 @@ section ul {padding: 0;margin-left: 1.2rem;}
margin-inline: 1rem;
margin-bottom: .4rem;
}
.subtitle .list-inline { --item-separator: "•"; gap: .4rem; }
.subtitle .timeSection { font-size: .9rem; }
.subtitle h3,
.subtitle h4,
.subtitle p { margin: 0; }
.subtitle a { font-size: .9em; }
.subtitle > :first-child {justify-self: start;}
.subtitle > :last-child {justify-self: end;}
.subtitle ~ ul {font-size: .9rem;}

View file

@ -1,12 +1,14 @@
---
title: Artionet - Web Agency
role: Stagiaire
role: Stagiaire Front-End
description: Stage de 4ème année de CFC, développement web
location: Delémont
location: Delémont, JU
link: https://www.artionet.ch
dates:
start: 2021
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
role: Développeur
role: Développeur Front-End
description: Développeur Front-End et Support Client
location: Delémont
location: Delémont, JU
link: https://www.artionet.ch
dates:
start: 2022
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
role: Etudiant
description: CFC d'informaticien d'entreprise
location: Porrentruy
location: Porrentruy, JU
dates:
start: 2018
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
order: 1
showTitle: false
pdf:
order: 3
showTitle: true
---

View file

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

View file

@ -2,7 +2,8 @@
title: A propos
order: 0
template: 'hero'
excludeFromPdf: true
pdf:
exclude: true
eleventyComputed:
description: "{{ author.about }}"
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
collection: projects
order: 2
pdf:
order: 2
---
{% assign projects = collections[collection] %}

View file

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

View file

@ -1,14 +1,13 @@
---
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:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
- https://github.com/divtec-cejef/2020-JCO-CancreSimulator
tags:
- C#
- Unity
---
* desc1
* desc2
* {{description}}
* **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 ?
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:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
- https://github.com/divtec-cejef/2019-CCH-BrickPi7-Thomas-Mathieu
tags:
- 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
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:
- title: Voir le site
link: https://google.com
icon: link
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
- https://github.com/TheThomaas/PHP-M159-LDAP
tags:
- PHP
- LDAP
---
- SQL
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}

View file

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

View file

@ -1,14 +1,14 @@
---
title: Sigfox Temperature
description: Des capteurs de température affichés sur un tableau de bord
title: Capteurs de temperature
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:
- title: Voir le site
link: https://google.com
icon: link
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
- https://github.com/TheThomaas/iot_temperature_humidity
tags:
- JS
- IOT
---
- PHP
- Arduino
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}

View file

@ -1,10 +1,11 @@
---
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:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
- https://github.com/TheThomaas/snake
tags:
- Java
---
---
* {{description}}