Fix typos and improve descriptions in Contact and Projects sections

This commit is contained in:
Ploc300
2025-02-20 17:52:13 +01:00
parent 710c283136
commit a034ef8d3b
3 changed files with 66 additions and 66 deletions
+40 -38
View File
@@ -7,7 +7,7 @@ import { FaSchool } from "react-icons/fa6";
function About() { function About() {
const cybersecuritySkills = { const cybersecuritySkills = {
"skils": [ "skills": [
"Penetration testing", "Penetration testing",
"Security auditing", "Security auditing",
"Network security", "Network security",
@@ -22,93 +22,94 @@ function About() {
} }
const programmationSkills = { const programmationSkills = {
"skils": [ "skills": [
"Python", "Python",
"HTML/PHP/CSS", "HTML/PHP/CSS",
"Bash", "Bash",
"Powershell", "Powershell",
"Lerning C/C++/Node.js (Vite/React + Tailwind CSS)", "Learning C/C++/Node.js (Vite/React + Tailwind CSS)"
], ],
"projects": [ "projects": [
"Python Softphone (Client/Server)", "Python Softphone (Client/Server)",
"Python Portfolio", "Python Portfolio",
"Vite / React / Tailwind Portfolio", "Vite / React / Tailwind Portfolio",
"Task automation", "Task automation",
"Cybersecurity challenge (Python / C)", "Cybersecurity challenge (Python / C)"
] ]
} }
const networkSkills = { const networkSkills = {
"skils": [ "skills": [
"Design", "Design",
"Implementation", "Implementation",
"Troubleshouting", "Troubleshooting",
"VPN IPSec / SSL", "VPN IPSec / SSL",
"Firewall (Stormshield CSNA Certified)", "Firewall (Stormshield CSNA Certified)",
"Cisco / Aruba / Stormshield", "Cisco / Aruba / Stormshield"
], ],
"projects": [ "projects": [
"Creation of a school network from scratch", "Creation of a school network from scratch",
"Creation of a secured network (ACL and Firewalls)", "Creation of a secured network (ACL and Firewalls)"
] ]
} }
const systemSkills = { const systemSkills = {
"skils": [ "skills": [
"Linux", "Linux",
"Arch Linux /w Hyprland", "Arch Linux /w Hyprland",
"Debian /w/o gui", "Debian /w/o GUI",
"Windows", "Windows",
"Windows Active Directory", "Windows Active Directory",
"LDAP", "LDAP",
"Postfix", "Postfix",
"Poste.io", "Poste.io",
"Virtualisation", "Virtualization",
"Docker", "Docker",
"VirutalBox", "VirtualBox",
"VMWare Worstation", "VMware Workstation",
"VMWare vSphere / ESXI", "VMware vSphere / ESXi",
"Orchestration", "Orchestration",
"Portainer", "Portainer",
"CI/CD", "CI/CD",
"Gitlab", "GitLab",
"Jenkins", "Jenkins",
"Gerrit", "Gerrit"
], ],
"projects": [ "projects": [
"Lab Work: Active Directory, LDAP, VMware, VCenter, Docker", "Lab Work: Active Directory, LDAP, VMware, vCenter, Docker",
"HomeLab with Dockerized services on Debian", "HomeLab with Dockerized services on Debian",
"Personal CI/CD using Gitlab and Jenkins (and Portainer for auto deployment)", "Personal CI/CD using GitLab and Jenkins (and Portainer for auto deployment)",
"Reverse proxy using Nginx", "Reverse proxy using Nginx",
"Personal mail server using Poste.io", "Personal mail server using Poste.io",
"Personal Desktop on Windows 11 / Kali Linux (Dual Boot)", "Personal Desktop on Windows 11 / Kali Linux (Dual Boot)",
"Personal Laptop on Arch Linux /w Hyprland", "Personal Laptop on Arch Linux /w Hyprland"
] ]
} }
const projectManagementSkills = { const projectManagementSkills = {
"skils": [ "skills": [
"Reporting", "Reporting",
"Gantt Chart", "Gantt Chart",
"Team Management", "Team Management"
], ],
"projects": [ "projects": [
"Creation of a school network from scratch", "Creation of a school network from scratch",
"Team Management in different school projects", "Team management in different school projects"
] ]
} }
const languageSkills = { const languageSkills = {
"skils": [ "skills": [
"French: Native language", "French: Native language",
"English: B1+", "English: B1+"
], ],
"projects": [ "projects": [
"Educational trip to London, hosted in local homes with English-speaking families", "Educational trip to London, hosted in local homes with English-speaking families",
"Competitive Video Games (Communication in English)", "Competitive video games (communication in English)"
] ]
} }
const education = [ const education = [
{ {
"name": "General Baccalaureate with honors", "name": "General Baccalaureate with honors",
@@ -132,11 +133,11 @@ function About() {
"graduation_year": "2025", "graduation_year": "2025",
"graduated": false "graduated": false
}, },
]; ]
const certifications = [ const certifications = [
{ {
"name": "Stormhield CSNA", "name": "Stormshield CSNA",
"city": "Lannion (22)", "city": "Lannion (22)",
"date_obtained": "December 2024", "date_obtained": "December 2024",
"expiration": "December 2027" "expiration": "December 2027"
@@ -151,8 +152,8 @@ function About() {
"place": "Lannion (22)", "place": "Lannion (22)",
"tasks": [ "tasks": [
"Correction of Python code to meet PEP8 standards", "Correction of Python code to meet PEP8 standards",
"Writting unitary test", "Writing unit tests",
"Technical writing", "Technical writing"
] ]
}, },
{ {
@@ -163,7 +164,7 @@ function About() {
"tasks": [ "tasks": [
"Customer service", "Customer service",
"Stock management", "Stock management",
"Store maintenance", "Store maintenance"
] ]
}, },
{ {
@@ -172,11 +173,12 @@ function About() {
"period": "2022", "period": "2022",
"place": "Hennebont (56)", "place": "Hennebont (56)",
"tasks": [ "tasks": [
"Responsible for cleaning various residential buildings, medical offices, and banks", "Responsible for cleaning various residential buildings, medical offices, and banks"
] ]
} }
] ]
return ( return (
<section id="about" className="min-h-screen flex items-center justify-center py-20"> <section id="about" className="min-h-screen flex items-center justify-center py-20">
<RevealOnScroll> <RevealOnScroll>
@@ -187,7 +189,7 @@ function About() {
<div className="rounded-xl p-8 border-white/30 border hover:border-white/50 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] hover:-translate-y-1 transition-all"> <div className="rounded-xl p-8 border-white/30 border hover:border-white/50 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] hover:-translate-y-1 transition-all">
<p className="text-gray-300 mb-6"> <p className="text-gray-300 mb-6">
Due to my passion for computer science and everything related, I managed to gather skills in multiple domains. Due to my passion for computer science and everything related, I have managed to acquire skills in multiple domains.
</p> </p>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6"> <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="rounded-xl p-6 hover:shadow-[6px_6px_8px_rgba(59,130,246,0.1)] hover:-translate-y-1 transition-all border border-white/10 hover:border-blue-500/30"> <div className="rounded-xl p-6 hover:shadow-[6px_6px_8px_rgba(59,130,246,0.1)] hover:-translate-y-1 transition-all border border-white/10 hover:border-blue-500/30">
@@ -197,7 +199,7 @@ function About() {
<div className="flex flex-col gap-2 "> <div className="flex flex-col gap-2 ">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{cybersecuritySkills.skils.map((value, key) => ( {cybersecuritySkills.skills.map((value, key) => (
<li key={key} className="text-sm whitespace-normal bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] transition">{value}</li> <li key={key} className="text-sm whitespace-normal bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
@@ -216,7 +218,7 @@ function About() {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{programmationSkills.skils.map((value, key) => ( {programmationSkills.skills.map((value, key) => (
<li key={key} className="text-sm whitespace-normal bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] transition">{value}</li> <li key={key} className="text-sm whitespace-normal bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59,130,246,0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
@@ -235,7 +237,7 @@ function About() {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{networkSkills.skils.map((value, key) => ( {networkSkills.skills.map((value, key) => (
<li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li> <li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
@@ -254,7 +256,7 @@ function About() {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{systemSkills.skils.map((value, key) => ( {systemSkills.skills.map((value, key) => (
<li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li> <li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
@@ -273,7 +275,7 @@ function About() {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{projectManagementSkills.skils.map((value, key) => ( {projectManagementSkills.skills.map((value, key) => (
<li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li> <li key={key} className="text-sm whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
@@ -292,7 +294,7 @@ function About() {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<span className="text-lg">Skills</span> <span className="text-lg">Skills</span>
<ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5"> <ul className="flex flex-wrap flex-row space-x-2 space-y-2 list-inside mx-5">
{languageSkills.skils.map((value, key) => ( {languageSkills.skills.map((value, key) => (
<li key={key} className="text-sm =whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li> <li key={key} className="text-sm =whitespace-normal my-1 bg-blue-500/10 text-blue-500 py-1 px-3 rounded-full hover:bg-blue-500/20 hover:shadow-[0_2px_8px_rgba(59, 130, 246, 0.2)] transition">{value}</li>
))} ))}
</ul> </ul>
+1 -2
View File
@@ -1,7 +1,6 @@
import RevealOnScroll from "../RevealOnScroll"; import RevealOnScroll from "../RevealOnScroll";
import { FaLinkedin, FaGithub, FaGitlab } from "react-icons/fa"; import { FaLinkedin, FaGithub, FaGitlab } from "react-icons/fa";
import { CiMail } from "react-icons/ci";
import { PiMicrosoftOutlookLogoFill } from "react-icons/pi"; import { PiMicrosoftOutlookLogoFill } from "react-icons/pi";
@@ -19,7 +18,7 @@ function Contact() {
}, },
{ {
"icon": <FaGitlab className="inline text-3xl" />, "icon": <FaGitlab className="inline text-3xl" />,
"name": "Gitlab", "name": "GitLab",
"link": "https://gitlab.plocserv.fr/ploc300", "link": "https://gitlab.plocserv.fr/ploc300",
}, },
{ {
+25 -26
View File
@@ -7,79 +7,78 @@ function Projects() {
{ {
"name": "Portfolio", "name": "Portfolio",
"tech": [ "tech": [
"Node.Js", "Node.js",
"React", "React",
"Vite", "Vite",
"Tailwind CSS", "Tailwind CSS",
"Docker", "Docker"
], ],
"description": "This is the link to the gitlab repository of the portfolio you are currently viewing!", "description": "This is the link to the GitLab repository of the portfolio you are currently viewing!",
"visibility": "Public", "visibility": "Public",
"link": "https://gitlab.plocserv.fr/ploc300/portfolio_v2", "link": "https://gitlab.plocserv.fr/ploc300/portfolio_v2"
}, },
{ {
"name": "Challenges for Cyber club Angel", "name": "Challenges for Cyber Club Angel",
"tech": [ "tech": [
"Python", "Python",
"Bash", "Bash",
"Docker", "Docker",
"C/C++", "C/C++"
], ],
"description": "This project contain most of the challenges I made (not the few firsts) for the Cyber club of the Lannion IUT. Sadly I cannot let this repository in public or else my flags will be everywhere, but if you really want to see them you can still request access by contacting me!", "description": "This project contains most of the challenges I made (not the first few) for the Cyber Club of the Lannion IUT. Sadly, I cannot make this repository public or else my flags will be everywhere, but if you really want to see them, you can still request access by contacting me!",
"visibility": "Private", "visibility": "Private",
"link": "https://gitlab.plocserv.fr/club_cyber_angel/challenges", "link": "https://gitlab.plocserv.fr/club_cyber_angel/challenges"
}, },
{ {
"name": "Root-Me", "name": "Root-Me",
"tech": [ "tech": [
"Python", "Python",
"C/C++", "C/C++"
], ],
"description": "This project contain some of my latest solve on the Root-Me platform. All the solves inside this project have been automated with script (mostly in Python) so I can reuse them later when doing other challenges. This repository is Private and no access will be granted to it as it is againts root-me policy.", "description": "This project contains some of my latest solves on the Root-Me platform. All the solves inside this project have been automated with scripts (mostly in Python) so I can reuse them later when doing other challenges. This repository is private and no access will be granted to it as it is against Root-Me policy.",
"visibility": "Private", "visibility": "Private",
"link": "https://gitlab.plocserv.fr/ploc300/root-me", "link": "https://gitlab.plocserv.fr/ploc300/root-me"
}, },
{ {
"name": "Check Image Up-to-date", "name": "Check Image Up-to-date",
"tech": [ "tech": [
"Python", "Python"
], ],
"description": "This python script allows me to check if my stacks (docker-compose on Portainer) are Up-to-date. This script is run every morning inside my Jenkins and send me an email with the result. The repo is in private, but I can send you the script if you want, again just conatct me!", "description": "This Python script allows me to check if my stacks (Docker Compose on Portainer) are up-to-date. This script is run every morning inside my Jenkins and sends me an email with the result. The repo is private, but I can send you the script if you wantagain, just contact me!",
"visibility": "Private", "visibility": "Private",
"link": "https://gitlab.plocserv.fr/plocserv/check_images_up_to_date", "link": "https://gitlab.plocserv.fr/plocserv/check_images_up_to_date"
}, },
{ {
"name": "Pylint Disable Analyser", "name": "Pylint Disable Analyser",
"tech": [ "tech": [
"Python", "Python"
], ],
"description": "This cli tool has been wrote during my Intership at Nokia. It allow to run a single python script and analyse every python file in the sub-directories. After running a CSV report is generated with a global summary of all the pylint disable found as well as a report file by file. This project is Private and cannot be shared since it's a internal tool.", "description": "This CLI tool was written during my internship at Nokia. It allows running a single Python script and analyzing every Python file in the subdirectories. After running, a CSV report is generated with a global summary of all the pylint disables found, as well as a report file by file. This project is private and cannot be shared since it's an internal tool.",
"visibility": "Private", "visibility": "Private",
"link": "https://github.com/Ploc300/PylintDisableAnalyser", "link": "https://github.com/Ploc300/PylintDisableAnalyser"
}, },
{ {
"name": "RTPhone", "name": "RTPhone",
"tech": [ "tech": [
"Python", "Python",
"Tkinter", "Tkinter"
], ],
"description": "This is a group school project, the objective was to create a Softphone (like MS Teams, Discords, etc...). I realised most of the Server and my 2 teammates have focused the client. The final project was a bit buggy, but the main objectives, make a phone call, make a conference call, \"secure connection\" with token, user management and phone number change without conflict were working. I also added a complete GUI for the server using tkinter. The server code is not really great since I wasn't using Pylint for my projects at this time. This project is Public but unmaintained.", "description": "This is a group school project. The objective was to create a Softphone (like MS Teams, Discord, etc.). I worked mainly on the server, while my two teammates focused on the client. The final project was a bit buggy, but the main objectivesmaking a phone call, making a conference call, \"secure connection\" with tokens, user management, and phone number change without conflictwere working. I also added a complete GUI for the server using Tkinter. The server code is not great, since I wasn't using Pylint for my projects at that time. This project is public but unmaintained.",
"visibility": "Private", "visibility": "Private",
"link": "https://github.com/Ploc300/RTPhone", "link": "https://github.com/Ploc300/RTPhone"
}, },
{ {
"name": "Projet Cyber", "name": "Projet Cyber",
"tech": [ "tech": [
"Mestasploit", "Metasploit",
"Debian", "Debian"
], ],
"description": "This is the report for a school project. The project was too make a security audit on a machine (Basic Pentesting 1 on VulnHub). This was a really fun project too make as it helped me learning how to do a penetration test as well a writting a report for it. This repo is private, since this project is still made by new students, therefore you can request access if you want to read it!", "description": "This is the report for a school project. The project was to make a security audit on a machine (Basic Pentesting 1 on VulnHub). This was a really fun project to make, as it helped me learn how to do a penetration test as well as write a report for it. This repo is private, since this project is still made by new students. Therefore, you can request access if you want to read it!",
"visibility": "Private", "visibility": "Private",
"link": "https://github.com/Ploc300/ProjetCyber", "link": "https://github.com/Ploc300/ProjetCyber"
}, }
] ]
return ( return (
<section id="projects" className="min-h-screen flex items-center justify-center py-20"> <section id="projects" className="min-h-screen flex items-center justify-center py-20">
<RevealOnScroll> <RevealOnScroll>