Skip to content

Commit 26564e2

Browse files
committed
updated website
1 parent e3640f5 commit 26564e2

File tree

2 files changed

+98
-67
lines changed

2 files changed

+98
-67
lines changed

app/page.tsx

Lines changed: 98 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
"use client"
2-
import { useState, useEffect, useRef } from "react"
3-
import { Instagram, Linkedin, Github, Twitter } from "lucide-react"
4-
import Link from "next/link"
5-
import Image from "next/image"
6-
import Logo from "./components/Logo"
7-
import { useLoading } from "./providers/LoadingProvider"
1+
"use client";
2+
import { useState, useEffect, useRef } from "react";
3+
import { Instagram, Linkedin, Github, Twitter } from "lucide-react";
4+
import Link from "next/link";
5+
import Image from "next/image";
6+
import Logo from "./components/Logo";
7+
import { useLoading } from "./providers/LoadingProvider";
88
import AboutPic from "../public/portfolio-pic.jpg";
99

1010
// Types for company data
@@ -28,7 +28,10 @@ const ExperienceTabs = ({ companies }: { companies: Company[] }) => {
2828
const tabsContainerRef = useRef<HTMLDivElement>(null);
2929
const [indicatorStyle, setIndicatorStyle] = useState<React.CSSProperties>({
3030
top: 0,
31+
left: 0,
32+
bottom: 0,
3133
height: 0,
34+
width: 0,
3235
opacity: 0,
3336
transition: 'none'
3437
});
@@ -38,12 +41,26 @@ const ExperienceTabs = ({ companies }: { companies: Company[] }) => {
3841
if (tabsContainerRef.current) {
3942
const activeTabElement = tabsContainerRef.current.children[activeTab] as HTMLElement;
4043
if (activeTabElement) {
41-
setIndicatorStyle({
42-
top: activeTabElement.offsetTop + 'px',
43-
height: activeTabElement.offsetHeight + 'px',
44-
opacity: 1,
45-
transition: 'none'
46-
});
44+
if (document.documentElement.clientWidth > 768) {
45+
setIndicatorStyle({
46+
...indicatorStyle,
47+
top: activeTabElement.offsetTop + 'px',
48+
height: activeTabElement.offsetHeight + 'px',
49+
width: '2px',
50+
opacity: 1,
51+
transition: 'none'
52+
});
53+
} else {
54+
setIndicatorStyle({
55+
...indicatorStyle,
56+
left: activeTabElement.offsetLeft + 'px',
57+
top: activeTabElement.offsetHeight - 2 + 'px',
58+
height: '2px',
59+
width: activeTabElement.offsetWidth + 'px',
60+
opacity: 1,
61+
transition: 'none'
62+
});
63+
}
4764
}
4865
}
4966
}, []);
@@ -53,12 +70,26 @@ const ExperienceTabs = ({ companies }: { companies: Company[] }) => {
5370
const targetTabElement = tabsContainerRef.current.children[index] as HTMLElement;
5471
if (targetTabElement) {
5572
// Set smooth transition for subsequent tab changes
56-
setIndicatorStyle({
57-
top: targetTabElement.offsetTop + 'px',
58-
height: targetTabElement.offsetHeight + 'px',
59-
opacity: 1,
60-
transition: 'all 0.3s ease-out'
61-
});
73+
if (document.documentElement.clientWidth > 768) {
74+
setIndicatorStyle({
75+
...indicatorStyle,
76+
top: targetTabElement.offsetTop + 'px',
77+
height: targetTabElement.offsetHeight + 'px',
78+
width: '2px',
79+
opacity: 1,
80+
transition: 'all 0.3s ease-out'
81+
});
82+
} else {
83+
setIndicatorStyle({
84+
...indicatorStyle,
85+
left: targetTabElement.offsetLeft + 'px',
86+
top: targetTabElement.offsetHeight - 2 + 'px',
87+
height: '2px',
88+
width: targetTabElement.offsetWidth + 'px',
89+
opacity: 1,
90+
transition: 'all 0.3s ease-out'
91+
});
92+
}
6293
setActiveTab(index);
6394
}
6495
}
@@ -67,21 +98,21 @@ const ExperienceTabs = ({ companies }: { companies: Company[] }) => {
6798
return (
6899
<div className="relative flex flex-col md:flex-row">
69100
{/* Tab list - vertical company names */}
70-
<div className="w-full md:w-60 mb-8 md:mb-0 border-b md:border-b-0 md:border-l border-[#64ffda]/30 relative">
101+
<div className="w-full overflow-x-auto md:w-60 mb-8 md:mb-0 border-b border-l-0 md:border-b-0 md:border-l border-[#64ffda]/30 relative">
71102
{/* Animated indicator */}
72103
<span
73-
className="absolute left-0 w-0.5 bg-[#64ffda] z-10"
104+
className="absolute left-0 bg-[#64ffda] z-10"
74105
style={indicatorStyle}
75106
></span>
76107

77-
<div ref={tabsContainerRef}>
108+
<div ref={tabsContainerRef} className="flex flex-row md:flex-col">
78109
{companies.map((company: Company, index: number) => (
79110
<button
80111
key={company.name}
81-
className={`text-left py-3 px-5 w-full focus:outline-none transition-all font-mono text-sm cursor-pointer
112+
className={`text-left py-3 px-5 w-full outline-none transition-all font-mono text-sm cursor-pointer
82113
${index === activeTab ?
83114
'text-[#64ffda] bg-[#112240]/50' :
84-
'text-gray-400 hover:text-[#64ffda] hover:bg-[#112240]/20'}`}
115+
'text-gray-300 hover:text-[#64ffda] hover:bg-[#112240]/20'}`}
85116
onClick={() => handleTabChange(index)}
86117
>
87118
{company.name}
@@ -116,12 +147,12 @@ const ExperienceTabs = ({ companies }: { companies: Company[] }) => {
116147
</Link>
117148
</span>
118149
</h3>
119-
<p className="text-xs text-gray-400 mt-1">
150+
<p className="text-xs text-gray-300 mt-1">
120151
{company.description.startDate} - {company.description.lastDate}
121152
</p>
122153
</div>
123154

124-
<ul className="space-y-3 text-sm text-gray-400 mt-5">
155+
<ul className="space-y-3 text-sm text-gray-300 mt-5">
125156
{company.description.details.map((detail: string, i: number) => (
126157
<li key={i} className="flex">
127158
<span className="text-[#64ffda] mr-2 flex-shrink-0"></span>
@@ -152,7 +183,7 @@ export default function Home() {
152183
companyName: "American Express",
153184
link: "https://www.americanexpress.com/",
154185
startDate: "January 2023",
155-
lastDate: "Present",
186+
lastDate: "May 2025",
156187
details: [
157188
"Developing highly interactive web applications for American Express using React",
158189
"Developing Common Libraries used internally and Managing CI/CD Pipelines",
@@ -351,7 +382,7 @@ export default function Home() {
351382
</li>
352383
<li>
353384
<Link
354-
href="https://drive.google.com/file/d/19r3mIyShOkOAAXVclH_0EaxNQAp-kUsk/view"
385+
href="https://drive.google.com/file/d/12llr7QvEY7TpPMgiO0gi8hYvh1DjmiAc/view"
355386
target="_blank"
356387
className="border border-[#64ffda] text-[#64ffda] px-3 py-2 rounded-sm hover:bg-[#64ffda]/10 transition-colors"
357388
>
@@ -432,7 +463,7 @@ export default function Home() {
432463
</li>
433464
<li className="w-full text-center mt-6">
434465
<Link
435-
href="https://drive.google.com/file/d/19r3mIyShOkOAAXVclH_0EaxNQAp-kUsk/view"
466+
href="https://drive.google.com/file/d/12llr7QvEY7TpPMgiO0gi8hYvh1DjmiAc/view"
436467
target="_blank"
437468
className="border border-[#64ffda] text-[#64ffda] px-8 py-4 rounded-sm hover:bg-[#64ffda]/10 transition-colors inline-block text-base"
438469
>
@@ -476,9 +507,9 @@ export default function Home() {
476507
{/* Hero section */}
477508
<section id="hero" className={`min-h-[80vh] flex flex-col justify-center ${isLoading ? 'opacity-0' : 'opacity-100 animate-fadeInUp'}`}>
478509
<p className="text-[#64ffda] mb-5 font-mono text-sm">Hi, my name is</p>
479-
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold text-gray-200 mb-4">Harsh Dave.</h1>
510+
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold text-gray-100 mb-4">Harsh Dave.</h1>
480511
<h2 className="text-3xl sm:text-4xl md:text-5xl font-bold text-gray-400 mb-6">I build things for the web.</h2>
481-
<p className="max-w-xl text-gray-400 mb-12 text-sm sm:text-md">
512+
<p className="max-w-xl text-gray-300 mb-12 text-sm sm:text-md">
482513
I&apos;m a software engineer based in Bengaluru specializing in building and occasionally designing
483514
high-quality websites and applications.
484515
</p>
@@ -500,22 +531,22 @@ export default function Home() {
500531

501532
<div className="grid grid-cols-1 md:grid-cols-3 gap-10">
502533
<div className="md:col-span-2">
503-
<p className="mb-4 text-sm sm:text-md text-gray-400">
534+
<p className="mb-4 text-sm sm:text-md text-gray-300">
504535
Hello! I&apos;m Harsh, a software engineer based in Bengaluru, who
505536
enjoys building things that live on the internet. I develop websites
506537
and web applications that provide intuitive, pixel-perfect user interfaces
507538
with efficient and modern backends.
508539
</p>
509-
<p className="mb-4 text-sm sm:text-md text-gray-400">
540+
<p className="mb-4 text-sm sm:text-md text-gray-300">
510541
<span>Shortly after graduating from{' '}</span><Link href="https://gtu.ac.in/" target="_blank" className="text-[#64ffda]">Gujarat Technological University</Link>
511542
<span>, I joined the development team at{' '}</span><Link href="https://www.ashutec.com/" target="_blank" className="text-[#64ffda]">Ashutec Solutions</Link>
512543
<span>, where I work on a wide variety of interesting and meaningful projects on a daily basis.</span>
513544
<span> Currently I work at{' '}</span><Link href="https://www.americanexpress.com/" target="_blank" className="text-[#64ffda]">American Express</Link>
514545
<span>, where I work on a wide variety of interesting and meaningful projects on a daily basis.</span>
515546
</p>
516-
<p className="mb-6 text-sm sm:text-md text-gray-400">Here are a few technologies I&apos;ve been working with recently:</p>
547+
<p className="mb-6 text-sm sm:text-md text-gray-300">Here are a few technologies I&apos;ve been working with recently:</p>
517548

518-
<div className="grid grid-cols-2 gap-2 text-xs text-gray-400">
549+
<div className="grid grid-cols-2 gap-2 text-xs text-gray-300">
519550
<div className="flex items-center">
520551
<span className="text-[#64ffda] mr-2"></span> HTML & (S)CSS
521552
</div>
@@ -585,12 +616,12 @@ export default function Home() {
585616
</svg>
586617
</div>
587618
<div className="flex gap-3">
588-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
619+
{/* <a href="#" className="text-gray-300 hover:text-[#64ffda]">
589620
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
590621
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>
591622
</svg>
592-
</a>
593-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
623+
</a> */}
624+
<a href="https://diypc.vercel.app" target="_blank" className="text-gray-300 hover:text-[#64ffda]">
594625
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
595626
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
596627
<polyline points="15 3 21 3 21 9"></polyline>
@@ -599,15 +630,16 @@ export default function Home() {
599630
</a>
600631
</div>
601632
</div>
602-
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">E-commerce Platform</h3>
603-
<p className="text-xs text-gray-400 mb-4">
604-
A full-featured e-commerce solution with product management, cart functionality, and secure payment processing.
633+
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">DIYPC</h3>
634+
<p className="text-xs text-gray-300 mb-4">
635+
DIYPC helps you create a custom PC that meets your needs and budget with AI-powered recommendations, compatibility checking, and expert guidance.
605636
</p>
606-
<div className="flex flex-wrap gap-2 text-xs text-gray-400">
607-
<span>React</span>
608-
<span>Node.js</span>
609-
<span>MongoDB</span>
610-
<span>Stripe API</span>
637+
<div className="flex flex-wrap gap-2 text-xs text-gray-300">
638+
<span>Next.js</span>
639+
<span>Tailwind CSS</span>
640+
<span>Framer Motion</span>
641+
<span>Firebase</span>
642+
<span>Gemini</span>
611643
</div>
612644
</div>
613645

@@ -619,12 +651,12 @@ export default function Home() {
619651
</svg>
620652
</div>
621653
<div className="flex gap-3">
622-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
654+
<a href="https://github.com/coderhd/ds-algo-flashcards" target="_blank" className="text-gray-300 hover:text-[#64ffda]">
623655
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
624656
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>
625657
</svg>
626658
</a>
627-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
659+
<a href="https://ds-algo-flashcards.vercel.app" target="_blank" className="text-gray-300 hover:text-[#64ffda]">
628660
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
629661
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
630662
<polyline points="15 3 21 3 21 9"></polyline>
@@ -633,15 +665,14 @@ export default function Home() {
633665
</a>
634666
</div>
635667
</div>
636-
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">Analytics Dashboard</h3>
637-
<p className="text-xs text-gray-400 mb-4">
638-
Interactive data visualization dashboard with real-time analytics, customizable widgets, and reporting.
668+
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">DSA Flashcards</h3>
669+
<p className="text-xs text-gray-300 mb-4">
670+
A modern, mobile-friendly web application for studying data structures and algorithms on the go. It&apos;s a perfect companion for technical interview preparation.
639671
</p>
640-
<div className="flex flex-wrap gap-2 text-xs text-gray-400">
641-
<span>React</span>
642-
<span>D3.js</span>
643-
<span>Firebase</span>
644-
<span>Chart.js</span>
672+
<div className="flex flex-wrap gap-2 text-xs text-gray-300">
673+
<span>Next.js</span>
674+
<span>Shadcn UI</span>
675+
<span>Tailwind CSS</span>
645676
</div>
646677
</div>
647678

@@ -653,12 +684,12 @@ export default function Home() {
653684
</svg>
654685
</div>
655686
<div className="flex gap-3">
656-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
687+
{/* <a href="#" className="text-gray-300 hover:text-[#64ffda]">
657688
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
658689
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>
659690
</svg>
660-
</a>
661-
<a href="#" className="text-gray-400 hover:text-[#64ffda]">
691+
</a> */}
692+
<a href="https://play.google.com/store/apps/details?id=com.instacaptions" target="_blank" className="text-gray-300 hover:text-[#64ffda]">
662693
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
663694
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
664695
<polyline points="15 3 21 3 21 9"></polyline>
@@ -667,15 +698,15 @@ export default function Home() {
667698
</a>
668699
</div>
669700
</div>
670-
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">Social Media App</h3>
671-
<p className="text-xs text-gray-400 mb-4">
672-
Mobile-first social networking application with real-time messaging, post sharing, and user profiles.
701+
<h3 className="text-gray-200 text-lg sm:text-xl mb-2 font-medium">Insta Caption</h3>
702+
<p className="text-xs text-gray-300 mb-4">
703+
Insta Caption is a mobile application that helps users generate AI-based content for social media including captions, hashtags, and profile bios.
673704
</p>
674-
<div className="flex flex-wrap gap-2 text-xs text-gray-400">
705+
<div className="flex flex-wrap gap-2 text-xs text-gray-300">
675706
<span>React Native</span>
676-
<span>Express</span>
677-
<span>Socket.io</span>
678-
<span>AWS</span>
707+
<span>Firebase</span>
708+
<span>GPT 4.1</span>
709+
<span>AdMob</span>
679710
</div>
680711
</div>
681712
</div>
@@ -688,7 +719,7 @@ export default function Home() {
688719
</h2>
689720

690721
<h3 className="text-3xl md:text-4xl font-bold text-gray-200 mb-6">Get In Touch</h3>
691-
<p className="max-w-md mx-auto text-gray-400 mb-10 text-sm sm:text-md">
722+
<p className="max-w-md mx-auto text-gray-300 mb-10 text-sm sm:text-md">
692723
I&apos;m currently open to freelance opportunities and new projects. If you have an exciting project in mind or just want to say hi, feel free to reach out and I&apos;ll get back to you as soon as possible!
693724
</p>
694725

public/Harsh-Resume.pdf

-88 KB
Binary file not shown.

0 commit comments

Comments
 (0)