Files
personal-site/components/Header.js
T
Jesse EgbosionuandClaude Opus 5.5 da7999c52b
CI and Deploy / Build and push image (push) Successful in 39s
CI and Deploy / Deploy to Kubernetes (push) Failing after 2m33s
CI and Deploy / Build site (push) Successful in 20s
feat: remove projects section and availability badge
- Drop projects section, nav link and data (ProjectCard removed in c5ff89f)
- Swap hero "View projects" button for a GitHub link
- Remove "Open to new opportunities" badge

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 21:42:49 +02:00

59 lines
1.8 KiB
JavaScript

import { useEffect, useState } from 'react';
import Link from 'next/link';
import ThemeToggle from './ThemeToggle';
import Icon from './Icon';
const links = [
{ href: '/#about', label: 'About' },
{ href: '/#stack', label: 'Stack' },
];
export default function Header() {
const [scrolled, setScrolled] = useState(false);
const [open, setOpen] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 8);
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
return () => window.removeEventListener('scroll', onScroll);
}, []);
return (
<header className={`header ${scrolled ? 'is-scrolled' : ''} ${open ? 'is-open' : ''}`}>
<nav className="navbar shell">
<Link href="/" className="logo" onClick={() => setOpen(false)}>
<span className="logo-mark">je</span>
<span className="logo-text">
jesseinit<span className="logo-dot">.dev</span>
</span>
</Link>
<div className="nav-links">
{links.map((link) => (
<Link key={link.href} href={link.href} className="nav-link" onClick={() => setOpen(false)}>
{link.label}
</Link>
))}
</div>
<div className="nav-actions">
<ThemeToggle />
<a href="/#contact" className="button button-primary button-small nav-cta">
Contact
</a>
<button
type="button"
className="icon-button nav-menu"
aria-label={open ? 'Close menu' : 'Open menu'}
aria-expanded={open}
onClick={() => setOpen(!open)}
>
<Icon name={open ? 'close' : 'menu'} />
</button>
</div>
</nav>
</header>
);
}