portfolio / index.html
freemanjrknox's picture
Add 3 files
8c272cc verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Creative Portfolio</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap');
body {
font-family: 'Poppins', sans-serif;
background-color: #0f172a;
color: #f8fafc;
overflow-x: hidden;
}
.gradient-text {
background: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.hero-bg {
background: radial-gradient(circle at 10% 20%, rgba(99, 102, 241, 0.1) 0%, rgba(15, 23, 42, 1) 30%);
}
.card-hover {
transition: all 0.3s ease;
transform-style: preserve-3d;
}
.card-hover:hover {
transform: translateY(-10px) scale(1.02);
box-shadow: 0 25px 50px -12px rgba(99, 102, 241, 0.25);
}
.skill-bar {
height: 8px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.1);
overflow: hidden;
}
.skill-progress {
height: 100%;
border-radius: 4px;
background: linear-gradient(90deg, #6366f1, #8b5cf6);
width: 0;
transition: width 1.5s ease;
}
.floating {
animation: floating 6s ease-in-out infinite;
}
@keyframes floating {
0% { transform: translateY(0px); }
50% { transform: translateY(-20px); }
100% { transform: translateY(0px); }
}
.blob {
position: absolute;
width: 500px;
height: 500px;
background: linear-gradient(45deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
filter: blur(50px);
z-index: -1;
animation: blob-animate 20s linear infinite;
}
@keyframes blob-animate {
0% { transform: rotate(0deg) scale(1); }
50% { transform: rotate(180deg) scale(1.2); }
100% { transform: rotate(360deg) scale(1); }
}
.nav-link {
position: relative;
}
.nav-link::after {
content: '';
position: absolute;
width: 0;
height: 2px;
bottom: -2px;
left: 0;
background: linear-gradient(90deg, #6366f1, #8b5cf6);
transition: width 0.3s ease;
}
.nav-link:hover::after {
width: 100%;
}
.timeline-item::before {
content: '';
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: linear-gradient(135deg, #6366f1, #8b5cf6);
left: -10px;
top: 0;
}
.timeline::before {
content: '';
position: absolute;
width: 2px;
height: 100%;
background: rgba(255, 255, 255, 0.1);
left: 0;
top: 0;
}
.contact-input {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.contact-input:focus {
outline: none;
border-color: #6366f1;
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
}
.cursor-follower {
position: fixed;
width: 30px;
height: 30px;
border-radius: 50%;
background: rgba(99, 102, 241, 0.3);
pointer-events: none;
transform: translate(-50%, -50%);
z-index: 9999;
mix-blend-mode: screen;
transition: transform 0.1s ease;
}
.cursor-dot {
position: fixed;
width: 8px;
height: 8px;
border-radius: 50%;
background: #6366f1;
pointer-events: none;
transform: translate(-50%, -50%);
z-index: 9999;
transition: transform 0.05s ease;
}
</style>
</head>
<body>
<!-- Custom Cursor -->
<div class="cursor-follower"></div>
<div class="cursor-dot"></div>
<!-- Blob Background Elements -->
<div class="blob top-[-200px] left-[-200px]"></div>
<div class="blob bottom-[-200px] right-[-200px]"></div>
<!-- Navigation -->
<nav class="fixed w-full z-50 backdrop-blur-md bg-opacity-80 bg-[#0f172a] border-b border-gray-800">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16 items-center">
<div class="flex-shrink-0 flex items-center">
<span class="text-2xl font-bold gradient-text">Portfolio</span>
</div>
<div class="hidden md:block">
<div class="ml-10 flex items-center space-x-4">
<a href="#home" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">Home</a>
<a href="#about" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">About</a>
<a href="#skills" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">Skills</a>
<a href="#projects" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">Projects</a>
<a href="#experience" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">Experience</a>
<a href="#contact" class="nav-link px-3 py-2 text-sm font-medium hover:text-indigo-400 transition">Contact</a>
</div>
</div>
<div class="md:hidden">
<button id="mobile-menu-button" class="p-2 rounded-md text-gray-400 hover:text-white focus:outline-none">
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</div>
</div>
</div>
<!-- Mobile menu -->
<div id="mobile-menu" class="hidden md:hidden bg-[#0f172a] border-t border-gray-800">
<div class="px-2 pt-2 pb-3 space-y-1 sm:px-3">
<a href="#home" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">Home</a>
<a href="#about" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">About</a>
<a href="#skills" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">Skills</a>
<a href="#projects" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">Projects</a>
<a href="#experience" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">Experience</a>
<a href="#contact" class="block px-3 py-2 text-base font-medium hover:text-indigo-400 transition">Contact</a>
</div>
</div>
</nav>
<!-- Hero Section -->
<section id="home" class="hero-bg min-h-screen flex items-center justify-center relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24 md:py-32">
<div class="flex flex-col md:flex-row items-center">
<div class="md:w-1/2 mb-10 md:mb-0">
<h1 class="text-4xl md:text-6xl font-bold mb-4">Hi, I'm <span class="gradient-text">Alex</span></h1>
<h2 class="text-2xl md:text-4xl font-semibold mb-6">Creative <span class="gradient-text">Developer</span></h2>
<p class="text-lg text-gray-300 mb-8 max-w-lg">I build exceptional digital experiences with modern technologies and creative solutions.</p>
<div class="flex space-x-4">
<a href="#contact" class="px-6 py-3 bg-gradient-to-r from-indigo-500 to-purple-500 rounded-md font-medium hover:opacity-90 transition transform hover:scale-105">Hire Me</a>
<a href="#projects" class="px-6 py-3 border border-indigo-500 text-indigo-400 rounded-md font-medium hover:bg-indigo-500 hover:bg-opacity-10 transition transform hover:scale-105">View Work</a>
</div>
</div>
<div class="md:w-1/2 flex justify-center relative">
<div class="w-64 h-64 md:w-80 md:h-80 rounded-full overflow-hidden border-4 border-indigo-500 relative floating">
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="Profile" class="w-full h-full object-cover">
</div>
<div class="absolute -bottom-5 -left-5 w-32 h-32 rounded-full bg-indigo-500 opacity-20 blur-3xl"></div>
<div class="absolute -top-5 -right-5 w-32 h-32 rounded-full bg-purple-500 opacity-20 blur-3xl"></div>
</div>
</div>
</div>
</section>
<!-- About Section -->
<section id="about" class="py-20 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">About <span class="gradient-text">Me</span></h2>
<div class="w-20 h-1 bg-gradient-to-r from-indigo-500 to-purple-500 mx-auto"></div>
</div>
<div class="flex flex-col md:flex-row items-center">
<div class="md:w-1/3 mb-10 md:mb-0 flex justify-center">
<div class="relative">
<div class="w-64 h-64 rounded-lg overflow-hidden border-2 border-indigo-500 transform rotate-3">
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=774&q=80" alt="About" class="w-full h-full object-cover">
</div>
<div class="absolute -z-10 -bottom-5 -right-5 w-full h-full rounded-lg border-2 border-purple-500 transform -rotate-3"></div>
</div>
</div>
<div class="md:w-2/3 md:pl-12">
<h3 class="text-2xl font-semibold mb-4">Who am I?</h3>
<p class="text-gray-300 mb-6">I'm a passionate full-stack developer with 5+ years of experience creating modern web applications. I specialize in JavaScript technologies across the whole stack (React, Node.js, Express, MongoDB).</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-8">
<div>
<h4 class="font-medium mb-2 flex items-center">
<span class="w-2 h-2 bg-indigo-500 rounded-full mr-2"></span>
<span>Name:</span>
</h4>
<p class="text-gray-300">Alex Johnson</p>
</div>
<div>
<h4 class="font-medium mb-2 flex items-center">
<span class="w-2 h-2 bg-purple-500 rounded-full mr-2"></span>
<span>Email:</span>
</h4>
<p class="text-gray-300">alex@example.com</p>
</div>
<div>
<h4 class="font-medium mb-2 flex items-center">
<span class="w-2 h-2 bg-indigo-500 rounded-full mr-2"></span>
<span>Age:</span>
</h4>
<p class="text-gray-300">28</p>
</div>
<div>
<h4 class="font-medium mb-2 flex items-center">
<span class="w-2 h-2 bg-purple-500 rounded-full mr-2"></span>
<span>From:</span>
</h4>
<p class="text-gray-300">San Francisco, CA</p>
</div>
</div>
<div class="flex flex-wrap gap-4">
<a href="#" class="px-6 py-2 bg-indigo-500 bg-opacity-10 border border-indigo-500 rounded-md font-medium hover:bg-opacity-20 transition">Download CV</a>
<a href="#" class="px-6 py-2 bg-transparent border border-gray-600 rounded-md font-medium hover:border-indigo-500 hover:text-indigo-400 transition">More About Me</a>
</div>
</div>
</div>
</div>
</section>
<!-- Skills Section -->
<section id="skills" class="py-20 bg-gray-900 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">My <span class="gradient-text">Skills</span></h2>
<div class="w-20 h-1 bg-gradient-to-r from-indigo-500 to-purple-500 mx-auto"></div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-12">
<div>
<h3 class="text-xl font-semibold mb-6">Technical Skills</h3>
<div class="space-y-6">
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">HTML/CSS</span>
<span class="text-indigo-400">95%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="95%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">JavaScript</span>
<span class="text-indigo-400">90%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="90%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">React</span>
<span class="text-indigo-400">85%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="85%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">Node.js</span>
<span class="text-indigo-400">80%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="80%"></div>
</div>
</div>
</div>
</div>
<div>
<h3 class="text-xl font-semibold mb-6">Professional Skills</h3>
<div class="space-y-6">
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">Communication</span>
<span class="text-purple-400">85%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="85%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">Team Work</span>
<span class="text-purple-400">90%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="90%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">Project Management</span>
<span class="text-purple-400">75%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="75%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-2">
<span class="font-medium">Creativity</span>
<span class="text-purple-400">95%</span>
</div>
<div class="skill-bar">
<div class="skill-progress" data-width="95%"></div>
</div>
</div>
</div>
</div>
</div>
<div class="mt-16 grid grid-cols-2 md:grid-cols-4 gap-6">
<div class="bg-gray-800 bg-opacity-50 rounded-lg p-6 text-center card-hover">
<div class="text-4xl text-indigo-400 mb-3">
<i class="fas fa-code"></i>
</div>
<h4 class="font-semibold mb-2">Clean Code</h4>
<p class="text-gray-300 text-sm">Writing maintainable and efficient code</p>
</div>
<div class="bg-gray-800 bg-opacity-50 rounded-lg p-6 text-center card-hover">
<div class="text-4xl text-purple-400 mb-3">
<i class="fas fa-mobile-alt"></i>
</div>
<h4 class="font-semibold mb-2">Responsive Design</h4>
<p class="text-gray-300 text-sm">Perfect on all device sizes</p>
</div>
<div class="bg-gray-800 bg-opacity-50 rounded-lg p-6 text-center card-hover">
<div class="text-4xl text-indigo-400 mb-3">
<i class="fas fa-rocket"></i>
</div>
<h4 class="font-semibold mb-2">Fast Performance</h4>
<p class="text-gray-300 text-sm">Optimized for speed</p>
</div>
<div class="bg-gray-800 bg-opacity-50 rounded-lg p-6 text-center card-hover">
<div class="text-4xl text-purple-400 mb-3">
<i class="fas fa-headset"></i>
</div>
<h4 class="font-semibold mb-2">Great Support</h4>
<p class="text-gray-300 text-sm">Always available for help</p>
</div>
</div>
</div>
</section>
<!-- Projects Section -->
<section id="projects" class="py-20 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">My <span class="gradient-text">Projects</span></h2>
<div class="w-20 h-1 bg-gradient-to-r from-indigo-500 to-purple-500 mx-auto"></div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Project 1 -->
<div class="bg-gray-800 bg-opacity-50 rounded-xl overflow-hidden border border-gray-700 card-hover">
<div class="relative overflow-hidden h-48">
<img src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Project 1" class="w-full h-full object-cover transition-transform duration-500 hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent opacity-70"></div>
<div class="absolute bottom-4 left-4">
<span class="bg-indigo-500 text-white text-xs px-2 py-1 rounded">React</span>
<span class="bg-purple-500 text-white text-xs px-2 py-1 rounded ml-2">Node.js</span>
</div>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold mb-2">E-commerce Platform</h3>
<p class="text-gray-300 mb-4">A full-featured online store with payment integration and admin dashboard.</p>
<div class="flex justify-between items-center">
<a href="#" class="text-indigo-400 hover:text-indigo-300 transition flex items-center">
View Project <i class="fas fa-arrow-right ml-2"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i class="fab fa-github"></i>
</a>
</div>
</div>
</div>
<!-- Project 2 -->
<div class="bg-gray-800 bg-opacity-50 rounded-xl overflow-hidden border border-gray-700 card-hover">
<div class="relative overflow-hidden h-48">
<img src="https://images.unsplash.com/photo-1467232004584-a241de8bcf5d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1169&q=80" alt="Project 2" class="w-full h-full object-cover transition-transform duration-500 hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent opacity-70"></div>
<div class="absolute bottom-4 left-4">
<span class="bg-indigo-500 text-white text-xs px-2 py-1 rounded">React</span>
<span class="bg-purple-500 text-white text-xs px-2 py-1 rounded ml-2">Firebase</span>
</div>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold mb-2">Social Media App</h3>
<p class="text-gray-300 mb-4">A modern social platform with real-time updates and media sharing.</p>
<div class="flex justify-between items-center">
<a href="#" class="text-indigo-400 hover:text-indigo-300 transition flex items-center">
View Project <i class="fas fa-arrow-right ml-2"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i class="fab fa-github"></i>
</a>
</div>
</div>
</div>
<!-- Project 3 -->
<div class="bg-gray-800 bg-opacity-50 rounded-xl overflow-hidden border border-gray-700 card-hover">
<div class="relative overflow-hidden h-48">
<img src="https://images.unsplash.com/photo-1555421689-3f034debb7a6?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Project 3" class="w-full h-full object-cover transition-transform duration-500 hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent opacity-70"></div>
<div class="absolute bottom-4 left-4">
<span class="bg-indigo-500 text-white text-xs px-2 py-1 rounded">Vue.js</span>
<span class="bg-purple-500 text-white text-xs px-2 py-1 rounded ml-2">Laravel</span>
</div>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold mb-2">Task Management Tool</h3>
<p class="text-gray-300 mb-4">A collaborative workspace to organize projects and tasks with your team.</p>
<div class="flex justify-between items-center">
<a href="#" class="text-indigo-400 hover:text-indigo-300 transition flex items-center">
View Project <i class="fas fa-arrow-right ml-2"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i class="fab fa-github"></i>
</a>
</div>
</div>
</div>
</div>
<div class="text-center mt-12">
<a href="#" class="px-6 py-3 bg-gradient-to-r from-indigo-500 to-purple-500 rounded-md font-medium hover:opacity-90 transition transform hover:scale-105 inline-flex items-center">
View All Projects <i class="fas fa-arrow-right ml-2"></i>
</a>
</div>
</div>
</section>
<!-- Experience Section -->
<section id="experience" class="py-20 bg-gray-900 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">My <span class="gradient-text">Experience</span></h2>
<div class="w-20 h-1 bg-gradient-to-r from-indigo-500 to-purple-500 mx-auto"></div>
</div>
<div class="relative pl-8 md:pl-16 timeline">
<!-- Experience 1 -->
<div class="relative pb-12 timeline-item">
<div class="bg-gray-800 bg-opacity-50 border border-gray-700 rounded-lg p-6 card-hover">
<div class="flex flex-col md:flex-row md:justify-between md:items-center mb-4">
<h3 class="text-xl font-semibold">Senior Frontend Developer</h3>
<span class="text-sm bg-indigo-500 bg-opacity-20 text-indigo-400 px-3 py-1 rounded-full">2021 - Present</span>
</div>
<h4 class="text-purple-400 mb-3">Tech Solutions Inc.</h4>
<p class="text-gray-300">Leading the frontend development team, implementing new features, optimizing performance, and mentoring junior developers.</p>
</div>
</div>
<!-- Experience 2 -->
<div class="relative pb-12 timeline-item">
<div class="bg-gray-800 bg-opacity-50 border border-gray-700 rounded-lg p-6 card-hover">
<div class="flex flex-col md:flex-row md:justify-between md:items-center mb-4">
<h3 class="text-xl font-semibold">Frontend Developer</h3>
<span class="text-sm bg-purple-500 bg-opacity-20 text-purple-400 px-3 py-1 rounded-full">2018 - 2021</span>
</div>
<h4 class="text-indigo-400 mb-3">Digital Creations</h4>
<p class="text-gray-300">Developed responsive web applications using React, collaborated with designers to implement UI/UX improvements.</p>
</div>
</div>
<!-- Experience 3 -->
<div class="relative pb-12 timeline-item">
<div class="bg-gray-800 bg-opacity-50 border border-gray-700 rounded-lg p-6 card-hover">
<div class="flex flex-col md:flex-row md:justify-between md:items-center mb-4">
<h3 class="text-xl font-semibold">Junior Web Developer</h3>
<span class="text-sm bg-indigo-500 bg-opacity-20 text-indigo-400 px-3 py-1 rounded-full">2016 - 2018</span>
</div>
<h4 class="text-purple-400 mb-3">Web Studio</h4>
<p class="text-gray-300">Built and maintained websites for clients, learned modern web development practices, and contributed to team projects.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="py-20 relative overflow-hidden">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Get In <span class="gradient-text">Touch</span></h2>
<div class="w-20 h-1 bg-gradient-to-r from-indigo-500 to-purple-500 mx-auto"></div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-12">
<div>
<h3 class="text-2xl font-semibold mb-6">Let's talk about your project</h3>
<p class="text-gray-300 mb-8">I'm interested in freelance opportunities - especially ambitious or large projects. However, if you have other request or question, don't hesitate to contact me.</p>
<div class="space-y-6">
<div class="flex items-start">
<div class="text-indigo-400 text-xl mr-4 mt-1">
<i class="fas fa-map-marker-alt"></i>
</div>
<div>
<h4 class="font-medium mb-1">Location</h4>
<p class="text-gray-300">San Francisco, California</p>
</div>
</div>
<div class="flex items-start">
<div class="text-purple-400 text-xl mr-4 mt-1">
<i class="fas fa-envelope"></i>
</div>
<div>
<h4 class="font-medium mb-1">Email</h4>
<p class="text-gray-300">alex@example.com</p>
</div>
</div>
<div class="flex items-start">
<div class="text-indigo-400 text-xl mr-4 mt-1">
<i class="fas fa-phone-alt"></i>
</div>
<div>
<h4 class="font-medium mb-1">Phone</h4>
<p class="text-gray-300">+1 (555) 123-4567</p>
</div>
</div>
</div>
<div class="mt-8 flex space-x-4">
<a href="#" class="w-10 h-10 rounded-full bg-indigo-500 flex items-center justify-center hover:bg-indigo-600 transition">
<i class="fab fa-twitter"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-purple-500 flex items-center justify-center hover:bg-purple-600 transition">
<i class="fab fa-linkedin-in"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-indigo-500 flex items-center justify-center hover:bg-indigo-600 transition">
<i class="fab fa-github"></i>
</a>
<a href="#" class="w-10 h-10 rounded-full bg-purple-500 flex items-center justify-center hover:bg-purple-600 transition">
<i class="fab fa-dribbble"></i>
</a>
</div>
</div>
<div>
<form class="space-y-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<input type="text" placeholder="Your Name" class="w-full px-4 py-3 rounded-lg contact-input focus:outline-none">
</div>
<div>
<input type="email" placeholder="Your Email" class="w-full px-4 py-3 rounded-lg contact-input focus:outline-none">
</div>
</div>
<div>
<input type="text" placeholder="Subject" class="w-full px-4 py-3 rounded-lg contact-input focus:outline-none">
</div>
<div>
<textarea placeholder="Your Message" rows="5" class="w-full px-4 py-3 rounded-lg contact-input focus:outline-none"></textarea>
</div>
<button type="submit" class="px-6 py-3 bg-gradient-to-r from-indigo-500 to-purple-500 rounded-md font-medium hover:opacity-90 transition w-full">
Send Message <i class="fas fa-paper-plane ml-2"></i>
</button>
</form>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="py-10 bg-gray-900 border-t border-gray-800">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-4 md:mb-0">
<span class="text-2xl font-bold gradient-text">Portfolio</span>
</div>
<div class="text-gray-400 text-sm">
© 2023 Alex Johnson. All rights reserved.
</div>
<div class="mt-4 md:mt-0">
<a href="#home" class="px-4 py-2 bg-indigo-500 bg-opacity-20 text-indigo-400 rounded-md font-medium hover:bg-opacity-30 transition">
<i class="fas fa-arrow-up"></i>
</a>
</div>
</div>
</div>
</footer>
<script>
// Mobile menu toggle
document.getElementById('mobile-menu-button').addEventListener('click', function() {
const menu = document.getElementById('mobile-menu');
menu.classList.toggle('hidden');
});
// Smooth scrolling for navigation links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const targetId = this.getAttribute('href');
const targetElement = document.querySelector(targetId);
if (targetElement) {
window.scrollTo({
top: targetElement.offsetTop - 80,
behavior: 'smooth'
});
// Close mobile menu if open
const mobileMenu = document.getElementById('mobile-menu');
if (!mobileMenu.classList.contains('hidden')) {
mobileMenu.classList.add('hidden');
}
}
});
});
// Animate skill bars on scroll
function animateSkillBars() {
const skillBars = document.querySelectorAll('.skill-progress');
skillBars.forEach(bar => {
const width = bar.getAttribute('data-width');
if (isElementInViewport(bar)) {
bar.style.width = width;
}
});
}
function isElementInViewport(el) {
const rect = el.getBoundingClientRect();
return (
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.bottom >= 0
);
}
window.addEventListener('scroll', animateSkillBars);
window.addEventListener('load', animateSkillBars);
// Custom cursor
const cursorFollower = document.querySelector('.cursor-follower');
const cursorDot = document.querySelector('.cursor-dot');
document.addEventListener('mousemove', (e) => {
cursorFollower.style.left = e.clientX + 'px';
cursorFollower.style.top = e.clientY + 'px';
cursorDot.style.left = e.clientX + 'px';
cursorDot.style.top = e.clientY + 'px';
});
// Add hover effects for cursor
document.querySelectorAll('a, button, .card-hover').forEach(el => {
el.addEventListener('mouseenter', () => {
cursorFollower.style.transform = 'translate(-50%, -50%) scale(2)';
cursorFollower.style.opacity = '0.5';
});
el.addEventListener('mouseleave', () => {
cursorFollower.style.transform = 'translate(-50%, -50%) scale(1)';
cursorFollower.style.opacity = '1';
});
});
// Scroll reveal animation
function scrollReveal() {
const elements = document.querySelectorAll('.card-hover, .timeline-item, form, .flex.items-start');
elements.forEach(el => {
if (isElementInViewport(el)) {
el.style.opacity = '1';
el.style.transform = 'translateY(0)';
}
});
}
// Set initial state for scroll reveal
document.querySelectorAll('.card-hover, .timeline-item, form, .flex.items-start').forEach(el => {
el.style.opacity = '0';
el.style.transform = 'translateY(20px)';
el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
});
window.addEventListener('scroll', scrollReveal);
window.addEventListener('load', scrollReveal);
// Floating blob animation
const blobs = document.querySelectorAll('.blob');
blobs.forEach((blob, index) => {
// Randomize initial position and animation duration
const duration = 15 + Math.random() * 15;
blob.style.animationDuration = `${duration}s`;
if (index === 0) {
blob.style.top = `${-100 + Math.random() * 50}px`;
blob.style.left = `${-100 + Math.random() * 50}px`;
} else {
blob.style.bottom = `${-100 + Math.random() * 50}px`;
blob.style.right = `${-100 + Math.random() * 50}px`;
}
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=freemanjrknox/portfolio" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>