use portfolio2 and delete portfolio
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending
This commit is contained in:
parent
2b3e7491a2
commit
a151cd32a6
5 changed files with 51 additions and 253 deletions
|
@ -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))
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
},
|
||||
)
|
||||
}
|
|
@ -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
|
||||
> 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
|
||||
> 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> 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>
|
||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue