using rocket instead of astro

This commit is contained in:
Philippe Loctaux 2023-12-01 10:54:31 +01:00
parent eb72400722
commit e61ef1d4c3
79 changed files with 4406 additions and 8501 deletions

84
src/types/friend.rs Normal file
View file

@ -0,0 +1,84 @@
use rocket::http::uri::Absolute;
use rocket::uri;
pub struct Friend {
pub first_name: &'static str,
pub last_name: &'static str,
pub uri: Absolute<'static>,
}
impl Friend {
pub fn initials(&self) -> String {
let first = self
.first_name
.to_uppercase()
.chars()
.next()
.expect("Invalid first name");
let last = self
.last_name
.to_uppercase()
.chars()
.next()
.expect("Invalid last name");
format!("{first}{last}")
}
pub fn domain_name(&self) -> String {
match self.uri.authority() {
Some(authority) => authority.to_string(),
None => self.uri.to_string(),
}
}
pub fn new() -> Vec<Self> {
vec![
Friend {
first_name: "Jamie",
last_name: "Bishop",
uri: uri!("https://jamiebi.shop"),
},
Friend {
first_name: "Ayden",
last_name: "Panhuyzen",
uri: uri!("https://ayden.dev"),
},
Friend {
first_name: "Corbin",
last_name: "Crutchley",
uri: uri!("https://crutchcorn.dev"),
},
Friend {
first_name: "James",
last_name: "Fenn",
uri: uri!("https://jfenn.me"),
},
Friend {
first_name: "Alex",
last_name: "Dueppen",
uri: uri!("https://ajd.sh"),
},
Friend {
first_name: "Peter",
last_name: "Sobolev",
uri: uri!("https://petersoboyejo.com"),
},
Friend {
first_name: "Alexandre",
last_name: "Wagner",
uri: uri!("https://wagnerwave.com"),
},
Friend {
first_name: "Aidan",
last_name: "Follestad",
uri: uri!("https://af.codes"),
},
Friend {
first_name: "Victor",
last_name: "Simon",
uri: uri!("https://simonvictor.com"),
},
]
}
}

111
src/types/job.rs Normal file
View file

@ -0,0 +1,111 @@
use crate::types::Logo;
pub struct Job {
pub company: &'static str,
pub title: &'static str,
pub dates: &'static str,
pub logo: Logo,
pub description: Vec<&'static str>,
pub accomplishments: Vec<&'static str>,
pub technologies: Vec<&'static str>,
}
impl Job {
pub fn new() -> Vec<Self> {
vec![
Job {
company: "Acklio",
title: "Rust developer",
dates: "March 2023 - May 2023",
logo: Logo {
file: "/icons/acklio.png",
transparent_background: true,
},
description: vec!["The first usage of the SCHC framework (RFC 8724) on Rust!"],
accomplishments: vec![
"Creation of Rust bindings of a C library implementing the SCHC framework",
"Demonstration of SCHC with applications in Rust on x86 platform",
"Proof of concept usage of embedded STM32 controllers exclusively in Rust",
"Transmission of knowledge to the technical team",
],
technologies: vec!["Rust", "SCHC", "STM32 controllers", "LoRa", "LoRaWAN"],
},
Job {
company: "Vélorail du Kreiz Breizh",
title: "Freelance developer",
dates: "August 2021 - April 2022",
logo: Logo {
file: "/icons/velorail.png",
transparent_background: true,
},
description: vec![
"Creation of an online booking platform focused on the tourist activity of rail biking (vélorail).",
"During the first 5 months with the platform, 43% of the bookings were made online.",
],
accomplishments: vec![
"Design, UX, booking and payment flow for customers",
"Dashboard for managers with calendar view, manual bookings, slots management",
"Ability to generate invoices, booking recaps for managers",
"Sending emails to customers and managers about bookings",
"Online deployment, maintenance of the service",
],
technologies: vec!["Angular", "NestJS", "GraphQL", "Rust", "Stripe"],
},
Job {
company: "Yaakadev",
title: "Full-Stack developer",
dates: "April 2021 - July 2021",
logo: Logo {
file: "/icons/yaakadev.png",
transparent_background: false,
},
description: vec![
"Maintenance of existing projects for clients",
"Design, development and deployment of multiple projects from scratch:",
],
accomplishments: vec![
"Admin dashboard of a local merchants solution",
"Calendar planning application with filtering and custom views",
"Intranet to upload and download documents",
],
technologies: vec!["NodeJS", "ExpressJS", "Angular", "MongoDB", "CI/CD"],
},
Job {
company: "Epitech",
title: "Teaching assistant (AER)",
dates: "February 2020 - April 2021, September 2022 - February 2023",
logo: Logo {
file: "/icons/epitech.png",
transparent_background: true,
},
description: vec![
"Pedagogical supervision of three classes of students.",
"Conducting educational activities throughout the school year.",
],
accomplishments: vec![
"Start of projects",
"Technical help and guidance",
"Proctoring exams",
"Grading students on their work",
],
technologies: vec!["C", "C++", "Haskell", "Rust", "Web and mobile development"],
},
Job {
company: "Ubiscale",
title: "Embedded developer",
dates: "August 2019 - December 2019",
logo: Logo {
file: "/icons/ubiscale.png",
transparent_background: true,
},
description: vec!["Creation of a home Wifi gateway for an IoT object."],
accomplishments: vec![
"Research, reverse engineering of existing products",
"Design and implementation.",
],
technologies: vec!["C on a ESP8266 controller", "Wi-Fi", "Bluetooth"],
},
]
}
}

52
src/types/network.rs Normal file
View file

@ -0,0 +1,52 @@
use rocket::http::uri::Absolute;
use rocket::uri;
pub enum Icon {
Email,
Github,
Linkedin,
Mastodon,
Telegram,
Twitter,
}
pub struct Network {
pub name: &'static str,
pub uri: Absolute<'static>,
pub icon: Icon,
}
impl Network {
pub fn new() -> Vec<Self> {
vec![
Network {
name: "Twitter",
uri: uri!("https://twitter.com/philippeloctaux"),
icon: Icon::Twitter,
},
Network {
name: "Telegram",
uri: uri!("https://t.me/philippeloctaux"),
icon: Icon::Telegram,
},
Network {
name: "Mastodon",
uri: uri!("https://mastodon.social/@philt3r"),
icon: Icon::Mastodon,
},
Network {
name: "GitHub",
uri: uri!("https://github.com/x4m3"),
icon: Icon::Github,
},
Network {
name: "LinkedIn",
uri: uri!("https://linkedin.com/in/philippeloctaux"),
icon: Icon::Linkedin,
},
Network {
name: "Email",
uri: uri!("https://philippeloctaux.com/email"),
icon: Icon::Email,
},
]
}
}

247
src/types/project.rs Normal file
View file

@ -0,0 +1,247 @@
use crate::types::{Link, Logo};
use rocket::uri;
pub enum Position {
Left,
Right,
}
pub struct Image {
pub file: &'static str,
pub position: Position,
}
pub enum ProjectLink {
Available(Link),
NotAvailable,
}
pub struct ProjectWithImage {
pub name: &'static str,
pub tagline: &'static str,
pub dates: &'static str,
pub description: Vec<&'static str>,
pub accomplishments: Vec<&'static str>,
pub technologies: Vec<&'static str>,
pub link: Option<ProjectLink>,
pub logo: Option<Logo>,
pub image: Image,
}
#[derive(Default)]
pub struct ProjectWithoutImage {
pub name: &'static str,
pub tagline: &'static str,
pub dates: &'static str,
pub description: Vec<&'static str>,
pub accomplishments: Vec<&'static str>,
pub technologies: Vec<&'static str>,
pub link: Option<ProjectLink>,
pub logo: Option<Logo>,
}
pub enum ProjectKind {
WithImage(ProjectWithImage),
WithoutImage((ProjectWithoutImage, ProjectWithoutImage)),
}
impl ProjectKind {
pub fn new() -> Vec<Self> {
vec![
ProjectKind::WithoutImage((
ProjectWithoutImage {
name: "ezidam",
tagline: "Identity and Access Management system",
dates: "Since January 2023",
description: vec![
"A simple identity and access management system for SMEs or personal use.",
"Low maintenance required, easy to deploy and to backup.",
],
accomplishments: vec![
"Users management",
"Roles management",
"Assign users to roles and the other way around",
"OAuth2 / OIDC applications (code flow)",
"Multi-Factor Authentication (TOTP)",
"Password reset (via email or backup token)",
"Simple administration panel",
"Good security measures for users and administrators",
],
technologies: vec![
"Rust",
"SQLite",
"OAuth2 / OIDC",
"TOTP",
"SMTP",
"Docker",
],
logo: Some(Logo {
file: "/icons/ezidam.png",
transparent_background: true,
}),
..Default::default()
},
ProjectWithoutImage {
name: "pass4thewin",
tagline: "Password manager",
dates: "November 2020 - January 2021",
description: vec![
"Port of passwordstore, the standard unix password manager on the Windows platform.",
"Warning! Unfinished command line application, may cause data corruption when using existing passwords.",
],
accomplishments: vec![
"Creation of a store",
"List secrets",
"Decrypt secret",
"Insert or generate secrets",
"Edit existing secrets",
"Synchronisation with git",
"TOTP support",
],
technologies: vec![
"Windows",
"Rust",
"OpenPGP",
"libgit2",
],
link: Some(ProjectLink::Available(Link {
uri: uri!("https://github.com/x4m3/pass4thewin"),
label: "Source code",
})),
..Default::default()
},
)),
ProjectKind::WithImage(
ProjectWithImage{
name: "NaviaRent",
tagline: "Epitech Innovative Project",
dates: "September 2020 - January 2023",
description: vec!["A B2B platform helping rentals of standup paddle boards."],
accomplishments: vec![
"DevOps of all software in the NaviaRent stack",
"Creation of the iOS application",
"Contributions to the Android application",
"Contributions to the backend server",
"Creation and contributions to the web client",
"Server administration, backups",
],
technologies: vec![
"NodeJS",
"Angular",
"Kotlin",
"SwiftUI",
"Docker",
"GitLab CI/CD",
"Raspberry Pi",
"ESP32",
],
logo: Some(Logo {
file: "/icons/naviarent.png",
transparent_background: false,
}),
image: Image {
file: "/images/naviarent.jpg",
position: Position::Right,
},
link: Some(ProjectLink::NotAvailable),
},
),
ProjectKind::WithoutImage((
ProjectWithoutImage{
name: "epitok",
tagline: "Presence system at Epitech",
dates: "June 2020 - September 2020",
description: vec![
"A library and web client to simplify students presence at Epitech.",
"Students are handed a piece of paper with a 6 digits number (called a \"token\") to verify their presence at school events.",
"Teachers use epitok to scan student cards with QR codes on them instead of printing and handing tokens to students.",
],
accomplishments: vec![
"Reverse engineering of a partially documented web API",
"Design, conception",
"User experience",
"Improvements based of usage of the application",
],
technologies: vec![
"Rust",
"HTML",
"Bootstrap",
"jQuery",
"Docker",
],
link: Some(ProjectLink::Available(Link {
uri: uri!("https://github.com/x4m3/epitok"),
label: "Source code",
})),
..Default::default()
},
ProjectWithoutImage{
name: "epi.today",
tagline: "Calendar for Epitech",
dates: "December 2019 - February 2020",
description: vec![
"A viewer of the Epitech intranet calendar.",
"Students and teachers glance at their planning without the need to go on the school's intranet.",
],
accomplishments: vec![],
technologies: vec![
"TypeScript",
"HTML",
"Bootstrap",
"Docker",
],
link: Some(ProjectLink::Available(Link {
uri: uri!("https://github.com/x4m3/epi.today"),
label: "Source code",
})),
..Default::default()
},
)),
ProjectKind::WithImage(
ProjectWithImage{
name: "canvas.place",
tagline: "Timelapse",
dates: "April 2017 - January 2020",
description: vec![
"canvas.place is a shared place to express creativity.",
"People from all over the world share one single canvas to paint on.",
"I created and maintained a timelapse of the virtual canvas.".into()
],
accomplishments: vec![],
technologies: vec!["FFmpeg", "Shell scripting", "nginx".into()],
logo: Some(Logo {
file: "/icons/canvas.png",
transparent_background: false,
}),
image: Image {
file: "/images/canvas.png",
position: Position::Left,
},
link: Some(ProjectLink::Available(Link {
uri: uri!("https://timelapse.canvas.place"),
label: "Website",
})),
},
)
]
}
}

70
src/types/talk.rs Normal file
View file

@ -0,0 +1,70 @@
use crate::types::Link;
use rocket::uri;
pub struct Talk {
pub title: &'static str,
pub date: &'static str,
pub location: &'static str,
pub link: Link,
}
impl Talk {
pub fn new() -> Vec<Self> {
vec![
Talk {
title: "Vim",
date: "February 2023",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/vim.pdf"),
label: "Slides",
},
},
Talk {
title: "CLion",
date: "March 2021",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/clion.pdf"),
label: "Slides",
},
},
Talk {
title: "git & devops 2",
date: "February 2021",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/git-devops2.pdf"),
label: "Slides",
},
},
Talk {
title: "pass4thewin",
date: "February 2021",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/pass4thewin.pdf"),
label: "Slides",
},
},
Talk {
title: "git & devops",
date: "May 2020",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/git-devops.pdf"),
label: "Slides",
},
},
Talk {
title: "git gud",
date: "May 2019",
location: "Epitech Rennes",
link: Link {
uri: uri!("https://philippeloctaux.com/pub/talks/git-tek.pdf"),
label: "Slides",
},
},
]
}
}