go
Browse files- index.html +49 -63
index.html
CHANGED
|
@@ -113,79 +113,32 @@
|
|
| 113 |
<h2 class="text-3xl md:text-4xl font-bold mb-4">Featured <span class="gradient-text">Projects</span></h2>
|
| 114 |
<p class="text-slate-400 max-w-2xl mx-auto">A curated selection of my recent design work across various industries and mediums.</p>
|
| 115 |
</div>
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
<img src="http://static.photos/technology/640x360/1" alt="Project 1" class="w-full h-64 object-cover transition duration-500 group-hover:scale-110">
|
| 122 |
-
<div class="absolute inset-0 bg-gradient-to-t from-slate-900/90 to-transparent flex items-end p-6 opacity-0 group-hover:opacity-100 transition">
|
| 123 |
-
<div>
|
| 124 |
-
<h3 class="text-xl font-bold mb-2">Digital Agency Website</h3>
|
| 125 |
-
<p class="text-sm text-slate-300 mb-4">Complete website redesign for a creative agency</p>
|
| 126 |
-
<div class="flex space-x-2">
|
| 127 |
-
<span class="text-xs px-2 py-1 bg-primary/20 text-primary rounded">UI/UX</span>
|
| 128 |
-
<span class="text-xs px-2 py-1 bg-secondary/20 text-secondary rounded">Web Design</span>
|
| 129 |
-
</div>
|
| 130 |
-
</div>
|
| 131 |
-
</div>
|
| 132 |
-
</div>
|
| 133 |
-
<div class="p-6">
|
| 134 |
-
<h3 class="text-xl font-bold mb-2">Digital Agency Website</h3>
|
| 135 |
-
<a href="#" class="text-primary text-sm font-medium inline-flex items-center">
|
| 136 |
-
View Case Study <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 137 |
-
</a>
|
| 138 |
-
</div>
|
| 139 |
-
</div>
|
| 140 |
-
|
| 141 |
-
<!-- Project 2 -->
|
| 142 |
-
<div class="glass-effect rounded-xl overflow-hidden group">
|
| 143 |
-
<div class="relative overflow-hidden">
|
| 144 |
-
<img src="http://static.photos/minimal/640x360/2" alt="Project 2" class="w-full h-64 object-cover transition duration-500 group-hover:scale-110">
|
| 145 |
-
<div class="absolute inset-0 bg-gradient-to-t from-slate-900/90 to-transparent flex items-end p-6 opacity-0 group-hover:opacity-100 transition">
|
| 146 |
-
<div>
|
| 147 |
-
<h3 class="text-xl font-bold mb-2">Mobile Banking App</h3>
|
| 148 |
-
<p class="text-sm text-slate-300 mb-4">User experience design for financial application</p>
|
| 149 |
-
<div class="flex space-x-2">
|
| 150 |
-
<span class="text-xs px-2 py-1 bg-primary/20 text-primary rounded">UX Design</span>
|
| 151 |
-
<span class="text-xs px-2 py-1 bg-secondary/20 text-secondary rounded">Mobile</span>
|
| 152 |
-
</div>
|
| 153 |
-
</div>
|
| 154 |
-
</div>
|
| 155 |
-
</div>
|
| 156 |
-
<div class="p-6">
|
| 157 |
-
<h3 class="text-xl font-bold mb-2">Mobile Banking App</h3>
|
| 158 |
-
<a href="#" class="text-primary text-sm font-medium inline-flex items-center">
|
| 159 |
-
View Case Study <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 160 |
-
</a>
|
| 161 |
-
</div>
|
| 162 |
-
</div>
|
| 163 |
-
|
| 164 |
-
<!-- Project 3 -->
|
| 165 |
<div class="glass-effect rounded-xl overflow-hidden group">
|
| 166 |
<div class="relative overflow-hidden">
|
| 167 |
-
<img src="
|
| 168 |
<div class="absolute inset-0 bg-gradient-to-t from-slate-900/90 to-transparent flex items-end p-6 opacity-0 group-hover:opacity-100 transition">
|
| 169 |
<div>
|
| 170 |
-
<h3 class="text-xl font-bold mb-2">
|
| 171 |
-
<p class="text-sm text-slate-300 mb-4">
|
| 172 |
-
<div class="flex space-x-2">
|
| 173 |
-
<span class="text-xs px-2 py-1 bg-primary/20 text-primary rounded">Branding</span>
|
| 174 |
-
<span class="text-xs px-2 py-1 bg-secondary/20 text-secondary rounded">Illustration</span>
|
| 175 |
</div>
|
| 176 |
</div>
|
| 177 |
</div>
|
| 178 |
</div>
|
| 179 |
<div class="p-6">
|
| 180 |
-
<h3 class="text-xl font-bold mb-2">
|
| 181 |
-
<a href="#" class="text-primary text-sm font-medium inline-flex items-center">
|
| 182 |
-
View
|
| 183 |
</a>
|
| 184 |
</div>
|
| 185 |
</div>
|
| 186 |
-
</
|
| 187 |
-
|
| 188 |
-
<div class="text-center mt-12">
|
| 189 |
<a href="#" class="inline-flex items-center px-6 py-3 border border-primary text-primary rounded-lg font-medium hover:bg-fuchsia-900/30 transition">
|
| 190 |
View All Projects <i data-feather="arrow-right" class="w-4 h-4 ml-2"></i>
|
| 191 |
</a>
|
|
@@ -320,10 +273,43 @@
|
|
| 320 |
</div>
|
| 321 |
</div>
|
| 322 |
</footer>
|
| 323 |
-
|
| 324 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 325 |
// Mobile menu toggle
|
| 326 |
-
|
| 327 |
const mobileMenu = document.getElementById('mobile-menu');
|
| 328 |
const closeMobileMenu = document.getElementById('close-mobile-menu');
|
| 329 |
|
|
|
|
| 113 |
<h2 class="text-3xl md:text-4xl font-bold mb-4">Featured <span class="gradient-text">Projects</span></h2>
|
| 114 |
<p class="text-slate-400 max-w-2xl mx-auto">A curated selection of my recent design work across various industries and mediums.</p>
|
| 115 |
</div>
|
| 116 |
+
<div id="projects-container" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
| 117 |
+
<!-- Projects will be loaded dynamically from GitHub API -->
|
| 118 |
+
</div>
|
| 119 |
+
|
| 120 |
+
<template id="project-template">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
<div class="glass-effect rounded-xl overflow-hidden group">
|
| 122 |
<div class="relative overflow-hidden">
|
| 123 |
+
<img src="" alt="" class="w-full h-64 object-cover transition duration-500 group-hover:scale-110 project-image">
|
| 124 |
<div class="absolute inset-0 bg-gradient-to-t from-slate-900/90 to-transparent flex items-end p-6 opacity-0 group-hover:opacity-100 transition">
|
| 125 |
<div>
|
| 126 |
+
<h3 class="text-xl font-bold mb-2 project-title"></h3>
|
| 127 |
+
<p class="text-sm text-slate-300 mb-4 project-description"></p>
|
| 128 |
+
<div class="flex space-x-2 project-topics">
|
|
|
|
|
|
|
| 129 |
</div>
|
| 130 |
</div>
|
| 131 |
</div>
|
| 132 |
</div>
|
| 133 |
<div class="p-6">
|
| 134 |
+
<h3 class="text-xl font-bold mb-2 project-title"></h3>
|
| 135 |
+
<a href="#" class="text-primary text-sm font-medium inline-flex items-center project-link">
|
| 136 |
+
View Project <i data-feather="arrow-right" class="w-4 h-4 ml-1"></i>
|
| 137 |
</a>
|
| 138 |
</div>
|
| 139 |
</div>
|
| 140 |
+
</template>
|
| 141 |
+
<div class="text-center mt-12">
|
|
|
|
| 142 |
<a href="#" class="inline-flex items-center px-6 py-3 border border-primary text-primary rounded-lg font-medium hover:bg-fuchsia-900/30 transition">
|
| 143 |
View All Projects <i data-feather="arrow-right" class="w-4 h-4 ml-2"></i>
|
| 144 |
</a>
|
|
|
|
| 273 |
</div>
|
| 274 |
</div>
|
| 275 |
</footer>
|
|
|
|
| 276 |
<script>
|
| 277 |
+
// Fetch GitHub projects
|
| 278 |
+
async function fetchGitHubProjects() {
|
| 279 |
+
const response = await fetch('https://api.github.com/users/octocat/repos');
|
| 280 |
+
const projects = await response.json();
|
| 281 |
+
const container = document.getElementById('projects-container');
|
| 282 |
+
const template = document.getElementById('project-template');
|
| 283 |
+
|
| 284 |
+
projects.slice(0, 6).forEach(project => {
|
| 285 |
+
const clone = template.content.cloneNode(true);
|
| 286 |
+
|
| 287 |
+
clone.querySelector('.project-title').textContent = project.name;
|
| 288 |
+
clone.querySelectorAll('.project-title').forEach(el => el.textContent = project.name);
|
| 289 |
+
clone.querySelector('.project-description').textContent = project.description || 'GitHub repository project';
|
| 290 |
+
clone.querySelector('.project-link').href = project.html_url;
|
| 291 |
+
clone.querySelector('.project-image').src = `http://static.photos/technology/640x360/${Math.floor(Math.random() * 100)}`;
|
| 292 |
+
|
| 293 |
+
const topicsContainer = clone.querySelector('.project-topics');
|
| 294 |
+
project.topics?.slice(0, 3).forEach(topic => {
|
| 295 |
+
const span = document.createElement('span');
|
| 296 |
+
span.className = 'text-xs px-2 py-1 bg-primary/20 text-primary rounded';
|
| 297 |
+
span.textContent = topic;
|
| 298 |
+
topicsContainer.appendChild(span);
|
| 299 |
+
});
|
| 300 |
+
|
| 301 |
+
container.appendChild(clone);
|
| 302 |
+
});
|
| 303 |
+
|
| 304 |
+
// Refresh feather icons after adding new content
|
| 305 |
+
feather.replace();
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
// Call the function when page loads
|
| 309 |
+
document.addEventListener('DOMContentLoaded', fetchGitHubProjects);
|
| 310 |
+
|
| 311 |
// Mobile menu toggle
|
| 312 |
+
const mobileMenuButton = document.getElementById('mobile-menu-button');
|
| 313 |
const mobileMenu = document.getElementById('mobile-menu');
|
| 314 |
const closeMobileMenu = document.getElementById('close-mobile-menu');
|
| 315 |
|