Files
dark-lord/app/w/[slug]/page.tsx
drjones 78a071ba02 Harden onion boot flow and deepen site surfaces
Add persistent onion key backup and restore, improve startup resilience, and flesh out the major site verticals with richer navigation, search coverage, and operator documentation.

Made-with: Cursor
2026-04-07 21:35:52 -07:00

374 lines
20 KiB
TypeScript

import ThemedLayout from "@/components/layouts/ThemedLayout";
import { HubStrip } from "@/components/syndicate/HubStrip";
import { nodeSkinClass } from "@/lib/nodeSkinChrome";
import { syndicateSkinForSlug } from "@/lib/syndicateNetwork";
type SiteType = 'cc' | 'hacking' | 'training' | 'forum' | 'market' | 'vendor' | 'paywall' | 'leaks' | 'mixer' | 'passport' | 'malware' | 'botnet' | 'zero_day' | 'laundering' | 'counterfeit' | 'insider' | 'drugs' | 'hosting' | 'vpn' | 'dumps';
interface NodeData {
slug: string;
type: SiteType;
theme: 'dark' | 'retro' | 'minimal' | 'hacker' | 'mystic' | 'brutalist' | 'terminal';
title: string;
deploySeed: number;
}
const SITE_TYPES: SiteType[] = ['cc', 'hacking', 'training', 'forum', 'market', 'vendor', 'paywall', 'leaks', 'mixer', 'passport', 'malware', 'botnet', 'zero_day', 'laundering', 'counterfeit', 'insider', 'drugs', 'hosting', 'vpn', 'dumps'];
const THEMES: NodeData['theme'][] = ['dark', 'retro', 'minimal', 'hacker', 'mystic', 'brutalist', 'terminal'];
const VENDOR_IMAGES = [
"https://images.unsplash.com/photo-1550751827-4bd374c3f58b?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1563986768609-322da13575f3?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1558494949-ef010cbdcc51?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1510511459019-5dda7724fd87?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1518770660439-4636190af475?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1504384308090-c894fdcc538d?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1525547719571-a2d4ac8945e2?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1496337589254-7e19d01cec44?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1516259762381-22954d7d3ad2?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1526304640581-d334cdbbf45e?q=80&w=2070&auto=format&fit=crop",
"https://images.unsplash.com/photo-1555680202-c86f0e12f086?q=80&w=2070&auto=format&fit=crop",
];
function generateNodeData(slug: string, deploySeed: number): NodeData {
const slugSeed = slug.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0);
const totalSeed = slugSeed + deploySeed;
const type = SITE_TYPES[totalSeed % SITE_TYPES.length];
const theme = THEMES[totalSeed % THEMES.length];
const title = `${type.toUpperCase()} NODE_${slug.toUpperCase()}`;
return { slug, type, theme, title, deploySeed };
}
export default function DynamicNodePage({ params }: { params: { slug: string } }) {
// Use a build-time seed to ensure variations across different machines/deploys
// In a real app, this would be process.env.DEPLOY_SEED
const deploySeed = parseInt(process.env.NEXT_PUBLIC_DEPLOY_SEED || "42");
const node = generateNodeData(params.slug, deploySeed);
const totalSeed = node.slug.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) + deploySeed;
const vendorImg = VENDOR_IMAGES[totalSeed % VENDOR_IMAGES.length];
const skin = syndicateSkinForSlug(node.slug);
return (
<div className={nodeSkinClass(skin)}>
<ThemedLayout theme={node.theme} title={node.title}>
<HubStrip slug={node.slug} />
<div className="space-y-12">
{node.type === 'vendor' && (
<div className="space-y-8">
<div className="flex flex-col md:flex-row gap-12 items-start">
<img src={vendorImg} className="w-full md:w-64 h-64 object-cover border-4 border-current grayscale hover:grayscale-0 transition-all shadow-[10px_10px_0_rgba(0,0,0,0.2)]" />
<div className="flex-1">
<h2 className="text-5xl font-black mb-4 uppercase tracking-tighter">Vendor: {node.slug}</h2>
<div className="flex gap-4 mb-6">
<div className="bg-current text-black px-2 py-1 text-xs font-bold">RATING: 4.9/5.0</div>
<div className="bg-current text-black px-2 py-1 text-xs font-bold">SALES: {totalSeed * 3}</div>
</div>
<p className="text-lg italic opacity-80 leading-relaxed mb-8">
"Specializing in high-quality digital assets and encrypted communication tools.
Serving the Shadow Network since 2022. Fast delivery, 24/7 support."
</p>
<div className="p-6 border-2 border-dashed border-current/40">
<h4 className="text-xs font-bold uppercase mb-2">PGP PUBLIC KEY</h4>
<pre className="text-[8px] opacity-40 break-all whitespace-pre-wrap">
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.10.10
Comment: https://openpgpjs.org
{Buffer.from(node.slug + deploySeed).toString('base64').repeat(5)}
-----END PGP PUBLIC KEY BLOCK-----
</pre>
</div>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{[1, 2, 3].map(i => (
<div key={i} className="border-2 border-current p-6 bg-current/5 hover:bg-current/10 transition-all">
<h3 className="font-bold uppercase mb-2">Asset_{totalSeed + i}</h3>
<p className="text-xs opacity-60 mb-4">Encrypted data pack containing {totalSeed + i} unique entries.</p>
<div className="flex justify-between items-center">
<span className="font-bold">0.00{i} BTC</span>
<button className="bg-current text-black px-4 py-1 text-[10px] font-bold">BUY</button>
</div>
</div>
))}
</div>
</div>
)}
{node.type === 'paywall' && (
<div className="max-w-md mx-auto text-center space-y-8 py-20">
<div className="text-6xl mb-4 animate-bounce">🔒</div>
<h2 className="text-4xl font-black uppercase tracking-tighter">Access Restricted</h2>
<p className="text-sm opacity-60 leading-relaxed">
This node contains high-value intelligence. To unlock access,
please send 0.005 BTC to the address below.
</p>
<div className="bg-current text-black p-4 font-bold break-all text-xs shadow-[5px_5px_0_rgba(0,0,0,0.2)]">
0x594f1Cf2A72b3f785fcB6ABdFa73B6D76FcC22b8
</div>
<div className="p-8 border-4 border-current bg-current/5">
<h3 className="font-bold uppercase mb-4">Login</h3>
<input type="text" placeholder="USERNAME" className="w-full bg-transparent border-2 border-current p-2 mb-4 text-xs focus:outline-none" />
<input type="password" placeholder="ACCESS KEY" className="w-full bg-transparent border-2 border-current p-2 mb-6 text-xs focus:outline-none" />
<button className="w-full bg-current text-black py-3 font-bold uppercase hover:bg-white/15 transition-colors">
Unlock Node
</button>
</div>
<div className="flex items-center justify-center gap-4 opacity-40">
<div className="w-10 h-10 border-2 border-current flex items-center justify-center font-bold">E</div>
<div className="text-[8px] uppercase text-left">Escrow Assured<br />by ShadowGuard</div>
</div>
</div>
)}
{node.type === 'leaks' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Database Leaks</h2>
<div className="space-y-6">
{[1, 2, 3].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5 flex justify-between items-center">
<div>
<h3 className="text-xl font-bold uppercase">Leak_{totalSeed + i}: GlobalCorp_Internal</h3>
<p className="text-xs opacity-60 mt-1">Size: {totalSeed % 100}GB | Format: SQL/CSV | Date: 2024-03-24</p>
</div>
<button className="border-2 border-current px-6 py-2 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
Download
</button>
</div>
))}
</div>
</div>
)}
{node.type === 'passport' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Digital Identity Services</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{[1, 2].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5">
<h3 className="text-xl font-bold uppercase mb-2">Premium Passport Scan - Region {totalSeed % 5 + i}</h3>
<p className="text-xs opacity-60 mb-4">High-resolution scans. Passes basic KYC checks. Includes utility bill.</p>
<div className="flex justify-between items-center">
<span className="font-bold">0.0{i * 2} BTC</span>
<button className="border-2 border-current px-4 py-1 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
Purchase
</button>
</div>
</div>
))}
</div>
</div>
)}
{node.type === 'malware' && (
<div className="space-y-8">
<h2 className="text-4xl font-mono uppercase border-b-4 border-current pb-4">Malware Repository</h2>
<div className="space-y-6">
{[1, 2, 3].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5 flex justify-between items-center">
<div>
<h3 className="text-xl font-bold uppercase">Ransomware Builder v{totalSeed % 10}.{i}</h3>
<p className="text-xs opacity-60 mt-1">FUD (Fully Undetectable). AES-256 encryption. Custom ransom notes.</p>
</div>
<div className="text-right">
<div className="font-bold mb-2">0.{i * 5} BTC</div>
<button className="bg-current text-black px-6 py-2 font-bold uppercase text-xs hover:bg-white/15 transition-all">
Buy Source
</button>
</div>
</div>
))}
</div>
</div>
)}
{node.type === 'botnet' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Botnet Rental</h2>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{[10, 50, 100].map(k => (
<div key={k} className="p-6 border-2 border-current bg-current/5 text-center">
<h3 className="text-2xl font-bold uppercase mb-2">{k}K Bots</h3>
<p className="text-xs opacity-60 mb-4">IoT devices. High bandwidth. Layer 4/7 attacks.</p>
<div className="text-xl font-bold mb-4">0.0{k} BTC / hr</div>
<button className="w-full border-2 border-current py-2 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
Rent Now
</button>
</div>
))}
</div>
</div>
)}
{node.type === 'zero_day' && (
<div className="space-y-8">
<h2 className="text-4xl font-serif italic border-b-4 border-current pb-4">Zero-Day Exploits</h2>
<div className="space-y-6">
{[1, 2].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5">
<h3 className="text-xl font-bold uppercase mb-2">Exploit_{totalSeed + i}: RCE in Popular CMS</h3>
<p className="text-xs opacity-60 mb-4">Remote Code Execution. Unpatched. Proof of concept included.</p>
<div className="flex justify-between items-center">
<span className="font-bold text-lg">1.{i * 5} BTC</span>
<button className="bg-current text-black px-6 py-2 font-bold uppercase text-xs hover:bg-white/15 transition-all">
Inquire
</button>
</div>
</div>
))}
</div>
</div>
)}
{node.type === 'laundering' && (
<div className="space-y-8 text-center">
<h2 className="text-4xl font-black uppercase mb-4">Crypto Tumbler</h2>
<p className="text-sm opacity-60 mb-8">Clean your coins. Break the chain. 1% fee.</p>
<div className="max-w-md mx-auto p-8 border-4 border-current bg-current/5">
<input type="text" placeholder="Destination Address" className="w-full bg-transparent border-2 border-current p-3 mb-4 text-xs focus:outline-none" />
<div className="flex gap-4 mb-6">
<input type="number" placeholder="Amount (BTC)" className="w-1/2 bg-transparent border-2 border-current p-3 text-xs focus:outline-none" />
<input type="number" placeholder="Delay (Hours)" className="w-1/2 bg-transparent border-2 border-current p-3 text-xs focus:outline-none" />
</div>
<button className="w-full bg-current text-black py-4 font-bold uppercase hover:bg-white/15 transition-colors">
Tumble Coins
</button>
</div>
</div>
)}
{node.type === 'counterfeit' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Counterfeit Currency</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{['USD', 'EUR'].map((currency, i) => (
<div key={currency} className="p-6 border-2 border-current bg-current/5">
<h3 className="text-xl font-bold uppercase mb-2">High-Quality {currency} Bills</h3>
<p className="text-xs opacity-60 mb-4">Passes pen test. UV features. Microprinting.</p>
<ul className="text-xs space-y-2 mb-6">
<li>$1,000 face value - 0.01 BTC</li>
<li>$5,000 face value - 0.04 BTC</li>
<li>$10,000 face value - 0.07 BTC</li>
</ul>
<button className="w-full border-2 border-current py-2 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
Order {currency}
</button>
</div>
))}
</div>
</div>
)}
{node.type === 'insider' && (
<div className="space-y-8">
<h2 className="text-4xl font-serif italic border-b-4 border-current pb-4">Insider Trading Tips</h2>
<div className="space-y-6">
{[1, 2].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5 flex justify-between items-center">
<div>
<h3 className="text-xl font-bold uppercase">Tip_{totalSeed + i}: Upcoming Merger</h3>
<p className="text-xs opacity-60 mt-1">Tech sector. Expected announcement in {i * 3} days.</p>
</div>
<div className="text-right">
<div className="font-bold mb-2">0.{i * 2} BTC</div>
<button className="bg-current text-black px-6 py-2 font-bold uppercase text-xs hover:bg-white/15 transition-all">
Unlock Tip
</button>
</div>
</div>
))}
</div>
</div>
)}
{node.type === 'drugs' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Nootropics & Enhancers</h2>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{['Modafinil', 'Adderall (Generic)', 'LSD (Microdose)'].map((drug, i) => (
<div key={drug} className="p-6 border-2 border-current bg-current/5 text-center">
<h3 className="text-lg font-bold uppercase mb-2">{drug}</h3>
<p className="text-xs opacity-60 mb-4">High purity. Stealth shipping.</p>
<div className="text-xl font-bold mb-4">0.00{i + 1} BTC / g</div>
<button className="w-full border-2 border-current py-2 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
Add to Cart
</button>
</div>
))}
</div>
</div>
)}
{node.type === 'hosting' && (
<div className="space-y-8 text-center">
<h2 className="text-4xl font-mono uppercase mb-4">Bulletproof Hosting</h2>
<p className="text-sm opacity-60 mb-8">Offshore servers. No logs. Ignore DMCA.</p>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{['Shared', 'VPS', 'Dedicated'].map((plan, i) => (
<div key={plan} className="p-6 border-2 border-current bg-current/5">
<h3 className="text-2xl font-bold uppercase mb-2">{plan}</h3>
<ul className="text-xs space-y-2 mb-6 opacity-60">
<li>{i + 1}TB Bandwidth</li>
<li>{i * 2 + 2}GB RAM</li>
<li>DDoS Protection</li>
</ul>
<div className="text-xl font-bold mb-4">0.0{i + 1} BTC / mo</div>
<button className="w-full bg-current text-black py-2 font-bold uppercase text-xs hover:bg-white/15 transition-all">
Deploy
</button>
</div>
))}
</div>
</div>
)}
{node.type === 'vpn' && (
<div className="space-y-8 text-center">
<h2 className="text-4xl font-black uppercase mb-4">Shadow VPN</h2>
<p className="text-sm opacity-60 mb-8">Multi-hop routing. Zero logs. Crypto only.</p>
<div className="max-w-md mx-auto p-8 border-4 border-current bg-current/5">
<h3 className="text-2xl font-bold mb-4">1 Year Subscription</h3>
<div className="text-3xl font-bold mb-6">0.005 BTC</div>
<button className="w-full bg-current text-black py-4 font-bold uppercase hover:bg-white/15 transition-colors">
Generate Config
</button>
</div>
</div>
)}
{node.type === 'dumps' && (
<div className="space-y-8">
<h2 className="text-4xl font-black uppercase border-b-4 border-current pb-4">Data Dumps</h2>
<div className="space-y-6">
{[1, 2, 3].map(i => (
<div key={i} className="p-6 border-2 border-current bg-current/5 flex justify-between items-center">
<div>
<h3 className="text-xl font-bold uppercase">Dump_{totalSeed + i}: Social Media Platform</h3>
<p className="text-xs opacity-60 mt-1">{totalSeed * 1000} records. Emails, passwords, phone numbers.</p>
</div>
<button className="border-2 border-current px-6 py-2 font-bold uppercase text-xs hover:bg-current hover:text-black transition-all">
0.0{i} BTC
</button>
</div>
))}
</div>
</div>
)}
<div className="mt-20 p-8 border-2 border-dashed border-current/20 text-center">
<div className="text-xs uppercase tracking-widest opacity-40">
This node is part of the Shadow Network's infinite expansion protocol.
<br />
Current Node Hash: {Buffer.from(node.slug + deploySeed).toString('hex')}
</div>
</div>
</div>
</ThemedLayout>
</div>
);
}