File size: 6,850 Bytes
c35213b 5fb7488 c35213b 5fb7488 c35213b 5fb7488 c35213b 5fb7488 c35213b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | import Link from 'next/link';
import { getWebDropsByCategory, checkVipStatus } from '@/lib/db';
import FadeIn from '@/components/FadeIn';
import AnimatedRow from '@/components/AnimatedRow';
import { getServerSession } from "next-auth/next";
import { authOptions } from "@/app/api/auth/[...nextauth]/route";
export default async function Scripts() {
const drops = await getWebDropsByCategory('scripts');
const session = await getServerSession(authOptions);
const discordId = session?.user ? (session.user as any).id : null;
const isVip = discordId ? await checkVipStatus(discordId) : false;
return (
<main className="min-h-[100dvh] bg-transparent text-white selection:bg-white/20 selection:text-white font-sans p-4 md:p-6 lg:p-8 flex flex-col overflow-hidden">
{/* Structural Brutalist Header */}
<header className="flex flex-col md:flex-row justify-between items-start md:items-end mb-8 md:mb-12 border-b-2 border-white pb-6 gap-6 md:gap-0">
<div>
<h1 className="text-4xl md:text-6xl font-black tracking-tighter uppercase mb-2">
Scripts
</h1>
<p className="font-mono text-xs md:text-sm tracking-widest text-zinc-400 uppercase">
[ DIRECTORY . 003 ]
</p>
</div>
<div className="text-left md:text-right">
<p className="font-mono text-[10px] md:text-xs tracking-[0.3em] text-white">
WYVERN SOFTWORKS <span className="text-zinc-600">Β© 2026</span>
</p>
<p className="font-mono text-[10px] tracking-widest text-zinc-500 mt-1">
TOTAL INDEXED: {drops.length}
</p>
</div>
</header>
<div className="flex flex-col md:flex-row gap-8 flex-1 min-h-0">
{/* Module Sidebar */}
<nav className="w-full md:w-56 lg:w-72 flex-shrink-0 border-b md:border-b-0 md:border-r border-white/10 pr-0 md:pr-10 pb-8 md:pb-0 flex flex-col gap-0 overflow-hidden">
<div className="mb-10 hidden md:block">
<Link href="/" className="font-mono text-[9px] tracking-[0.4em] text-zinc-500 hover:text-white transition-all uppercase flex items-center gap-2 group">
<span className="w-4 h-[1px] bg-zinc-800 group-hover:w-8 group-hover:bg-white transition-all" />
RETURN TO BASE
</Link>
</div>
<div className="mb-6 flex flex-col gap-1">
<span className="font-mono text-[10px] tracking-[0.3em] text-zinc-600 uppercase">SYSTEM</span>
<span className="font-black text-xs tracking-tighter uppercase text-white">MODULES</span>
</div>
<div className="flex flex-row md:flex-col gap-2 md:gap-0 overflow-x-auto md:overflow-visible no-scrollbar">
{[
{ id: 'sources', label: 'Sources', active: false, index: '01' },
{ id: 'cracks', label: 'Cracks', active: false, index: '02' },
{ id: 'scripts', label: 'Scripts', active: true, index: '03' },
{ id: 'tools', label: 'Tools', active: false, index: '04' },
].map((mod) => (
<Link
key={mod.id}
href={`/${mod.id}`}
className={`group relative flex items-center justify-between py-3 md:py-4 border-b border-white/5 transition-all ${
mod.active ? 'px-4 bg-white text-black' : 'px-0 text-zinc-500 hover:text-white hover:pl-4'
}`}
>
<div className="flex items-center gap-4">
<span className={`font-mono text-[9px] ${mod.active ? 'text-black/50' : 'text-zinc-800 group-hover:text-zinc-400'}`}>
{mod.index}
</span>
<span className="font-black text-[11px] tracking-widest uppercase italic">
{mod.label}
</span>
</div>
{mod.active && (
<div className="w-1.5 h-1.5 bg-black rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]" />
)}
{!mod.active && (
<span className="opacity-0 group-hover:opacity-100 transition-opacity font-mono text-[10px]">β</span>
)}
</Link>
))}
</div>
<div className="mt-auto pt-12 hidden md:block">
<Link href="/vip" className="relative group block overflow-hidden">
<div className="absolute inset-0 bg-white translate-y-[101%] group-hover:translate-y-0 transition-transform duration-300" />
<div className="border border-white/20 px-6 py-4 flex flex-col gap-1 relative transition-colors group-hover:text-black">
<span className="font-mono text-[8px] tracking-[.3em] text-zinc-500 group-hover:text-black/50 uppercase transition-colors">Access Level</span>
<span className="font-black text-xs tracking-[.2em] uppercase">Request VIP</span>
</div>
</Link>
</div>
</nav>
{/* Main Content Area */}
<div className="flex-1 border border-zinc-800 bg-zinc-950/50 flex flex-col min-h-[500px] md:min-h-0 relative overflow-hidden backdrop-blur-sm">
<FadeIn>
{/* Top Edge Decoration Removed */}
{/* Ledger Table Header (Desktop) */}
<div className="hidden md:grid grid-cols-12 gap-4 px-8 py-5 border-b border-zinc-900 font-mono text-[8px] tracking-[0.3em] text-zinc-600 uppercase bg-black/40">
<div className="col-span-2">TIMESTAMP</div>
<div className="col-span-1">REF</div>
<div className="col-span-4">IDENTIFIER</div>
<div className="col-span-2">LATENCY / AVAIL</div>
<div className="col-span-2">ENCRYPTION / STATUS</div>
<div className="col-span-1 text-right">ACTION</div>
</div>
{/* Ledger Content */}
<div className="flex-1 overflow-y-auto w-full">
{drops.length === 0 ? (
<div className="flex-1 overflow-y-auto flex items-center justify-center p-8 h-full">
<div className="font-mono text-[10px] tracking-[0.2em] text-zinc-600 uppercase text-center border border-zinc-800 border-dashed p-8 w-full max-w-sm">
[ DIRECTORY EMPTY ]
</div>
</div>
) : (
drops.map((drop, i) => (
<AnimatedRow key={drop.id} drop={drop} index={i} prefix="SCR" isVip={isVip} />
))
)}
</div>
</FadeIn>
</div>
</div>
<footer className="mt-8 pt-6 border-t border-zinc-900 flex justify-start items-center text-[9px] font-mono tracking-[0.2em] text-zinc-600 uppercase">
<p>A Project by APRK</p>
</footer>
</main>
);
}
|