feat: redesign nav & layout

This commit is contained in:
MRMARCABLE
2026-11-10 09:17:58 +07:00
parent beb2e1ee2a
commit 29c0c80747
3 changed files with 111 additions and 19 deletions
+39 -10
View File
@@ -14,26 +14,55 @@ const geistMono = Geist_Mono({
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Marca | Personal Portfolio", title: "Marca | Yohannes Marcel Lalopua — Portfolio",
description: "Informatics Student & Developer Portfolio", description:
"Informatics Student at UKWMS — Web Development, UI/UX, AI Agents & Embedded Systems Portfolio",
}; };
export default function RootLayout({ children }: LayoutProps<"/">) { export default function RootLayout({ children }: LayoutProps<"/">) {
return ( return (
<html <html
lang="en" lang="id"
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`} className={`${geistSans.variable} ${geistMono.variable} h-full antialiased scroll-smooth`}
> >
<body className="min-h-full flex flex-col bg-zinc-950 text-zinc-100"> <body className="relative min-h-full flex flex-col bg-zinc-950 text-zinc-100 selection:bg-emerald-500/20 selection:text-emerald-300">
{/* Ambient top radial spotlight inspired by ArtCraft */}
<div
aria-hidden="true"
className="pointer-events-none fixed inset-x-0 top-0 -z-10 h-96 bg-[radial-gradient(ellipse_60%_50%_at_50%_-10%,rgba(16,185,129,0.10),transparent)]"
/>
<Navbar /> <Navbar />
<main className="flex-1 max-w-3xl w-full mx-auto px-6 py-10">
<main className="flex-1 max-w-4xl w-full mx-auto px-6 py-12">
{children} {children}
</main> </main>
<footer className="border-t border-zinc-800 py-6 text-center text-sm text-zinc-500">
© 2026 Yohannes Marcel Lalopua —{" "} <footer className="border-t border-zinc-800/80 bg-zinc-950/90 py-8">
<a href="https://github.com/" target="_blank" className="text-zinc-300 hover:underline"> <div className="max-w-4xl mx-auto px-6 flex flex-col sm:flex-row items-center justify-between gap-4 text-xs text-zinc-500">
GitHub <div className="flex items-center gap-2 font-mono">
<span className="h-2 w-2 rounded-full bg-emerald-500/80" />
<span>© 2026 YOHANNES MARCEL LALOPUA // UKWMS INFORMATICS</span>
</div>
<div className="flex items-center gap-5 font-mono">
<a
href="https://github.com/MRMARCABLE"
target="_blank"
rel="noopener noreferrer"
className="text-zinc-400 hover:text-zinc-100 transition"
>
GITHUB/MRMARCABLE ↗
</a> </a>
<a
href="https://git-eng.ukwms.ac.id/5803025050"
target="_blank"
rel="noopener noreferrer"
className="text-zinc-400 hover:text-zinc-100 transition"
>
GIT-ENG/5803025050 ↗
</a>
</div>
</div>
</footer> </footer>
</body> </body>
</html> </html>
+57 -6
View File
@@ -1,15 +1,66 @@
"use client";
import Link from "next/link"; import Link from "next/link";
import { usePathname } from "next/navigation";
const navItems = [
{ index: "01", label: "Overview", href: "/" },
{ index: "02", label: "Projects", href: "/projects" },
];
export default function Navbar() { export default function Navbar() {
const pathname = usePathname();
return ( return (
<nav className="border-b border-zinc-800 py-4 px-6"> <header className="sticky top-0 z-50 border-b border-zinc-800/80 bg-zinc-950/80 backdrop-blur-md">
<div className="max-w-3xl mx-auto flex justify-between items-center"> <nav className="max-w-4xl mx-auto px-6 h-16 flex justify-between items-center">
<Link href="/" className="font-bold text-lg tracking-tight">Marca.</Link> <div className="flex items-center gap-3">
<div className="flex gap-6 text-sm text-zinc-400"> <Link
<Link href="/" className="hover:text-white transition">Home</Link> href="/"
<Link href="/projects" className="hover:text-white transition">Projects</Link> className="group flex items-center gap-2.5 font-semibold tracking-tight text-zinc-100"
>
<span className="flex h-7 w-7 items-center justify-center rounded border border-zinc-700/80 bg-zinc-900 font-mono text-xs text-emerald-400 group-hover:border-emerald-500/60 transition">
M
</span>
<span className="text-base font-bold tracking-tight">Marca.</span>
</Link>
<span className="hidden sm:inline-flex items-center gap-1.5 rounded-full border border-zinc-800 bg-zinc-900/70 px-2.5 py-0.5 font-mono text-[11px] text-zinc-400">
<span className="h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse" />
INFORMATICS // UKWMS
</span>
</div> </div>
<div className="flex items-center gap-2 sm:gap-3">
{navItems.map((item) => {
const isActive = pathname === item.href;
return (
<Link
key={item.href}
href={item.href}
className={`px-3 py-1.5 rounded-md text-xs sm:text-sm font-medium transition flex items-center gap-1.5 ${
isActive
? "bg-zinc-800/90 text-zinc-100 border border-zinc-700/80 shadow-xs"
: "text-zinc-400 hover:text-zinc-200 hover:bg-zinc-900/60 border border-transparent"
}`}
>
<span className="font-mono text-[10px] text-zinc-500">
{item.index}
</span>
<span>{item.label}</span>
</Link>
);
})}
<a
href="https://github.com/MRMARCABLE"
target="_blank"
rel="noopener noreferrer"
className="hidden md:inline-flex items-center gap-1.5 ml-1 px-3 py-1.5 rounded-md border border-zinc-800 bg-zinc-900/50 font-mono text-xs text-zinc-300 hover:border-zinc-700 hover:text-white transition"
>
GitHub ↗
</a>
</div> </div>
</nav> </nav>
</header>
); );
} }
+12
View File
@@ -7,6 +7,18 @@ const nextConfig: NextConfig = {
}, },
cacheComponents: true, cacheComponents: true,
partialPrefetching: true, partialPrefetching: true,
images: {
remotePatterns: [
{
protocol: "https",
hostname: "github.com",
},
{
protocol: "https",
hostname: "avatars.githubusercontent.com",
},
],
},
turbopack: { turbopack: {
rules: { rules: {
"*.css": { "*.css": {