# CYBERLUX > Neon storefront. Forty-three onion doors. One build. One app. No dead air. 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`. This repo is built to feel like a real underground property while still being a controlled demo environment: - `43` Tor v3 services - stable loopback range `127.0.0.1:8080–8122` - Next bound only to `127.0.0.1:3000` - one `.onion` per major surface - persistent hidden-service identity keyed by `HiddenServiceDir` - self-healing backup / restore of onion key directories ## What It Does CyberLux boots a single Next.js app and projects it through multiple onion entry points. - `hub` is the main storefront - `forum` is Void Aggregate - `exchange` is the classifieds stack - `market` is the full catalog vertical - `search` is Void Crawler - `wiki` is the hidden-wiki layer - `w` is the syndicate shell network - dozens of additional dedicated onions map directly to top-level app routes The routing layer uses host-aware rewrites so a dedicated onion feels like its own property without forking the app into 43 separate deployments. ## One-Command Launch Install system deps first on Debian/Ubuntu: ```bash sudo apt install tor nginx ``` Then run: ```bash chmod +x start.sh ./start.sh ``` What `./start.sh` does: 1. regenerates Tor / nginx / app route maps from `scripts/onion-nodes.json` 2. runs `git pull --ff-only` if the repo has `.git` (failure is non-fatal) 3. runs `npm install` 4. repairs `.next` ownership if a root-owned build left it unwritable 5. runs a production build 6. restores backed-up onion keys if any hidden-service directories are missing 7. installs Tor + nginx config only when it actually changed 8. waits for all onion hostname files, not just the hub 9. refreshes the onion key backup set 10. prints every live `.onion` URL 11. starts Next on `127.0.0.1:3000` Use Tor Browser and open the printed URLs as: ```text http://<56-char-v3-address>.onion ``` ## Persistent Onion Addresses Yes: the onion addresses are meant to persist. Each service uses a fixed Tor directory: ```tor HiddenServiceDir /var/lib/tor/ HiddenServicePort 80 127.0.0.1: ``` That means the `.onion` address remains stable as long as: - the `torDir` names in `scripts/onion-nodes.json` do not change - `/var/lib/tor/` is preserved - or the backup set can restore those directories Addresses do **not** rotate on normal app restarts, rebuilds, or standard Tor restarts. ## Self-Healing Onion Identity CyberLux now includes automatic onion key persistence tooling: - `scripts/backup-onion-keys.sh` - `scripts/restore-onion-keys.sh` Backup location: ```text /var/backups/cyberlux-onion-keys/current ``` Behavior: - after boot, ready onion service directories are backed up - on next boot, if a service dir is missing from `/var/lib/tor`, it is restored from backup - Tor identity is preserved across ordinary host mistakes, partial deletions, or service-dir drift recovery This is the difference between “looks cool in a screenshot” and “survives operator error.” ## Tor / nginx Topology Source of truth: - `scripts/onion-nodes.json` Generated artifacts: - `tor/cyberlux-nodes.conf` - `nginx/cyberlux-onion-servers.inc` - `lib/onionRoutes.generated.ts` - `scripts/generated/tor-dirs.txt` - `scripts/generated/onion-labels.tsv` - `scripts/generated/onion-port-range.txt` Install path: - `/etc/tor/cyberlux-nodes.conf` - `/etc/nginx/cyberlux-server-common.inc` - `/etc/nginx/cyberlux-onion-servers.inc` - `/etc/nginx/sites-available/cyberlux-onion` Runtime: - Next.js: `127.0.0.1:3000` - nginx onion vhosts: `127.0.0.1:8080–8122` - Tor exposes the public `.onion` endpoints ## Manual Ops Install or refresh Tor/nginx config: ```bash sudo bash scripts/install-tor-onion.sh ``` Back up onion keys immediately: ```bash sudo bash scripts/backup-onion-keys.sh ``` Restore missing onion keys: ```bash sudo bash scripts/restore-onion-keys.sh ``` Run local-only, skipping Tor/nginx: ```bash CYBERLUX_SKIP_TOR=1 ./start.sh ``` Start app without the helper: ```bash npm run build npm run start:onion ``` ## Boot At Startup `scripts/cyberlux.service` is included as a systemd template for the Next process. Before installing it, set: - `User=` - `Group=` - `WorkingDirectory=` Then install: ```bash sudo install -m 0644 scripts/cyberlux.service /etc/systemd/system/cyberlux.service sudo systemctl daemon-reload sudo systemctl enable --now cyberlux.service ``` Notes: - 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 ## Verification Run the full local verification suite: ```bash npm run verify ``` That checks: - onion config generation - TypeScript - shell syntax for boot / install / backup / restore scripts - full Next production build ## Common Failure: `.next` Permission Hell If you previously ran a build with `sudo`, `.next` may be root-owned and Next will fail with `EACCES` during unlink / diagnostics writes. Fix once: ```bash sudo bash scripts/fix-next-perms.sh ``` Then rerun: ```bash ./start.sh ``` ## Security Notes CyberLux is hardened for a demo stack, not sold as magic invisibility. - Next and nginx bind to loopback only - Tor exposes the onion endpoints - do **not** publish `3000` or `8080–8122` to the public internet - optional host firewall script: `sudo bash scripts/classroom-ufw.sh` - the app can still be insecure if the app code is insecure - operational mistakes still matter more than branding Tor hides service reachability better than raw-IP hosting. It does not redeem bad application logic, bad operator habits, or bad judgment. ## Site Map Core verticals: - `/` hub storefront - `/market` full catalog - `/forum` Void Aggregate - `/exchange` classifieds - `/barter` Ash Pit - `/search` Void Crawler - `/hidden-wiki` wiki layer - `/darknet-atlas` taxonomy / atlas - `/syndicate` shell network - `/dashboard` personal relay - `/account/hidden-services` mirror map There are additional dedicated onions for many top-level routes beyond those. ## Stack - Next.js `16` - React `19` - Tailwind CSS `4` - nginx - Tor hidden services - generated route / host mapping ## Final Word CyberLux is supposed to boot like a machine that knows what it is: - 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 If it starts, it should start hard.