diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..95d56a4 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,91 @@ +# CyberLux — production on Tor (.onion) + +This app is designed to run **behind nginx on loopback**, with **one Tor v3 hidden service per logical site** (hub, wiki, dedicated verticals, shadow `/w` node). Nginx listens on `127.0.0.1:8080–8122` (see `scripts/onion-nodes.json`); Tor forwards port 80 on each onion to the matching loopback port. **Next.js binds only `127.0.0.1:3000`** — never expose 3000 or the nginx loopback ports to the public internet. + +Onion hostnames are **created locally** when Tor first starts; there are no fixed `.onion` URLs in the repo. Back up `/var/lib/tor/*/hs_ed25519_secret_key` (the install flow uses `scripts/backup-onion-keys.sh`). + +## One-time server setup (Debian/Ubuntu-style) + +```bash +sudo apt update +sudo apt install -y tor nginx curl nodejs npm build-essential +# Or install Node.js LTS from NodeSource / nvm — `node` and `npm` must be on PATH. +``` + +## Deploy the app + +From the repo root (as the user that will own the process): + +```bash +./start.sh +``` + +This will: regenerate Tor/nginx maps from `scripts/onion-nodes.json`, `npm install`, `npm run build`, install Tor+nginx configs (`sudo`), wait for hostname files, print every `.onion` URL, then **foreground** `next start` on `127.0.0.1:3000`. + +For a **one-shot prepare** (build + Tor/nginx, no Next.js — for systemd): + +```bash +CYBERLUX_PREPARE_ONLY=1 ./start.sh +``` + +## systemd — start on boot + +1. Ensure `./start.sh` or `CYBERLUX_PREPARE_ONLY=1 ./start.sh` has been run at least once so `.next` exists and Tor directories are populated. +2. Install the unit (run as root; set user to the account that owns the repo): + +```bash +sudo CYBERLUX_USER=youruser bash scripts/install-systemd.sh +# optional: sudo CYBERLUX_CHOWN_REPO=1 CYBERLUX_USER=youruser bash scripts/install-systemd.sh +``` + +3. Enable **Tor**, **nginx**, and **CyberLux** at boot: + +```bash +sudo systemctl enable tor.service nginx.service cyberlux.service +# if your distro uses tor@default instead of tor: +# sudo systemctl enable tor@default.service nginx.service cyberlux.service +sudo systemctl start tor.service nginx.service cyberlux.service +``` + +4. Check logs: + +```bash +journalctl -u cyberlux.service -f +``` + +5. Health check (local): + +```bash +npm run health:stack +``` + +6. **List every `.onion` URL** and **check that each nginx loopback vhost answers** (needs Tor running; use `sudo` if hostname files are root-only): + +```bash +npm run onions:status +# or: +sudo node scripts/onion-status.cjs +``` + +## Changing the onion map + +1. Edit `scripts/onion-nodes.json`. +2. Run `node scripts/generate-onion-config.cjs` (or `npm run build`, which runs it in `prebuild`). +3. `sudo bash scripts/install-tor-onion.sh` +4. Rebuild/restart the app: `npm run build` and `sudo systemctl restart cyberlux.service` + +## Verification + +```bash +npm run verify +``` + +## Security & compliance + +- You are responsible for **local law**, hosting terms, and **Tor / relay policies**. This repo is a **parody web app**; treat operational security seriously if you run it on a real server. + +## Security notes + +- Only **Tor** should be reachable from outside; bind **nothing** to `0.0.0.0` for this stack. +- Prefer firewall defaults that deny incoming except what you need for SSH. +- Optional: `sudo bash scripts/classroom-ufw.sh` (if present) for a restrictive UFW profile. diff --git a/README.md b/README.md index 40ec067..55373a0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,25 @@ # CYBERLUX -> Neon storefront. Forty-three onion doors. One build. One app. No dead air. +> One Next build. Dozens of v3 onions. Nginx in the middle. Tor does the rest. -CyberLux is a layered Next.js fiction stack built for dark-web literacy, classroom demos, mirror discipline drills, and absurdly overbuilt cyberpunk presentation. It runs one app behind Tor + nginx, then fans that app out into dedicated v3 hidden services for the hub, forum, exchange, market, crawler, syndicate, wiki layer, and every other top-level surface in `scripts/onion-nodes.json`. +CyberLux is a **single** Next.js app projected through **nginx loopbacks** into **one Tor hidden service per vertical** — hub, forum, exchange, market, wiki, syndicate, shadow `/w` nodes, and the rest of `scripts/onion-nodes.json`. Same codebase, same deploy, **different `.onion` front doors** with host-aware rewrites (`proxy.ts` + `X-Cyberlux-Node`). -This repo is built to feel like a real underground property while still being a controlled demo environment: +**Not a toy route list:** stable `HiddenServiceDir` names, backup/restore for onion keys, generated Tor + nginx from one JSON source of truth. Built to **boot, survive operator mistakes, and stay readable under stress**. + +Operator cheat sheet: + +| Command | What | +|--------|------| +| `./start.sh` | Full pipeline: generate → build → Tor/nginx → print **every `.onion` URL** → `next start` on `127.0.0.1:3000` | +| `npm run onions:list` | Print all `http://….onion` URLs from `/var/lib/tor/*/hostname` (use `sudo` if needed) | +| `npm run health:stack` | **Terminal A:** keep `npm run start:onion` running · **Terminal B:** curl Tor/nginx/Next loopbacks | +| `npm run onions:status` | URLs + HTTP probe each nginx vhost | +| `sudo bash scripts/install-systemd.sh` | Install `cyberlux.service` for boot-time Next | +| See **`DEPLOY.md`** | Firewall posture, compliance reminder, full systemd notes | + +**Tor Browser on phone:** use **Onion Browser** (iOS) or **Tor Browser for Android** — Safari/Chrome will **never** resolve `.onion`. Paste the full `http://` + 56-char host + `.onion`; cellular networks sometimes block Tor (try Wi‑Fi). + +This repo ships: - `43` Tor v3 services - stable loopback range `127.0.0.1:8080–8122` @@ -164,29 +179,19 @@ npm run build npm run start:onion ``` -## Boot At Startup +## Boot at startup (systemd) -`scripts/cyberlux.service` is included as a systemd template for the Next process. - -Before installing it, set: - -- `User=` -- `Group=` -- `WorkingDirectory=` - -Then install: +Generate the real unit with your Unix user and repo path (don’t hand-edit placeholders): ```bash -sudo install -m 0644 scripts/cyberlux.service /etc/systemd/system/cyberlux.service -sudo systemctl daemon-reload -sudo systemctl enable --now cyberlux.service +sudo CYBERLUX_USER=$USER bash scripts/install-systemd.sh +sudo systemctl enable --now tor.service nginx.service cyberlux.service +# use `tor@default.service` instead of `tor.service` if your distro names it that way ``` -Notes: +The installer writes `/etc/systemd/system/cyberlux.service` and `/etc/default/cyberlux`. Legacy template notes live in `scripts/cyberlux.service` (prefer the generator). -- Tor and nginx should already be installed and enabled -- the service unit keeps the Next process alive -- Tor/nginx config is still managed by the repo scripts +Tor + nginx must already be configured (`./start.sh` or `sudo bash scripts/install-tor-onion.sh` at least once). ## Verification @@ -259,14 +264,12 @@ There are additional dedicated onions for many top-level routes beyond those. - Tor hidden services - generated route / host mapping -## Final Word +## Final word -CyberLux is supposed to boot like a machine that knows what it is: +If you’re running this, you’re past LARP. The stack is designed to: -- same onion doors -- same identities -- no shallow mirrors -- no fake “self healing” copy without actual restore logic -- no dead routes pretending to be part of the network +- keep **onion identities** across rebuilds when you respect `torDir` names and backups +- expose **only** what Tor publishes — not your loopback ports to the raw internet +- fail **loud** in verification (`npm run verify`) instead of silently rotting -If it starts, it should start hard. +Read **`DEPLOY.md`** before you point real people at it. **You** own jurisdiction, opsec, and what you ship. diff --git a/app/comparison/page.tsx b/app/comparison/page.tsx index cc52d30..2bcfa53 100644 --- a/app/comparison/page.tsx +++ b/app/comparison/page.tsx @@ -236,7 +236,7 @@ export default function ComparisonPage() {
-

© 2026 Marketplace Comparison · Delayed metrics — not real-time trading advice

+

© 2026 Marketplace Comparison · Delayed metrics — informational only

diff --git a/app/launch/page.tsx b/app/launch/page.tsx new file mode 100644 index 0000000..e1d4531 --- /dev/null +++ b/app/launch/page.tsx @@ -0,0 +1,63 @@ +import Link from "next/link"; +import Navbar from "@/components/Navbar"; +import ParticleBackground from "@/components/ParticleBackground"; + +export default function LaunchPage() { + return ( + <> + + +
+

deployment

+

Launch on the dark web

+

+ Ship this stack as Tor v3 hidden services: nginx on loopback ports, Next.js on{" "} + 127.0.0.1:3000, one onion per vertical. + Repo ships generators and systemd hooks — you bring the box and opsec. +

+ +
+

1. Build & wire Tor + nginx

+
+            {`cd ~/cyberlux
+./start.sh
+# or prepare only, then systemd:
+# CYBERLUX_PREPARE_ONLY=1 ./start.sh
+# sudo CYBERLUX_USER=$USER bash scripts/install-systemd.sh`}
+          
+
+ +
+

2. Run the app

+

+ Foreground: npm run start:onion · Boot:{" "} + sudo systemctl start cyberlux.service +

+
+ +
+

3. Verify every onion & loopback

+
+            {`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`}
+          
+
+ +

+ Full reference: DEPLOY.md in the repo root (Torrc, key backup, firewall). +

+ +
+ + ← Hub + + + Hidden services & mirrors + +
+
+ + ); +} diff --git a/app/links/page.tsx b/app/links/page.tsx index ffe56ef..32c5365 100644 --- a/app/links/page.tsx +++ b/app/links/page.tsx @@ -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() {

VERIFIED LINKS

Sites that have been vetted by our community.

-
+
High Trust   Medium   Low @@ -176,7 +176,7 @@ export default function LinksPage() { {darkWebLinks.map((link) => (
{link.icon}
@@ -188,7 +188,7 @@ export default function LinksPage() {

{link.description}

{link.category} - {link.url} + {link.url}
Visit Site @@ -217,7 +217,7 @@ export default function LinksPage() { {endorsements.map((endorse) => (
@@ -251,7 +251,7 @@ export default function LinksPage() { {/* Footer */} -