diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 40f4d1c..a01bf36 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -32,7 +32,7 @@ deploy:
- echo "🚀 Déploiement du Portfolio..."
- kubectl apply -f k8s.yaml
- kubectl rollout restart deployment/portfolio-app -n portfolio-ns
- - echo "✅ Déploiement terminé sur http://portfolio.theval.ovh"
+ - echo "✅ Déploiement terminé sur https://portfolio.valentin-massonniere.ch"
only:
- main
- master
diff --git a/Dockerfile b/Dockerfile
index 001a05d..7936e6e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,5 @@
-# Dockerfile
FROM node:18-alpine AS base
-# Install dependencies only when needed
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
@@ -14,18 +12,15 @@ RUN \
else echo "Lockfile not found." && exit 1; \
fi
-# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
-# Next.js collects completely anonymous telemetry data about general usage.
ENV NEXT_TELEMETRY_DISABLED 1
RUN npm run build
-# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
@@ -37,11 +32,9 @@ RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
-# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:nodejs .next
-# Automatically leverage output traces to reduce image size
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
diff --git a/README.md b/README.md
index 93f80e6..6a68f64 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ This repository is the home for the source code of my personal portfolio built w
## Live Demo 🌐
-Check out the live demo here: http://portfolio.theval.ovh
+Check out the live demo here: https://portfolio.valentin-massonniere.ch
## Features 🚀
diff --git a/app/layout.js b/app/layout.js
index 1f5471e..07177f7 100644
--- a/app/layout.js
+++ b/app/layout.js
@@ -1,8 +1,28 @@
import "./globals.css";
+const siteUrl = "https://portfolio.valentin-massonniere.ch";
+const title = "Valentin Massonniere — AI & Robotics Engineer";
+const description =
+ "Portfolio of Valentin Massonniere, AI & Robotics Engineer and Data Scientist, working on real-time robotics platforms, ESP32 firmware, SLAM, and applied machine learning.";
+
export const metadata = {
- title: "Valentin Massonniere",
- description: "Valentin Massonniere Portfolio",
+ metadataBase: new URL(siteUrl),
+ title,
+ description,
+ alternates: { canonical: siteUrl },
+ openGraph: {
+ type: "website",
+ url: siteUrl,
+ title,
+ description,
+ siteName: "Valentin Massonniere",
+ locale: "en_US",
+ },
+ twitter: {
+ card: "summary_large_image",
+ title,
+ description,
+ },
};
export default function RootLayout({ children }) {
diff --git a/app/page.js b/app/page.js
index ea7be7d..ab1316a 100644
--- a/app/page.js
+++ b/app/page.js
@@ -3,6 +3,7 @@ import Presentation from "../components/Presentation";
import About from "../components/About";
import Projects from "../components/Projects";
import Experiences from "@/components/Experiences";
+import Certifications from "@/components/Certifications";
import Educations from "@/components/Educations";
import Contact from "@/components/Contact";
@@ -12,6 +13,7 @@ export default function Home() {
I'm currently registered at Efrei Paris specializing in Data - Engineering & AI 📊. I'm in apprenticeship at IceBerg Data Lab such as - AI Engineer & Data Scientist ✨. + Engineering & AI. I'm in apprenticeship at Iceberg Data Lab as AI + Engineer & Data Scientist.
- {/* Paragraph 2 */}- These aspirations merge my deep interest in IT 🖥️ with the fascinating - fields of aerospace and aeronautics 🛰️. My strong passion lies in - computer science and artificial intelligence, and my ultimate aim is - to become a highly skilled engineer in the big data and AI domains. 📈 + My deep interest in IT merges with the fascinating field of aerospace. + My strong passion lies in computer science and artificial + intelligence, with a growing focus on robotics and its applications to + space. +
++ I am working toward a PhD in Robotics + AI, and I prepare for it + actively. With DeepSight-Nebula, I am turning an educational robot + into a real-time capable platform — writing ESP32 firmware from + scratch and documenting the work as a mini-thesis. In parallel, I run + a daily spaced-repetition review on MP-level mathematics, work through + the Rust book for low-level fluency, and read one robotics paper per + week. Next up: a SLAM-focused project paired with a ROS2 course, to + bridge the gap from firmware to full autonomous systems.
+ Loading Certifications... +
++ {cert.name} +
++ {cert.issuer} +
+- Feel free to contact me! 😊 + Feel free to contact me!
-TheValll
-Valentin MASSONNIERE
-{formation.desc}
- {/* Link to formation (if available) */} {formation.link && ({experience.date}
+ {experience.about && ( ++ {experience.about} +
+ )}{experience.desc}
- {/* Link to experience (if available) */} {experience.link && ({experience.date}
+ {experience.about && ( ++ {experience.about} +
+ )}{experience.desc}
- {/* Link to experience (if available) */} {experience.link && ( )}
- Hello, I'm Valentin Massonniere, an enthusiastic{" "}
-
- AI - Robotic Engineer & Data Scientist at IceBergData Lab from
- France{" "}
-
- 🇫🇷
-
+ Hi, I'm Valentin Massonniere.
+
Currently at Iceberg Data Lab,
+ based in France.
{project.desc}
- {/* Language Icons */}{project.desc}
- {/* Language Icons */}