dev #14

Merged
Giovanni-Josserand merged 32 commits from dev into main 2025-08-28 13:35:46 +00:00
11 changed files with 206 additions and 15 deletions
Showing only changes of commit da3445d116 - Show all commits

Binary file not shown.

View File

@ -1,4 +1,3 @@
#root {
margin: 0 auto;
padding: 2rem;
}

View File

@ -32,7 +32,7 @@ function Experiences() {
return (
<section id="experiences-section">
<h1>Expériences</h1>
<h1>Experiences</h1>
<div className="experiences-container">
{experiencesData.map((exp, index) => (
<SingleExperience experience={exp} whichSide={index % 2 !== 0}/>

View File

@ -1,10 +1,21 @@
import '../styles/Home.css';
import Background from "./thirdParty/Background.jsx";
function Home() {
return (
<section id="home-section">
<h1>Home</h1>
<Background />
<h1>Hello, I'm<span className="highlight"> Giovanni Josserand</span></h1>
<h2>Junior Developer</h2>
<p>
Passionate about development, I am currently looking
for an opportunity to put my skills into practice and continue learning.
</p>
<a href="/public/assets/documents/CV.pdf" target="_blank" className="btn">Download my CV</a>
</section>
)
);
}
export default Home
export default Home;

View File

@ -5,7 +5,7 @@ function Projects() {
return (
<section id="projects-section">
<h1>Projects</h1>
<SingleProject image="landscape" title="Portfolio" description={desc} skills={['HTML', 'CSS', 'React', 'Git']} color="orange" />
<SingleProject image="landscape" title="Codev" description={desc} skills={['HTML', 'CSS', 'PHP', 'JavaScript', 'SQL']} color="orange" />
<SingleProject image="landscape" title="SAE C++" description={desc} skills={['C++', 'Git']} color="purple" />
<SingleProject image="proxmox" title="Proxmox" description={desc} skills={[]} color="green" />
<div className="show-more-container">

View File

@ -4,9 +4,9 @@ function SingleExperience({ experience, whichSide }) {
return (
<div className={`experience-card ${whichSide ? 'right' : 'left'}`}>
<div className="experience-card-header">
<div className="experience-primary-info">
<div className="experience-card-header-left">
<h3 className="experience-role">{experience.role}</h3>
<p className="experience-company-location">
<p className="experience-location">
{experience.company} {experience.location}
</p>
</div>

View File

@ -0,0 +1,24 @@
import React from "react";
import "../../styles/thirdParty/Background.css";
export default function Background() {
return (
<div className="space-background">
{[...Array(100)].map((_, i) => (
<div
key={i}
className="star"
style={{
top: `${Math.random() * 100}%`,
left: `${Math.random() * 100}%`,
animationDelay: `${Math.random() * 5}s`,
}}
/>
))}
<div className="nebula nebula1"></div>
<div className="nebula nebula2"></div>
<div className="nebula nebula3"></div>
<div className="planet"></div>
</div>
);
}

View File

@ -2,7 +2,7 @@
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
background-color: #121212;
background-color: #0D0D0D;
}

53
src/styles/Home.css Normal file
View File

@ -0,0 +1,53 @@
#home-section {
position: relative;
min-height: 110vh;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
}
#home-section h1{
margin-bottom: 0;
}
#home-section h2 {
font-size: 1.8rem;
color: #EAEAEA;
margin-bottom: 1rem;
}
#home-section p {
margin-bottom: 2rem;
color: #EAEAEA;
max-width: 40%;
}
.highlight {
color: #D95F46;
}
.btn {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 5px;
text-decoration: none;
font-weight: bold;
background-color: #D95F46;
color: #fff;
transition: background-color 0.3s ease;
margin-bottom: 200px;
}
.btn:hover {
background-color: #b94a36;
cursor: pointer;
}

View File

@ -32,7 +32,7 @@
margin-bottom: 1rem;
}
.experience-primary-info {
.experience-card-header-left {
display: flex;
flex-direction: column;
}
@ -43,11 +43,11 @@
color: #EAEAEA;
margin: 0;
}
.experience-company-location{
.experience-location{
font-weight: 600;
}
.experience-company-location,
.experience-location,
.experience-duration {
font-size: 0.95rem;
color: #B0B0B0;

104
src/styles/thirdParty/Background.css vendored Normal file
View File

@ -0,0 +1,104 @@
.space-background {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 123vh;
background: radial-gradient(ellipse at center, #0a001f 0%, #000000 80%);
overflow: hidden;
z-index: -1;
}
.star {
position: absolute;
width: 2px;
height: 2px;
background: white;
border-radius: 50%;
opacity: 0.8;
animation: twinkle 3s infinite ease-in-out alternate;
filter: drop-shadow(0 0 2px white);
}
.planet {
position: absolute;
bottom: 0%;
left: 50%;
transform: translateX(-50%);
width: 120vw;
height: 23vw;
max-height: 400px;
background: #0D0D0D;
border-radius: 60% 60% 0 0 / 100% 100% 0 0;
z-index: 1;
box-shadow:
0 -20px 60px 10px rgba(255, 255, 255, 0.35),
inset 0 20px 60px 10px rgba(255, 255, 255, 0.25);
}
.planet::after {
content: "";
position: absolute;
top: -3px;
left: 50%;
transform: translateX(-50%);
width: 100%;
height: 100%;
border-top: 2.5px solid white;
border-radius: 60% 60% 0 0 / 100% 100% 0 0;
mask-image: linear-gradient(to right, transparent 0%, white 40%, white 60%, transparent 100%);
pointer-events: none;
z-index: 2;
}
@keyframes twinkle {
0% { opacity: 0.3; transform: scale(0.8); }
100% { opacity: 1; transform: scale(1.2); }
}
.nebula {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.5;
mix-blend-mode: screen;
animation: nebulaMove 15s ease-in-out infinite alternate;
}
.nebula1 {
width: 400px;
height: 400px;
background: radial-gradient(circle, #9b59b6 0%, transparent 70%);
top: 10%;
left: 15%;
animation-delay: 0s;
}
.nebula2 {
width: 600px;
height: 600px;
background: radial-gradient(circle, #8e44ad 0%, transparent 70%);
top: 50%;
left: 65%;
animation-delay: 5s;
}
.nebula3 {
width: 350px;
height: 350px;
background: radial-gradient(circle, #663399 0%, transparent 70%);
top: 75%;
left: 35%;
animation-delay: 10s;
}
@keyframes nebulaMove {
0% {
transform: translate(0, 0) scale(1);
opacity: 0.5;
}
100% {
transform: translate(20px, -20px) scale(1.05);
opacity: 0.6;
}
}