Skip to content

Commit 3c25324

Browse files
committed
feat: better ux design
1 parent fcfb1ee commit 3c25324

5 files changed

Lines changed: 271 additions & 447 deletions

File tree

public/sh1n3zz.webp

-45.8 KB
Binary file not shown.

src/components/orbiting-circles.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { cn } from "@/lib/utils";
2+
import { useTheme } from "next-themes";
3+
import { useEffect, useState } from "react";
24

35
export interface OrbitingCirclesProps {
46
className?: string;
@@ -77,6 +79,15 @@ export function TechStackCircles({
7779
outerSize = "size-[50px]",
7880
duration = 20,
7981
}: TechStackCirclesProps) {
82+
const [mounted, setMounted] = useState(false);
83+
const { resolvedTheme } = useTheme();
84+
85+
useEffect(() => {
86+
setMounted(true);
87+
}, []);
88+
89+
const iconTheme = mounted && resolvedTheme === "light" ? "light" : "dark";
90+
8091
return (
8192
<>
8293
<span className="pointer-events-none text-4xl font-semibold text-foreground/5">
@@ -91,7 +102,7 @@ export function TechStackCircles({
91102
radius={innerRadius}
92103
>
93104
<img
94-
src={`https://skillicons.dev/icons?i=${icon}`}
105+
src={`https://skillicons.dev/icons?i=${icon}&theme=${iconTheme}`}
95106
alt={`${icon} Icon`}
96107
className="w-full h-full object-contain"
97108
/>
@@ -107,7 +118,7 @@ export function TechStackCircles({
107118
reverse
108119
>
109120
<img
110-
src={`https://skillicons.dev/icons?i=${icon}`}
121+
src={`https://skillicons.dev/icons?i=${icon}&theme=${iconTheme}`}
111122
alt={`${icon} Icon`}
112123
className="w-full h-full object-contain"
113124
/>

src/components/timeline.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,17 @@ interface TimelineProps {
1212

1313
export function Timeline({ events, className }: TimelineProps) {
1414
return (
15-
<div className={cn("relative space-y-0", className)}>
16-
<div className="absolute top-0 left-[3.25rem] w-[1px] h-full bg-border/60" />
15+
<div className={cn("relative", className)}>
16+
<div className="absolute top-0 left-8 w-px h-full bg-border" />
1717
{events.map((event, index) => (
1818
<div
1919
key={index}
20-
className="group relative flex gap-4 items-center py-2 hover:bg-muted/50 rounded-md transition-all duration-300 px-1.5"
20+
className="group relative flex gap-3 items-center py-1.5 hover:bg-muted/50 rounded-md transition-colors px-1"
2121
>
22-
<div className="text-sm font-medium text-primary/80 w-12 flex-shrink-0 relative z-10 cursor-default">
22+
<div className="text-xs font-medium text-muted-foreground w-7 flex-shrink-0 relative z-10">
2323
{event.year}
2424
</div>
25-
<div
26-
className="absolute left-[3.25rem] w-[1px] h-full bg-gradient-to-b from-transparent via-primary/40 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"
27-
style={{
28-
transform: "translateX(-50%)",
29-
}}
30-
/>
31-
<p className="text-xs text-muted-foreground group-hover:text-foreground/80 transition-colors duration-300">
25+
<p className="text-xs text-muted-foreground group-hover:text-foreground transition-colors">
3226
{event.description}
3327
</p>
3428
</div>

0 commit comments

Comments
 (0)