diff --git a/public/portfolio/index.html b/public/portfolio/index.html index 4766580f..0b7fd484 100644 --- a/public/portfolio/index.html +++ b/public/portfolio/index.html @@ -89,10 +89,6 @@ - diff --git a/public/portfolio/projects/css/style.css b/public/portfolio/projects/css/style.css index 4960dcef..50d732bb 100644 --- a/public/portfolio/projects/css/style.css +++ b/public/portfolio/projects/css/style.css @@ -85,6 +85,11 @@ p { .label-text { font-size: 1.5vw; + max-width: 80%; /* Limit the width of the description */ + text-align: center; + --white-space: nowrap; /* Optional: prevent text from wrapping to multiple lines */ + --overflow: hidden; /* Hide overflow text */ + --text-overflow: ellipsis; } /* NAV-BAR */ @@ -193,7 +198,8 @@ input[type="radio"]:hover + label { } .panels { - overflow: hidden; + flex: 1; + --overflow: hidden; } .panel { @@ -222,14 +228,14 @@ input[type="radio"]:hover + label { } .panel > *:nth-child(2) { - transform: translateX(1000%); + transform: translateX(-1000%); } .panel.open-active > *:nth-child(2) { - transform: translateX(0%); + transform: translateX(12.5%); } .panel > *:last-child { - transform: translateX(1000%); + transform: translateX(-1000%); transition: 800ms; } .panel.open-active > *:last-child { @@ -253,6 +259,16 @@ input[type="radio"]:hover + label { font-size: 2em; } +.carousel-wrapper { + flex: 0 0 40%; + padding-top: 5vw; +} + +/* Optional: You can adjust the width of the carousel */ +.carousel { + width: 100%; /* Ensure the carousel takes up all the space in its wrapper */ +} + @media only screen and (max-width: 600px) { .panel p { font-size: 0.8em; @@ -261,6 +277,9 @@ input[type="radio"]:hover + label { /*Projects display wrapper div*/ .projects-display { + display: flex; + justify-content: space-between; + gap: 3vw; padding: 5vw; } diff --git a/public/portfolio/projects/img/one-ai-1.jpg b/public/portfolio/projects/img/one-ai-1.jpg new file mode 100644 index 00000000..b49d99e0 Binary files /dev/null and b/public/portfolio/projects/img/one-ai-1.jpg differ diff --git a/public/portfolio/projects/img/one-ai-2.webp b/public/portfolio/projects/img/one-ai-2.webp new file mode 100644 index 00000000..1e6faf20 Binary files /dev/null and b/public/portfolio/projects/img/one-ai-2.webp differ diff --git a/public/portfolio/projects/img/one-ai-3.jpg b/public/portfolio/projects/img/one-ai-3.jpg new file mode 100644 index 00000000..675130e4 Binary files /dev/null and b/public/portfolio/projects/img/one-ai-3.jpg differ diff --git a/public/portfolio/projects/img/pokedex-1.webp b/public/portfolio/projects/img/pokedex-1.webp new file mode 100644 index 00000000..776295c9 Binary files /dev/null and b/public/portfolio/projects/img/pokedex-1.webp differ diff --git a/public/portfolio/projects/img/pokedex-2.jpeg b/public/portfolio/projects/img/pokedex-2.jpeg new file mode 100644 index 00000000..cb805565 Binary files /dev/null and b/public/portfolio/projects/img/pokedex-2.jpeg differ diff --git a/public/portfolio/projects/img/pokedex-3.jpeg b/public/portfolio/projects/img/pokedex-3.jpeg new file mode 100644 index 00000000..e7337032 Binary files /dev/null and b/public/portfolio/projects/img/pokedex-3.jpeg differ diff --git a/public/portfolio/projects/index.html b/public/portfolio/projects/index.html index bcfdd3d3..982f77dd 100644 --- a/public/portfolio/projects/index.html +++ b/public/portfolio/projects/index.html @@ -7,61 +7,62 @@ - - +
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - +
-
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

One AI

End-to-end self-hosted AI solution using Ollama, a Go backend, and Flutter frontend.

-
+

Pokedex

End-to-end self-hosted Pokedex using PokeAPI, a Go backend, and Flutter frontend.

@@ -99,10 +100,26 @@
+ +
- -
+ + -
+ diff --git a/public/portfolio/projects/js/script.js b/public/portfolio/projects/js/script.js index 8c1dd312..377178b0 100644 --- a/public/portfolio/projects/js/script.js +++ b/public/portfolio/projects/js/script.js @@ -7,6 +7,15 @@ const panels = [...document.querySelectorAll('.panel')]; panels.forEach(panel => panel.addEventListener('click', toggleOpen)); panels.forEach(panel => panel.addEventListener('transitionend', toggleActive)); +// Store the reference to the carousel container where images will be displayed +const carouselContainer = document.querySelector('.carousel-inner'); + + +// Add event listeners to the panels (cards) +//const panels = [...document.querySelectorAll('.panel')]; +//panels.forEach(panel => panel.addEventListener('click', toggleActive)); + + // buttons to filter projects const searchButtons = document.querySelectorAll('.search'); // add event listeners to each button @@ -41,15 +50,30 @@ function toggleActive(e) { let currentActive = document.querySelector('.open-active'); if(currentActive !== null && currentActive !== this) currentActive.classList.toggle('open-active'); this.classList.toggle('open-active'); - //updateCarousel(e); + currentActive = document.querySelector('.open-active'); + updateCarousel(currentActive); } } -/* - * Update the carousel to use the selected project's screenshot folder. - */ -function updateCarousel(e) { - console.log(e.target.id); // TODO: Need to implement. +// Function to update the carousel with the selected project's images +function updateCarousel(panel) { + console.log(panel); + // Get the image URLs from the data attribute of the selected project + const imageUrls = JSON.parse(panel.getAttribute('data-carousel-images')); + + // Clear the current carousel content + carouselContainer.innerHTML = ''; + + // Add new images to the carousel + imageUrls.forEach((url, index) => { + const isActive = index === 0 ? 'active' : ''; // The first image should be active + const carouselItem = ` + + `; + carouselContainer.innerHTML += carouselItem; // Add the new image item to the carousel + }); } /*