YUSAKRU commited on
Commit
32cb5a1
·
verified ·
1 Parent(s): bcb594b

Design an ultra-creative developer portfolio that looks like it belongs in a top design agency: LAYOUT CONCEPT: - Break traditional web conventions with asymmetric grid system - Overlapping sections using CSS Grid and absolute positioning - Diagonal cuts between sections using clip-path CSS - Geometric shapes as visual separators (triangles, circles, hexagons) - Content containers at various angles for dynamic visual interest VISUAL DESIGN: - Bold color palette: #ff6b6b (coral), #4ecdc4 (teal), #45b7d1 (blue), #96ceb4 (mint) - Typography mix: Playfair Display (serif) for large headings, Inter (sans) for body - High-contrast black and white photography with color overlays - Custom illustrated icons and hand-drawn elements - Duotone image effects using the brand color palette HERO SECTION: - Split diagonal layout: large portrait photo on left (60%), animated text on right (40%) - Photo: black and white with coral color overlay on hover - Text animations: glitch effects on name, color-changing job title, kinetic typography - Background: animated geometric shapes floating and rotating slowly - Interactive elements: mouse movement affects shape positions PROJECT SHOWCASE: - Masonry layout (Pinterest-style) with varying card heights - Projects as polaroid-style cards with drop shadows and slight rotations (-5° to +5°) - Handwritten fonts for project titles (Caveat or similar) - Each card: project image, handwritten title, tech stack as sketched icons - Hover effects: cards straighten and lift with 3D transforms - Click interaction: expand to full-screen overlay with project details - Categories: Web Design, Brand Identity, Digital Art, Code Experiments INTERACTIONS: - Parallax scrolling: background elements move at different speeds - Custom animated cursor: changes size and color based on hover targets - Smooth page transitions between sections using GSAP or similar - Micro-interactions: buttons squish on click, links underline on hover - Scroll-triggered animations: elements slide in from different directions CREATIVE ELEMENTS: - Hand-drawn doodles as navigation arrows and bullet points - Animated SVG illustrations that react to mouse proximity - Background: subtle video loop or animated gradient patterns - Custom loading screen with brand animation (geometric shapes forming logo) - Interactive "easter eggs" hidden throughout the site ABOUT SECTION: - Comic book style layout with speech bubbles for personal story - Illustrated timeline showing career progression as a visual journey - Interactive skill meters designed as hand-drawn progress bars - Personal photos in polaroid frames scattered around the content - "Fun facts" section with playful icons and animations CONTACT SECTION: - Creative form design: labels as handwritten notes, inputs as sketch boxes - Animated send button that transforms into a paper airplane - Contact info displayed as business card design with letterpress effect - Social media links as hand-drawn social icons with hover animations - Background: animated constellation connecting contact methods DESIGN DETAILS: - Torn paper edges between sections - Watercolor brush stroke backgrounds for text sections - Vintage postage stamp elements for project categories - Hand-lettered quotes and testimonials throughout - Grunge textures and distressed elements for artistic flair This should feel more like an interactive art installation than a traditional website! - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +971 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Save 1
3
- emoji: 🌖
4
- colorFrom: red
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: save-1
3
+ emoji: 🐳
4
+ colorFrom: yellow
5
+ colorTo: green
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,971 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Alex Morgan | Full-Stack Developer Portfolio</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;700&display=swap" rel="stylesheet">
12
+ <style>
13
+ :root {
14
+ --primary: #667eea;
15
+ --secondary: #764ba2;
16
+ --accent: #f093fb;
17
+ }
18
+
19
+ * {
20
+ margin: 0;
21
+ padding: 0;
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ body {
26
+ font-family: 'Inter', sans-serif;
27
+ scroll-behavior: smooth;
28
+ background-color: #f9fafb;
29
+ color: #1f2937;
30
+ }
31
+
32
+ /* Hero Section Styling */
33
+ .hero {
34
+ height: 100vh;
35
+ background: linear-gradient(to right, #667eea, #764ba2);
36
+ position: relative;
37
+ overflow: hidden;
38
+ }
39
+
40
+ .hero::before {
41
+ content: '';
42
+ position: absolute;
43
+ top: 0;
44
+ left: 0;
45
+ width: 100%;
46
+ height: 100%;
47
+ background: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%23ffffff' fill-opacity='0.1' fill-rule='evenodd'/%3E%3C/svg%3E");
48
+ animation: float 15s infinite linear;
49
+ opacity: 0.4;
50
+ }
51
+
52
+ .code-snippet {
53
+ position: absolute;
54
+ background: rgba(255, 255, 255, 0.1);
55
+ backdrop-filter: blur(10px);
56
+ padding: 10px 15px;
57
+ border-radius: 6px;
58
+ font-family: monospace;
59
+ font-size: 14px;
60
+ color: white;
61
+ opacity: 0.7;
62
+ animation: floatCode 20s infinite linear;
63
+ }
64
+
65
+ .typing-container {
66
+ min-height: 90px;
67
+ }
68
+
69
+ .typing-text {
70
+ font-size: 2.5rem;
71
+ font-weight: 500;
72
+ color: white;
73
+ border-right: 3px solid white;
74
+ animation: blink 0.7s infinite ease;
75
+ padding-right: 5px;
76
+ }
77
+
78
+ /* Navigation */
79
+ .nav-header {
80
+ backdrop-filter: blur(10px);
81
+ background: rgba(255, 255, 255, 0.85);
82
+ transition: all 0.3s ease;
83
+ }
84
+
85
+ .nav-header.scrolled {
86
+ background: rgba(255, 255, 255, 0.95);
87
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
88
+ }
89
+
90
+ .mobile-menu {
91
+ transform: translateX(100%);
92
+ transition: transform 0.3s ease-out;
93
+ }
94
+
95
+ .mobile-menu.active {
96
+ transform: translateX(0);
97
+ }
98
+
99
+ /* Cards */
100
+ .project-card {
101
+ transition: all 0.3s ease;
102
+ border: 1px solid rgba(229, 231, 235, 0.8);
103
+ }
104
+
105
+ .project-card:hover {
106
+ transform: translateY(-8px);
107
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
108
+ border-color: var(--primary);
109
+ }
110
+
111
+ .project-image {
112
+ overflow: hidden;
113
+ border-radius: 12px 12px 0 0;
114
+ }
115
+
116
+ .project-image img {
117
+ transition: transform 0.4s ease;
118
+ }
119
+
120
+ .project-card:hover .project-image img {
121
+ transform: scale(1.05);
122
+ }
123
+
124
+ .tech-badge {
125
+ background-color: rgba(246, 246, 247, 0.8);
126
+ padding: 4px 12px;
127
+ border-radius: 20px;
128
+ font-size: 12px;
129
+ font-weight: 500;
130
+ display: inline-flex;
131
+ align-items: center;
132
+ gap: 6px;
133
+ }
134
+
135
+ /* Skills Section */
136
+ .skill-bar {
137
+ height: 8px;
138
+ border-radius: 4px;
139
+ background-color: #e5e7eb;
140
+ position: relative;
141
+ overflow: hidden;
142
+ }
143
+
144
+ .skill-progress {
145
+ position: absolute;
146
+ top: 0;
147
+ left: 0;
148
+ height: 100%;
149
+ border-radius: 4px;
150
+ transition: width 1.5s cubic-bezier(0.22, 0.61, 0.36, 1);
151
+ }
152
+
153
+ .skill-card:hover {
154
+ transform: translateY(-5px);
155
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
156
+ }
157
+
158
+ /* Timeline */
159
+ .timeline {
160
+ position: relative;
161
+ }
162
+
163
+ .timeline::before {
164
+ content: '';
165
+ position: absolute;
166
+ top: 0;
167
+ left: 50%;
168
+ transform: translateX(-50%);
169
+ height: 100%;
170
+ width: 4px;
171
+ background: linear-gradient(to bottom, #667eea, #764ba2);
172
+ border-radius: 2px;
173
+ }
174
+
175
+ .timeline-item {
176
+ position: relative;
177
+ width: 50%;
178
+ padding-left: 50px;
179
+ }
180
+
181
+ .timeline-item:nth-child(odd) {
182
+ left: 0;
183
+ }
184
+
185
+ .timeline-item:nth-child(even) {
186
+ left: 50%;
187
+ padding-left: 0;
188
+ padding-right: 50px;
189
+ }
190
+
191
+ .timeline-item::before {
192
+ content: '';
193
+ position: absolute;
194
+ top: 30px;
195
+ width: 20px;
196
+ height: 20px;
197
+ border-radius: 50%;
198
+ background-color: var(--primary);
199
+ border: 4px solid white;
200
+ box-shadow: 0 0 0 2px var(--primary);
201
+ }
202
+
203
+ .timeline-item:nth-child(odd)::before {
204
+ right: -10px;
205
+ }
206
+
207
+ .timeline-item:nth-child(even)::before {
208
+ left: -10px;
209
+ }
210
+
211
+ .timeline-content {
212
+ transition: all 0.3s ease;
213
+ }
214
+
215
+ .timeline-content:hover {
216
+ transform: translateY(-5px);
217
+ box-shadow: 0 10px 25px -5px rgba(102, 126, 234, 0.15);
218
+ }
219
+
220
+ /* Contact Form */
221
+ .contact-section {
222
+ background: linear-gradient(to right, rgba(102, 126, 234, 0.03), rgba(118, 75, 162, 0.03));
223
+ }
224
+
225
+ .contact-input {
226
+ transition: all 0.2s ease;
227
+ border: 1px solid #e5e7eb;
228
+ }
229
+
230
+ .contact-input:focus {
231
+ border-color: var(--primary);
232
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
233
+ }
234
+
235
+ .contact-photo {
236
+ border-radius: 20px;
237
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
238
+ }
239
+
240
+ .social-link {
241
+ transition: all 0.2s ease;
242
+ }
243
+
244
+ .social-link:hover {
245
+ transform: translateY(-3px);
246
+ color: var(--primary);
247
+ }
248
+
249
+ /* Footer */
250
+ footer {
251
+ background: linear-gradient(to right, #667eea, #764ba2);
252
+ }
253
+
254
+ /* Animations */
255
+ @keyframes float {
256
+ 0% {
257
+ transform: translate(0, 0);
258
+ }
259
+ 50% {
260
+ transform: translate(10px, 10px);
261
+ }
262
+ 100% {
263
+ transform: translate(0, 0);
264
+ }
265
+ }
266
+
267
+ @keyframes floatCode {
268
+ 0% {
269
+ transform: translate(0, 0) rotate(0deg);
270
+ }
271
+ 25% {
272
+ transform: translate(20px, 40px) rotate(5deg);
273
+ }
274
+ 50% {
275
+ transform: translate(40px, 80px) rotate(0deg);
276
+ }
277
+ 75% {
278
+ transform: translate(20px, 120px) rotate(-5deg);
279
+ }
280
+ 100% {
281
+ transform: translate(0, 160px) rotate(0deg);
282
+ }
283
+ }
284
+
285
+ @keyframes blink {
286
+ from, to { border-color: transparent }
287
+ 50% { border-color: white; }
288
+ }
289
+
290
+ .fade-in {
291
+ opacity: 0;
292
+ transform: translateY(20px);
293
+ transition: opacity 0.6s ease-out, transform 0.6s ease-out;
294
+ }
295
+
296
+ .fade-in.appear {
297
+ opacity: 1;
298
+ transform: translateY(0);
299
+ }
300
+
301
+ /* Responsive adjustments */
302
+ @media (max-width: 1024px) {
303
+ .timeline::before {
304
+ left: 30px;
305
+ }
306
+
307
+ .timeline-item {
308
+ width: 100%;
309
+ margin-bottom: 30px;
310
+ padding-left: 70px;
311
+ }
312
+
313
+ .timeline-item:nth-child(even) {
314
+ left: 0;
315
+ padding-right: 0;
316
+ }
317
+
318
+ .timeline-item:nth-child(odd)::before,
319
+ .timeline-item:nth-child(even)::before {
320
+ left: 20px;
321
+ }
322
+ }
323
+
324
+ @media (max-width: 768px) {
325
+ .hero-heading {
326
+ font-size: 2.5rem;
327
+ }
328
+
329
+ .typing-text {
330
+ font-size: 1.5rem;
331
+ }
332
+
333
+ .typing-container {
334
+ min-height: 60px;
335
+ }
336
+
337
+ .contact-wrapper {
338
+ flex-direction: column;
339
+ }
340
+
341
+ .contact-form, .contact-info {
342
+ width: 100% !important;
343
+ }
344
+ }
345
+ </style>
346
+ </head>
347
+ <body>
348
+ <!-- Navigation -->
349
+ <header class="nav-header fixed top-0 left-0 w-full z-50 py-4">
350
+ <div class="container mx-auto px-6 flex justify-between items-center">
351
+ <a href="#" class="text-2xl font-bold text-gray-900">AlexMorgan.dev</a>
352
+
353
+ <nav class="hidden md:flex space-x-10">
354
+ <a href="#about" class="text-gray-600 hover:text-primary font-medium nav-link">About</a>
355
+ <a href="#projects" class="text-gray-600 hover:text-primary font-medium nav-link">Projects</a>
356
+ <a href="#skills" class="text-gray-600 hover:text-primary font-medium nav-link">Skills</a>
357
+ <a href="#experience" class="text-gray-600 hover:text-primary font-medium nav-link">Experience</a>
358
+ <a href="#contact" class="text-gray-600 hover:text-primary font-medium nav-link">Contact</a>
359
+ </nav>
360
+
361
+ <button id="mobile-menu-btn" class="md:hidden text-gray-700">
362
+ <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
363
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
364
+ </svg>
365
+ </button>
366
+ </div>
367
+ </header>
368
+
369
+ <!-- Mobile Navigation -->
370
+ <div id="mobile-menu" class="mobile-menu fixed top-0 right-0 h-full w-64 bg-white shadow-xl z-50 p-6">
371
+ <div class="flex justify-end">
372
+ <button id="close-menu" class="text-gray-700">
373
+ <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
374
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
375
+ </svg>
376
+ </button>
377
+ </div>
378
+
379
+ <nav class="mt-10 flex flex-col space-y-6">
380
+ <a href="#about" class="text-gray-800 hover:text-primary font-medium nav-link">About</a>
381
+ <a href="#projects" class="text-gray-800 hover:text-primary font-link">Projects</a>
382
+ <a href="#skills" class="text-gray-800 hover:text-primary font-link">Skills</a>
383
+ <a href="#experience" class="text-gray-800 hover:text-primary font-link">Experience</a>
384
+ <a href="#contact" class="text-gray-800 hover:text-primary font-link">Contact</a>
385
+ </nav>
386
+ </div>
387
+
388
+ <!-- Hero Section -->
389
+ <section class="hero relative flex items-center justify-center overflow-hidden">
390
+ <!-- Floating code snippets -->
391
+ <div class="code-snippet" style="top: 15%; left: 5%;">const project = new SaaS();</div>
392
+ <div class="code-snippet" style="top: 25%; right: 10%;">function innovate() { return true; }</div>
393
+ <div class="code-snippet" style="top: 45%; left: 12%;">import { scalability } from 'cloud-solutions';</div>
394
+ <div class="code-snippet" style="top: 65%; right: 7%;">while (code) { optimize(); }</div>
395
+ <div class="code-snippet" style="top: 75%; left: 8%;">export default efficiency;</div>
396
+
397
+ <div class="container mx-auto px-6 relative z-10">
398
+ <div class="max-w-3xl mx-auto text-center">
399
+ <h1 class="hero-heading text-5xl md:text-6xl font-bold text-white mb-6">
400
+ Full-Stack Developer
401
+ </h1>
402
+
403
+ <div class="typing-container mb-10">
404
+ <span class="typing-text" id="typing-text">React Expert</span>
405
+ </div>
406
+
407
+ <div class="flex flex-col sm:flex-row justify-center gap-4">
408
+ <a href="#projects" class="bg-white text-primary px-8 py-4 rounded-lg font-semibold text-lg shadow-lg hover:bg-gray-100 transition duration-300 transform hover:-translate-y-1">
409
+ View My Work
410
+ </a>
411
+ <a href="#" class="bg-transparent border-2 border-white text-white px-8 py-4 rounded-lg font-semibold text-lg hover:bg-white hover:text-primary transition duration-300 transform hover:-translate-y-1">
412
+ Download Resume
413
+ </a>
414
+ </div>
415
+ </div>
416
+ </div>
417
+ </section>
418
+
419
+ <!-- Projects Section -->
420
+ <section id="projects" class="py-24 bg-gray-50">
421
+ <div class="container mx-auto px-6">
422
+ <h2 class="text-4xl font-bold text-center mb-16">Featured Projects</h2>
423
+
424
+ <div class="flex flex-wrap justify-center gap-3 mb-12">
425
+ <button class="bg-primary text-white px-5 py-2 rounded-lg font-medium">All</button>
426
+ <button class="bg-gray-200 text-gray-700 px-5 py-2 rounded-lg font-medium hover:bg-gray-300">React</button>
427
+ <button class="bg-gray-200 text-gray-700 px-5 py-2 rounded-lg font-medium hover:bg-gray-300">Node.js</button>
428
+ <button class="bg-gray-200 text-gray-700 px-5 py-2 rounded-lg font-medium hover:bg-gray-300">Python</button>
429
+ <button class="bg-gray-200 text-gray-700 px-5 py-2 rounded-lg font-medium hover:bg-gray-300">Full-Stack</button>
430
+ </div>
431
+
432
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
433
+ <!-- Project 1 -->
434
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
435
+ <div class="project-image">
436
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
437
+ </div>
438
+ <div class="p-6">
439
+ <h3 class="text-xl font-bold mb-2">SaaS Analytics Dashboard</h3>
440
+ <p class="text-gray-600 mb-4">Interactive dashboard for tracking business metrics with real-time data visualization.</p>
441
+
442
+ <div class="flex flex-wrap gap-2 mb-5">
443
+ <span class="tech-badge">React</span>
444
+ <span class="tech-badge">D3.js</span>
445
+ <span class="tech-badge">Node.js</span>
446
+ <span class="tech-badge">MongoDB</span>
447
+ </div>
448
+
449
+ <div class="flex gap-3">
450
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
451
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
452
+ </div>
453
+ </div>
454
+ </div>
455
+
456
+ <!-- Project 2 -->
457
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
458
+ <div class="project-image">
459
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
460
+ </div>
461
+ <div class="p-6">
462
+ <h3 class="text-xl font-bold mb-2">E-Commerce API Platform</h3>
463
+ <p class="text-gray-600 mb-4">Scalable e-commerce backend with payment processing and inventory management.</p>
464
+
465
+ <div class="flex flex-wrap gap-2 mb-5">
466
+ <span class="tech-badge">Node.js</span>
467
+ <span class="tech-badge">Express</span>
468
+ <span class="tech-badge">PostgreSQL</span>
469
+ <span class="tech-badge">Stripe API</span>
470
+ </div>
471
+
472
+ <div class="flex gap-3">
473
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
474
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
475
+ </div>
476
+ </div>
477
+ </div>
478
+
479
+ <!-- Project 3 -->
480
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
481
+ <div class="project-image">
482
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
483
+ </div>
484
+ <div class="p-6">
485
+ <h3 class="text-xl font-bold mb-2">AI Content Generator</h3>
486
+ <p class="text-gray-600 mb-4">GPT-3 powered content creation tool with customizable templates and outputs.</p>
487
+
488
+ <div class="flex flex-wrap gap-2 mb-5">
489
+ <span class="tech-badge">Python</span>
490
+ <span class="tech-badge">Django</span>
491
+ <span class="tech-badge">React</span>
492
+ <span class="tech-badge">OpenAI API</span>
493
+ </div>
494
+
495
+ <div class="flex gap-3">
496
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
497
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
498
+ </div>
499
+ </div>
500
+ </div>
501
+
502
+ <!-- Project 4 -->
503
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
504
+ <div class="project-image">
505
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
506
+ </div>
507
+ <div class="p-6">
508
+ <h3 class="text-xl font-bold mb-2">Cloud File Storage</h3>
509
+ <p class="text-gray-600 mb-4">Secure cloud storage solution with end-to-end encryption and file sharing.</p>
510
+
511
+ <div class="flex flex-wrap gap-2 mb-5">
512
+ <span class="tech-badge">AWS S3</span>
513
+ <span class="tech-badge">React</span>
514
+ <span class="tech-badge">Node.js</span>
515
+ <span class="tech-badge">MongoDB</span>
516
+ </div>
517
+
518
+ <div class="flex gap-3">
519
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
520
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
521
+ </div>
522
+ </div>
523
+ </div>
524
+
525
+ <!-- Project 5 -->
526
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
527
+ <div class="project-image">
528
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
529
+ </div>
530
+ <div class="p-6">
531
+ <h3 class="text-xl font-bold mb-2">Blockchain Explorer</h3>
532
+ <p class="text-gray-600 mb-4">Real-time visualization and analytics for blockchain transactions and networks.</p>
533
+
534
+ <div class="flex flex-wrap gap-2 mb-5">
535
+ <span class="tech-badge">Ethereum</span>
536
+ <span class="tech-badge">Web3.js</span>
537
+ <span class="tech-badge">React</span>
538
+ <span class="tech-badge">GraphQL</span>
539
+ </div>
540
+
541
+ <div class="flex gap-3">
542
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
543
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
544
+ </div>
545
+ </div>
546
+ </div>
547
+
548
+ <!-- Project 6 -->
549
+ <div class="project-card fade-in bg-white rounded-xl overflow-hidden">
550
+ <div class="project-image">
551
+ <div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-48"></div>
552
+ </div>
553
+ <div class="p-6">
554
+ <h3 class="text-xl font-bold mb-2">IoT Monitoring System</h3>
555
+ <p class="text-gray-600 mb-4">Real-time monitoring dashboard for IoT devices with alerting and analytics.</p>
556
+
557
+ <div class="flex flex-wrap gap-2 mb-5">
558
+ <span class="tech-badge">Python</span>
559
+ <span class="tech-badge">AWS IoT</span>
560
+ <span class="tech-badge">React</span>
561
+ <span class="tech-badge">MQTT</span>
562
+ </div>
563
+
564
+ <div class="flex gap-3">
565
+ <a href="#" class="flex-1 bg-primary text-white text-center py-2 rounded-lg font-medium hover:bg-blue-700 transition">Live Demo</a>
566
+ <a href="#" class="flex-1 bg-gray-100 text-gray-800 text-center py-2 rounded-lg font-medium hover:bg-gray-200 transition">GitHub</a>
567
+ </div>
568
+ </div>
569
+ </div>
570
+ </div>
571
+ </div>
572
+ </section>
573
+
574
+ <!-- Skills Section -->
575
+ <section id="skills" class="py-24 bg-white">
576
+ <div class="container mx-auto px-6">
577
+ <h2 class="text-4xl font-bold text-center mb-16">Technical Expertise</h2>
578
+
579
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8">
580
+ <!-- Skill 1 -->
581
+ <div class="skill-card fade-in bg-white rounded-xl p-6 border border-gray-100 shadow-sm transition">
582
+ <div class="flex items-center gap-4 mb-4">
583
+ <div class="w-12 h-12 rounded-lg bg-blue-100 flex items-center justify-center">
584
+ <i class="fab fa-react text-blue-500 text-2xl"></i>
585
+ </div>
586
+ <div>
587
+ <h3 class="font-bold text-lg">React</h3>
588
+ <p class="text-gray-500 text-sm">4 years experience</p>
589
+ </div>
590
+ </div>
591
+
592
+ <div class="mt-4">
593
+ <div class="flex justify-between mb-1">
594
+ <span class="text-sm font-medium">Advanced</span>
595
+ <span class="text-sm">95%</span>
596
+ </div>
597
+ <div class="skill-bar">
598
+ <div class="skill-progress bg-blue-500 w-0"></div>
599
+ </div>
600
+ </div>
601
+ </div>
602
+
603
+ <!-- Skill 2 -->
604
+ <div class="skill-card fade-in bg-white rounded-xl p-6 border border-gray-100 shadow-sm transition">
605
+ <div class="flex items-center gap-4 mb-4">
606
+ <div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center">
607
+ <i class="fab fa-node-js text-green-500 text-2xl"></i>
608
+ </div>
609
+ <div>
610
+ <h3 class="font-bold text-lg">Node.js</h3>
611
+ <p class="text-gray-500 text-sm">3 years experience</p>
612
+ </div>
613
+ </div>
614
+
615
+ <div class="mt-4">
616
+ <div class="flex justify-between mb-1">
617
+ <span class="text-sm font-medium">Expert</span>
618
+ <span class="text-sm">90%</span>
619
+ </div>
620
+ <div class="skill-bar">
621
+ <div class="skill-progress bg-green-500 w-0"></div>
622
+ </div>
623
+ </div>
624
+ </div>
625
+
626
+ <!-- Skill 3 -->
627
+ <div class="skill-card fade-in bg-white rounded-xl p-6 border border-gray-100 shadow-sm transition">
628
+ <div class="flex items-center gap-4 mb-4">
629
+ <div class="w-12 h-12 rounded-lg bg-yellow-100 flex items-center justify-center">
630
+ <i class="fab fa-python text-yellow-500 text-2xl"></i>
631
+ </div>
632
+ <div>
633
+ <h3 class="font-bold text-lg">Python</h3>
634
+ <p class="text-gray-500 text-sm">2 years experience</p>
635
+ </div>
636
+ </div>
637
+
638
+ <div class="mt-4">
639
+ <div class="flex justify-between mb-1">
640
+ <span class="text-sm font-medium">Proficient</span>
641
+ <span class="text-sm">85%</span>
642
+ </div>
643
+ <div class="skill-bar">
644
+ <div class="skill-progress bg-yellow-500 w-0"></div>
645
+ </div>
646
+ </div>
647
+ </div>
648
+
649
+ <!-- Skill 4 -->
650
+ <div class="skill-card fade-in bg-white rounded-xl p-6 border border-gray-100 shadow-sm transition">
651
+ <div class="flex items-center gap-4 mb-4">
652
+ <div class="w-12 h-12 rounded-lg bg-orange-100 flex items-center justify-center">
653
+ <i class="fab fa-aws text-orange-500 text-2xl"></i>
654
+ </div>
655
+ <div>
656
+ <h3 class="font-bold text-lg">AWS</h3>
657
+ <p class="text-gray-500 text-sm">3 years experience</p>
658
+ </div>
659
+ </div>
660
+
661
+ <div class="mt-4">
662
+ <div class="flex justify-between mb-1">
663
+ <span class="text-sm font-medium">Advanced</span>
664
+ <span class="text-sm">92%</span>
665
+ </div>
666
+ <div class="skill-bar">
667
+ <div class="skill-progress bg-orange-500 w-0"></div>
668
+ </div>
669
+ </div>
670
+ </div>
671
+ </div>
672
+ </div>
673
+ </section>
674
+
675
+ <!-- Experience Section -->
676
+ <section id="experience" class="py-24 bg-gray-50">
677
+ <div class="container mx-auto px-6">
678
+ <h2 class="text-4xl font-bold text-center mb-16">Professional Journey</h2>
679
+
680
+ <div class="timeline relative">
681
+ <!-- Experience 1 -->
682
+ <div class="timeline-item fade-in mb-16">
683
+ <div class="timeline-content bg-white rounded-xl p-7 shadow-sm border border-gray-100">
684
+ <div class="flex items-start gap-5 mb-4">
685
+ <div class="w-16 h-16 rounded-full bg-gray-200 border-2 border-dashed flex-shrink-0"></div>
686
+ <div>
687
+ <h3 class="font-bold text-xl">Senior Full-Stack Developer</h3>
688
+ <p class="text-primary font-medium">InnovateX, San Francisco</p>
689
+ <p class="text-gray-500 text-sm">Jan 2021 - Present</p>
690
+ </div>
691
+ </div>
692
+
693
+ <ul class="list-disc pl-5 space-y-2 text-gray-600">
694
+ <li>Led development of SaaS platform serving 50k+ monthly active users</li>
695
+ <li>Architected microservices infrastructure reducing server costs by 40%</li>
696
+ <li>Implemented CI/CD pipeline reducing deployment time by 75%</li>
697
+ </ul>
698
+ </div>
699
+ </div>
700
+
701
+ <!-- Experience 2 -->
702
+ <div class="timeline-item fade-in mb-16">
703
+ <div class="timeline-content bg-white rounded-xl p-7 shadow-sm border border-gray-100">
704
+ <div class="flex items-start gap-5 mb-4">
705
+ <div class="w-16 h-16 rounded-full bg-gray-200 border-2 border-dashed flex-shrink-0"></div>
706
+ <div>
707
+ <h3 class="font-bold text-xl">Backend Engineer</h3>
708
+ <p class="text-primary font-medium">TechGrowth Labs, Palo Alto</p>
709
+ <p class="text-gray-500 text-sm">Mar 2019 - Dec 2020</p>
710
+ </div>
711
+ </div>
712
+
713
+ <ul class="list-disc pl-5 space-y-2 text-gray-600">
714
+ <li>Developed RESTful APIs serving 1M+ requests daily</li>
715
+ <li>Optimized database queries reducing response times by 60%</li>
716
+ <li>Implemented real-time data processing with Kafka</li>
717
+ </ul>
718
+ </div>
719
+ </div>
720
+
721
+ <!-- Experience 3 -->
722
+ <div class="timeline-item fade-in mb-16">
723
+ <div class="timeline-content bg-white rounded-xl p-7 shadow-sm border border-gray-100">
724
+ <div class="flex items-start gap-5 mb-4">
725
+ <div class="w-16 h-16 rounded-full bg-gray-200 border-2 border-dashed flex-shrink-0"></div>
726
+ <div>
727
+ <h3 class="font-bold text-xl">Frontend Developer</h3>
728
+ <p class="text-primary font-medium">Digital Solutions Inc., San Jose</p>
729
+ <p class="text-gray-500 text-sm">Jun 2017 - Feb 2019</p>
730
+ </div>
731
+ </div>
732
+
733
+ <ul class="list-disc pl-5 space-y-2 text-gray-600">
734
+ <li>Built responsive UI components using React and Redux</li>
735
+ <li>Improved application performance by 45% through code optimization</li>
736
+ <li>Mentored junior developers in frontend best practices</li>
737
+ </ul>
738
+ </div>
739
+ </div>
740
+ </div>
741
+ </div>
742
+ </section>
743
+
744
+ <!-- Contact Section -->
745
+ <section id="contact" class="contact-section py-24">
746
+ <div class="container mx-auto px-6">
747
+ <h2 class="text-4xl font-bold text-center mb-16">Let's Connect</h2>
748
+
749
+ <div class="contact-wrapper max-w-6xl mx-auto flex gap-12">
750
+ <div class="contact-form fade-in w-[60%]">
751
+ <form class="bg-white rounded-xl p-8 shadow-sm">
752
+ <div class="mb-6">
753
+ <label class="block text-gray-700 mb-2" for="name">Full Name</label>
754
+ <input type="text" id="name" class="contact-input w-full px-4 py-3 rounded-lg border focus:outline-none focus:ring-1">
755
+ </div>
756
+
757
+ <div class="mb-6">
758
+ <label class="block text-gray-700 mb-2" for="email">Email Address</label>
759
+ <input type="email" id="email" class="contact-input w-full px-4 py-3 rounded-lg border focus:outline-none focus:ring-1">
760
+ </div>
761
+
762
+ <div class="mb-6">
763
+ <label class="block text-gray-700 mb-2" for="project">Project Type</label>
764
+ <select id="project" class="contact-input w-full px-4 py-3 rounded-lg border focus:outline-none focus:ring-1">
765
+ <option value="">Select a project type</option>
766
+ <option value="web">Web Development</option>
767
+ <option value="mobile">Mobile App</option>
768
+ <option value="consulting">Consulting</option>
769
+ <option value="other">Other</option>
770
+ </select>
771
+ </div>
772
+
773
+ <div class="mb-6">
774
+ <label class="block text-gray-700 mb-2" for="message">Message</label>
775
+ <textarea id="message" rows="5" class="contact-input w-full px-4 py-3 rounded-lg border focus:outline-none focus:ring-1"></textarea>
776
+ </div>
777
+
778
+ <button type="submit" class="w-full bg-primary text-white py-3 rounded-lg font-semibold text-lg hover:bg-blue-700 transition transform hover:-translate-y-1">
779
+ Send Message
780
+ </button>
781
+ </form>
782
+ </div>
783
+
784
+ <div class="contact-info fade-in w-[40%]">
785
+ <div class="bg-white rounded-xl px-8 py-10 shadow-sm h-full">
786
+ <div class="flex justify-center mb-8">
787
+ <div class="contact-photo w-40 h-40 bg-gray-200 border-2 border-dashed rounded-full"></div>
788
+ </div>
789
+
790
+ <div class="space-y-5">
791
+ <div class="flex items-start gap-4">
792
+ <i class="fas fa-map-marker-alt text-primary mt-1"></i>
793
+ <div>
794
+ <h4 class="font-bold text-gray-900">Location</h4>
795
+ <p class="text-gray-600">San Francisco, California</p>
796
+ </div>
797
+ </div>
798
+
799
+ <div class="flex items-start gap-4">
800
+ <i class="fas fa-envelope text-primary mt-1"></i>
801
+ <div>
802
+ <h4 class="font-bold text-gray-900">Email</h4>
803
+ <p class="text-gray-600">[email protected]</p>
804
+ </div>
805
+ </div>
806
+
807
+ <div class="pt-6">
808
+ <h4 class="font-bold text-gray-900 mb-4">Connect with me</h4>
809
+ <div class="flex gap-4">
810
+ <a href="#" class="social-link text-gray-700 text-xl hover:text-primary">
811
+ <i class="fab fa-linkedin"></i>
812
+ </a>
813
+ <a href="#" class="social-link text-gray-700 text-xl hover:text-primary">
814
+ <i class="fab fa-github"></i>
815
+ </a>
816
+ <a href="#" class="social-link text-gray-700 text-xl hover:text-primary">
817
+ <i class="fab fa-twitter"></i>
818
+ </a>
819
+ <a href="#" class="social-link text-gray-700 text-xl hover:text-primary">
820
+ <i class="fab fa-dev"></i>
821
+ </a>
822
+ </div>
823
+ </div>
824
+ </div>
825
+ </div>
826
+ </div>
827
+ </div>
828
+ </div>
829
+ </section>
830
+
831
+ <!-- Footer -->
832
+ <footer class="py-12 text-white">
833
+ <div class="container mx-auto px-6 text-center">
834
+ <p class="text-xl font-bold mb-4">Alex Morgan</p>
835
+ <p class="opacity-80 mb-8">Full-Stack Developer specializing in modern web technologies and scalable solutions</p>
836
+
837
+ <div class="flex justify-center gap-6 mb-8">
838
+ <a href="#" class="opacity-80 hover:opacity-100"><i class="fab fa-linkedin text-xl"></i></a>
839
+ <a href="#" class="opacity-80 hover:opacity-100"><i class="fab fa-github text-xl"></i></a>
840
+ <a href="#" class="opacity-80 hover:opacity-100"><i class="fab fa-twitter text-xl"></i></a>
841
+ <a href="#" class="opacity-80 hover:opacity-100"><i class="fab fa-dev text-xl"></i></a>
842
+ </div>
843
+
844
+ <p class="opacity-60 text-sm">© 2023 Alex Morgan. All rights reserved.</p>
845
+ </div>
846
+ </footer>
847
+
848
+ <script>
849
+ // Mobile menu toggle
850
+ const mobileMenuBtn = document.getElementById('mobile-menu-btn');
851
+ const closeMenuBtn = document.getElementById('close-menu');
852
+ const mobileMenu = document.getElementById('mobile-menu');
853
+
854
+ mobileMenuBtn.addEventListener('click', () => {
855
+ mobileMenu.classList.add('active');
856
+ });
857
+
858
+ closeMenuBtn.addEventListener('click', () => {
859
+ mobileMenu.classList.remove('active');
860
+ });
861
+
862
+ // Close mobile menu when clicking on a link
863
+ document.querySelectorAll('.mobile-menu a').forEach(link => {
864
+ link.addEventListener('click', () => {
865
+ mobileMenu.classList.remove('active');
866
+ });
867
+ });
868
+
869
+ // Typing effect
870
+ const typingText = document.getElementById('typing-text');
871
+ const texts = ["React Expert", "Node.js Developer", "AWS Specialist"];
872
+ let textIndex = 0;
873
+ let charIndex = 0;
874
+ let isDeleting = false;
875
+ let typingSpeed = 100;
876
+
877
+ function type() {
878
+ const currentText = texts[textIndex];
879
+
880
+ if (isDeleting) {
881
+ // Delete character
882
+ typingText.textContent = currentText.substring(0, charIndex - 1);
883
+ charIndex--;
884
+ typingSpeed = 50;
885
+ } else {
886
+ // Type character
887
+ typingText.textContent = currentText.substring(0, charIndex + 1);
888
+ charIndex++;
889
+ typingSpeed = 150;
890
+ }
891
+
892
+ // Check if text is fully typed or deleted
893
+ if (!isDeleting && charIndex === currentText.length) {
894
+ // Pause at end of typing
895
+ typingSpeed = 2000;
896
+ isDeleting = true;
897
+ } else if (isDeleting && charIndex === 0) {
898
+ // Move to next text after deleting
899
+ isDeleting = false;
900
+ textIndex++;
901
+ if (textIndex === texts.length) {
902
+ textIndex = 0;
903
+ }
904
+ }
905
+
906
+ setTimeout(type, typingSpeed);
907
+ }
908
+
909
+ // Start typing effect
910
+ setTimeout(type, 1000);
911
+
912
+ // Active nav link on scroll
913
+ const sections = document.querySelectorAll('section');
914
+ const navLinks = document.querySelectorAll('.nav-link');
915
+
916
+ window.addEventListener('scroll', () => {
917
+ let current = '';
918
+
919
+ sections.forEach(section => {
920
+ const sectionTop = section.offsetTop;
921
+ const sectionHeight = section.clientHeight;
922
+
923
+ if (pageYOffset >= sectionTop - 300) {
924
+ current = section.getAttribute('id');
925
+ }
926
+ });
927
+
928
+ navLinks.forEach(link => {
929
+ link.classList.remove('text-primary');
930
+ if (link.getAttribute('href').substring(1) === current) {
931
+ link.classList.add('text-primary');
932
+ }
933
+ });
934
+
935
+ // Add scrolled class to header
936
+ const header = document.querySelector('.nav-header');
937
+ if (window.scrollY > 100) {
938
+ header.classList.add('scrolled');
939
+ } else {
940
+ header.classList.remove('scrolled');
941
+ }
942
+ });
943
+
944
+ // Fade in animations on scroll
945
+ const fadeElements = document.querySelectorAll('.fade-in');
946
+
947
+ const fadeInObserver = new IntersectionObserver((entries) => {
948
+ entries.forEach(entry => {
949
+ if (entry.isIntersecting) {
950
+ entry.target.classList.add('appear');
951
+
952
+ // Animate skill progress bars
953
+ if (entry.target.classList.contains('skill-card')) {
954
+ const progressBar = entry.target.querySelector('.skill-progress');
955
+ const width = progressBar.nextElementSibling.textContent;
956
+ setTimeout(() => {
957
+ progressBar.style.width = width;
958
+ }, 300);
959
+ }
960
+ }
961
+ });
962
+ }, {
963
+ threshold: 0.1
964
+ });
965
+
966
+ fadeElements.forEach(element => {
967
+ fadeInObserver.observe(element);
968
+ });
969
+ </script>
970
+ <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=YUSAKRU/save-1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
971
+ </html>