Skip to content

Commit 628b5f3

Browse files
committed
feat: improve build effort banner
1 parent c62dc3c commit 628b5f3

File tree

1 file changed

+87
-26
lines changed

1 file changed

+87
-26
lines changed

apps/web/components/build-effort.tsx

Lines changed: 87 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Badge } from "@ux-patterns/ui/components/shadcn/badge";
2+
import { Gauge, Rocket, Zap } from "lucide-react";
23
import { cn } from "@/lib/cn";
34

45
type BuildEffortProps = {
@@ -9,42 +10,102 @@ type BuildEffortProps = {
910
export const BuildEffort = ({ level, description }: BuildEffortProps) => {
1011
const effortConfig = {
1112
low: {
12-
label: "Low",
13-
icon: "🟢",
14-
className:
15-
"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100",
13+
label: "Low Complexity",
14+
icon: Zap,
15+
bgGradient:
16+
"from-blue-50 to-indigo-50 dark:from-blue-950/30 dark:to-indigo-950/30",
17+
borderColor: "border-blue-200 dark:border-blue-800",
18+
iconColor: "text-blue-500 dark:text-blue-400",
19+
badgeClass:
20+
"bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 border-blue-200 dark:border-blue-700",
21+
progressWidth: "w-1/3",
1622
},
1723
medium: {
18-
label: "Medium",
19-
icon: "🟡",
20-
className:
21-
"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100",
24+
label: "Medium Complexity",
25+
icon: Gauge,
26+
bgGradient:
27+
"from-amber-50 to-orange-50 dark:from-amber-950/30 dark:to-orange-950/30",
28+
borderColor: "border-amber-200 dark:border-amber-800",
29+
iconColor: "text-amber-500 dark:text-amber-400",
30+
badgeClass:
31+
"bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 border-amber-200 dark:border-amber-700",
32+
progressWidth: "w-2/3",
2233
},
2334
high: {
24-
label: "High",
25-
icon: "🔴",
26-
className: "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100",
35+
label: "High Complexity",
36+
icon: Rocket,
37+
bgGradient:
38+
"from-rose-50 to-red-50 dark:from-rose-950/30 dark:to-red-950/30",
39+
borderColor: "border-rose-200 dark:border-rose-800",
40+
iconColor: "text-rose-500 dark:text-rose-400",
41+
badgeClass:
42+
"bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300 border-rose-200 dark:border-rose-700",
43+
progressWidth: "w-full",
2744
},
2845
}[level];
2946

47+
const Icon = effortConfig.icon;
48+
3049
return (
31-
<div className="border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 mt-4 p-6 rounded-lg">
32-
<div className="space-y-4">
33-
<div className="flex items-center justify-between">
34-
<span className="text-lg font-semibold tracking-tight">
35-
Build Effort
36-
</span>
37-
<Badge
38-
className={cn("px-3 py-1 font-medium", effortConfig.className)}
39-
aria-label={`Effort level: ${effortConfig.label}`}
50+
<div
51+
className={cn(
52+
"relative mt-8 mb-8 rounded-xl overflow-hidden",
53+
"border",
54+
effortConfig.borderColor,
55+
"bg-gradient-to-br",
56+
effortConfig.bgGradient,
57+
)}
58+
>
59+
{/* Decorative pattern */}
60+
<div className="absolute inset-0 opacity-5">
61+
<svg className="w-full h-full" xmlns="http://www.w3.org/2000/svg">
62+
<defs>
63+
<pattern
64+
id="build-pattern"
65+
x="0"
66+
y="0"
67+
width="20"
68+
height="20"
69+
patternUnits="userSpaceOnUse"
70+
>
71+
<rect x="0" y="0" width="1" height="20" fill="currentColor" />
72+
<rect x="0" y="0" width="20" height="1" fill="currentColor" />
73+
</pattern>
74+
</defs>
75+
<rect width="100%" height="100%" fill="url(#build-pattern)" />
76+
</svg>
77+
</div>
78+
79+
<div className="relative px-4 py-3">
80+
<div className="flex items-center gap-3">
81+
<div
82+
className={cn(
83+
"flex h-10 w-10 items-center justify-center rounded-md",
84+
"bg-white/60 dark:bg-black/20 backdrop-blur-sm",
85+
"border border-white/50 dark:border-white/10",
86+
)}
4087
>
41-
<span className="mr-1.5">{effortConfig.icon}</span>
42-
{effortConfig.label}
43-
</Badge>
88+
<Icon className={cn("h-5 w-5", effortConfig.iconColor)} />
89+
</div>
90+
91+
<div className="flex-1">
92+
<div className="flex items-center justify-between gap-4">
93+
<span className="text-xs font-medium text-muted-foreground uppercase tracking-wider">
94+
Build Effort
95+
</span>
96+
<Badge
97+
variant="outline"
98+
className={cn("text-xs", effortConfig.badgeClass)}
99+
>
100+
{effortConfig.label}
101+
</Badge>
102+
</div>
103+
104+
<p className="text-sm text-muted-foreground leading-relaxed mt-1 mb-0">
105+
{description}
106+
</p>
107+
</div>
44108
</div>
45-
<p className="text-sm text-gray-600 dark:text-gray-300 leading-relaxed mb-0">
46-
{description}
47-
</p>
48109
</div>
49110
</div>
50111
);

0 commit comments

Comments
 (0)