diff --git a/public/cv.pdf b/public/cv.pdf
index e69de29..ba827e5 100644
Binary files a/public/cv.pdf and b/public/cv.pdf differ
diff --git a/public/images/icons/42_icon.png b/public/images/icons/42_icon.png
new file mode 100644
index 0000000..c0705a5
Binary files /dev/null and b/public/images/icons/42_icon.png differ
diff --git a/public/images/icons/favicon-omv.ico b/public/images/icons/favicon-omv.ico
new file mode 100644
index 0000000..e0ef031
Binary files /dev/null and b/public/images/icons/favicon-omv.ico differ
diff --git a/public/images/icons/favicon-traefik.ico b/public/images/icons/favicon-traefik.ico
new file mode 100644
index 0000000..a45bfd1
Binary files /dev/null and b/public/images/icons/favicon-traefik.ico differ
diff --git a/public/images/icons/websocket-svgrepo-com.svg b/public/images/icons/websocket-svgrepo-com.svg
new file mode 100644
index 0000000..e49b7f0
--- /dev/null
+++ b/public/images/icons/websocket-svgrepo-com.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index a5f7b0d..529fb22 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -11,7 +11,6 @@ export const Footer = () => {
const { t } = useLanguage();
const { showBanner } = useCookieBanner();
const [showLegalNotice, setShowLegalNotice] = useState(false);
- const [showCVPopup, setShowCVPopup] = useState(false);
const reopenCookiePreferences = () => {
// Simplement rouvrir la bannière sans recharger
@@ -20,11 +19,20 @@ export const Footer = () => {
const currentYear = new Date().getFullYear();
+ const downloadCV = () => {
+ const link = document.createElement('a');
+ link.href = '/cv.pdf';
+ link.download = 'Alexandre_Pommier_CV.pdf';
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ };
+
const footerLinks = [
{
icon: ,
label: t("footer.downloadCV"),
- onClick: () => setShowCVPopup(true)
+ onClick: downloadCV
},
{
icon: ,
@@ -185,21 +193,6 @@ export const Footer = () => {
isOpen={showLegalNotice}
onClose={() => setShowLegalNotice(false)}
/>
-
- {/* Popup CV en travaux */}
- {showCVPopup && (
-
setShowCVPopup(false)}>
-
e.stopPropagation()}>
-
{t("footer.cvWorkInProgressTitle")}
-
- {t("footer.cvWorkInProgress")}
-
-
-
-
- )}
);
};
\ No newline at end of file
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
index 67df977..1a1dab4 100644
--- a/src/components/Header.tsx
+++ b/src/components/Header.tsx
@@ -100,9 +100,10 @@ export const Header = () => {
animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.1 * i }}
onClick={() => handleNavigation(item)}
- className="text-sm font-medium text-muted-foreground hover:text-foreground transition-colors"
+ className="relative text-sm font-medium text-muted-foreground hover:text-foreground transition-colors group"
>
{t(`nav.${item}`)}
+
))}
@@ -179,9 +180,10 @@ export const Header = () => {
exit={{ opacity: 0, x: -20 }}
transition={{ delay: 0.1 * i }}
onClick={() => handleNavigation(item)}
- className="text-left text-base font-medium text-muted-foreground hover:text-foreground transition-colors py-2"
+ className="relative text-left text-base font-medium text-muted-foreground hover:text-foreground transition-colors py-2 group"
>
{t(`nav.${item}`)}
+
))}
diff --git a/src/components/ProjectCard.tsx b/src/components/ProjectCard.tsx
index f770baa..b98adb3 100644
--- a/src/components/ProjectCard.tsx
+++ b/src/components/ProjectCard.tsx
@@ -71,7 +71,7 @@ export const ProjectCard = ({ title, description, icon, image, technologies, del
) : (
?
diff --git a/src/components/SkillBadge.tsx b/src/components/SkillBadge.tsx
index a69a0b1..64b8805 100644
--- a/src/components/SkillBadge.tsx
+++ b/src/components/SkillBadge.tsx
@@ -23,7 +23,11 @@ export const SkillBadge = ({ name, icon, iconUrl, color = "default", delay = 0 }
className="text-base py-2 px-4 font-medium hover:bg-primary hover:text-primary-foreground transition-colors"
>
{iconUrl ? (
-
+
) : icon ? (
{icon}
) : null}
diff --git a/src/data/projects.ts b/src/data/projects.ts
index 2ea2d19..19b6963 100644
--- a/src/data/projects.ts
+++ b/src/data/projects.ts
@@ -62,12 +62,12 @@ export const projectsData: Record = {
mainImage: "/images/projects/homemade_nas.webp",
images: ["/images/projects/homemade_nas.webp"],
technologies: [
- { name: "OpenMediaVault", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/debian/debian-original.svg" },
+ { name: "OpenMediaVault", iconUrl: "/images/icons/favicon-omv.ico" },
{ name: "Docker", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/docker/docker-original.svg" },
- { name: "Traefik", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/kubernetes/kubernetes-plain.svg" },
+ { name: "Traefik", iconUrl: "/images/icons/favicon-traefik.ico" },
{ name: "Linux", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/linux/linux-original.svg" },
- { name: "Home Assistant", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/python/python-original.svg" },
- { name: "Portainer", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/docker/docker-original.svg" },
+ { name: "Home Assistant", iconUrl: "https://brands.home-assistant.io/homeassistant/icon.png" },
+ { name: "Portainer", iconUrl: "https://avatars.githubusercontent.com/u/22225832" },
],
},
transcendence: {
@@ -120,7 +120,7 @@ export const projectsData: Record = {
{ name: "TypeScript", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/typescript/typescript-original.svg" },
{ name: "NestJS", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/nestjs/nestjs-original.svg" },
{ name: "PostgreSQL", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/postgresql/postgresql-original.svg" },
- { name: "WebSocket", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/javascript/javascript-original.svg" },
+ { name: "WebSocket", iconUrl: "/images/icons/websocket-svgrepo-com.svg" },
{ name: "Docker", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/docker/docker-original.svg" },
],
},
@@ -276,7 +276,7 @@ export const projectsData: Record = {
images: ["/images/projects/cub3d.webp"],
technologies: [
{ name: "C", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/c/c-original.svg" },
- { name: "MiniLibX", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/c/c-original.svg" },
+ { name: "MiniLibX", iconUrl: "/images/icons/42_icon.png" },
{ name: "Raycasting", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/cplusplus/cplusplus-original.svg" },
{ name: "Make", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/cmake/cmake-original.svg" },
],
@@ -401,7 +401,7 @@ export const projectsData: Record = {
{ name: "React", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/react/react-original.svg" },
{ name: "Node.js", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/nodejs/nodejs-original.svg" },
{ name: "MongoDB", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/mongodb/mongodb-original.svg" },
- { name: "OpenAI", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/python/python-original.svg" },
+ { name: "OpenAI", iconUrl: "https://avatars.githubusercontent.com/u/14957082" },
{ name: "TypeScript", iconUrl: "https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/typescript/typescript-original.svg" },
],
demoUrl: "https://avopieces.fr",
diff --git a/src/utils/translations.ts b/src/utils/translations.ts
index ad9cc70..cb3fe5b 100644
--- a/src/utils/translations.ts
+++ b/src/utils/translations.ts
@@ -8,7 +8,7 @@ export const translations = {
},
hero: {
title: "Alexandre Pommier",
- subtitle: "Étudiant en informatique à l'école 42, je développe mes compétences techniques à travers des projets innovants et challengeants. Passionné par les technologies modernes, je m'intéresse particulièrement au développement web, aux systèmes et à l'infrastructure.",
+ subtitle: "Étudiant en informatique à l'école 42 et développeur freelance, je développe mes compétences techniques à travers des projets innovants et challengeants. Passionné par les technologies modernes, je m'intéresse particulièrement au développement web, aux systèmes et à l'infrastructure.",
cta1: "Voir mes projets",
cta2: "Me contacter",
},
@@ -74,9 +74,6 @@ export const translations = {
legalNotice: "Mentions légales",
cookieManagement: "Gestion des cookies",
downloadCV: "Télécharger mon CV",
- cvWorkInProgressTitle: "CV en travaux",
- cvWorkInProgress: "Mon CV est actuellement en cours de préparation. Il sera bientôt disponible !",
- understood: "Compris",
github: "GitHub",
email: "Email",
copyright: "Tous droits réservés.",
@@ -113,7 +110,7 @@ export const translations = {
},
hero: {
title: "Alexandre Pommier",
- subtitle: "Computer science student at 42 school, I develop my technical skills through innovative and challenging projects. Passionate about modern technologies, I am particularly interested in web development, systems and infrastructure.",
+ subtitle: "Computer science student at 42 school and freelance developer, I develop my technical skills through innovative and challenging projects. Passionate about modern technologies, I am particularly interested in web development, systems and infrastructure.",
cta1: "View my projects",
cta2: "Contact me",
},
@@ -179,9 +176,6 @@ export const translations = {
legalNotice: "Legal Notice",
cookieManagement: "Cookie Management",
downloadCV: "Download my CV",
- cvWorkInProgressTitle: "CV Work in Progress",
- cvWorkInProgress: "My CV is currently being prepared. It will be available soon!",
- understood: "Understood",
github: "GitHub",
email: "Email",
copyright: "All rights reserved.",