gaurv007 commited on
Commit
66aaa37
Β·
verified Β·
1 Parent(s): 58999e2

fix: ensure Settings, Admin, Login/Signup all render correctly in header nav

Browse files
Files changed (1) hide show
  1. web/components/nav.tsx +214 -74
web/components/nav.tsx CHANGED
@@ -5,7 +5,8 @@ import { usePathname } from "next/navigation";
5
  import type { LucideIcon } from "lucide-react";
6
  import {
7
  ShieldCheck, Menu, X, Crown, GitCompare, LayoutDashboard,
8
- ScanText, Settings, LogIn, Zap, Sparkles, CreditCard
 
9
  } from "lucide-react";
10
  import { useState, useEffect } from "react";
11
  import { createClient } from "@/lib/supabase/client";
@@ -20,10 +21,12 @@ export function Nav() {
20
  const [open, setOpen] = useState(false);
21
  const [userEmail, setUserEmail] = useState<string | null>(null);
22
  const [userRole, setUserRole] = useState<string | null>(null);
 
23
  const [loaded, setLoaded] = useState(false);
24
  const pathname = usePathname();
25
  const isLoggedIn = !!userEmail;
26
  const isAdmin = userRole === "admin";
 
27
 
28
  useEffect(() => {
29
  const supabase = createClient();
@@ -33,16 +36,26 @@ export function Nav() {
33
  if (user) {
34
  const { data: profile } = await supabase
35
  .from("profiles")
36
- .select("role")
37
  .eq("id", user.id)
38
  .single();
39
  setUserRole(profile?.role || "user");
 
40
  }
41
  setLoaded(true);
42
  });
43
  }, []);
44
 
45
- // All links β€” always visible
 
 
 
 
 
 
 
 
 
46
  const mainLinks: NavLink[] = [
47
  { href: "/#features", label: "Features", icon: Sparkles },
48
  { href: "/#pricing", label: "Pricing", icon: CreditCard },
@@ -50,11 +63,6 @@ export function Nav() {
50
  { href: "/dashboard-pages/compare", label: "Compare", icon: GitCompare },
51
  ];
52
 
53
- // Extra links only for logged-in users
54
- const authLinks: NavLink[] = [
55
- { href: "/dashboard-pages/dashboard", label: "Dashboard", icon: LayoutDashboard },
56
- ];
57
-
58
  return (
59
  <nav className="sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-zinc-100">
60
  <div className="max-w-6xl mx-auto px-4 sm:px-5 h-14 flex items-center justify-between">
@@ -65,11 +73,10 @@ export function Nav() {
65
  <span className="hidden sm:inline text-[10px] font-medium text-zinc-400 ml-1 border border-zinc-200 px-1.5 py-0.5 rounded">v4.0</span>
66
  </Link>
67
 
68
- {/* Desktop Nav */}
69
  <div className="hidden md:flex items-center gap-0.5">
70
- {/* Main links β€” always visible */}
71
  {mainLinks.map((l) => {
72
- const Icon = l.icon ?? null;
73
  const isActive = pathname === l.href;
74
  return (
75
  <Link key={l.href} href={l.href}
@@ -81,60 +88,133 @@ export function Nav() {
81
  );
82
  })}
83
 
84
- {/* Dashboard β€” only when logged in */}
85
- {isLoggedIn && authLinks.map((l) => {
86
- const Icon = l.icon ?? null;
87
- const isActive = pathname === l.href;
88
- return (
89
- <Link key={l.href} href={l.href}
 
 
 
 
 
 
 
 
 
 
90
  className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
91
- isActive ? "text-zinc-900 bg-zinc-100 font-medium" : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
 
 
92
  }`}>
93
- {Icon && <Icon className="w-3.5 h-3.5" />}
94
- {l.label}
95
  </Link>
96
- );
97
- })}
98
 
99
- {/* Admin β€” always visible for admins */}
100
- {isAdmin && (
101
- <Link href="/admin"
102
- className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
103
- pathname === "/admin"
104
- ? "text-amber-700 bg-amber-50 font-medium"
105
- : "text-amber-600 hover:text-amber-700 hover:bg-amber-50"
106
- }`}>
107
- <Crown className="w-3.5 h-3.5" /> Admin
108
- </Link>
109
- )}
 
110
 
111
- <div className="w-px h-4 bg-zinc-200 mx-1.5" />
 
 
 
 
 
 
 
 
 
 
 
112
 
113
- {/* Right side β€” auth actions */}
114
- {isLoggedIn ? (
115
- <>
116
  <Link href="/dashboard-pages/settings"
117
  className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
118
- pathname?.includes("settings") ? "text-zinc-900 bg-zinc-100" : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
 
 
119
  }`}>
120
- <Settings className="w-3.5 h-3.5" /> Settings
 
121
  </Link>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  <Link href="/dashboard-pages/analyze"
123
  className="ml-1 px-3 py-1.5 text-[13px] font-medium text-white bg-zinc-900 rounded-md hover:bg-zinc-800 transition-colors flex items-center gap-1.5">
124
  <Zap className="w-3.5 h-3.5" /> New scan
125
  </Link>
126
  </>
127
- ) : (
 
 
 
128
  <>
129
- {loaded && (
130
- <Link href="/auth/login"
131
- className="flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] text-zinc-500 hover:text-zinc-900 rounded-md hover:bg-zinc-50 transition-colors">
132
- <LogIn className="w-3.5 h-3.5" /> Log in
133
- </Link>
134
- )}
 
 
 
 
 
135
  <Link href="/auth/signup"
136
  className="ml-1 px-3 py-1.5 text-[13px] font-medium text-white bg-zinc-900 rounded-md hover:bg-zinc-800 transition-colors">
137
- Get started
138
  </Link>
139
  </>
140
  )}
@@ -146,61 +226,121 @@ export function Nav() {
146
  </button>
147
  </div>
148
 
149
- {/* Mobile Menu */}
150
  {open && (
151
  <div className="md:hidden border-t border-zinc-100 bg-white px-5 py-3 space-y-0.5">
152
- {/* Main links */}
153
  {mainLinks.map((l) => {
154
  const Icon = l.icon ?? null;
 
155
  return (
156
  <Link key={l.href} href={l.href} onClick={() => setOpen(false)}
157
- className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-zinc-600 rounded-md hover:bg-zinc-50">
 
 
158
  {Icon && <Icon className="w-4 h-4 text-zinc-400" />}
159
  {l.label}
160
  </Link>
161
  );
162
  })}
163
 
164
- {/* Auth links */}
165
- {isLoggedIn && (
166
  <>
167
  <div className="h-px bg-zinc-100 my-1.5" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  <Link href="/dashboard-pages/dashboard" onClick={() => setOpen(false)}
169
- className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-zinc-600 rounded-md hover:bg-zinc-50">
 
 
 
 
170
  <LayoutDashboard className="w-4 h-4 text-zinc-400" /> Dashboard
171
  </Link>
 
172
  <Link href="/dashboard-pages/settings" onClick={() => setOpen(false)}
173
- className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-zinc-600 rounded-md hover:bg-zinc-50">
 
 
 
 
174
  <Settings className="w-4 h-4 text-zinc-400" /> Settings
175
  </Link>
176
- </>
177
- )}
178
 
179
- {/* Admin */}
180
- {isAdmin && (
181
- <Link href="/admin" onClick={() => setOpen(false)}
182
- className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-amber-600 rounded-md hover:bg-amber-50">
183
- <Crown className="w-4 h-4" /> Admin Panel
184
- </Link>
185
- )}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
 
187
- <div className="h-px bg-zinc-100 my-1.5" />
 
 
 
 
 
 
 
 
 
 
 
 
188
 
189
- {/* Auth actions */}
190
- {isLoggedIn ? (
191
- <Link href="/dashboard-pages/analyze" onClick={() => setOpen(false)}
192
- className="block px-3 py-2.5 text-sm font-medium text-white bg-zinc-900 rounded-lg text-center hover:bg-zinc-800">
193
- New Scan
194
- </Link>
195
- ) : (
196
  <>
 
 
197
  <Link href="/auth/login" onClick={() => setOpen(false)}
198
- className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-zinc-600 rounded-md hover:bg-zinc-50">
 
 
 
 
199
  <LogIn className="w-4 h-4 text-zinc-400" /> Log in
200
  </Link>
 
201
  <Link href="/auth/signup" onClick={() => setOpen(false)}
202
- className="block px-3 py-2.5 text-sm font-medium text-white bg-zinc-900 rounded-lg text-center hover:bg-zinc-800">
203
- Get started
204
  </Link>
205
  </>
206
  )}
 
5
  import type { LucideIcon } from "lucide-react";
6
  import {
7
  ShieldCheck, Menu, X, Crown, GitCompare, LayoutDashboard,
8
+ ScanText, Settings, LogIn, Zap, Sparkles, CreditCard, UserCircle,
9
+ LogOut, Users
10
  } from "lucide-react";
11
  import { useState, useEffect } from "react";
12
  import { createClient } from "@/lib/supabase/client";
 
21
  const [open, setOpen] = useState(false);
22
  const [userEmail, setUserEmail] = useState<string | null>(null);
23
  const [userRole, setUserRole] = useState<string | null>(null);
24
+ const [userTeam, setUserTeam] = useState<string | null>(null);
25
  const [loaded, setLoaded] = useState(false);
26
  const pathname = usePathname();
27
  const isLoggedIn = !!userEmail;
28
  const isAdmin = userRole === "admin";
29
+ const hasTeam = !!userTeam;
30
 
31
  useEffect(() => {
32
  const supabase = createClient();
 
36
  if (user) {
37
  const { data: profile } = await supabase
38
  .from("profiles")
39
+ .select("role, team_id")
40
  .eq("id", user.id)
41
  .single();
42
  setUserRole(profile?.role || "user");
43
+ setUserTeam(profile?.team_id || null);
44
  }
45
  setLoaded(true);
46
  });
47
  }, []);
48
 
49
+ async function handleSignOut() {
50
+ const supabase = createClient();
51
+ await supabase.auth.signOut();
52
+ setUserEmail(null);
53
+ setUserRole(null);
54
+ setUserTeam(null);
55
+ window.location.href = "/";
56
+ }
57
+
58
+ // Public links β€” always visible
59
  const mainLinks: NavLink[] = [
60
  { href: "/#features", label: "Features", icon: Sparkles },
61
  { href: "/#pricing", label: "Pricing", icon: CreditCard },
 
63
  { href: "/dashboard-pages/compare", label: "Compare", icon: GitCompare },
64
  ];
65
 
 
 
 
 
 
66
  return (
67
  <nav className="sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-zinc-100">
68
  <div className="max-w-6xl mx-auto px-4 sm:px-5 h-14 flex items-center justify-between">
 
73
  <span className="hidden sm:inline text-[10px] font-medium text-zinc-400 ml-1 border border-zinc-200 px-1.5 py-0.5 rounded">v4.0</span>
74
  </Link>
75
 
76
+ {/* ─── Desktop Nav ─── */}
77
  <div className="hidden md:flex items-center gap-0.5">
78
+ {/* Public links β€” always visible */}
79
  {mainLinks.map((l) => {
 
80
  const isActive = pathname === l.href;
81
  return (
82
  <Link key={l.href} href={l.href}
 
88
  );
89
  })}
90
 
91
+ {/* ── Loading skeleton ── */}
92
+ {!loaded && (
93
+ <>
94
+ <div className="w-px h-4 bg-zinc-200 mx-1.5" />
95
+ <div className="flex items-center gap-2">
96
+ <div className="w-14 h-7 bg-zinc-100 rounded-md animate-pulse" />
97
+ <div className="w-20 h-7 bg-zinc-900/10 rounded-md animate-pulse" />
98
+ </div>
99
+ </>
100
+ )}
101
+
102
+ {/* ── Logged-in links ── */}
103
+ {loaded && isLoggedIn && (
104
+ <>
105
+ {/* Dashboard */}
106
+ <Link href="/dashboard-pages/dashboard"
107
  className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
108
+ pathname === "/dashboard-pages/dashboard"
109
+ ? "text-zinc-900 bg-zinc-100 font-medium"
110
+ : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
111
  }`}>
112
+ <LayoutDashboard className="w-3.5 h-3.5" />
113
+ Dashboard
114
  </Link>
 
 
115
 
116
+ {/* Team β€” only when user has a team */}
117
+ {hasTeam && (
118
+ <Link href="/dashboard-pages/team"
119
+ className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
120
+ pathname === "/dashboard-pages/team"
121
+ ? "text-zinc-900 bg-zinc-100 font-medium"
122
+ : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
123
+ }`}>
124
+ <Users className="w-3.5 h-3.5" />
125
+ Team
126
+ </Link>
127
+ )}
128
 
129
+ {/* Admin β€” only for admin role */}
130
+ {isAdmin && (
131
+ <Link href="/admin"
132
+ className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
133
+ pathname === "/admin"
134
+ ? "text-amber-700 bg-amber-50 font-medium"
135
+ : "text-amber-600 hover:text-amber-700 hover:bg-amber-50"
136
+ }`}>
137
+ <Crown className="w-3.5 h-3.5" />
138
+ Admin
139
+ </Link>
140
+ )}
141
 
142
+ <div className="w-px h-4 bg-zinc-200 mx-1.5" />
143
+
144
+ {/* Settings */}
145
  <Link href="/dashboard-pages/settings"
146
  className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
147
+ pathname?.includes("settings")
148
+ ? "text-zinc-900 bg-zinc-100 font-medium"
149
+ : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
150
  }`}>
151
+ <Settings className="w-3.5 h-3.5" />
152
+ Settings
153
  </Link>
154
+
155
+ {/* User indicator + sign out */}
156
+ <div className="relative group ml-1">
157
+ <button className="flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] text-zinc-500 hover:text-zinc-900 rounded-md hover:bg-zinc-50 transition-colors">
158
+ <UserCircle className="w-3.5 h-3.5" />
159
+ <span className="max-w-[100px] truncate">{userEmail?.split("@")[0]}</span>
160
+ </button>
161
+ {/* Dropdown */}
162
+ <div className="absolute right-0 top-full mt-1 w-52 bg-white border border-zinc-200 rounded-xl shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-150 z-50">
163
+ <div className="px-3 py-2.5 border-b border-zinc-100">
164
+ <p className="text-xs text-zinc-400">Signed in as</p>
165
+ <p className="text-sm text-zinc-700 font-medium truncate">{userEmail}</p>
166
+ {isAdmin && (
167
+ <span className="inline-flex items-center gap-1 mt-1 text-[10px] bg-amber-50 text-amber-700 border border-amber-200 px-1.5 py-0.5 rounded">
168
+ <Crown className="w-2.5 h-2.5" /> Admin
169
+ </span>
170
+ )}
171
+ </div>
172
+ <div className="py-1">
173
+ <Link href="/dashboard-pages/settings"
174
+ className="flex items-center gap-2 px-3 py-2 text-sm text-zinc-600 hover:bg-zinc-50">
175
+ <Settings className="w-3.5 h-3.5 text-zinc-400" /> Settings
176
+ </Link>
177
+ {isAdmin && (
178
+ <Link href="/admin"
179
+ className="flex items-center gap-2 px-3 py-2 text-sm text-amber-600 hover:bg-amber-50">
180
+ <Crown className="w-3.5 h-3.5" /> Admin Panel
181
+ </Link>
182
+ )}
183
+ </div>
184
+ <div className="border-t border-zinc-100 py-1">
185
+ <button onClick={handleSignOut}
186
+ className="flex items-center gap-2 px-3 py-2 text-sm text-red-600 hover:bg-red-50 w-full text-left">
187
+ <LogOut className="w-3.5 h-3.5" /> Sign out
188
+ </button>
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+ {/* New scan CTA */}
194
  <Link href="/dashboard-pages/analyze"
195
  className="ml-1 px-3 py-1.5 text-[13px] font-medium text-white bg-zinc-900 rounded-md hover:bg-zinc-800 transition-colors flex items-center gap-1.5">
196
  <Zap className="w-3.5 h-3.5" /> New scan
197
  </Link>
198
  </>
199
+ )}
200
+
201
+ {/* ── Logged-out links ── */}
202
+ {loaded && !isLoggedIn && (
203
  <>
204
+ <div className="w-px h-4 bg-zinc-200 mx-1.5" />
205
+
206
+ <Link href="/auth/login"
207
+ className={`flex items-center gap-1.5 px-2.5 py-1.5 text-[13px] rounded-md transition-colors ${
208
+ pathname === "/auth/login"
209
+ ? "text-zinc-900 bg-zinc-100 font-medium"
210
+ : "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-50"
211
+ }`}>
212
+ <LogIn className="w-3.5 h-3.5" /> Log in
213
+ </Link>
214
+
215
  <Link href="/auth/signup"
216
  className="ml-1 px-3 py-1.5 text-[13px] font-medium text-white bg-zinc-900 rounded-md hover:bg-zinc-800 transition-colors">
217
+ Sign up
218
  </Link>
219
  </>
220
  )}
 
226
  </button>
227
  </div>
228
 
229
+ {/* ─── Mobile Menu ─── */}
230
  {open && (
231
  <div className="md:hidden border-t border-zinc-100 bg-white px-5 py-3 space-y-0.5">
232
+ {/* Public links */}
233
  {mainLinks.map((l) => {
234
  const Icon = l.icon ?? null;
235
+ const isActive = pathname === l.href;
236
  return (
237
  <Link key={l.href} href={l.href} onClick={() => setOpen(false)}
238
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
239
+ isActive ? "text-zinc-900 bg-zinc-100 font-medium" : "text-zinc-600 hover:bg-zinc-50"
240
+ }`}>
241
  {Icon && <Icon className="w-4 h-4 text-zinc-400" />}
242
  {l.label}
243
  </Link>
244
  );
245
  })}
246
 
247
+ {/* ── Mobile loading skeleton ── */}
248
+ {!loaded && (
249
  <>
250
  <div className="h-px bg-zinc-100 my-1.5" />
251
+ <div className="flex flex-col gap-2 px-3">
252
+ <div className="w-full h-10 bg-zinc-100 rounded-lg animate-pulse" />
253
+ <div className="w-full h-10 bg-zinc-900/10 rounded-lg animate-pulse" />
254
+ </div>
255
+ </>
256
+ )}
257
+
258
+ {/* ── Mobile: Logged-in links ── */}
259
+ {loaded && isLoggedIn && (
260
+ <>
261
+ <div className="h-px bg-zinc-100 my-1.5" />
262
+
263
+ {/* User info */}
264
+ <div className="px-3 py-2">
265
+ <p className="text-xs text-zinc-400">Signed in as</p>
266
+ <p className="text-sm text-zinc-700 font-medium truncate">{userEmail}</p>
267
+ </div>
268
+
269
  <Link href="/dashboard-pages/dashboard" onClick={() => setOpen(false)}
270
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
271
+ pathname === "/dashboard-pages/dashboard"
272
+ ? "text-zinc-900 bg-zinc-100 font-medium"
273
+ : "text-zinc-600 hover:bg-zinc-50"
274
+ }`}>
275
  <LayoutDashboard className="w-4 h-4 text-zinc-400" /> Dashboard
276
  </Link>
277
+
278
  <Link href="/dashboard-pages/settings" onClick={() => setOpen(false)}
279
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
280
+ pathname?.includes("settings")
281
+ ? "text-zinc-900 bg-zinc-100 font-medium"
282
+ : "text-zinc-600 hover:bg-zinc-50"
283
+ }`}>
284
  <Settings className="w-4 h-4 text-zinc-400" /> Settings
285
  </Link>
 
 
286
 
287
+ {/* Team */}
288
+ {hasTeam && (
289
+ <Link href="/dashboard-pages/team" onClick={() => setOpen(false)}
290
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
291
+ pathname === "/dashboard-pages/team"
292
+ ? "text-zinc-900 bg-zinc-100 font-medium"
293
+ : "text-zinc-600 hover:bg-zinc-50"
294
+ }`}>
295
+ <Users className="w-4 h-4 text-zinc-400" /> Team
296
+ </Link>
297
+ )}
298
+
299
+ {/* Admin */}
300
+ {isAdmin && (
301
+ <Link href="/admin" onClick={() => setOpen(false)}
302
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
303
+ pathname === "/admin"
304
+ ? "text-amber-700 bg-amber-50 font-medium"
305
+ : "text-amber-600 hover:bg-amber-50"
306
+ }`}>
307
+ <Crown className="w-4 h-4" /> Admin Panel
308
+ </Link>
309
+ )}
310
+
311
+ <div className="h-px bg-zinc-100 my-1.5" />
312
 
313
+ {/* New Scan CTA */}
314
+ <Link href="/dashboard-pages/analyze" onClick={() => setOpen(false)}
315
+ className="flex items-center justify-center gap-2 px-3 py-2.5 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800">
316
+ <Zap className="w-4 h-4" /> New Scan
317
+ </Link>
318
+
319
+ {/* Sign out */}
320
+ <button onClick={() => { handleSignOut(); setOpen(false); }}
321
+ className="flex items-center gap-2.5 px-3 py-2.5 text-sm text-red-600 rounded-md hover:bg-red-50 w-full">
322
+ <LogOut className="w-4 h-4" /> Sign out
323
+ </button>
324
+ </>
325
+ )}
326
 
327
+ {/* ── Mobile: Logged-out links ── */}
328
+ {loaded && !isLoggedIn && (
 
 
 
 
 
329
  <>
330
+ <div className="h-px bg-zinc-100 my-1.5" />
331
+
332
  <Link href="/auth/login" onClick={() => setOpen(false)}
333
+ className={`flex items-center gap-2.5 px-3 py-2.5 text-sm rounded-md ${
334
+ pathname === "/auth/login"
335
+ ? "text-zinc-900 bg-zinc-100 font-medium"
336
+ : "text-zinc-600 hover:bg-zinc-50"
337
+ }`}>
338
  <LogIn className="w-4 h-4 text-zinc-400" /> Log in
339
  </Link>
340
+
341
  <Link href="/auth/signup" onClick={() => setOpen(false)}
342
+ className="flex items-center justify-center gap-2 px-3 py-2.5 text-sm font-medium text-white bg-zinc-900 rounded-lg hover:bg-zinc-800">
343
+ Sign up
344
  </Link>
345
  </>
346
  )}