Skip to content

Commit 8c4b6c4

Browse files
feat(web): modernize 404 page with premium styling
1 parent 185b625 commit 8c4b6c4

1 file changed

Lines changed: 47 additions & 52 deletions

File tree

apps/web/app/not-found.tsx

Lines changed: 47 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,60 @@
1-
"use client";
1+
'use client';
22

3-
import Link from "next/link";
4-
import { motion } from "framer-motion";
5-
import { MoveLeft, Ghost, AlertCircle } from "lucide-react";
3+
import Link from 'next/link';
4+
import { motion } from 'framer-motion';
5+
import { SectionContainer } from '../components/layout/SectionContainer';
6+
import { Rocket, MoveLeft, AlertCircle } from 'lucide-react';
67

78
export default function NotFound() {
89
return (
9-
<main className="relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-[#0a0a0a] font-sans text-white">
10-
{/* Background "Noise" Grid - Very Gen-Z/Brutalist */}
11-
<div className="absolute inset-0 z-0 opacity-20 [background-image:linear-gradient(#333_1px,transparent_1px),linear-gradient(90deg,#333_1px,transparent_1px)] [background-size:40px_40px]"></div>
12-
13-
{/* Floating Aesthetic Elements */}
14-
<motion.div
15-
animate={{
16-
y: [0, -20, 0],
10+
<main className="min-h-screen bg-[#030303] flex items-center justify-center overflow-hidden relative">
11+
<div className="fixed inset-0 grid-bg opacity-10 pointer-events-none" />
12+
13+
<SectionContainer className="text-center relative z-10">
14+
<div className="flex justify-center mb-12">
15+
<motion.div
16+
animate={{
17+
y: [0, -20, 0],
18+
rotate: [0, 5, -5, 0]
19+
}}
20+
transition={{ duration: 4, repeat: Infinity, ease: "easeInOut" }}
21+
className="relative w-24 h-24 flex items-center justify-center rounded-3xl bg-purple-500/10 border border-purple-500/20 shadow-2xl"
22+
>
23+
<Rocket className="text-purple-500 fill-purple-500/20" size={48} />
1724
</motion.div>
1825
</div>
1926

20-
{/* Slang-heavy Copy */}
21-
<motion.div
22-
initial={{ y: 20, opacity: 0 }}
23-
animate={{ y: 0, opacity: 1 }}
24-
transition={{ delay: 0.2 }}
25-
className="mt-4 space-y-2"
26-
>
27-
<h2 className="text-2xl font-bold uppercase tracking-widest text-yellow-400 md:text-4xl">
28-
Vibe Check: Failed.
29-
</h2>
30-
<p className="max-w-md text-sm font-medium text-zinc-400 md:text-lg">
31-
This page is <span className="text-zinc-100 italic">cooked</span>. Either it never existed, or it&apos;s currently touching grass.
32-
</p>
33-
</motion.div>
34-
35-
{/* Interactive "Back" Button - Neo-Brutalist Style */}
36-
<motion.div
37-
whileHover={{ scale: 1.05 }}
38-
whileTap={{ scale: 0.95 }}
39-
className="mt-12"
40-
>
41-
<Link
42-
href="/"
43-
className="group relative flex items-center gap-3 border-2 border-white bg-white px-8 py-4 font-black text-black transition-colors hover:bg-transparent hover:text-white"
44-
>
45-
<MoveLeft className="transition-transform group-hover:-translate-x-2" />
46-
GO HOME OR WHATEVER
47-
{/* Box Shadow "Pop" - Signature Neo-Brutalist look */}
48-
<div className="absolute -right-2 -bottom-2 -z-10 h-full w-full border-2 border-purple-500 bg-purple-500 transition-transform group-hover:translate-x-1 group-hover:translate-y-1"></div>
49-
</Link>
50-
</motion.div>
27+
<div className="relative">
28+
<h1 className="hero-title mb-6 text-8xl font-black italic tracking-tighter md:text-[12rem] leading-none uppercase text-white opacity-10 select-none">
29+
404
30+
</h1>
31+
32+
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full">
33+
<h2 className="text-4xl md:text-6xl font-black uppercase italic tracking-tighter text-white mb-8">
34+
LOST IN THE <br /> <span className="text-purple-600">SIMULATION.</span>
35+
</h2>
36+
<p className="mx-auto max-w-md text-sm md:text-lg font-bold uppercase tracking-widest text-zinc-500 mb-12">
37+
THE PAGE YOU&apos;RE LOOKING FOR HAS BEEN DE-RESSED. RETURN TO BASE.
38+
</p>
39+
40+
<Link
41+
href="/"
42+
className="inline-flex items-center gap-3 px-10 py-5 bg-white text-black font-black uppercase tracking-widest rounded-2xl transition-all hover:scale-105 shadow-2xl shadow-white/10"
43+
>
44+
<MoveLeft size={20} /> RETURN HOME
45+
</Link>
46+
</div>
47+
</div>
5148

52-
{/* Bottom "Status" Bar */}
53-
<div className="mt-24 flex items-center gap-4 text-xs font-mono uppercase tracking-tighter text-zinc-500">
54-
<span className="flex items-center gap-1">
55-
<AlertCircle size={14} /> status: delulu
49+
{/* Status bar */}
50+
<div className="mt-32 flex items-center justify-center gap-6 text-[10px] font-black uppercase tracking-[0.2em] text-zinc-700">
51+
<span className="flex items-center gap-2">
52+
<AlertCircle size={14} /> STATUS: UNKNOWN_VOID
5653
</span>
57-
<span className="h-1 w-1 rounded-full bg-zinc-700"></span>
58-
<span>loc: unknown_void</span>
59-
<span className="h-1 w-1 rounded-full bg-zinc-700"></span>
60-
<span>rizz: 0</span>
54+
<div className="w-1 h-1 rounded-full bg-zinc-800" />
55+
<span>FREQ: 404.0 MHZ</span>
6156
</div>
62-
</div>
57+
</SectionContainer>
6358
</main>
6459
);
6560
}

0 commit comments

Comments
 (0)