using rocket instead of astro
This commit is contained in:
parent
eb72400722
commit
e61ef1d4c3
79 changed files with 4406 additions and 8501 deletions
84
src/types/friend.rs
Normal file
84
src/types/friend.rs
Normal 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
111
src/types/job.rs
Normal 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
52
src/types/network.rs
Normal 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
247
src/types/project.rs
Normal 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
70
src/types/talk.rs
Normal 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",
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue