Spaces:
Running
Running
Create a simple portfolio website (beautiful) that provides a summary of my self and allow the visitors to download my CV and direct them to my linked in, medium, and google scholar profiles
Browse files- components/profile-links.js +70 -0
- index.html +22 -8
- script.js +26 -0
- style.css +15 -0
components/profile-links.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class ProfileLinks extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.render();
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
render() {
|
| 8 |
+
this.shadowRoot.innerHTML = `
|
| 9 |
+
<style>
|
| 10 |
+
.links-container {
|
| 11 |
+
display: flex;
|
| 12 |
+
flex-wrap: wrap;
|
| 13 |
+
gap: 1rem;
|
| 14 |
+
margin-top: 2rem;
|
| 15 |
+
justify-content: center;
|
| 16 |
+
}
|
| 17 |
+
.profile-link {
|
| 18 |
+
display: flex;
|
| 19 |
+
align-items: center;
|
| 20 |
+
padding: 0.75rem 1.5rem;
|
| 21 |
+
border-radius: 0.5rem;
|
| 22 |
+
text-decoration: none;
|
| 23 |
+
font-weight: 500;
|
| 24 |
+
transition: all 0.3s ease;
|
| 25 |
+
border: 1px solid var(--indigo-600);
|
| 26 |
+
color: var(--indigo-600);
|
| 27 |
+
background: transparent;
|
| 28 |
+
}
|
| 29 |
+
.profile-link:hover {
|
| 30 |
+
background: var(--indigo-600);
|
| 31 |
+
color: white;
|
| 32 |
+
transform: translateY(-2px);
|
| 33 |
+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 34 |
+
}
|
| 35 |
+
.profile-link i {
|
| 36 |
+
margin-right: 0.5rem;
|
| 37 |
+
}
|
| 38 |
+
.dark .profile-link {
|
| 39 |
+
border-color: var(--indigo-400);
|
| 40 |
+
color: var(--indigo-400);
|
| 41 |
+
}
|
| 42 |
+
.dark .profile-link:hover {
|
| 43 |
+
background: var(--indigo-400);
|
| 44 |
+
color: var(--gray-900);
|
| 45 |
+
}
|
| 46 |
+
</style>
|
| 47 |
+
<div class="links-container">
|
| 48 |
+
<a href="#" class="profile-link" id="profile-cv">
|
| 49 |
+
<i data-feather="download"></i> Download CV
|
| 50 |
+
</a>
|
| 51 |
+
<a href="#" class="profile-link" id="profile-linkedin">
|
| 52 |
+
<i data-feather="linkedin"></i> LinkedIn
|
| 53 |
+
</a>
|
| 54 |
+
<a href="#" class="profile-link" id="profile-medium">
|
| 55 |
+
<i data-feather="edit"></i> Medium
|
| 56 |
+
</a>
|
| 57 |
+
<a href="#" class="profile-link" id="profile-scholar">
|
| 58 |
+
<i data-feather="book-open"></i> Scholar
|
| 59 |
+
</a>
|
| 60 |
+
</div>
|
| 61 |
+
`;
|
| 62 |
+
|
| 63 |
+
// Initialize feather icons
|
| 64 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 65 |
+
feather.replace();
|
| 66 |
+
});
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
customElements.define('profile-links', ProfileLinks);
|
index.html
CHANGED
|
@@ -3,14 +3,15 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
-
|
| 8 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
<script src="components/navbar.js"></script>
|
| 12 |
<script src="components/footer.js"></script>
|
| 13 |
<script src="components/project-card.js"></script>
|
|
|
|
| 14 |
</head>
|
| 15 |
<body class="bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-200 transition-colors duration-300">
|
| 16 |
<custom-navbar></custom-navbar>
|
|
@@ -21,17 +22,30 @@
|
|
| 21 |
<div class="w-32 h-32 md:w-40 md:h-40 rounded-full overflow-hidden border-4 border-indigo-500 mb-6">
|
| 22 |
<img src="http://static.photos/people/320x240/42" alt="Profile" class="w-full h-full object-cover">
|
| 23 |
</div>
|
| 24 |
-
<h1 class="text-4xl md:text-5xl font-bold mb-4">Hi, I'm <span class="text-indigo-600 dark:text-indigo-400">
|
| 25 |
-
<h2 class="text-xl md:text-2xl text-gray-600 dark:text-gray-400 mb-6">
|
| 26 |
-
<div class="flex gap-4">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
<a href="#work" class="px-6 py-3 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition">View My Work</a>
|
| 28 |
<a href="#contact" class="px-6 py-3 border border-indigo-600 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-50 dark:hover:bg-gray-800 transition">Contact Me</a>
|
| 29 |
</div>
|
| 30 |
</section>
|
| 31 |
-
|
| 32 |
<!-- About Section -->
|
| 33 |
-
<section id="about" class="py-12 md:py-20">
|
| 34 |
-
|
| 35 |
<h2 class="text-3xl font-bold mb-8 text-center">About Me</h2>
|
| 36 |
<div class="grid md:grid-cols-2 gap-8 items-center">
|
| 37 |
<div>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Professional Portfolio | CV & Profiles</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
<script src="components/navbar.js"></script>
|
| 12 |
<script src="components/footer.js"></script>
|
| 13 |
<script src="components/project-card.js"></script>
|
| 14 |
+
<script src="components/profile-links.js"></script>
|
| 15 |
</head>
|
| 16 |
<body class="bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-200 transition-colors duration-300">
|
| 17 |
<custom-navbar></custom-navbar>
|
|
|
|
| 22 |
<div class="w-32 h-32 md:w-40 md:h-40 rounded-full overflow-hidden border-4 border-indigo-500 mb-6">
|
| 23 |
<img src="http://static.photos/people/320x240/42" alt="Profile" class="w-full h-full object-cover">
|
| 24 |
</div>
|
| 25 |
+
<h1 class="text-4xl md:text-5xl font-bold mb-4">Hi, I'm <span class="text-indigo-600 dark:text-indigo-400" id="userName">[Your Name]</span></h1>
|
| 26 |
+
<h2 class="text-xl md:text-2xl text-gray-600 dark:text-gray-400 mb-6" id="userTitle">[Your Profession]</h2>
|
| 27 |
+
<div class="flex flex-wrap justify-center gap-4">
|
| 28 |
+
<a href="#" id="cvDownload" class="px-6 py-3 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition flex items-center">
|
| 29 |
+
<i data-feather="download" class="mr-2"></i> Download CV
|
| 30 |
+
</a>
|
| 31 |
+
<a href="#" id="linkedinLink" class="px-6 py-3 border border-indigo-600 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-50 dark:hover:bg-gray-800 transition flex items-center">
|
| 32 |
+
<i data-feather="linkedin" class="mr-2"></i> LinkedIn
|
| 33 |
+
</a>
|
| 34 |
+
<a href="#" id="mediumLink" class="px-6 py-3 border border-indigo-600 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-50 dark:hover:bg-gray-800 transition flex items-center">
|
| 35 |
+
<i data-feather="edit" class="mr-2"></i> Medium
|
| 36 |
+
</a>
|
| 37 |
+
<a href="#" id="scholarLink" class="px-6 py-3 border border-indigo-600 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-50 dark:hover:bg-gray-800 transition flex items-center">
|
| 38 |
+
<i data-feather="book-open" class="mr-2"></i> Scholar
|
| 39 |
+
</a>
|
| 40 |
+
</div>
|
| 41 |
+
<div class="flex gap-4">
|
| 42 |
<a href="#work" class="px-6 py-3 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition">View My Work</a>
|
| 43 |
<a href="#contact" class="px-6 py-3 border border-indigo-600 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-50 dark:hover:bg-gray-800 transition">Contact Me</a>
|
| 44 |
</div>
|
| 45 |
</section>
|
|
|
|
| 46 |
<!-- About Section -->
|
| 47 |
+
<section id="about" class="py-12 md:py-20" data-aos="fade-up">
|
| 48 |
+
<div class="max-w-4xl mx-auto">
|
| 49 |
<h2 class="text-3xl font-bold mb-8 text-center">About Me</h2>
|
| 50 |
<div class="grid md:grid-cols-2 gap-8 items-center">
|
| 51 |
<div>
|
script.js
CHANGED
|
@@ -1,4 +1,30 @@
|
|
| 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
// Intersection Observer for section animations
|
| 3 |
const observer = new IntersectionObserver((entries) => {
|
| 4 |
entries.forEach(entry => {
|
|
|
|
| 1 |
|
| 2 |
+
// User profile data - replace with your actual information
|
| 3 |
+
const userData = {
|
| 4 |
+
name: "Your Name",
|
| 5 |
+
title: "Your Profession",
|
| 6 |
+
cvUrl: "#", // Replace with your CV download link
|
| 7 |
+
linkedin: "#", // Replace with your LinkedIn profile URL
|
| 8 |
+
medium: "#", // Replace with your Medium profile URL
|
| 9 |
+
scholar: "#" // Replace with your Google Scholar profile URL
|
| 10 |
+
};
|
| 11 |
+
|
| 12 |
+
// Set user data on page load
|
| 13 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 14 |
+
document.getElementById('userName').textContent = userData.name;
|
| 15 |
+
document.getElementById('userTitle').textContent = userData.title;
|
| 16 |
+
|
| 17 |
+
const cvDownload = document.getElementById('cvDownload');
|
| 18 |
+
const linkedinLink = document.getElementById('linkedinLink');
|
| 19 |
+
const mediumLink = document.getElementById('mediumLink');
|
| 20 |
+
const scholarLink = document.getElementById('scholarLink');
|
| 21 |
+
|
| 22 |
+
if (cvDownload) cvDownload.href = userData.cvUrl;
|
| 23 |
+
if (linkedinLink) linkedinLink.href = userData.linkedin;
|
| 24 |
+
if (mediumLink) mediumLink.href = userData.medium;
|
| 25 |
+
if (scholarLink) scholarLink.href = userData.scholar;
|
| 26 |
+
});
|
| 27 |
+
|
| 28 |
// Intersection Observer for section animations
|
| 29 |
const observer = new IntersectionObserver((entries) => {
|
| 30 |
entries.forEach(entry => {
|
style.css
CHANGED
|
@@ -39,6 +39,21 @@ html {
|
|
| 39 |
.dark ::-webkit-scrollbar-thumb:hover {
|
| 40 |
background: #666;
|
| 41 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
|
| 43 |
/* Animation for sections */
|
| 44 |
section {
|
|
|
|
| 39 |
.dark ::-webkit-scrollbar-thumb:hover {
|
| 40 |
background: #666;
|
| 41 |
}
|
| 42 |
+
/* Profile links styling */
|
| 43 |
+
.profile-link {
|
| 44 |
+
transition: all 0.3s ease;
|
| 45 |
+
min-width: 150px;
|
| 46 |
+
justify-content: center;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
.profile-link:hover {
|
| 50 |
+
transform: translateY(-2px);
|
| 51 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
.dark .profile-link:hover {
|
| 55 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
|
| 56 |
+
}
|
| 57 |
|
| 58 |
/* Animation for sections */
|
| 59 |
section {
|