use portfolio2 and delete portfolio
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending

This commit is contained in:
Mylloon 2023-04-11 02:13:17 +02:00
parent 2b3e7491a2
commit a151cd32a6
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
5 changed files with 51 additions and 253 deletions

View file

@ -20,9 +20,6 @@ mod networks;
#[path = "routes/portfolio.rs"]
mod portfolio;
#[path = "routes/portfolio2.rs"]
mod portfolio2;
#[path = "routes/contrib.rs"]
mod contrib;
@ -53,7 +50,6 @@ async fn main() -> io::Result<()> {
.service(agreements::sitemap)
.service(networks::page)
.service(portfolio::page)
.service(portfolio2::page)
.service(contrib::page)
.service(Files::new("/", config.static_location.clone()))
.default_service(web::to(not_found::page))

View file

@ -1,7 +1,11 @@
use actix_web::{get, web, HttpResponse, Responder};
use glob::glob;
use ramhorns::Content;
use crate::config::Config;
use crate::{
config::Config,
template::{read_md, File},
};
#[get("/portfolio")]
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)]
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 {
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

@ -1,29 +0,0 @@
use actix_web::{get, web, HttpResponse, Responder};
use ramhorns::Content;
use crate::{config::Config, template::File};
#[get("/portfolio2")]
pub async fn page(config: web::Data<Config>) -> impl Responder {
HttpResponse::Ok().body(get_page(config.get_ref().clone()))
}
#[derive(Content)]
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 {
config.tmpl.render(
"portfolio2.html",
PortfolioTemplate {
page_title: "Portfolio".to_string(),
bots_app: Vec::with_capacity(0),
persos_app: Vec::with_capacity(0),
univ_content: String::new(),
},
)
}

View file

@ -1,218 +1,40 @@
<!DOCTYPE html>
<html class="index" lang="fr">
<head dir="rtl">
<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>
{{> header.html }}
<body>
{{#data}}
<h1 id="title">Projets qui me tiennent à coeur</h1>
<div id="content">
<h2 class="subtitle">Bots</h2>
<div class="subcontent">
{{#bots_app}} {{#metadata}} {{#info}}
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/ConfrerieDuKassoulait/KassouBot"
>KassouBot</a
>
<a href="{{link}}">{{title}}</a>
</h3>
<div class="subcontent">
<p>
✨ Basé sur une
<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>
{{/info}} {{/metadata}}
<div class="subcontent">{{&content }}</div>
{{/bots_app}}
<br />
</div>
<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>
<div class="subcontent">
<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>
<div class="subcontent">{{&univ_content}}</div>
<h2 class="subtitle">Projets perso</h2>
<div class="subcontent">
{{#persos_app}} {{#metadata}} {{#info}}
<h3 class="subsubtitle">
<a href="https://git.mylloon.fr/Anri/Constnium">Constnium</a>
<a href="{{link}}">{{title}}</a>
</h3>
<div class="subcontent">
<p>
Calculez votre propre constante sur la base de votre prénom en
multipliant de vraies constantes mathématiques entre elles. Une
<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>
{{/info}} {{/metadata}}
<div class="subcontent">{{&content }}</div>
{{/persos_app}}
<br />
</div>
</div>
<footer class="backToIndexPage">
<a href="/" target="_self">Retour à la page principale</a>
</footer>
{{/data}}
</body>
</html>

View file

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html class="index" lang="fr">
{{> header.html }}
<body>
{{#data}}
<h1 id="title">Projets qui me tiennent à coeur</h1>
<div id="content">
<h2 class="subtitle">Bots</h2>
<div class="subcontent">
{{#metadata}}{{#info}}
<h3 class="subsubtitle">
<a href="{{link}}">{{title}}</a>
</h3>
{{/info}}{{/metadata}}
<div class="subcontent">{{& content }}</div>
</div>
</div>
<footer class="backToIndexPage">
<a href="/" target="_self">Retour à la page principale</a>
</footer>
{{/data}}
</body>
</html>