added projects, professional experiences
BIN
public/icons/acklio.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/icons/canvas.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
public/icons/epitech.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
public/icons/ezidam.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
public/icons/naviarent.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/icons/ubiscale.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/icons/velorail.png
Normal file
|
After Width: | Height: | Size: 477 KiB |
BIN
public/icons/yaakadev.png
Executable file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/images/canvas.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
public/images/naviarent.jpg
Normal file
|
After Width: | Height: | Size: 617 KiB |
153
src/components/professional-experience.astro
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
---
|
||||||
|
import ExperienceCard from "./experience-card.astro";
|
||||||
|
---
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1 class="text-4xl font-bold mb-4">Professional Experiences</h1>
|
||||||
|
|
||||||
|
<div class="mt-4 grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-sky-950"
|
||||||
|
logo="/icons/acklio.png"
|
||||||
|
logoTransparentBackground={true}
|
||||||
|
name="Acklio"
|
||||||
|
dates="March 2023 - May 2023"
|
||||||
|
title="Rust developer"
|
||||||
|
tech={["Rust", "SCHC", "STM32 controllers", "LoRa", "LoRaWAN"]}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
The first usage of the SCHC framework (<a
|
||||||
|
href="https://www.rfc-editor.org/rfc/rfc8724"
|
||||||
|
target="_blank"
|
||||||
|
class="underline">RFC 8724</a
|
||||||
|
>) on Rust!
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">
|
||||||
|
Creation of Rust bindings of a C library implementing
|
||||||
|
the SCHC framework
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Demonstration of SCHC with applications in Rust on x86
|
||||||
|
platform
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Proof of concept usage of embedded STM32 controllers
|
||||||
|
exclusively in Rust
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Transmission of knowledge to the technical team
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-sky-950"
|
||||||
|
logo="/icons/velorail.png"
|
||||||
|
logoTransparentBackground={true}
|
||||||
|
name="Vélorail du Kreiz Breizh"
|
||||||
|
dates="August 2021 - April 2022"
|
||||||
|
title="Freelance developer"
|
||||||
|
link={{ uri: "https://resa.velorail.bzh", label: "Online booking" }}
|
||||||
|
tech={["Angular", "NestJS", "GraphQL", "Rust", "Stripe"]}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
Creation of an online booking platform focused on the tourist
|
||||||
|
activity of rail biking (vélorail).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
During the first 5 months with the platform, 43% of the bookings
|
||||||
|
were made online.
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">
|
||||||
|
Design, UX, booking and payment flow for customers
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Dashboard for managers with calendar view, manual
|
||||||
|
bookings, slots management
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Ability to generate invoices, booking recaps for
|
||||||
|
managers
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Sending emails to customers and managers about bookings
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Online deployment, maintenance of the service
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-sky-950"
|
||||||
|
logo="/icons/yaakadev.png"
|
||||||
|
name="Yaakadev"
|
||||||
|
dates="April 2021 - July 2021"
|
||||||
|
title="Full-Stack developer"
|
||||||
|
tech={["NodeJS", "ExpressJS", "Angular", "MongoDB", "CI/CD"]}
|
||||||
|
>
|
||||||
|
<p>Maintenance of existing projects for clients</p>
|
||||||
|
<p>
|
||||||
|
Design, development and deployment of multiple projects from
|
||||||
|
scratch:
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">
|
||||||
|
Admin dashboard of a local merchants solution
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Calendar planning application with filtering and custom
|
||||||
|
views
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Intranet to upload and download documents
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-sky-950"
|
||||||
|
logo="/icons/epitech.png"
|
||||||
|
logoTransparentBackground={true}
|
||||||
|
name="Epitech"
|
||||||
|
dates="February 2020 - April 2021, September 2022 - February 2023"
|
||||||
|
title="Teaching assistant (AER)"
|
||||||
|
tech={["C", "C++", "Haskell", "Rust", "Web and mobile development"]}
|
||||||
|
>
|
||||||
|
<p>Pedagogical supervision of three classes of students</p>
|
||||||
|
<p>Conducting educational activities throughout the school year</p>
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">Start of projects</li>
|
||||||
|
<li class="ml-5">Technical help and guidance</li>
|
||||||
|
<li class="ml-5">Proctoring exams</li>
|
||||||
|
<li class="ml-5">Grading students on their work</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-sky-950"
|
||||||
|
logo="/icons/ubiscale.png"
|
||||||
|
logoTransparentBackground={true}
|
||||||
|
name="Ubiscale"
|
||||||
|
dates="August 2019 - December 2019"
|
||||||
|
title="Embedded developer"
|
||||||
|
tech={["C on a ESP8266 controller", "Wi-Fi", "Bluetooth"]}
|
||||||
|
>
|
||||||
|
<p>Creation of a home Wifi gateway for an IoT object</p>
|
||||||
|
<p>
|
||||||
|
Research, reverse engineering of existing products, design and
|
||||||
|
implementation
|
||||||
|
</p>
|
||||||
|
</ExperienceCard>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
195
src/components/projects.astro
Normal file
|
|
@ -0,0 +1,195 @@
|
||||||
|
---
|
||||||
|
import ExperienceCard from "./experience-card.astro";
|
||||||
|
---
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1 class="text-4xl font-bold mb-4">Projects</h1>
|
||||||
|
|
||||||
|
<div class="mt-4 space-y-4">
|
||||||
|
<div
|
||||||
|
class="flex flex-col space-y-4 md:flex-row md:space-x-4 md:space-y-0"
|
||||||
|
>
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
logo="/icons/ezidam.png"
|
||||||
|
logoTransparentBackground={true}
|
||||||
|
name="ezidam"
|
||||||
|
dates="January 2023 - May 2023"
|
||||||
|
title="Identity and Access Management system"
|
||||||
|
tech={[
|
||||||
|
"Rust",
|
||||||
|
"SQLite",
|
||||||
|
"OAuth2 / OIDC",
|
||||||
|
"TOTP",
|
||||||
|
"SMTP",
|
||||||
|
"Docker",
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
A simple identity and access management system for SMEs or
|
||||||
|
personal use.
|
||||||
|
</p>
|
||||||
|
<p>Low maintenance required, easy to deploy and to backup.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">Users management</li>
|
||||||
|
<li class="ml-5">Roles management</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Assign users to roles and the other way around
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
OAuth2 / OIDC applications (code flow)
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Multi-Factor Authentication (TOTP)</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Password reset (via email or backup token)
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Simple administration panel</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Good security measures for users and administrators
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
name="pass4thewin"
|
||||||
|
dates="November 2020 - January 2021"
|
||||||
|
title="Password manager"
|
||||||
|
link={{
|
||||||
|
uri: "https://github.com/x4m3/pass4thewin",
|
||||||
|
label: "Source code",
|
||||||
|
}}
|
||||||
|
tech={["Windows", "Rust", "OpenPGP", "libgit2"]}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
Port of <a
|
||||||
|
href="https://passwordstore.org"
|
||||||
|
class="underline"
|
||||||
|
target="_blank">pass</a
|
||||||
|
>, the standard unix password manager on the Windows
|
||||||
|
platform.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Command line application, compatible with existing secrets
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">Creation of a store</li>
|
||||||
|
<li class="ml-5">List secrets</li>
|
||||||
|
<li class="ml-5">Decrypt secret</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
<s>Insert or generate secrets</s> Causes data corruption
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
<s>Edit existing secrets</s> Causes data corruption
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Synchronisation with git</li>
|
||||||
|
<li class="ml-5">TOTP support</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
logo="/icons/naviarent.png"
|
||||||
|
name="NaviaRent"
|
||||||
|
dates="September 2020 - January 2023"
|
||||||
|
title="Epitech Innovative Project"
|
||||||
|
notAvailable={true}
|
||||||
|
image={{ uri: "/images/naviarent.jpg", breakpoint: "2xl" }}
|
||||||
|
tech={[
|
||||||
|
"NodeJS",
|
||||||
|
"Angular",
|
||||||
|
"Kotlin",
|
||||||
|
"SwiftUI",
|
||||||
|
"Docker",
|
||||||
|
"GitLab CI/CD",
|
||||||
|
"Raspberry Pi",
|
||||||
|
"ESP32",
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<p>A B2B platform helping rentals of standup paddle boards.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="list-disc mt-6">
|
||||||
|
<li class="ml-5">
|
||||||
|
DevOps of all software in the NaviaRent stack
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Creation of the iOS application</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Contributions to the Android application
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Contributions to the backend server</li>
|
||||||
|
<li class="ml-5">
|
||||||
|
Creation and contributions to the web client
|
||||||
|
</li>
|
||||||
|
<li class="ml-5">Server administration, backups</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="flex flex-col space-y-4 md:flex-row md:space-x-4 md:space-y-0"
|
||||||
|
>
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
name="epitok"
|
||||||
|
dates="June 2020 - September 2020"
|
||||||
|
title="Presence system at Epitech"
|
||||||
|
notAvailable={true}
|
||||||
|
tech={["Rust", "HTML", "Bootstrap", "jQuery", "Docker"]}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
A library and web client to simplify students presence at
|
||||||
|
Epitech.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Students are handed a piece of paper with a 6 digits number
|
||||||
|
(called a "token") to verify their presence at school
|
||||||
|
events.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Teachers use epitok to scan student cards with QR codes on
|
||||||
|
them instead of printing and handing tokens to students.
|
||||||
|
</p>
|
||||||
|
</ExperienceCard>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
name="epi.today"
|
||||||
|
dates="December 2019 - February 2020"
|
||||||
|
title="Calendar for Epitech"
|
||||||
|
notAvailable={true}
|
||||||
|
tech={["TypeScript", "HTML", "Bootstrap", "Docker"]}
|
||||||
|
>
|
||||||
|
<p>A viewer of the Epitech intranet calendar.</p>
|
||||||
|
<p>
|
||||||
|
Students and teachers glance at their planning without the
|
||||||
|
need to go on the school's intranet.
|
||||||
|
</p>
|
||||||
|
</ExperienceCard>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ExperienceCard
|
||||||
|
backgroundColor="bg-pink-950"
|
||||||
|
logo="/icons/canvas.png"
|
||||||
|
name="canvas.place"
|
||||||
|
dates="April 2017 - January 2020"
|
||||||
|
title="Timelapse"
|
||||||
|
link={{ uri: "https://timelapse.canvas.place", label: "Website" }}
|
||||||
|
image={{ uri: "/images/canvas.png", breakpoint: "md" }}
|
||||||
|
tech={["FFmpeg", "Shell scripting", "nginx"]}
|
||||||
|
>
|
||||||
|
<p>canvas.place is a shared place to express creativity.</p>
|
||||||
|
<p>
|
||||||
|
People from all over the world share one single canvas to paint
|
||||||
|
on.
|
||||||
|
</p>
|
||||||
|
<p>I created and maintained a timelapse of the virtual canvas.</p>
|
||||||
|
</ExperienceCard>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||