From 879ef7929e7a2a491ec83911fffe42e218d85c1d Mon Sep 17 00:00:00 2001 From: TM-Squared Date: Tue, 15 Apr 2025 20:21:16 +0200 Subject: [PATCH] portfolio init --- .gitea/workflows/deploy.yml | 25 +++ assets/css/style.css | 265 ++++++++++++++++++++++++++++++++ assets/images/airflow.png | Bin 0 -> 4630 bytes assets/images/aws.svg | 9 ++ assets/images/azure-devops.svg | 2 + assets/images/cassandra.svg | 64 ++++++++ assets/images/csharp.svg | 9 ++ assets/images/database.svg | 29 ++++ assets/images/dbt.svg | 2 + assets/images/docker.svg | 2 + assets/images/elasticsearch.svg | 3 + assets/images/gcp.svg | 2 + assets/images/git.svg | 14 ++ assets/images/hadoop.svg | 72 +++++++++ assets/images/java.svg | 13 ++ assets/images/kubernetes.svg | 2 + assets/images/python.svg | 15 ++ assets/images/scala.svg | 30 ++++ assets/images/spark.svg | 13 ++ assets/js/scripts.js | 2 + index.html | 219 ++++++++++++++++++++++++++ 21 files changed, 792 insertions(+) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 assets/css/style.css create mode 100644 assets/images/airflow.png create mode 100644 assets/images/aws.svg create mode 100644 assets/images/azure-devops.svg create mode 100644 assets/images/cassandra.svg create mode 100644 assets/images/csharp.svg create mode 100644 assets/images/database.svg create mode 100644 assets/images/dbt.svg create mode 100644 assets/images/docker.svg create mode 100644 assets/images/elasticsearch.svg create mode 100644 assets/images/gcp.svg create mode 100644 assets/images/git.svg create mode 100644 assets/images/hadoop.svg create mode 100644 assets/images/java.svg create mode 100644 assets/images/kubernetes.svg create mode 100644 assets/images/python.svg create mode 100644 assets/images/scala.svg create mode 100644 assets/images/spark.svg create mode 100644 assets/js/scripts.js create mode 100644 index.html 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 0000000000000000000000000000000000000000..dac84365a74221087fee415a61d6337af0a87af7 GIT binary patch literal 4630 zcmV+x66x)UP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 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 + + + + + + + + \ 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

+ +
+
+ + +
+

© Gintou - All rights reserved.

+
+ + + + + + +