Skip to content

Commit 4c57e89

Browse files
committed
minor fixes
Signed-off-by: rishichawda <rishichawda@users.noreply.github.com>
1 parent f5e462c commit 4c57e89

File tree

1 file changed

+146
-43
lines changed

1 file changed

+146
-43
lines changed

src/pages/career.astro

Lines changed: 146 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ interface ProfileData {
6565
title: string;
6666
location: string;
6767
summary: string;
68-
bio: string;
68+
bio: string | string[];
6969
contact: {
7070
linkedin: string;
7171
};
@@ -74,6 +74,7 @@ interface ProfileData {
7474
certifications: Certification[];
7575
experience: Experience[];
7676
education: Education[];
77+
interests: string[];
7778
socials: Social[];
7879
}
7980
@@ -112,10 +113,9 @@ const experiencesWithMeta = await Promise.all(
112113
);
113114
114115
const page_info = {
115-
title: "About | Rishi Chawda",
116-
description: "About Rishi Chawda - Senior Software Engineer",
117-
keywords:
118-
"Rishi Chawda, Software Engineer, Developer, About, Experience, Skills",
116+
title: `Career | ${profile.name}`,
117+
description: `Explore ${profile.name}'s professional journey as a ${profile.title}. Learn about work experience, skills, and career achievements.`,
118+
keywords: `${profile.name}, Career, Software Engineer, Experience, Skills, ${profile.skills.join(', ')}`,
119119
};
120120
121121
const siteUrl = new URL(
@@ -159,13 +159,13 @@ const siteUrl = new URL(
159159
>
160160
<div class="flex flex-row justify-between items-center mb-12 sm:mb-16">
161161
<h1
162-
class="text-3xl sm:text-4xl lg:text-[2.5rem] font-medium text-gray-900"
162+
class="text-3xl sm:text-4xl lg:text-[2.5rem] font-medium text-gray-900 font-['Red_Hat_Display_Variable']"
163163
>
164-
About Me
164+
My Career Journey
165165
</h1>
166166
<a
167167
href="/"
168-
class="inline-flex items-center text-brand-800/90 hover:text-brand-950 group text-[15px] tracking-[0.2em] uppercase transition-colors duration-300"
168+
class="inline-flex items-center text-brand-800/90 hover:text-brand-950 group text-[15px] tracking-[0.2em] uppercase transition-colors duration-300 font-['Montserrat_Variable']"
169169
>
170170
<svg
171171
xmlns="http://www.w3.org/2000/svg"
@@ -181,9 +181,10 @@ const siteUrl = new URL(
181181
d="M10 19l-7-7m0 0l7-7m-7 7h18"></path>
182182
</svg>
183183
Back to Home
184-
</a> </div>
185-
<div class="mb-20 md:mb-24">
186-
<div class="bg-[#F8F9FE] rounded-lg p-8 sm:p-10 lg:p-12">
184+
</a>
185+
</div>
186+
<div class="mb-20 md:mb-24 animate-on-scroll fade-in-up">
187+
<div class="bg-[#F8F9FE] rounded-lg p-8 sm:p-10 lg:p-12 shadow-sm">
187188
<div class="flex flex-col md:flex-row gap-10 md:gap-12">
188189
<div class="md:w-2/3">
189190
<h2
@@ -194,11 +195,22 @@ const siteUrl = new URL(
194195
<p class="text-gray-600 font-['Montserrat_Variable'] text-lg mb-5">
195196
{profile.title}
196197
</p>
197-
<p
198-
class="text-gray-700 font-['Montserrat_Variable'] mb-8 leading-relaxed"
199-
>
200-
{profile.bio}
201-
</p>
198+
199+
{Array.isArray(profile.bio) ? (
200+
<div class="space-y-4 mb-8">
201+
{profile.bio.map((paragraph) => (
202+
<p class="text-gray-700 font-['Montserrat_Variable'] leading-relaxed">
203+
{paragraph}
204+
</p>
205+
))}
206+
</div>
207+
) : (
208+
<p
209+
class="text-gray-700 font-['Montserrat_Variable'] mb-8 leading-relaxed"
210+
>
211+
{profile.bio}
212+
</p>
213+
)}
202214

203215
<div class="flex items-center mb-4 text-gray-600">
204216
<svg
@@ -318,12 +330,29 @@ const siteUrl = new URL(
318330
</>
319331
)
320332
}
333+
334+
{
335+
profile.interests && profile.interests.length > 0 && (
336+
<>
337+
<h3 class="text-xl font-['Red_Hat_Display_Variable'] font-semibold text-gray-900 mt-8 mb-5">
338+
Interests & Hobbies
339+
</h3>
340+
<div class="flex flex-wrap gap-2">
341+
{profile.interests.map((interest) => (
342+
<span class="inline-block px-3 py-1.5 rounded-full bg-[#F0F2FC] text-[#6B7AB0] text-xs font-['Montserrat_Variable'] border border-[#6B7AB0]/20">
343+
{interest}
344+
</span>
345+
))}
346+
</div>
347+
</>
348+
)
349+
}
321350
</div>
322351
</div>
323352
</div>
324353
</div>
325354
</div>
326-
<div class="mb-20 md:mb-24">
355+
<div class="mb-20 md:mb-24 animate-on-scroll fade-in-up">
327356
<h2
328357
class="text-2xl sm:text-3xl font-['Red_Hat_Display_Variable'] font-semibold text-gray-900 mb-12"
329358
>
@@ -447,7 +476,7 @@ const siteUrl = new URL(
447476
</div>
448477
</div>
449478
</div>
450-
<div class="mb-20 md:mb-24">
479+
<div class="mb-20 md:mb-24 animate-on-scroll fade-in-up">
451480
<h2
452481
class="text-2xl sm:text-3xl font-['Red_Hat_Display_Variable'] font-semibold text-gray-900 mb-10"
453482
>
@@ -542,37 +571,56 @@ const siteUrl = new URL(
542571
}
543572
</div>
544573
</div>
545-
<div class="bg-gray-100 rounded-lg p-10 md:p-12 text-center">
574+
<div class="bg-gray-50 rounded-lg p-10 md:p-12 text-center">
546575
<h2
547576
class="text-2xl sm:text-3xl font-['Red_Hat_Display_Variable'] font-semibold text-gray-900 mb-5"
548577
>
549578
Let's Connect
550579
</h2>
551580
<p
552-
class="text-gray-700 font-['Montserrat_Variable'] mb-8 max-w-2xl mx-auto text-lg"
581+
class="text-gray-700 font-['Montserrat_Variable'] mb-8 max-w-2xl mx-auto text-lg leading-relaxed"
553582
>
554-
Whether you're interested in working together or just want to say hello,
555-
I'd love to hear from you!
583+
Interested in my work or have a project in mind? I'd love to discuss opportunities to collaborate and create something amazing together.
556584
</p>
557-
<div class="flex flex-wrap justify-center gap-4">
585+
<div class="flex flex-col sm:flex-row justify-center items-center gap-4 sm:gap-5">
558586
<a
559587
href="/contact/"
560-
class="inline-flex items-center px-8 py-3 rounded-lg bg-[#6B7AB0] text-white hover:bg-[#5A6A9F] transition-colors text-base font-medium"
588+
class="inline-flex items-center justify-center w-full sm:w-auto bg-brand-700 text-white px-8 py-3 rounded-lg font-semibold font-['Montserrat_Variable'] text-base hover:bg-brand-800 transition-all duration-300 shadow-md hover:shadow-lg transform hover:-translate-y-0.5 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-500"
561589
>
562-
<span class="font-['Montserrat_Variable']">Contact Me</span>
590+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
591+
<path stroke-linecap="round" stroke-linejoin="round" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
592+
</svg>
593+
Get in Touch
563594
</a>
564595
<a
565-
href="/articles/"
566-
class="inline-flex items-center px-8 py-3 rounded-lg bg-white text-[#6B7AB0] border border-[#6B7AB0] hover:bg-[#F0F2FC] transition-colors text-base font-medium"
596+
href="/about/"
597+
class="inline-flex items-center justify-center w-full sm:w-auto bg-white text-brand-700 border border-gray-300 px-8 py-3 rounded-lg font-semibold font-['Montserrat_Variable'] text-base hover:bg-gray-50 transition-colors duration-300 shadow-sm hover:shadow transform hover:-translate-y-0.5 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-500"
567598
>
568-
<span class="font-['Montserrat_Variable']">Read My Articles</span>
599+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
600+
<path stroke-linecap="round" stroke-linejoin="round" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
601+
</svg>
602+
Learn More About Me
569603
</a>
570604
</div>
571605
</div>
572606
</main>
573607
</BaseLayout>
574608

575609
<style>
610+
/* Animation Classes */
611+
.fade-in-up {
612+
opacity: 0;
613+
transform: translateY(20px);
614+
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
615+
will-change: opacity, transform;
616+
}
617+
618+
.visible.fade-in-up {
619+
opacity: 1;
620+
transform: translate(0, 0);
621+
will-change: auto;
622+
}
623+
576624
.timeline-dot {
577625
transition:
578626
transform 0.3s ease,
@@ -675,26 +723,81 @@ const siteUrl = new URL(
675723
overflow: hidden;
676724
text-overflow: ellipsis;
677725
}
726+
727+
/* Staggered animation delays */
728+
.animate-on-scroll:nth-child(odd) { transition-delay: 0.1s; }
729+
.animate-on-scroll:nth-child(even) { transition-delay: 0.2s; }
730+
731+
/* Respect reduced motion preferences */
732+
@media (prefers-reduced-motion: reduce) {
733+
.fade-in-up {
734+
opacity: 1 !important;
735+
transform: none !important;
736+
transition: none !important;
737+
animation: none !important;
738+
}
739+
.social-link,
740+
.timeline-item-container {
741+
transition: none !important;
742+
}
743+
.social-link:hover,
744+
.timeline-item-container:hover * {
745+
transform: none !important;
746+
}
747+
}
678748
</style>
679749

680750
<script>
681-
document.addEventListener("DOMContentLoaded", () => {
682-
const observer = new IntersectionObserver(
683-
(entries) => {
684-
entries.forEach((entry) => {
751+
function scrollObserver() {
752+
try {
753+
const observer = new IntersectionObserver((entries) => {
754+
entries.forEach(entry => {
685755
if (entry.isIntersecting) {
686-
entry.target.classList.add("visible");
756+
entry.target.classList.add('visible');
757+
// Remove will-change after animation completes
758+
setTimeout(() => {
759+
(entry.target as HTMLElement).style.willChange = 'auto';
760+
}, 400);
687761
}
688762
});
689-
},
690-
{
691-
threshold: 0.1,
692-
rootMargin: "0px 0px -50px 0px",
693-
},
694-
);
763+
}, {
764+
threshold: 0.15,
765+
rootMargin: '0px 0px -30px 0px'
766+
});
767+
768+
// Use requestAnimationFrame to batch DOM operations
769+
requestAnimationFrame(() => {
770+
document.querySelectorAll('.animate-on-scroll').forEach(element => {
771+
element.classList.remove('visible');
772+
observer.observe(element);
773+
});
774+
});
775+
} catch (error) {
776+
console.error('Animation observer error:', error);
777+
// Fallback: show all content immediately
778+
requestAnimationFrame(() => {
779+
document.querySelectorAll('.animate-on-scroll').forEach(element => {
780+
element.classList.add('visible');
781+
(element as HTMLElement).style.willChange = 'auto';
782+
});
783+
});
784+
}
785+
}
786+
787+
function ensureContentVisibility() {
788+
setTimeout(() => {
789+
document.querySelectorAll('.animate-on-scroll').forEach(element => {
790+
if (!element.classList.contains('visible')) {
791+
element.classList.add('visible');
792+
}
793+
});
794+
}, 1500);
795+
}
695796

696-
document.querySelectorAll(".animate-on-scroll").forEach((element) => {
697-
observer.observe(element);
698-
});
699-
});
797+
// Use passive event listeners for better performance
798+
document.addEventListener('DOMContentLoaded', scrollObserver, { passive: true });
799+
document.addEventListener('astro:page-load', scrollObserver, { passive: true });
800+
801+
// Delay ensureContentVisibility to reduce initial load impact
802+
setTimeout(ensureContentVisibility, 100);
700803
</script>

0 commit comments

Comments
 (0)