Skip to content

Commit 0831957

Browse files
feat: modernize website design with enhanced UI/UX
- Enhanced Hero section with better gradients, spacing, and visual hierarchy - Improved TrackCard-2 with modern card design, hover effects, and glassmorphism - Updated Tracks component with refined filters, better spacing, and enhanced animations - Modernized Appbar with glassmorphism effects and gradient hover states - Enhanced Footer and FooterCTA with improved styling, gradients, and interactive elements - Added custom CSS utilities for consistent gradient and glass effects throughout the app - Improved overall color palette with blue-to-purple gradients for a cohesive modern look Co-Authored-By: harkirat <harkirat96@gmail.com>
1 parent 109c526 commit 0831957

File tree

7 files changed

+137
-107
lines changed

7 files changed

+137
-107
lines changed

apps/web/app/globals.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@
9191
.flex-between {
9292
@apply flex items-center justify-between;
9393
}
94+
95+
.gradient-text {
96+
@apply bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent;
97+
}
98+
99+
.card-gradient {
100+
@apply bg-gradient-to-br from-white via-blue-50/30 to-purple-50/30 dark:from-neutral-900 dark:via-blue-950/20 dark:to-purple-950/20;
101+
}
102+
103+
.glass-effect {
104+
@apply bg-white/80 dark:bg-neutral-900/80 backdrop-blur-2xl border border-primary/10;
105+
}
94106
}
95107

96108
* {

apps/web/components/Appbar.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,32 @@ export const Appbar = () => {
1717
initial={{ y: -20, opacity: 0 }}
1818
animate={{ y: 0, opacity: 1 }}
1919
transition={{ duration: 0.5, ease: "easeInOut", type: "spring", damping: 10 }}
20-
className="flex w-full justify-between mx-auto bg-secondary/15 shadow-lg shadow-neutral-600/5 backdrop-blur-lg border border-primary/10 p-6 rounded-2xl"
20+
className="flex w-full justify-between mx-auto bg-white/80 dark:bg-neutral-900/80 shadow-xl shadow-blue-500/5 dark:shadow-blue-500/10 backdrop-blur-2xl border border-primary/10 hover:border-blue-500/20 transition-all duration-300 p-5 md:p-6 rounded-3xl"
2121
>
22-
<Link href={"/"} className="flex items-center gap-2 cursor-pointer">
23-
<Image
24-
src={"https://appx-wsb-gcp.akamai.net.in/subject/2023-01-17-0.17044360120951185.jpg"}
25-
alt="Logo"
26-
width={300}
27-
height={200}
28-
className="rounded-full size-10"
29-
/>
30-
<span className="text-lg md:text-2xl font-bold tracking-tight text-foreground hidden md:block">
22+
<Link href={"/"} className="flex items-center gap-3 cursor-pointer group">
23+
<div className="relative">
24+
<div className="absolute inset-0 bg-gradient-to-r from-blue-500 to-purple-500 rounded-full blur-md opacity-0 group-hover:opacity-50 transition-opacity duration-300" />
25+
<Image
26+
src={"https://appx-wsb-gcp.akamai.net.in/subject/2023-01-17-0.17044360120951185.jpg"}
27+
alt="Logo"
28+
width={300}
29+
height={200}
30+
className="rounded-full size-11 relative z-10 ring-2 ring-primary/10 group-hover:ring-blue-500/30 transition-all duration-300"
31+
/>
32+
</div>
33+
<span className="text-xl md:text-2xl font-bold tracking-tight bg-gradient-to-r from-foreground to-foreground/80 bg-clip-text hidden md:block group-hover:from-blue-600 group-hover:to-purple-600 transition-all duration-300">
3134
100xProjects
3235
</span>
3336
</Link>
34-
<div className="flex items-center gap-8">
37+
<div className="flex items-center gap-4 md:gap-6">
3538
<ModeToggle />
3639
{!user ? (
3740
<Button
3841
size={"lg"}
3942
onClick={async () => {
4043
await signIn();
4144
}}
45+
className="bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 shadow-lg hover:shadow-xl transition-all duration-300"
4246
>
4347
Login
4448
</Button>

apps/web/components/Hero.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ export default function Hero({ tracks }: { tracks: TrackPros[] }) {
4040
};
4141

4242
return (
43-
<div className="flex flex-col gap-4 h-[50vh] md:h-[75vh] size-screen mx-auto justify-center">
43+
<div className="flex flex-col gap-4 h-[60vh] md:h-[85vh] size-screen mx-auto justify-center relative overflow-hidden">
44+
<div className="absolute inset-0 bg-gradient-to-br from-blue-50/50 via-transparent to-purple-50/50 dark:from-blue-950/20 dark:via-transparent dark:to-purple-950/20" />
4445
<div className="relative w-full">
4546
<motion.svg
4647
xmlns="http://www.w3.org/2000/svg"
@@ -152,19 +153,19 @@ export default function Hero({ tracks }: { tracks: TrackPros[] }) {
152153
initial={{ y: -20, opacity: 0 }}
153154
className="max-w-7xl mx-auto px-4 flex flex-col gap-4 items-center justify-center"
154155
>
155-
<div className="flex flex-col items-center justify-center">
156-
<span className="tracking-tighter text-2xl md:text-3xl text-center font-medium text-primary/80 ">
156+
<div className="flex flex-col items-center justify-center gap-2">
157+
<span className="tracking-tight text-xl md:text-2xl text-center font-semibold text-primary/60 uppercase text-sm md:text-base">
157158
Welcome to
158159
</span>
159-
<h1 className="tracking-tighter text-6xl md:text-7xl xl:text-8xl text-center font-bold my-2">
160-
<span className="font-bold bg-gradient-to-b from-blue-400 to-blue-700 bg-clip-text text-transparent">
160+
<h1 className="tracking-tighter text-6xl md:text-7xl xl:text-9xl text-center font-bold my-4 leading-none">
161+
<span className="font-bold bg-gradient-to-br from-blue-500 via-blue-600 to-purple-600 bg-clip-text text-transparent drop-shadow-sm">
161162
100x
162163
</span>{" "}
163-
Projects.
164+
<span className="text-foreground">Projects</span>
164165
</h1>
165166
</div>
166-
<p className="text-primary/80 max-w-lg text-center tracking-tight md:text-lg font-light">
167-
A platform where you'll find the right content to help you improve your skills and grow your knowledge.
167+
<p className="text-primary/70 max-w-2xl text-center tracking-tight text-lg md:text-xl font-normal px-4">
168+
A curated platform to master coding through structured tracks and hands-on projects. Level up your skills, one challenge at a time.
168169
</p>
169170
<ContentSearch tracks={tracks} />
170171
</motion.div>

apps/web/components/TrackCard-2.tsx

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,27 +67,30 @@ export function TrackCard2({ track }: { track: TrackCardProps }) {
6767
initial="hidden"
6868
animate={controls}
6969
variants={variants}
70-
className="bg-primary/5 flex cursor-pointer flex-row items-start justify-between gap-4 rounded-xl p-4 backdrop-blur-xl transition-all duration-300 hover:-translate-y-1 md:items-center"
70+
className="group relative bg-gradient-to-br from-white via-blue-50/30 to-purple-50/30 dark:from-neutral-900 dark:via-blue-950/20 dark:to-purple-950/20 border border-primary/10 hover:border-blue-500/30 dark:hover:border-blue-400/30 flex cursor-pointer flex-row items-start justify-between gap-4 rounded-2xl p-5 backdrop-blur-xl transition-all duration-500 hover:-translate-y-2 hover:shadow-2xl hover:shadow-blue-500/10 dark:hover:shadow-blue-500/20 md:items-center overflow-hidden"
7171
onClick={handleTrackClick}
7272
>
73-
<img src={track.image} alt={track.title} className="size-20 aspect-square object-cover rounded-xl" />
74-
<div className="flex flex-col md:flex-row gap-4 w-full md:items-center justify-between">
75-
<div className="flex flex-col gap-2">
76-
<h3 className="text-xl md:text-2xl tracking-tighter font-semibold lg:line-clamp-1">{track.title}</h3>
77-
{track.categories.map((item) => (
78-
<p
79-
key={item.category.id}
80-
className="bg-secondary/25 border border-primary/10 rounded-lg px-3 py-2 text-sm w-fit cursor-default"
81-
>
82-
{item.category.category}
83-
</p>
84-
))}
73+
<div className="absolute inset-0 bg-gradient-to-r from-blue-500/0 via-blue-500/5 to-purple-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
74+
<img src={track.image} alt={track.title} className="size-24 aspect-square object-cover rounded-2xl shadow-md group-hover:shadow-xl group-hover:scale-105 transition-all duration-500 ring-2 ring-primary/5 group-hover:ring-blue-500/20 relative z-10" />
75+
<div className="flex flex-col md:flex-row gap-4 w-full md:items-center justify-between relative z-10">
76+
<div className="flex flex-col gap-3">
77+
<h3 className="text-xl md:text-2xl tracking-tight font-bold lg:line-clamp-1 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors duration-300">{track.title}</h3>
78+
<div className="flex flex-wrap gap-2">
79+
{track.categories.map((item) => (
80+
<span
81+
key={item.category.id}
82+
className="bg-gradient-to-r from-blue-500/10 to-purple-500/10 border border-blue-500/20 dark:border-blue-400/20 rounded-full px-4 py-1.5 text-xs font-medium cursor-default hover:from-blue-500/20 hover:to-purple-500/20 transition-all duration-300"
83+
>
84+
{item.category.category}
85+
</span>
86+
))}
87+
</div>
8588
</div>
86-
<div className="flex flex-row md:flex-col gap-2 w-full md:w-[30%] md:items-end items-center">
87-
<p className="text-primary/80 md:text-lg tracking-tight text-blue-500 font-semibold">
89+
<div className="flex flex-row md:flex-col gap-3 w-full md:w-[30%] md:items-end items-center">
90+
<p className="text-primary/90 md:text-lg tracking-tight bg-gradient-to-r from-blue-600 to-purple-600 dark:from-blue-400 dark:to-purple-400 bg-clip-text text-transparent font-bold">
8891
{track.problems.length} Chapters
8992
</p>
90-
<p className="flex tracking-tight gap-2 text-primary/60 text-sm md:text-base">
93+
<p className="flex tracking-tight gap-2 text-primary/60 text-sm md:text-base font-medium">
9194
{formatDistanceToNow(new Date(track.createdAt), { addSuffix: true })}
9295
</p>
9396
</div>

apps/web/components/Tracks.tsx

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -119,34 +119,33 @@ export const Tracks = ({ tracks, categories }: TracksWithCategoriesProps) => {
119119
initial={{ y: -20, opacity: 0 }}
120120
animate={{ y: 0, opacity: 1 }}
121121
transition={{ duration: 0.5, ease: "easeInOut", type: "spring", damping: 10, delay: 0.5 }}
122-
className="flex max-w-5xl flex-col gap-4 w-full mx-auto p-4"
122+
className="flex max-w-6xl flex-col gap-8 w-full mx-auto p-4 md:p-6"
123123
id="tracks"
124124
>
125125
<div className="flex w-full gap-4 justify-between items-center flex-col md:flex-row">
126-
<div className="flex items-center gap-2 p-2 rounded-lg bg-primary/5 mx-auto md:mx-0 justify-center">
126+
<div className="flex items-center gap-3 p-2 rounded-2xl bg-gradient-to-r from-blue-50 to-purple-50 dark:from-blue-950/30 dark:to-purple-950/30 border border-primary/10 mx-auto md:mx-0 justify-center shadow-sm">
127127
<Button
128128
size={"lg"}
129129
variant={"ghost"}
130130
onClick={() => handleCohortSelection(2)}
131-
className={isCohort2Selected ? "bg-blue-600 text-white hover:bg-blue-600" : ""}
131+
className={isCohort2Selected ? "bg-gradient-to-r from-blue-600 to-blue-700 text-white hover:from-blue-700 hover:to-blue-800 shadow-lg" : "hover:bg-white/50 dark:hover:bg-white/10"}
132132
>
133133
Cohort 2.0
134134
</Button>
135-
<Separator className="w-0.5 h-4 bg-primary/25" />
135+
<Separator className="w-0.5 h-6 bg-primary/20" />
136136
<Button
137137
size={"lg"}
138138
variant={"ghost"}
139139
onClick={() => handleCohortSelection(3)}
140-
className={isCohort3Selected ? "bg-blue-600 text-white hover:bg-blue-600" : ""}
140+
className={isCohort3Selected ? "bg-gradient-to-r from-blue-600 to-blue-700 text-white hover:from-blue-700 hover:to-blue-800 shadow-lg" : "hover:bg-white/50 dark:hover:bg-white/10"}
141141
>
142142
Cohort 3.0
143143
</Button>
144144
</div>
145-
<div className="flex gap-2 p-2.5 bg-primary/5 rounded-lg w-full md:w-fit">
146-
{/* Filter by Categories */}
147-
<div className="flex gap-2 items-center ">
145+
<div className="flex gap-3 p-3 bg-gradient-to-r from-blue-50 to-purple-50 dark:from-blue-950/30 dark:to-purple-950/30 border border-primary/10 rounded-2xl w-full md:w-fit shadow-sm">
146+
<div className="flex gap-2 items-center">
148147
<Select onValueChange={(e) => setSelectedCategory(e === "All" ? "" : e)}>
149-
<SelectTrigger className="w-[250px]">
148+
<SelectTrigger className="w-[250px] bg-white/80 dark:bg-neutral-900/80 border-primary/20 hover:border-blue-500/30 transition-colors">
150149
<SelectValue placeholder={selectedCategory || "All"} />
151150
</SelectTrigger>
152151
<SelectContent>
@@ -160,9 +159,8 @@ export const Tracks = ({ tracks, categories }: TracksWithCategoriesProps) => {
160159
</Select>
161160
</div>
162161

163-
{/* Sort */}
164162
<Select onValueChange={(e) => setSortBy(e)}>
165-
<SelectTrigger className="w-[250px]">
163+
<SelectTrigger className="w-[250px] bg-white/80 dark:bg-neutral-900/80 border-primary/20 hover:border-blue-500/30 transition-colors">
166164
<SelectValue placeholder="Sort by" />
167165
</SelectTrigger>
168166
<SelectContent>
@@ -177,25 +175,29 @@ export const Tracks = ({ tracks, categories }: TracksWithCategoriesProps) => {
177175
</div>
178176
</div>
179177

180-
{/* Tracks with Animation */}
181-
<motion.ul className="flex flex-col gap-4 w-full" variants={trackAnimation} initial="hidden" animate="show">
178+
<motion.ul className="flex flex-col gap-6 w-full" variants={trackAnimation} initial="hidden" animate="show">
182179
{loading ? (
183180
Array.from({ length: tracksPerPage }).map((_, idx) => (
184181
<div
185182
key={idx}
186-
className="flex items-center space-x-4 w-full h-24 bg-neutral-100 dark:bg-neutral-900 p-4 rounded-xl"
183+
className="flex items-center space-x-4 w-full h-28 bg-gradient-to-br from-neutral-100 to-neutral-50 dark:from-neutral-900 dark:to-neutral-800 p-6 rounded-2xl border border-primary/5 animate-pulse"
187184
>
188-
<Skeleton className="h-12 w-12 rounded-2xl" />
189-
<div className="space-y-2">
190-
<Skeleton className="h-4 w-[250px]" />
185+
<Skeleton className="h-16 w-16 rounded-2xl" />
186+
<div className="space-y-3 flex-1">
187+
<Skeleton className="h-5 w-[300px]" />
191188
<Skeleton className="h-4 w-[200px]" />
192189
</div>
193190
</div>
194191
))
195192
) : visibleTracks.length === 0 ? (
196-
<p className="text-center font-medium tracking-tighter text-lg max-w-screen-sm px-4 mx-auto">
197-
☹️ Sorry - currently there are no tracks available.
198-
</p>
193+
<div className="text-center py-16">
194+
<p className="text-2xl font-bold tracking-tight bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent mb-2">
195+
No tracks found
196+
</p>
197+
<p className="text-primary/60">
198+
Try adjusting your filters or check back later for new content.
199+
</p>
200+
</div>
199201
) : (
200202
filteredTracks.map((t) => (
201203
<motion.li key={t.id} className="w-full" variants={{ hidden: { opacity: 0 }, show: { opacity: 1 } }}>
@@ -205,12 +207,11 @@ export const Tracks = ({ tracks, categories }: TracksWithCategoriesProps) => {
205207
)}
206208
</motion.ul>
207209

208-
{/* Skeleton */}
209-
{filteredTracks.length < tracksPerPage && (
210-
<div className="flex items-center space-x-4 w-full h-24 bg-neutral-100 dark:bg-neutral-900 p-4 rounded-xl">
211-
<Skeleton className="h-12 w-12 rounded-2xl" />
212-
<div className="space-y-2">
213-
<Skeleton className="h-4 w-[250px]" />
210+
{filteredTracks.length < tracksPerPage && filteredTracks.length > 0 && (
211+
<div className="flex items-center space-x-4 w-full h-28 bg-gradient-to-br from-neutral-100 to-neutral-50 dark:from-neutral-900 dark:to-neutral-800 p-6 rounded-2xl border border-primary/5 animate-pulse">
212+
<Skeleton className="h-16 w-16 rounded-2xl" />
213+
<div className="space-y-3 flex-1">
214+
<Skeleton className="h-5 w-[300px]" />
214215
<Skeleton className="h-4 w-[200px]" />
215216
</div>
216217
</div>

apps/web/screens/footer-cta.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,34 @@ const FooterCTA = () => {
1717
};
1818
return (
1919
<div className="wrapper group">
20-
<div className="relative flex flex-col md:flex-col h-[75vh] md:h-[45vh] w-full rounded-3xl bg-gradient-to-b from-blue-400 to-blue-700 p-8 overflow-hidden">
21-
<div className="flex flex-col gap-4 justify-end">
22-
<div className="flex flex-col gap-2 md:w-[70%]">
23-
<h3 className="text-3xl font-medium text-white md:text-4xl tracking-tighter">
20+
<div className="relative flex flex-col md:flex-col h-[75vh] md:h-[50vh] w-full rounded-3xl bg-gradient-to-br from-blue-600 via-blue-700 to-purple-700 p-10 md:p-12 overflow-hidden shadow-2xl">
21+
<div className="absolute inset-0 bg-gradient-to-tr from-blue-500/20 via-transparent to-purple-500/20" />
22+
<div className="absolute top-0 right-0 w-96 h-96 bg-blue-400/20 rounded-full blur-3xl" />
23+
<div className="absolute bottom-0 left-0 w-96 h-96 bg-purple-400/20 rounded-full blur-3xl" />
24+
25+
<div className="flex flex-col gap-6 justify-end relative z-10">
26+
<div className="flex flex-col gap-4 md:w-[70%]">
27+
<h3 className="text-4xl font-bold text-white md:text-5xl tracking-tight leading-tight">
2428
Every developer deserves to be a great engineer, a{" "}
25-
<span className="font-bold tracking-tighter">100xEngineer!</span>
29+
<span className="font-extrabold tracking-tight bg-gradient-to-r from-yellow-200 to-yellow-400 bg-clip-text text-transparent">
30+
100xEngineer!
31+
</span>
2632
</h3>
2733

28-
<p className="text-lg md:text-xl text-white/80">
29-
Give yourself the power you deserve with a 100xdevs today!
34+
<p className="text-xl md:text-2xl text-white/90 font-medium">
35+
Give yourself the power you deserve with 100xdevs today!
3036
</p>
3137
</div>
32-
<div className="flex gap-2 flex-col md:flex-row">
38+
<div className="flex gap-4 flex-col md:flex-row">
3339
<Link href={"https://play.google.com/store/apps/details?id=com.hundredx.devs"} target="_blank">
34-
<Button size={"lg"} variant={"default"} className="w-fit flex items-center gap-2">
35-
<Download className="size-4" />
40+
<Button size={"lg"} variant={"default"} className="w-fit flex items-center gap-2 bg-white text-blue-700 hover:bg-white/90 shadow-xl hover:shadow-2xl hover:scale-105 transition-all duration-300 font-semibold">
41+
<Download className="size-5" />
3642
Download Our App!
3743
</Button>
3844
</Link>
3945
<Link href={"https://harkirat.classx.co.in/new-courses"} target="_blank">
40-
<Button size={"lg"} variant={"secondary"} className="w-fit flex items-center gap-2">
41-
<Sparkles className="size-4" />
46+
<Button size={"lg"} variant={"secondary"} className="w-fit flex items-center gap-2 bg-yellow-400 text-blue-900 hover:bg-yellow-300 shadow-xl hover:shadow-2xl hover:scale-105 transition-all duration-300 font-semibold">
47+
<Sparkles className="size-5" />
4248
Join Now!
4349
</Button>
4450
</Link>
@@ -49,7 +55,7 @@ const FooterCTA = () => {
4955
<Image
5056
src={Mockup}
5157
alt="Mockup"
52-
className="absolute md:right-6 w-[80%] md:w-[30%] group-hover:-translate-y-4 group-hover:rotate-6 rotate-3 transition-all duration-300"
58+
className="absolute md:right-6 w-[80%] md:w-[30%] group-hover:-translate-y-6 group-hover:rotate-6 rotate-3 transition-all duration-500 drop-shadow-2xl"
5359
/>
5460
</motion.div>
5561
</Link>

0 commit comments

Comments
 (0)