Sakuna commited on
Commit
c5ded71
·
verified ·
1 Parent(s): 01926e2

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
Files changed (4) hide show
  1. components/profile-links.js +70 -0
  2. index.html +22 -8
  3. script.js +26 -0
  4. 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>PixelPerfect Portfolio | Creative Showcase</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
  </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">Alex</span></h1>
25
- <h2 class="text-xl md:text-2xl text-gray-600 dark:text-gray-400 mb-6">UI/UX Designer & Frontend Developer</h2>
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
- <div class="max-w-4xl mx-auto">
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 {