Merge branch 'chore/portfolio'
Some checks failed
ci/woodpecker/push/publish Pipeline failed

This commit is contained in:
Mylloon 2023-04-11 02:13:54 +02:00
commit 7f01fe98db
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
13 changed files with 258 additions and 314 deletions

View file

@ -0,0 +1,6 @@
---
title: Botanique
link: https://git.mylloon.fr/ConfrerieDuKassoulait/Botanique
---
✨ Bot Discord libre et écrit en Typescript.

View file

@ -0,0 +1,6 @@
---
title: feurBot
link: https://git.mylloon.fr/Anri/feurBot
---
Réponds à certains tweets (exemple : si un tweet fini par _quoi_, le bot répondra _feur_).

View file

@ -0,0 +1,6 @@
---
title: cal8tor
link: https://git.mylloon.fr/Anri/cal8tor
---
Lecteur de l'emploi du temps pour la licence d'informatique de Paris 8, avec possibilité d'exporter le calendrier en ICS.

View file

@ -0,0 +1,6 @@
---
title: confOS
link: https://git.mylloon.fr/Anri/confOS
---
Scripts et fichiers de configuration pour me simplifier la vie quand je réinstalle mes systèmes d'exploitation.

View file

@ -0,0 +1,6 @@
---
title: Constnium
link: https://git.mylloon.fr/Anri/Constnium
---
Calculez votre propre constante sur la base de votre prénom en multipliant de vraies constantes mathématiques entre elles. Une [démo est disponible ici](https://constnium.mylloon.fr/).

View file

@ -0,0 +1,6 @@
---
title: csh
link: https://git.mylloon.fr/Anri/csh
---
Application python pour tricher dans le jeu compétitif Counter-Strike : Global Offensive. Repose sur le principe de cheat externe. C'était marrant à faire.

View file

@ -0,0 +1,6 @@
---
title: prose_dl
link: https://git.mylloon.fr/Anri/prose_dl
---
Permets de télécharger tous les posts d'un utilisateur depuis [prose.sh](https://prose.sh/). J'ai [écrit ici](https://anri.prose.sh/prose_dl) sur son développement.

5
data/projects/univ.md Normal file
View file

@ -0,0 +1,5 @@
---
title: Projet de l'université
---
✨ Parce que j'ai fait plusieurs projets dont je suis fier mais qui ne mérite pas une place entière sur cette page comme mon [premier pendu](https://git.mylloon.fr/Paris8/penduEnC) ou une jolie [interface manager/caisser](https://git.mylloon.fr/Paris8/GesMag), vous pouvez simplement aller voir la liste des projets en vrac qui sont disponibles sur mon [git](https://git.mylloon.fr/Paris8/).

View file

@ -1,7 +1,11 @@
use actix_web::{get, web, HttpResponse, Responder}; use actix_web::{get, web, HttpResponse, Responder};
use glob::glob;
use ramhorns::Content; use ramhorns::Content;
use crate::config::Config; use crate::{
config::Config,
template::{read_md, File},
};
#[get("/portfolio")] #[get("/portfolio")]
pub async fn page(config: web::Data<Config>) -> impl Responder { pub async fn page(config: web::Data<Config>) -> impl Responder {
@ -9,8 +13,36 @@ pub async fn page(config: web::Data<Config>) -> impl Responder {
} }
#[derive(Content)] #[derive(Content)]
struct PortfolioTemplate {} struct PortfolioTemplate {
page_title: String,
bots_app: Vec<File>,
persos_app: Vec<File>,
univ_content: String,
}
pub fn get_page(config: Config) -> std::string::String { pub fn get_page(config: Config) -> std::string::String {
config.tmpl.render("portfolio.html", PortfolioTemplate {}) let projects_dir = "data/projects";
let ext = ".md";
// Get bots apps
let mut bots_apps = Vec::new();
for entry in glob(&format!("{projects_dir}/bots/*{ext}")).unwrap() {
bots_apps.push(read_md(&entry.unwrap().to_string_lossy()));
}
// Get perso apps
let mut perso_apps = Vec::new();
for entry in glob(&format!("{projects_dir}/perso/*{ext}")).unwrap() {
perso_apps.push(read_md(&entry.unwrap().to_string_lossy()));
}
config.tmpl.render(
"portfolio.html",
PortfolioTemplate {
page_title: "Portfolio".to_string(),
bots_app: bots_apps,
persos_app: perso_apps,
univ_content: read_md(&format!("{projects_dir}/univ{ext}")).content,
},
)
} }

View file

@ -54,7 +54,13 @@ pub struct Metadata {
pub syntax_highlight: bool, pub syntax_highlight: bool,
} }
pub fn read_md(filename: &str) -> (Metadata, String) { #[derive(Content)]
pub struct File {
pub metadata: Metadata,
pub content: String,
}
pub fn read_md(filename: &str) -> File {
// Read markdown file // Read markdown file
let mut text = std::fs::read_to_string(filename).unwrap(); let mut text = std::fs::read_to_string(filename).unwrap();
@ -106,12 +112,12 @@ pub fn read_md(filename: &str) -> (Metadata, String) {
_ => false, _ => false,
}); });
( File {
Metadata { metadata: Metadata {
info: metadata, info: metadata,
mermaid: presence_mermaid, mermaid: presence_mermaid,
syntax_highlight: presence_code, syntax_highlight: presence_code,
}, },
html, content: html,
) }
} }

View file

@ -1,5 +1,5 @@
/* Title font */ /* Title font */
@import url("https://fonts.googleapis.com/css2?family=Overpass:wght@200&display=swap"); @import url("https://api.fonts.coollabs.io/css2?family=Overpass:wght@200&display=swap");
/* Normal font */ /* Normal font */
@font-face { @font-face {

37
templates/header.html Normal file
View file

@ -0,0 +1,37 @@
<head dir="rtl">
<title>{{#data}}{{page_title}}{{/data}} - {{app_name}}</title>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/style.css" />
<meta name="author" content="Mylloon" />
<meta name="description" content="{{ desc }}" />
<base target="_blank" />
<link
rel="apple-touch-icon"
sizes="180x180"
href="icons/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="icons/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="icons/favicon-16x16.png"
/>
<link rel="manifest" href="icons/site.webmanifest" />
<link rel="mask-icon" href="icons/safari-pinned-tab.svg" color="#5bbad5" />
<link rel="shortcut icon" href="icons/favicon.ico" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta name="msapplication-config" content="icons/browserconfig.xml" />
<meta name="theme-color" content="#2a2424" />
<meta content="{{ title }}" property="og:title" />
<meta content="{{ desc }}" property="og:description" />
<meta content="icons/apple-touch-icon.png" property="og:image" />
<meta content="#43B581" data-react-helmet="true" name="theme-color" />
</head>

View file

@ -1,218 +1,40 @@
<!DOCTYPE html> <!DOCTYPE html>
<html class="index" lang="fr"> <html class="index" lang="fr">
<head dir="rtl"> {{> header.html }}
<title>Mon portfolio - Anri</title>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/style.css" />
<meta name="author" content="Mylloon" />
<meta name="description" content="Portfolio d'Anri Kennel" />
<base target="_blank" />
<link
rel="apple-touch-icon"
sizes="180x180"
href="icons/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="icons/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="icons/favicon-16x16.png"
/>
<link rel="manifest" href="icons/site.webmanifest" />
<link rel="mask-icon" href="icons/safari-pinned-tab.svg" color="#5bbad5" />
<link rel="shortcut icon" href="icons/favicon.ico" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta name="msapplication-config" content="icons/browserconfig.xml" />
<meta name="theme-color" content="#2a2424" />
<meta content="Portfolio" property="og:title" />
<meta content="Portfolio d'Anri Kennel" property="og:description" />
<meta content="icons/apple-touch-icon.png" property="og:image" />
<meta content="#43B581" data-react-helmet="true" name="theme-color" />
</head>
<body> <body>
{{#data}}
<h1 id="title">Projets qui me tiennent à coeur</h1> <h1 id="title">Projets qui me tiennent à coeur</h1>
<div id="content"> <div id="content">
<h2 class="subtitle">Bots</h2> <h2 class="subtitle">Bots</h2>
<div class="subcontent"> <div class="subcontent">
{{#bots_app}} {{#metadata}} {{#info}}
<h3 class="subsubtitle"> <h3 class="subsubtitle">
<a href="https://git.mylloon.fr/ConfrerieDuKassoulait/KassouBot" <a href="{{link}}">{{title}}</a>
>KassouBot</a
>
</h3> </h3>
<div class="subcontent"> {{/info}} {{/metadata}}
<p> <div class="subcontent">{{&content }}</div>
✨ Basé sur une {{/bots_app}}
<a href="https://git.mylloon.fr/Anri/ravaBot">ancienne version</a>,
permet de faire plusieurs choses comme maintenir des reminders, des
todos, écouter de la musique, etc.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/feurBot">feurBot</a>
</h3>
<div class="subcontent">
<p>
Réponds à certains tweets (exemple : si un tweet fini par
<em>quoi</em>, le bot répondra <em>feur</em>).
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/ConfrerieDuKassoulait/Bot-Tom"
>Bot-Tom</a
>
</h3>
<div class="subcontent">
<p>
Utilise SQLite pour avoir des commandes personnalisables sur Twitch.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/ConfrerieDuKassoulait/Botanique"
>Botanique</a
>
</h3>
<div class="subcontent">
<p>
<a href="https://git.mylloon.fr/ConfrerieDuKassoulait/KassouBot"
>Pas ma première expérience</a
>&nbsp;en matière de bot Discord. Actuellement en actif
développement. Complètement libre et écrit en Typescript.
</p>
</div>
<br /> <br />
</div> </div>
<h2 class="subtitle"> <h2 class="subtitle">
<a href="https://git.mylloon.fr/Paris8/">Projet de l'université</a> <a href="https://git.mylloon.fr/Paris8">Projet de l'université</a>
</h2> </h2>
<div class="subcontent"> <div class="subcontent">{{&univ_content}}</div>
<p>
✨ Parce que j'ai fait plusieurs projets dont je suis fier mais qui ne
mérite pas une place entière sur cette page comme mon
<a href="https://git.mylloon.fr/Paris8/penduEnC">premier pendu</a
>&nbsp;ou une jolie
<a href="https://git.mylloon.fr/Paris8/GesMag"
>interface manager/caisser</a
>, vous pouvez simplement aller voir la liste des projets en vrac qui
sont disponibles sur mon
<a href="https://git.mylloon.fr/Paris8/">git</a>.
</p>
</div>
<h2 class="subtitle">Projets perso</h2> <h2 class="subtitle">Projets perso</h2>
<div class="subcontent"> <div class="subcontent">
{{#persos_app}} {{#metadata}} {{#info}}
<h3 class="subsubtitle"> <h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/Constnium">Constnium</a> <a href="{{link}}">{{title}}</a>
</h3> </h3>
<div class="subcontent"> {{/info}} {{/metadata}}
<p> <div class="subcontent">{{&content }}</div>
Calculez votre propre constante sur la base de votre prénom en {{/persos_app}}
multipliant de vraies constantes mathématiques entre elles. Une <br />
<a href="https://constnium.mylloon.fr/">démo est disponible ici</a>.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/cal8tor">cal8tor</a>
</h3>
<div class="subcontent">
<p>
Lecteur de l'emploi du temps pour la licence d'informatique de Paris
8, avec possibilité d'exporter le calendrier en ICS.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/prose_dl">prose_dl</a>
</h3>
<div class="subcontent">
<p>
Permets de télécharger tous les posts d'un utilisateur depuis
<a href="https://prose.sh/">prose.sh</a>. J'ai
<a href="https://anri.prose.sh/prose_dl">écrit ici</a>&nbsp;sur son
développement.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/downloadcodium"
>downloadCodium</a
>
</h3>
<div class="subcontent">
<p>
Petit script qui permet de télécharger et garder à-jour facilement
la version .AppImage VSCodium.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/confOS">confOS</a>
</h3>
<div class="subcontent">
<p>
Scripts et fichiers de configuration pour me simplifier la vie quand
je réinstalle mes systèmes d'exploitation.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/mobilismScrap">mobilismScrap</a>
</h3>
<div class="subcontent">
<p>Deux versions, une en python et une en Kotlin :</p>
<ul id="listecontent">
<li>
Celle en Python permet juste de lancer, en ligne de commande, une
recherche qui va récupérer sur le forum Mobilism des versions
crackées d'applications mobiles.
</li>
<li>
✨ Celle en Kotlin est une application android qui fait
basiquement la même chose mais avec une interface plus sympa.
</li>
</ul>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/CleanTemporaryFiles"
>cleanTemporaryFiles</a
>
</h3>
<div class="subcontent">
<p>
Petit script Windows qui lance quelques commandes pour supprimer les
fichiers temporaires.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/microphonePopcat"
>microphonePopcat</a
>
</h3>
<div class="subcontent">
<p>
Petit programme en python qui permet d'ouvrir la bouche d'un chat
quand on parle.
</p>
</div>
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/RenameFilesForPlex"
>renameFilesForPlex</a
>
</h3>
<div class="subcontent">
<p>
Petit programme pour renommer des fichiers vidéo (séries) pour
qu'ils soient lisibles directement par Plex.
</p>
</div>
</div> </div>
</div> </div>
<footer class="backToIndexPage"> <footer class="backToIndexPage">
<a href="/" target="_self">Retour à la page principale</a> <a href="/" target="_self">Retour à la page principale</a>
</footer> </footer>
{{/data}}
</body> </body>
</html> </html>