Compare commits

..

No commits in common. "ebbd2d3ec51fc9227d0626b9370db4deda9a26a5" and "f09135319a5614ef10274d900d704609e078858b" have entirely different histories.

39 changed files with 158 additions and 288 deletions

View file

@ -0,0 +1,49 @@
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,12 +16,6 @@ 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);
@ -34,11 +28,11 @@ export default async function (eleventyConfig) {
.sort((a, b) => a.data.dates.start - b.data.dates.start).reverse();
});
eleventyConfig.addPassthroughCopy({'src/assets': '/'})
eleventyConfig.addPassthroughCopy('src/favicon.ico')
eleventyConfig.addPlugin(shortcodes);
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
eleventyConfig.addPlugin(eleventyPluginPDF);
eleventyConfig.addPlugin(pluginPDF);
eleventyConfig.addPlugin(pluginIcons, {
sources: [
{ name: 'lucide', path: 'node_modules/lucide-static/icons', default: true },

7
package-lock.json generated
View file

@ -11,7 +11,6 @@
"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",
@ -1290,12 +1289,6 @@
"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,7 +14,6 @@
"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,13 +18,10 @@
"Git"
],
"lang": [
"Français",
"Français (langue maternelle)",
"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://codeberg.org/TheThomaas/11ty-resume",
repoSrc: "Codeberg"
repository: "https://github.com/TheThomaas",
repoSrc: "Github"
}

View file

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

View file

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

View file

@ -1,80 +1,31 @@
{% 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 showTitle %}
{% if section.data.showTitle != false %}
<div class="title">
<h2>{{ title }}</h2>
<h2>
{% if section.data.displayedTitle %}
{{ section.data.displayedTitle }}
{% else %}
{{ section.data.title }}
{% endif %}
</h2>
<hr>
</div>
{% endif %}
{% 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">
{% 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>
{% 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 %}
{{ item.templateContent }}
{% endfor %}
</section>

View file

@ -1,40 +0,0 @@
{% 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,8 +8,7 @@
link: data.link,
title: data.title,
location: data.location,
description: data.description,
templateContent: elements.templateContent %}
description: data.description %}
{%- endfor -%}
</ol>
{% endif %}

View file

@ -1,12 +1,13 @@
<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,5 +21,3 @@
<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">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 919 B

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 983 B

View file

@ -1,7 +1,5 @@
.clouds-zone {
overflow-x: hidden;
top: 0;
padding-top: 70px;
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: clamp(1.25em, 3vmax, 1.5em);
font-size: 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,18 +4,14 @@ footer {
}
footer > div {
place-content: center space-between;
align-items: start;
align-items: center;
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: "";
@ -23,10 +19,4 @@ 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,20 +25,14 @@ header nav li {
header nav a {
text-underline-offset: 0.4rem;
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"] {
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;
color: var(--text-2);
font-weight: var(--font-weight-semibold);
text-decoration: underline;
text-decoration-thickness: 0.12rem;
}

View file

@ -116,18 +116,4 @@ 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,10 +1,11 @@
:root {
--accent-color: #1155CC;
--font-body: Helvetica, Arial, sans-serif;
--accent-color: blue;
--font-body: Arial, sans-serif;
--font-display: 'Times New Roman', Times, serif;
}
html {
font-family: var(--font-body, Helvetica, Arial, sans-serif);
font-family: var(--font-body, Arial, sans-serif);
margin: 0;
}
body {
@ -18,13 +19,14 @@ body {
}
h1 {
text-align: center;
font-size: 1.8rem;
text-align:center;
font-family: var(--font-display, 'Times New Roman', Times, serif);
font-size: 2rem;
margin: 0;
line-height: 1.6;
}
h2 {
color : var(--accent-color, #1155CC);
color : var(--accent-color, blue);
}
p {
margin: 0;
@ -35,7 +37,6 @@ ul {
li::marker {
color: var(--accent-color, blue);
}
a { color : var(--accent-color, #1155CC); }
section {margin-bottom: 1.2rem;}
.justify-center {
@ -55,7 +56,7 @@ section {margin-bottom: 1.2rem;}
display: contents;
}
.list-inline li + li::before {
content: var(--item-separator, '|');
content: '|';
}
.title {
@ -81,12 +82,9 @@ 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,14 +1,12 @@
---
title: Artionet - Web Agency
role: Stagiaire Front-End
role: Stagiaire
description: Stage de 4ème année de CFC, développement web
location: Delémont, JU
location: Delémont
link: https://www.artionet.ch
dates:
start: 2021
end: 2022
---
* 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
* Stage de 4ème année de CFC, développement web

View file

@ -1,16 +1,12 @@
---
title: Artionet - Web Agency
role: Développeur Front-End
role: Développeur
description: Développeur Front-End et Support Client
location: Delémont, JU
location: Delémont
link: https://www.artionet.ch
dates:
start: 2022
end: 2025
---
* 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
* Développeur Front-End et Support Client

View file

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

BIN
src/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

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

View file

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

View file

@ -2,8 +2,7 @@
title: A propos
order: 0
template: 'hero'
pdf:
exclude: true
excludeFromPdf: 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,8 +3,6 @@ title: Projets
displayedTitle: Mes projets
collection: projects
order: 2
pdf:
order: 2
---
{% assign projects = collections[collection] %}

View file

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

View file

@ -1,13 +1,14 @@
---
title: Cancre Simulator
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%)
description: Un jeu fait pour les Portes Ouvertes 2020
links:
- https://github.com/divtec-cejef/2020-JCO-CancreSimulator
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- C#
- Unity
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}
* desc1
* desc2

View file

@ -1,16 +0,0 @@
---
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,14 +1,10 @@
---
title: Qui est-ce ?
description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms (Projet scolaire)
order: 9
description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms
links:
- https://github.com/divtec-cejef/2019-CCH-BrickPi7-Thomas-Mathieu
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
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: 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%)
description: Ajouter, voir et se connecter à des utilisateurs LDAP depuis un site
links:
- https://github.com/TheThomaas/PHP-M159-LDAP
- title: Voir le site
link: https://google.com
icon: link
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- PHP
- LDAP
- SQL
---
* {{description}}
* **Technologies** : {{ tags | join: ", " }}
---

View file

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

View file

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

View file

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