commit 879ef7929e7a2a491ec83911fffe42e218d85c1d Author: TM-Squared Date: Tue Apr 15 20:21:16 2025 +0200 portfolio init diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..412ede0 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,25 @@ +name: Deploy to Server + +on: + push: + branches: + - main # Déclenche sur des pushs sur la branche principale (ou autre branche que vous préférez) + +jobs: + deploy: + runs-on: self-hosted + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup SSH + uses: webfactory/ssh-agent@v0.5.3 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} # Vous stockez la clé privée SSH dans les secrets de Gitea + + - name: Copy files to server + run: | + scp -r ./ manoel@malaurytoussi.cm:/var/www/malaurytoussi.cm + env: + SSH_AUTH_SOCK: ${{ secrets.SSH_AUTH_SOCK }} diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..73360ec --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,265 @@ +/* General body styling */ +body { + font-family: 'Instrument Serif', serif; + background-color: #f7f7f7; + color: #333; + margin: 0; + padding: 0; + } + + +/* Hero Section */ +#hero { + background: linear-gradient(to right, #ff7e5f, #feb47b); /* Warm gradient from pink to orange */ + color: white; + padding: 80px 0; + text-align: center; +} + +#hero h1 { + font-size: 3rem; + font-weight: 600; +} + +#hero .lead { + font-size: 1.3rem; + margin-top: 20px; + font-weight: 400; + color: #333; /* Slightly dark color for better contrast */ +} + +/* About Section */ +#about { + background-color: #f9f9f9; + padding: 60px 0; + text-align: center; +} + +#about .section-title { + font-size: 2rem; + color: #ff6f61; /* Warm coral */ + margin-bottom: 20px; +} + +#about p { + font-size: 1.1rem; + line-height: 1.8; + color: #333; /* Darker color for the text */ +} + +#about p strong { + color: #6a1b9a; /* Purple for strong highlighted words */ +} + + +/* Certifications Section */ +#certifications { + background: #f0f8ff; /* Light Sky Blue */ + padding: 60px 0; + } + + #certifications .section-title { + font-size: 2rem; + color: #007bff; /* Bright blue */ + text-align: center; + margin-bottom: 30px; + } + + #certifications .card { + border: 1px solid #ddd; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; + background-color: #ffffff; + border-radius: 8px; + margin-bottom: 20px; + } + + #certifications .card:hover { + transform: translateY(-10px); + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); + } + + #certifications .card-body { + padding: 20px; + } + + #certifications .card-title { + font-size: 1.25rem; + color: #333; + font-weight: 600; + margin-bottom: 15px; + } + + #certifications .card-text { + font-size: 1rem; + color: #777; + } + + #certifications a { + text-decoration: none; /* Remove underline from the links */ + } + + #certifications a:hover { + text-decoration: underline; /* Add underline on hover for better interaction */ + } + + /* Adjust text size for smaller screens */ + @media (max-width: 767px) { + #certifications .card-title { + font-size: 1.1rem; + } + #certifications .card-text { + font-size: 0.9rem; + } + } + + +/* Skills Section */ +#skills { + background: #ffecd2; /* Soft peach color */ + padding: 60px 0; + } + + #skills .section-title { + font-size: 2rem; + color: #6a1b9a; /* Purple color for the title */ + margin-bottom: 30px; + text-align: center; + } + + #skills .carousel-item img { + max-width: 120px; + margin: 10px; + transition: transform 0.3s ease-in-out; /* Smooth scaling effect */ + } + + #skills .carousel-item img:hover { + transform: scale(1.1); /* Slight zoom on hover */ + } + + #skills .carousel-inner { + padding: 20px 0; /* Space between carousel items */ + } + + #skills .carousel-control-prev-icon, + #skills .carousel-control-next-icon { + background-color: #6a1b9a; /* Uniform purple color for carousel controls */ + } + + /* Optional: adjust the size of the carousel control icons */ + .carousel-control-prev-icon, + .carousel-control-next-icon { + background-size: 30px; /* Adjust size of control icons */ + } +/* Contact Section */ +#contact { + background-color: #f9f9f9; /* Light background */ + padding: 60px 0; + } + + #contact .section-title { + font-size: 2rem; + color: #6a1b9a; /* Purple color for the title */ + margin-bottom: 30px; + text-align: center; + } + + .contact-form { + background-color: #fff; + padding: 30px; + border-radius: 8px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); + } + + .contact-form .form-label { + color: #333; + font-weight: 600; + } + + .contact-form .form-control { + border-radius: 8px; + border: 1px solid #ddd; + padding: 10px; + font-size: 1rem; + margin-bottom: 15px; + } + + .contact-form .form-control:focus { + border-color: #6a1b9a; /* Focus color */ + box-shadow: 0 0 8px rgba(106, 27, 154, 0.4); /* Purple glow on focus */ + } + + .contact-form button { + background-color: #6a1b9a; + color: white; + border: none; + padding: 12px 30px; + font-size: 1rem; + border-radius: 8px; + cursor: pointer; + transition: background-color 0.3s ease; + } + + .contact-form button:hover { + background-color: #4a148c; /* Darker purple on hover */ + } + + /* Social Media Section */ + #social { + background-color: #fff; + padding: 40px 0; + } + + #social h3 { + font-size: 1.8rem; + color: #333; + margin-bottom: 20px; + } + + .social-icons a { + font-size: 2rem; + color: #6a1b9a; + margin: 0 15px; + transition: color 0.3s ease; + } + + .social-icons a:hover { + color: #4a148c; /* Darker purple on hover */ + } + + /* Responsive Adjustments */ + @media (max-width: 767px) { + .contact-form { + padding: 20px; + } + + .contact-form .form-control { + font-size: 0.9rem; + } + + .contact-form button { + font-size: 0.9rem; + } + + #social h3 { + font-size: 1.5rem; + } + } + + + + /* Footer Styling */ + footer { + background-color: #333; + color: white; + padding: 20px 0; + text-align: center; + } + + footer p { + margin: 0; + } + + footer #year { + font-weight: bold; + } diff --git a/assets/images/airflow.png b/assets/images/airflow.png new file mode 100644 index 0000000..dac8436 Binary files /dev/null and b/assets/images/airflow.png differ diff --git a/assets/images/aws.svg b/assets/images/aws.svg new file mode 100644 index 0000000..ecfcfc0 --- /dev/null +++ b/assets/images/aws.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/assets/images/azure-devops.svg b/assets/images/azure-devops.svg new file mode 100644 index 0000000..624ef6d --- /dev/null +++ b/assets/images/azure-devops.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/assets/images/cassandra.svg b/assets/images/cassandra.svg new file mode 100644 index 0000000..fbe8cac --- /dev/null +++ b/assets/images/cassandra.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/csharp.svg b/assets/images/csharp.svg new file mode 100644 index 0000000..0ee7b48 --- /dev/null +++ b/assets/images/csharp.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/assets/images/database.svg b/assets/images/database.svg new file mode 100644 index 0000000..406f1ec --- /dev/null +++ b/assets/images/database.svg @@ -0,0 +1,29 @@ + + + + + + + Data + + + sql-database-sql-azure + + + SQL Database (SQL Azure) + + + image/svg+xml + + + Amido Limited + + + Richard Slater + + + + + + + \ No newline at end of file diff --git a/assets/images/dbt.svg b/assets/images/dbt.svg new file mode 100644 index 0000000..13a12c4 --- /dev/null +++ b/assets/images/dbt.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/assets/images/docker.svg b/assets/images/docker.svg new file mode 100644 index 0000000..e1e413e --- /dev/null +++ b/assets/images/docker.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/assets/images/elasticsearch.svg b/assets/images/elasticsearch.svg new file mode 100644 index 0000000..d1293a9 --- /dev/null +++ b/assets/images/elasticsearch.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/images/gcp.svg b/assets/images/gcp.svg new file mode 100644 index 0000000..657b3b2 --- /dev/null +++ b/assets/images/gcp.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/assets/images/git.svg b/assets/images/git.svg new file mode 100644 index 0000000..6462b6c --- /dev/null +++ b/assets/images/git.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/hadoop.svg b/assets/images/hadoop.svg new file mode 100644 index 0000000..42eca01 --- /dev/null +++ b/assets/images/hadoop.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/java.svg b/assets/images/java.svg new file mode 100644 index 0000000..7e9c623 --- /dev/null +++ b/assets/images/java.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/kubernetes.svg b/assets/images/kubernetes.svg new file mode 100644 index 0000000..58ab457 --- /dev/null +++ b/assets/images/kubernetes.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/assets/images/python.svg b/assets/images/python.svg new file mode 100644 index 0000000..3a4e654 --- /dev/null +++ b/assets/images/python.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/scala.svg b/assets/images/scala.svg new file mode 100644 index 0000000..0ccb404 --- /dev/null +++ b/assets/images/scala.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/spark.svg b/assets/images/spark.svg new file mode 100644 index 0000000..b60f69b --- /dev/null +++ b/assets/images/spark.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/js/scripts.js b/assets/js/scripts.js new file mode 100644 index 0000000..ffab4b9 --- /dev/null +++ b/assets/js/scripts.js @@ -0,0 +1,2 @@ +// Automatic year update for the copyright +document.getElementById("year").textContent = new Date().getFullYear(); diff --git a/index.html b/index.html new file mode 100644 index 0000000..f27210a --- /dev/null +++ b/index.html @@ -0,0 +1,219 @@ + + + + + + Manoël Malaury TOUSSI + + + + + + + + + + + + + + + + + + +
+
+

Hello, I'm Manoël Malaury TOUSSI

+

+ As a driven Software/ML Engineer, I specialize in designing innovative software solutions that harness the power of AI, Machine Learning, Cloud Computing, MLOps, DevOps. I focus on building scalable systems, optimizing algorithms, and deploying cloud infrastructures that empower businesses to thrive in the digital age. +

+
+
+ + +
+
+

About Me

+

+ With a passion for technology and problem-solving, I am a results-oriented software engineer dedicated to delivering cutting-edge solutions. My expertise lies in applying Artificial Intelligence and Machine Learning to create systems that drive impactful change. +

+

+ I bring deep experience in MLOps, DevOps, and LLMOps, ensuring seamless AI model deployment, continuous integration, and optimized operations at scale. My goal is to transform complex challenges into innovative solutions that improve efficiency, automate workflows, and accelerate business success. +

+

+ Whether it's architecting robust cloud infrastructures, designing AI-driven systems, or integrating data science solutions, I thrive on pushing boundaries and constantly evolving with new technologies. +

+
+
+ + + +
+
+

Skills

+ +
+
+ + +
+
+

Certifications

+
+ +
+
+
+
+ AWS Certified Cloud Practitioner +
+

Earned in 2021

+
+
+
+ + +
+
+
+
+ Certified Associate in Python Programming +
+

Earned in 08/2022

+
+
+
+ + +
+
+
+
+ Scrum Fundamentals Certified (SFC) +
+

Earned in 2022

+
+
+
+ + +
+
+
+
+ Engineer Data in Google Cloud +
+

Earned in 2023

+
+
+
+ + +
+
+
+ + + +
+
+

Contact Me

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ + +
+
+

Find me on Social Media

+ +
+
+ + + + + + + + + +