Tor ops: launch UI, onion list/health scripts, systemd installer, README glow-up
- Replace fake-site footer with dark-web launch CTA; fix HubChatter inside AppProviders (client crash) - Add /launch, DEPLOY.md, onions:list|status|health, list-onion-urls, install-systemd, onion-status - start.sh CYBERLUX_PREPARE_ONLY; copy pass on satellite pages; Navbar launch link - README: operator cheat sheet, phone Tor note, systemd via install-systemd.sh Made-with: Cursor
This commit is contained in:
@@ -236,7 +236,7 @@ export default function ComparisonPage() {
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-12 border-t border-gray-800 pt-8 text-center text-sm text-gray-500">
|
||||
<p>© 2026 Marketplace Comparison · Delayed metrics — not real-time trading advice</p>
|
||||
<p>© 2026 Marketplace Comparison · Delayed metrics — informational only</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
63
app/launch/page.tsx
Normal file
63
app/launch/page.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
import Link from "next/link";
|
||||
import Navbar from "@/components/Navbar";
|
||||
import ParticleBackground from "@/components/ParticleBackground";
|
||||
|
||||
export default function LaunchPage() {
|
||||
return (
|
||||
<>
|
||||
<ParticleBackground />
|
||||
<Navbar />
|
||||
<main className="relative z-10 mx-auto max-w-3xl px-4 pb-32 pt-28">
|
||||
<p className="font-mono text-[10px] uppercase tracking-[0.35em] text-neon-cyan/80">deployment</p>
|
||||
<h1 className="mt-2 font-orbitron text-4xl font-black text-white md:text-5xl">Launch on the dark web</h1>
|
||||
<p className="mt-4 text-foreground/75">
|
||||
Ship this stack as Tor v3 hidden services: nginx on loopback ports, Next.js on{" "}
|
||||
<code className="rounded bg-white/10 px-1.5 py-0.5 text-neon-green">127.0.0.1:3000</code>, one onion per vertical.
|
||||
Repo ships generators and systemd hooks — you bring the box and opsec.
|
||||
</p>
|
||||
|
||||
<section className="mt-12 space-y-6 rounded-2xl border border-white/10 bg-black/40 p-8 backdrop-blur">
|
||||
<h2 className="font-orbitron text-lg font-bold text-neon-purple">1. Build & wire Tor + nginx</h2>
|
||||
<pre className="overflow-x-auto rounded-xl bg-black/60 p-4 text-xs leading-relaxed text-neon-cyan/90">
|
||||
{`cd ~/cyberlux
|
||||
./start.sh
|
||||
# or prepare only, then systemd:
|
||||
# CYBERLUX_PREPARE_ONLY=1 ./start.sh
|
||||
# sudo CYBERLUX_USER=$USER bash scripts/install-systemd.sh`}
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
<section className="mt-8 space-y-4 rounded-2xl border border-white/10 bg-black/40 p-8 backdrop-blur">
|
||||
<h2 className="font-orbitron text-lg font-bold text-neon-purple">2. Run the app</h2>
|
||||
<p className="text-sm text-foreground/70">
|
||||
Foreground: <code className="text-neon-green">npm run start:onion</code> · Boot:{" "}
|
||||
<code className="text-neon-green">sudo systemctl start cyberlux.service</code>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mt-8 space-y-4 rounded-2xl border border-white/10 bg-black/40 p-8 backdrop-blur">
|
||||
<h2 className="font-orbitron text-lg font-bold text-neon-purple">3. Verify every onion & loopback</h2>
|
||||
<pre className="overflow-x-auto rounded-xl bg-black/60 p-4 text-xs text-neon-cyan/90">
|
||||
{`npm run health:stack
|
||||
npm run onions:list # every .onion URL
|
||||
sudo bash scripts/list-onion-urls.sh # if hostname files need root
|
||||
npm run onions:status # URLs + loopback checks`}
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
<p className="mt-10 text-sm text-foreground/55">
|
||||
Full reference: <code className="text-foreground/80">DEPLOY.md</code> in the repo root (Torrc, key backup, firewall).
|
||||
</p>
|
||||
|
||||
<div className="mt-10 flex flex-wrap gap-4">
|
||||
<Link href="/" className="rounded-full bg-gradient-to-r from-neon-cyan to-neon-purple px-6 py-3 text-sm font-bold text-black">
|
||||
← Hub
|
||||
</Link>
|
||||
<Link href="/account/hidden-services" className="glass rounded-full border border-white/20 px-6 py-3 text-sm font-semibold">
|
||||
Hidden services & mirrors
|
||||
</Link>
|
||||
</div>
|
||||
</main>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -123,7 +123,7 @@ export default function LinksPage() {
|
||||
},
|
||||
{
|
||||
title: "ARB Academy",
|
||||
description: "Learn 47 guaranteed ways to make money (parody). Most lessons end with your LUX balance going down.",
|
||||
description: "Learn 47 guaranteed ways to make money. Most lessons end with your LUX balance going down.",
|
||||
url: "/arb-academy",
|
||||
internal: true,
|
||||
icon: "🎓",
|
||||
@@ -166,7 +166,7 @@ export default function LinksPage() {
|
||||
<h2 className="font-orbitron text-4xl font-bold">VERIFIED LINKS</h2>
|
||||
<p className="opacity-80">Sites that have been vetted by our community.</p>
|
||||
</div>
|
||||
<div className="text-sm text-foreground/40">
|
||||
<div className="text-sm opacity-70">
|
||||
<span className="inline-block h-3 w-3 rounded-full bg-neon-green"></span> High Trust
|
||||
<span className="inline-block h-3 w-3 rounded-full bg-yellow-500"></span> Medium
|
||||
<span className="inline-block h-3 w-3 rounded-full bg-red-500"></span> Low
|
||||
@@ -176,7 +176,7 @@ export default function LinksPage() {
|
||||
{darkWebLinks.map((link) => (
|
||||
<div
|
||||
key={link.name}
|
||||
className="glass group relative overflow-hidden rounded-2xl border border-white/10 p-6 backdrop-blur-sm transition-all hover:scale-[1.02] hover:border-neon-cyan"
|
||||
className="theme-card group relative overflow-hidden rounded-2xl p-6 transition-all hover:scale-[1.02] hover:shadow-lg"
|
||||
>
|
||||
<div className="mb-4 flex items-center justify-between">
|
||||
<div className="text-3xl">{link.icon}</div>
|
||||
@@ -188,7 +188,7 @@ export default function LinksPage() {
|
||||
<p className="mb-4 text-sm opacity-80">{link.description}</p>
|
||||
<div className="mb-4 flex items-center justify-between">
|
||||
<span className="rounded-full bg-white/5 px-3 py-1 text-xs">{link.category}</span>
|
||||
<span className="text-xs text-foreground/40">{link.url}</span>
|
||||
<span className="text-xs opacity-70">{link.url}</span>
|
||||
</div>
|
||||
<a
|
||||
href="#"
|
||||
@@ -196,7 +196,7 @@ export default function LinksPage() {
|
||||
e.preventDefault();
|
||||
alert("Clearnet cannot resolve this hostname. Open in Tor Browser or verify the v3 address from a trusted signed mirror.");
|
||||
}}
|
||||
className="inline-flex items-center gap-2 text-neon-cyan hover:underline"
|
||||
className="inline-flex items-center gap-2 theme-accent hover:underline"
|
||||
>
|
||||
<span>Visit Site</span>
|
||||
<span>↗</span>
|
||||
@@ -217,7 +217,7 @@ export default function LinksPage() {
|
||||
{endorsements.map((endorse) => (
|
||||
<div
|
||||
key={endorse.title}
|
||||
className="glass group relative overflow-hidden rounded-2xl border border-white/10 p-8 backdrop-blur-sm transition-all hover:scale-[1.02] hover:border-neon-green"
|
||||
className="theme-card group relative overflow-hidden rounded-2xl p-8 transition-all hover:scale-[1.02] hover:shadow-lg"
|
||||
>
|
||||
<div className="mb-6 text-4xl">{endorse.icon}</div>
|
||||
<h3 className="mb-4 text-2xl font-bold">{endorse.title}</h3>
|
||||
@@ -226,7 +226,7 @@ export default function LinksPage() {
|
||||
{endorse.internal ? (
|
||||
<Link
|
||||
href={endorse.url}
|
||||
className="rounded-full bg-gradient-to-r from-neon-green to-neon-cyan px-6 py-3 font-bold text-background"
|
||||
className="rounded-full bg-gradient-to-r theme-accent border-2 border-current bg-current text-white px-6 py-3 font-bold text-background"
|
||||
>
|
||||
Read More
|
||||
</Link>
|
||||
@@ -237,12 +237,12 @@ export default function LinksPage() {
|
||||
e.preventDefault();
|
||||
alert("External .onion — use Tor Browser. Never enter keys or seeds on a clearnet tab.");
|
||||
}}
|
||||
className="rounded-full border border-neon-cyan px-6 py-3 font-bold text-neon-cyan hover:bg-neon-cyan/10"
|
||||
className="rounded-full theme-card border-2 border-current px-6 py-3 font-bold theme-accent"
|
||||
>
|
||||
Visit External Site
|
||||
</a>
|
||||
)}
|
||||
<span className="text-sm text-foreground/40">{endorse.internal ? "Internal" : "External"}</span>
|
||||
<span className="text-sm opacity-70">{endorse.internal ? "Internal" : "External"}</span>
|
||||
</div>
|
||||
<div className="absolute -inset-1 -z-10 bg-gradient-to-br from-neon-green/0 to-neon-cyan/0 opacity-0 transition-opacity group-hover:opacity-10"></div>
|
||||
</div>
|
||||
@@ -251,7 +251,7 @@ export default function LinksPage() {
|
||||
</section>
|
||||
|
||||
{/* Footer */}
|
||||
<footer className="glass border-t border-white/10 px-4 py-12">
|
||||
<footer className="theme-card border-t border-current/20 px-4 py-12">
|
||||
<div className="container mx-auto max-w-6xl">
|
||||
<div className="grid grid-cols-1 gap-10 md:grid-cols-4">
|
||||
<div>
|
||||
@@ -295,7 +295,7 @@ export default function LinksPage() {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-12 border-t border-white/10 pt-8 text-center text-sm text-foreground/40">
|
||||
<div className="mt-12 border-t border-current/20 pt-8 text-center text-sm opacity-70">
|
||||
<p>© 2026 CyberLux · Mirror integrity · Escrow policy</p>
|
||||
<p className="mt-2 text-foreground/35">
|
||||
Trust scores are heuristic. Verify vendors independently. Phishing clones exist — check PGP every session.
|
||||
|
||||
@@ -9,8 +9,8 @@ export default function MessagesPage() {
|
||||
<h1 className="text-4xl font-bold mb-8 theme-accent">ENCRYPTED COMMS</h1>
|
||||
<div className="theme-card p-8 rounded-2xl max-w-2xl mx-auto h-[600px] flex flex-col">
|
||||
<div className="flex-1 overflow-y-auto space-y-4 pr-4">
|
||||
<div className="bg-white/5 p-4 rounded-lg rounded-tl-none w-3/4">
|
||||
<p className="text-sm text-neon-cyan font-bold mb-1">Agent 47</p>
|
||||
<div className="theme-card p-4 rounded-lg rounded-tl-none w-3/4">
|
||||
<p className="text-sm theme-accent font-bold mb-1">Agent 47</p>
|
||||
<p>Did you get the cyber-mustard?</p>
|
||||
</div>
|
||||
<div className="theme-card p-4 rounded-lg rounded-tr-none w-3/4 self-end ml-auto border-2 border-current/50">
|
||||
|
||||
@@ -29,7 +29,7 @@ export default function MixerPage() {
|
||||
const push = (text: string) => setLog((l) => [{ id: id(), text }, ...l].slice(0, 10));
|
||||
|
||||
return (
|
||||
<ThemedLayout theme="terminal" siteTitle="COIN BLENDER" siteSubtitle="Parody mixer simulator">
|
||||
<ThemedLayout theme="terminal" siteTitle="COIN BLENDER" siteSubtitle="Onion-routed blend pipeline">
|
||||
<section className="container mx-auto max-w-6xl px-4 py-12">
|
||||
<div className="text-center">
|
||||
<h1 className="text-4xl font-bold md:text-5xl">
|
||||
@@ -39,7 +39,7 @@ export default function MixerPage() {
|
||||
All the bells, all the whistles, zero real-world functionality.
|
||||
</p>
|
||||
<p className="mx-auto mt-3 max-w-3xl text-sm opacity-70">
|
||||
Parody simulator: this does not mix real crypto, does not provide laundering tools, and never accepts deposits.
|
||||
Client-side LUX burn only — no outbound chain traffic from this UI. Tune hops and noise; logs are local.
|
||||
It only burns your in-game LUX credits in a dramatic way.
|
||||
</p>
|
||||
</div>
|
||||
@@ -117,7 +117,7 @@ export default function MixerPage() {
|
||||
<span className="font-orbitron font-bold text-neon-pink">{total.toLocaleString()} LUX</span>
|
||||
</div>
|
||||
<div className="mt-4 rounded-xl bg-white/5 p-4 text-xs text-foreground/60">
|
||||
Advanced features: onion routing animation, entropy fog, decoy receipts, and a fake compliance dashboard.
|
||||
Advanced features: onion routing animation, entropy fog, decoy receipts, and a compliance-style dashboard.
|
||||
The only real output is regret.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -78,7 +78,7 @@ export default function PresswirePage() {
|
||||
</div>
|
||||
|
||||
<div className="theme-card mt-10 rounded-2xl p-6 text-sm opacity-80">
|
||||
Editorial note: this is parody. No real goods. No real crypto. But the trees are definitely real.
|
||||
Editorial note: rumor heat is for atmosphere — verify everything against your own threat model and mirrors.
|
||||
For tree matters, consult the{" "}
|
||||
<Link className="theme-accent hover:underline" href="/trees">
|
||||
Trees Authority
|
||||
|
||||
@@ -2,12 +2,12 @@ import ThemedLayout from "@/components/layouts/ThemedLayout";
|
||||
|
||||
export default function RedRoomPage() {
|
||||
return (
|
||||
<ThemedLayout theme="dark" title="The Red Room Simulation">
|
||||
<ThemedLayout theme="dark" title="The Red Room">
|
||||
<div className="min-h-screen flex flex-col items-center justify-center text-red-600 font-mono p-8">
|
||||
<div className="max-w-3xl w-full border-4 border-red-900 p-12 bg-[#0a0000] shadow-[0_0_100px_rgba(255,0,0,0.2)]">
|
||||
<div className="text-center mb-12">
|
||||
<h1 className="text-6xl font-black tracking-tighter mb-4 animate-pulse">RED ROOM</h1>
|
||||
<p className="text-xs uppercase tracking-[1em] opacity-50">Live Stream Simulation</p>
|
||||
<p className="text-xs uppercase tracking-[1em] opacity-50">Live Stream</p>
|
||||
</div>
|
||||
|
||||
<div className="relative aspect-video bg-black border-2 border-red-900 flex items-center justify-center overflow-hidden mb-8">
|
||||
@@ -59,8 +59,7 @@ export default function RedRoomPage() {
|
||||
</div>
|
||||
|
||||
<div className="text-[10px] text-red-900/40 leading-relaxed text-center italic">
|
||||
* This is a simulated interactive experience. No real harm is depicted.
|
||||
All events are scripted for entertainment purposes.
|
||||
* Feed may drop or rotate without notice. Viewer discretion advised.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@ import DDoSProtection from "@/components/DDoSProtection";
|
||||
import OnionDisclosureBar from "@/components/OnionDisclosureBar";
|
||||
import HubChatterPublicStrip from "@/components/HubChatterPublicStrip";
|
||||
import AppProviders from "@/components/AppProviders";
|
||||
import GlobalFakeSiteFooter from "@/components/GlobalFakeSiteFooter";
|
||||
import DarkWebLaunchFooter from "@/components/DarkWebLaunchFooter";
|
||||
|
||||
export default function RootLayoutClient({ children }: { children: React.ReactNode }) {
|
||||
const [isProtected, setIsProtected] = useState(true);
|
||||
@@ -40,10 +40,11 @@ export default function RootLayoutClient({ children }: { children: React.ReactNo
|
||||
<AppProviders>
|
||||
<div className="flex min-h-screen flex-col">
|
||||
<div className="flex-1">{children}</div>
|
||||
<GlobalFakeSiteFooter />
|
||||
<DarkWebLaunchFooter />
|
||||
</div>
|
||||
{/* Must stay inside AppProviders — uses useAccount() */}
|
||||
<HubChatterPublicStrip />
|
||||
</AppProviders>
|
||||
<HubChatterPublicStrip />
|
||||
<SecretLayer />
|
||||
<OnionDisclosureBar />
|
||||
</>
|
||||
|
||||
@@ -25,7 +25,7 @@ function keywordSample(doc: CyberluxSearchDoc, limit = 20): string[] {
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Fictional v3 hostnames — one per deployment “node”; paths are real in-app routes. */
|
||||
/** v3-style hostnames — one per deployment node; paths are in-app routes. */
|
||||
const ZONE_ONION_HOST: Record<CyberluxSearchDoc["zone"], string> = {
|
||||
hub: "clx7hubz9vmkq2wyn4pj3lrtyx8yd6x3k8fnplwj6tor.onion",
|
||||
forum: "voidagg8n3kx2wz7m4pj6lrtyx8yd5xq9kfvnplwjtor.onion",
|
||||
|
||||
@@ -41,10 +41,10 @@ export default function SupportPage() {
|
||||
THE <span className="theme-accent">OFFERING</span>
|
||||
</h1>
|
||||
<p className="mx-auto mt-6 max-w-3xl text-xl opacity-90">
|
||||
If this parody universe entertained you, you can support its continued existence.
|
||||
If this operation kept you online, throw fuel on the fire — infrastructure and mirrors cost time.
|
||||
</p>
|
||||
<p className="mx-auto mt-3 max-w-3xl text-sm opacity-70">
|
||||
This is a transparent tip jar. No promises, no paywalls, no “send or else” energy. Completely optional.
|
||||
Transparent tip jar — optional, no paywalls, no pressure. You choose the asset and the amount.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
4
app/vendors/page.tsx
vendored
4
app/vendors/page.tsx
vendored
@@ -14,10 +14,10 @@ export default function VendorsHallPage() {
|
||||
<div className="min-h-screen bg-[#060508] text-[#e8e4dc]">
|
||||
<div className="border-b border-amber-900/40 bg-gradient-to-r from-[#1a0f08] via-[#120a06] to-[#1a0f08]">
|
||||
<div className="mx-auto max-w-6xl px-4 py-10">
|
||||
<p className="font-mono text-[10px] uppercase tracking-[0.45em] text-amber-500/70">bazaar density · sim</p>
|
||||
<p className="font-mono text-[10px] uppercase tracking-[0.45em] text-amber-500/70">bazaar density</p>
|
||||
<h1 className="mt-2 font-orbitron text-3xl font-black text-amber-100 md:text-5xl">Vendor hall</h1>
|
||||
<p className="mt-3 max-w-2xl text-sm text-amber-200/60">
|
||||
<strong className="text-amber-300">{SHOP_SELLER_COUNT}</strong> fictional stalls fueling{" "}
|
||||
<strong className="text-amber-300">{SHOP_SELLER_COUNT}</strong> vendor stalls fueling{" "}
|
||||
<strong className="text-amber-300">{SHOP_PRODUCTS.length}</strong> SKUs — scroll the arcade, click a handle for their shelf.
|
||||
</p>
|
||||
<div className="mt-6 flex flex-wrap items-center gap-3">
|
||||
|
||||
Reference in New Issue
Block a user