Skip to content

Commit 5d08a26

Browse files
lwinmoepaingclaude
andcommitted
💄 style(navbar): remove contact CTA, add prism gradient sign-in button
Remove contact link from desktop and mobile nav to declutter. Redesign SignInButton with prismatic gradient background and hover glow. Group desktop nav into links + utilities with divider. Add auth to mobile menu. Update CLAUDE.md with motion package rename and dev port 3333. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3e0047f commit 5d08a26

3 files changed

Lines changed: 65 additions & 84 deletions

File tree

CLAUDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ Myanmar Software Engineers (MMSWE) — a community platform showcasing Myanmar s
1010
- **Package Manager**: Bun (primary)
1111
- **Styling**: Tailwind CSS + DaisyUI + Sass
1212
- **Content**: Contentlayer with MDX (profiles and blogs)
13-
- **Animation**: Framer Motion, Three.js / React Three Fiber
13+
- **Animation**: Motion (formerly Framer Motion), Three.js / React Three Fiber
1414
- **Path alias**: `@/*``./src/*`
1515

1616
## Commands
1717

1818
```bash
1919
bun install # Install dependencies
20-
bun dev # Dev server
20+
bun dev --port 3333 # Dev server (port 3333)
2121
bun run build # Build static site (output: ./out)
2222
bun run serve # Serve static build locally
2323
bun run lint # ESLint

src/components/Auth/SignInButton.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,27 @@ export default function SignInButton({ className }: { className?: string }) {
1818
type="button"
1919
onClick={signInWithGoogle}
2020
className={cn(
21-
"flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium",
22-
"bg-white/[0.06] border border-white/[0.08]",
23-
"text-zinc-300 hover:text-white hover:bg-white/[0.1]",
24-
"hover:border-prism-violet/30",
25-
"transition-all duration-300",
21+
"group relative flex items-center gap-2 px-4 py-2 rounded-full text-sm font-bold uppercase tracking-wider overflow-hidden",
22+
"text-white transition-all duration-300",
2623
className
2724
)}
2825
>
29-
<LogIn className="w-4 h-4" />
30-
<span className={mmFont}>{t("signIn")}</span>
26+
{/* Gradient background */}
27+
<span
28+
className="absolute inset-0 rounded-full opacity-90 group-hover:opacity-100 transition-opacity duration-300"
29+
style={{
30+
background: "linear-gradient(135deg, #22d3ee, #a78bfa, #fb7185)",
31+
}}
32+
/>
33+
{/* Hover glow */}
34+
<span
35+
className="absolute inset-0 rounded-full opacity-0 group-hover:opacity-100 transition-opacity duration-500"
36+
style={{
37+
boxShadow: "0 0 20px rgba(167,139,250,0.4), 0 0 40px rgba(34,211,238,0.2)",
38+
}}
39+
/>
40+
<LogIn className="relative z-10 w-3.5 h-3.5" />
41+
<span className={cn("relative z-10", mmFont)}>{t("signIn")}</span>
3142
</button>
3243
);
3344
}

src/components/Common/Navbar/Navbar.tsx

Lines changed: 45 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -352,79 +352,46 @@ const Navbar = () => {
352352
<MseLogo />
353353
</motion.div>
354354

355-
{/* Desktop Links */}
356-
<div className="hidden lg:flex flex-row items-center gap-6 xl:gap-10">
357-
{linkKeys.map((link, i) => (
358-
<NavLink
359-
key={link.key}
360-
href={link.href}
361-
label={t(link.key)}
362-
isActive={path === link.href}
363-
index={i}
364-
mmFont={mmFont}
365-
/>
366-
))}
367-
368-
{/* Language Toggle */}
369-
<motion.div
370-
initial={{ opacity: 0, y: -12 }}
371-
animate={{ opacity: 1, y: 0 }}
372-
transition={{ delay: 0.35, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
373-
>
374-
<LanguageToggle />
375-
</motion.div>
376-
377-
{/* CTA-style Contact link */}
378-
<motion.div
379-
initial={{ opacity: 0, y: -12 }}
380-
animate={{ opacity: 1, y: 0 }}
381-
transition={{ delay: 0.4, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
382-
>
383-
<MseLink
384-
href="/contact-us"
385-
className={cn(
386-
"relative font-display text-[13px] font-bold uppercase tracking-[0.15em]",
387-
"px-4 py-1.5 rounded-full overflow-hidden",
388-
"transition-all duration-300",
389-
path === "/contact-us"
390-
? "text-white"
391-
: "text-zinc-400 hover:text-white"
392-
)}
393-
>
394-
{/* Prism border glow */}
395-
<span
396-
className="absolute inset-0 rounded-full opacity-60"
397-
style={{
398-
padding: "1px",
399-
background: "linear-gradient(135deg, #22d3ee, #a78bfa, #fb7185)",
400-
WebkitMask:
401-
"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",
402-
WebkitMaskComposite: "xor",
403-
maskComposite: "exclude",
404-
}}
405-
/>
406-
<motion.span
407-
className="absolute inset-0 rounded-full opacity-0 hover:opacity-100 transition-opacity duration-300"
408-
style={{
409-
background:
410-
"linear-gradient(135deg, rgba(34,211,238,0.08), rgba(167,139,250,0.08), rgba(251,113,133,0.08))",
411-
}}
412-
whileHover={{ opacity: 1 }}
355+
{/* Desktop Navigation */}
356+
<div className="hidden lg:flex flex-row items-center">
357+
{/* Primary nav links */}
358+
<div className="flex items-center gap-5 xl:gap-8">
359+
{linkKeys.map((link, i) => (
360+
<NavLink
361+
key={link.key}
362+
href={link.href}
363+
label={t(link.key)}
364+
isActive={path === link.href}
365+
index={i}
366+
mmFont={mmFont}
413367
/>
414-
<span className={cn("relative z-10", mmFont)}>{t("contact")}</span>
415-
</MseLink>
416-
</motion.div>
368+
))}
369+
</div>
370+
371+
{/* Prismatic divider */}
372+
<div className="mx-4 xl:mx-5 h-4 w-px bg-gradient-to-b from-transparent via-white/[0.08] to-transparent" />
417373

418-
{/* Auth */}
419-
{!authLoading && (
374+
{/* Utility group */}
375+
<div className="flex items-center gap-3">
420376
<motion.div
421377
initial={{ opacity: 0, y: -12 }}
422378
animate={{ opacity: 1, y: 0 }}
423-
transition={{ delay: 0.45, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
379+
transition={{ delay: 0.35, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
424380
>
425-
{isAuthenticated ? <UserAvatar /> : <SignInButton className="text-[11px] px-3 py-1.5" />}
381+
<LanguageToggle />
426382
</motion.div>
427-
)}
383+
384+
{/* Auth */}
385+
{!authLoading && (
386+
<motion.div
387+
initial={{ opacity: 0, y: -12 }}
388+
animate={{ opacity: 1, y: 0 }}
389+
transition={{ delay: 0.4, duration: 0.5, ease: [0.22, 1, 0.36, 1] }}
390+
>
391+
{isAuthenticated ? <UserAvatar /> : <SignInButton className="text-[11px] px-3 py-1.5" />}
392+
</motion.div>
393+
)}
394+
</div>
428395
</div>
429396

430397
{/* Mobile hamburger */}
@@ -510,23 +477,26 @@ const Navbar = () => {
510477
mmFont={mmFont}
511478
/>
512479
))}
513-
<MobileNavLink
514-
href="/contact-us"
515-
label={t("contact")}
516-
isActive={path === "/contact-us"}
517-
index={linkKeys.length}
518-
onClick={closeMobile}
519-
mmFont={mmFont}
520-
/>
521480
</nav>
522481

523-
{/* Bottom decoration */}
482+
{/* Bottom section — auth + branding */}
524483
<motion.div
525484
className="absolute bottom-12 left-8 right-8"
526485
initial={{ opacity: 0 }}
527486
animate={{ opacity: 1 }}
528487
transition={{ delay: 0.6 }}
529488
>
489+
{/* Auth */}
490+
{!authLoading && (
491+
<div className="mb-5">
492+
{isAuthenticated ? (
493+
<UserAvatar />
494+
) : (
495+
<SignInButton className="w-full justify-center py-2.5" />
496+
)}
497+
</div>
498+
)}
499+
530500
<div className="h-[1px] w-full bg-white/5 mb-4" />
531501
<div className="flex items-center justify-between">
532502
<p className={cn("font-mono text-[10px] text-zinc-600 tracking-widest uppercase", mmFont)}>

0 commit comments

Comments
 (0)