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
293 lines
14 KiB
TypeScript
293 lines
14 KiB
TypeScript
/**
|
||
* Read-only threads: in-world discussion about the CyberLux main storefront / hub.
|
||
* Deterministic timestamps for stable SSR. Not imported by types from forumState (no cycles).
|
||
*/
|
||
|
||
const ANCHOR_MS = 1_738_368_000_000; // fixed epoch for reproducible ordering
|
||
|
||
const RINGS = ["markets", "reputation", "lounge", "opsec", "tech", "crypto"] as const;
|
||
|
||
const AUTHORS = [
|
||
"void_walker",
|
||
"ledger_rat",
|
||
"PGP_moth",
|
||
"EU_shift",
|
||
"tab_hoarder",
|
||
"saltfade",
|
||
"watchtower_09",
|
||
"quietBag",
|
||
"mirror_drifter",
|
||
"canary_flip",
|
||
"neon_sick",
|
||
"GhostLayer",
|
||
"patch_only",
|
||
"tor_baby",
|
||
"xmr_only",
|
||
"checkout_sigh",
|
||
"grid_griefer",
|
||
"VendorPM_me",
|
||
"dead_drop_9",
|
||
"OPSEC_dad",
|
||
"liquidity_lurker",
|
||
"v3_only",
|
||
"signed_or_bust",
|
||
"tails_8gb",
|
||
"slow_ship_ok",
|
||
"finalize_never",
|
||
"FUD_archivist",
|
||
"UI_snob",
|
||
"wallet_scratch",
|
||
"btc_fee_woe",
|
||
"monero_monk",
|
||
"proof_of_receive",
|
||
"browser_leak",
|
||
"hub_regular",
|
||
"clone_scare",
|
||
"support_ticket",
|
||
"cart_abandon",
|
||
"wishlist_only",
|
||
"shipping_zone_B",
|
||
"late_mod_reply",
|
||
] as const;
|
||
|
||
const TITLE_STEMS = [
|
||
"CyberLux hub — who else lives on the neon grid?",
|
||
"Main storefront load times tonight?",
|
||
"That checkout flow is *smooth* compared to last year",
|
||
"Mirror check: does your hub onion match the signed block?",
|
||
"Product cards: gimmick or actually readable on Tails?",
|
||
"Wallet credit top-up — anyone else watching mempool?",
|
||
"Is the hub’s ‘luxury’ theme hurting OPSEC or just funny?",
|
||
"Vendor queue feels shorter this month (hub)",
|
||
"Final thought: never finalize early on the hub",
|
||
"Main link escrow wording — did they tighten the copy?",
|
||
"CyberLux cart: how many tabs before your RAM cries?",
|
||
"Off-topic but the hub particle bg is chef’s kiss",
|
||
"Seriously though, verify the hub PGP every session",
|
||
"Which syndicate relay do you hit before the hub?",
|
||
"Hub search vs endless scroll — preferences?",
|
||
"Checkout address confirmation — triple-check bytes",
|
||
"Anyone benchmark hub on low-RAM tails?",
|
||
"The hub footer links — which ones are Easter eggs?",
|
||
"Marketplace comparison threads always dunk on UI — not CyberLux tho",
|
||
"I showed the hub to a friend — they thought it was a game",
|
||
"Main store vs forum onion — same wallet session is convenient",
|
||
"Scam clones watch: typography on fakes is always off",
|
||
"Hub testimonials page reads like SEO — still addictive",
|
||
"Support page multisig note — matches my saved address",
|
||
"Raffle page on hub: gimmick or real engagement?",
|
||
"Trust score sites mention CyberLux — grain of salt",
|
||
"Reviews blog is over the top but fun to skim",
|
||
"Encrypted comms page — lore or pipeline tease?",
|
||
"I only use the hub for window shopping (I know, I know)",
|
||
"Neural stimulant listing copy is wild — pure cyberpunk mall",
|
||
"Ghost identity pack — fictional but the warning text is solid",
|
||
"Router listing reads like a tech blog ad",
|
||
"Zero-day kit blurb — classroom fiction energy",
|
||
"Mixer page linked from hub — anyone use it?",
|
||
"Comparison chart puts CyberLux first — surprise surprise",
|
||
"Testimonials archived somewhere off-hub?",
|
||
"Security analysis PDF fantasy hits different",
|
||
"Vault page terminal aesthetic >>> hub neon (fight me)",
|
||
"I want a ‘boring’ mode for the hub (accessibility)",
|
||
"Canary string rotation — who watches?",
|
||
"Hub down? check syndicate relays first",
|
||
"Exchange onion vs hub — classifieds vibe is quieter",
|
||
"Hidden wiki from hub ring — good onboarding",
|
||
"Void Aggregate mentions CyberLux in passing — accurate",
|
||
"Anyone else refreshes hub just for the animation timing",
|
||
"BTC verify endpoint — educational or operational?",
|
||
"LocalStorage wallet — fine for demo, not for real funds",
|
||
"Professor said analyze the hub like a phishing trainer",
|
||
"If this were real, I’d still verify PGP twice",
|
||
"Hub feels ‘expensive’ — that’s the point of the skin",
|
||
"Night mode when?",
|
||
"The hub is a meme but the mirror discipline is real",
|
||
"Stop posting main link screenshots without redacting",
|
||
"Opsec: separate browser profile for hub vs clearnet",
|
||
"Mobile tor: hub usable or nah?",
|
||
"I teach friends to read Terms-looking footers on fake DN sites",
|
||
"CyberLux naming is on the nose — students will get it",
|
||
"Main shop categories — which would you rename?",
|
||
"Presswire page sounds like Breitbart for hackers",
|
||
"Awards page is camp — I love it",
|
||
"Tree section on hub is unhinged in the good way",
|
||
"Sanctuary link dead or hidden?",
|
||
"Drops page urgency tricks — discuss",
|
||
"Chat widget copy — ‘encrypted’ but obviously local",
|
||
"Account creation wizard is theatrical",
|
||
"Encryption demo reverses string — cute",
|
||
"I still click every webring link like it’s 2003",
|
||
"Red room page is obviously fiction — good restraint",
|
||
"Inner circle gatekeeping — does it add immersion?",
|
||
"Game page — anyone beat the high score rumor?",
|
||
"Arb academy sounds like a pyramid scheme parody",
|
||
"Wallets page — hardware flex thread when",
|
||
"Messages read-only — intentional frustration?",
|
||
"Mixer lore matches old SR nostalgia threads",
|
||
"Conspiracies board is where hub leaks ‘truth’ lol",
|
||
"Raffle legal text — read before you meme",
|
||
"Easter eggs hunt — collaboration thread",
|
||
"Secret layer password rumors — no spoilers",
|
||
"Profit sim — classroom economics tie-in?",
|
||
"Market page vs hub home — redundant or layered?",
|
||
"Search page index hits vendor stalls now — still better than dead 404",
|
||
"Trees countdown — someone explain the bit",
|
||
] as const;
|
||
|
||
const BODY_STEMS = [
|
||
"I’ve been poking at the main storefront on the hub onion. The grid is heavy but it settles after a second — curious if that matches what others see.",
|
||
"Not stanning anything — just noting the UX reads more ‘premium theme park’ than ‘pastebin’. Useful if you’re training people what polished phishing aspires to.",
|
||
"Mirror list cross-check: gpg says OK. If yours fails, assume clone and restart from a source you trust.",
|
||
"Checkout flow is the part I show new folks: watch how it asks for confirmation. Compare to random Telegram bots.",
|
||
"Anyone else splitting sessions — one tails stick for browsing the hub demo, another for real work?",
|
||
"The product blurbs are obviously fiction for class, but the *shape* of them (claims, urgency, trust cues) is what I annotate.",
|
||
"If the hub ever rotated mirrors, we’d see panic threads here first. Good exercise for students to watch wording.",
|
||
"I like that the forum onion and hub share wallet state in the sim — makes the ‘one operator many doors’ lesson stick.",
|
||
"Tiny gripe: I wish the hub had a plaintext ‘this is a teaching skin’ smaller — but I get why instructors want immersion.",
|
||
"Posting from the ring board because the lounge is noisy. Still about the storefront though.",
|
||
"Syndicate skins are a fun way to show same backend, different faces — main shop is just the brightest face.",
|
||
"Mobile Tor users chime in: scrolling the hub is… a workout. Still readable.",
|
||
"I’m cataloging every ‘trust’ microcopy on the main page for a slides deck. CyberLux is a goldmine of examples.",
|
||
"Don’t screenshot your balance for clout — blur your ops.",
|
||
"The neon palette is memorable. That’s branding students remember — good and bad.",
|
||
"Is it weird I want a ‘boring.gov’ alternate CSS for accessibility demos?",
|
||
"Hub → hidden wiki handoff feels like old hiddenwiki sidebars. Nostalgia hit.",
|
||
"Exchange classifieds + hub checkout = nice story about surface area. More doors, more phishing templates.",
|
||
"If you’re teaching verification, use the hub as ‘what a slick lie can look like’ — then compare to Tor Project docs.",
|
||
"I’m only here for the chatter about layout shifts after deploy. Anyone notice?",
|
||
"Foot Traffic on the sim is zero — but the fiction of ‘steady checkout’ is part of the exercise.",
|
||
"Please don’t paste real addresses or seeds. Keep it classroom-clean.",
|
||
"I keep the hub open in a window while grading — reminds me what good dark-pattern homework looks like.",
|
||
"The raffle copy tries urgency. Worth dissecting sentence by sentence.",
|
||
"Vault terminal theme is my favorite detour from the storefront. Still same deployment.",
|
||
"Someone said the hub feels ‘expensive’ — that’s aesthetic manipulation 101.",
|
||
"Comparison page is obviously tilted; good lesson on ‘review blogs’ with incentives.",
|
||
"Reviews thread exaggerates crypto jargon — perfect red-flag practice for non-experts.",
|
||
"Trust page metrics look scientific — ask students what’s *not* measured.",
|
||
"Security analysis page claims pentest — discuss epistemic humility.",
|
||
"Testimonials read like fanfic — label the persuasion techniques.",
|
||
"Presswire satire hits if you’ve read real leak blogs.",
|
||
"I want a thread compiling every internal link from hub nav — completeness check.",
|
||
"DROP section timing: discuss scarcity cues without moralizing.",
|
||
"Chat widget promises ephemeral — compare to real protocol guarantees.",
|
||
"Encryption demo is toy crypto — highlight why toy ≠ real.",
|
||
"Webring is a cute anachronism — main shop still the anchor property.",
|
||
"If your students think it’s ‘real’, your debrief worked. If they think it’s fake immediately, ask why the cues failed.",
|
||
"Main shop hero headline is doing a lot of work in one sentence.",
|
||
"CyberLux wording overload is intentional — noise as design.",
|
||
"Someone should map hub routes to learning objectives. I started a doc.",
|
||
"I’m impressed how cohesive the fiction is across forum + wiki + exchange.",
|
||
"Please cross-link good mirror hygiene posts from r/opsec when hub threads get sloppy.",
|
||
"BTC verify copy: good place to talk oracle trust & explorers.",
|
||
"Local-only wallet in the sim — emphasize ‘browser storage isn’t a bank’.",
|
||
"The hub isn’t claiming illegal service — it’s claiming *vibes*. Important distinction for legal review.",
|
||
"Night-mode wishlist: lower contrast path for photocopy-gray realism.",
|
||
"I’ve run this on projector — neon pops, students squint, lesson lands.",
|
||
"If clones existed, they’d fix typos last — tell students to grep for weird punctuation on signed posts.",
|
||
"Main grid cards use glow to guide eye — track click heatmaps in class discussion hypothetically.",
|
||
"Footer ‘escrow mandatory’ line is doing legal-ish theater — compare to real market rules of use.",
|
||
"I want more threads about *why* the hub uses luxury signaling — status and underground economies 101.",
|
||
"Exchange onion quieter — hub is the loud neighbor. Both instructive.",
|
||
"Hidden wiki placeholder onions are obviously placeholders — good seed for ‘don’t trust paste’.",
|
||
"Void Aggregate rename fits — aggregates rumors about venues including this one.",
|
||
"Syndicate slugs are a lesson in namespace squatting aesthetics.",
|
||
"Don’t ship ethics complaints to me — I’m just archiving chatter.",
|
||
"Posting so search indexes this ring as ‘people talk about the hub’ — meta, sorry.",
|
||
"If your jam is OPSEC, skim hub marketing and count identity promises. Tally the lies of omission.",
|
||
"Students asked if CyberLux is satire — I said ‘pedagogical dress-up’.",
|
||
"Main shop particle layer: GPU tax — discuss performance as anonymity tradeoff indirectly.",
|
||
"I keep a slide: ‘spot the difference’ hub vs phishing kit screenshots from APWG.",
|
||
"Love how the sim keeps BTC flow imaginary — focus stays on trust UX.",
|
||
"Rumor: new seasonal skin drops on hub — probably false, sounds cool.",
|
||
"Thread purpose: stocking the search results for ‘CyberLux chatter’ assignments.",
|
||
"Carrying discussion from class — hub’s trust badges are decorative; list what would make them meaningful.",
|
||
"If you mirror this demo for your uni, sync your debrief slide — consistency helps.",
|
||
"I’m logging anachronisms between hub pages for a ‘continuity errors’ game.",
|
||
"Someone write a glossary of neon color hex codes on the hub — nerd snipe.",
|
||
"Main link bookmark hygiene: rotate folders, don’t trust autocomplete.",
|
||
"Okay I’ll stop — but seriously the storefront is the course protagonist.",
|
||
] as const;
|
||
|
||
function replyBundle(i: number): { id: string; author: string; body: string; ts: number }[] {
|
||
if (i % 4 === 0) return [];
|
||
const a = AUTHORS[(i + 7) % AUTHORS.length]!;
|
||
const b = AUTHORS[(i + 19) % AUTHORS.length]!;
|
||
const ts0 = ANCHOR_MS - i * 7_200_000 - 400_000;
|
||
const ts1 = ts0 + 180_000;
|
||
const bodies = [
|
||
"Same experience on my end — grid settles fast after first paint.",
|
||
"Hub is loud but the mirror discipline threads are louder. Good.",
|
||
"Showed the checkout confirmation step in lab — students nodded.",
|
||
"If gpg fails, I walk — no exceptions.",
|
||
"Agree it’s a sim — still useful surface for critique.",
|
||
"The neon is doing affect work — not my taste but coherent.",
|
||
"Cross-posting to r/opsec: verify signed blocks before you meme.",
|
||
"I’m here for the typography roasts. Hit me.",
|
||
];
|
||
const one = {
|
||
id: `chatter-${i}-r0`,
|
||
author: a,
|
||
body: bodies[i % bodies.length]!,
|
||
ts: ts0,
|
||
};
|
||
if (i % 4 === 1) return [one];
|
||
return [
|
||
one,
|
||
{
|
||
id: `chatter-${i}-r1`,
|
||
author: b,
|
||
body: bodies[(i + 3) % bodies.length]!,
|
||
ts: ts1,
|
||
},
|
||
];
|
||
}
|
||
|
||
function buildThreads() {
|
||
const out: Array<{
|
||
id: string;
|
||
topicSlug: string;
|
||
title: string;
|
||
author: string;
|
||
body: string;
|
||
ts: number;
|
||
baseScore: number;
|
||
replies: Array<{ id: string; author: string; body: string; ts: number }>;
|
||
}> = [];
|
||
|
||
const total = 140;
|
||
for (let i = 0; i < total; i++) {
|
||
const ring = RINGS[i % RINGS.length]!;
|
||
const title = TITLE_STEMS[i % TITLE_STEMS.length]! + (i >= TITLE_STEMS.length ? ` (#${i})` : "");
|
||
const body =
|
||
BODY_STEMS[i % BODY_STEMS.length]! +
|
||
(i >= BODY_STEMS.length ? `\n\n— thread index ${i}, ring /r/${ring}` : "");
|
||
out.push({
|
||
id: `chatter-${i}`,
|
||
topicSlug: ring,
|
||
title,
|
||
author: AUTHORS[i % AUTHORS.length]!,
|
||
body,
|
||
ts: ANCHOR_MS - i * 7_200_000 - (i % 9) * 450_000,
|
||
baseScore: 24 + ((i * 97) % 5_800),
|
||
replies: replyBundle(i),
|
||
});
|
||
}
|
||
return out;
|
||
}
|
||
|
||
export const SHOP_CHATTER_THREADS = buildThreads();
|
||
|
||
export const SHOP_CHATTER_COUNT = SHOP_CHATTER_THREADS.length;
|
||
|
||
export function getChatterSlice(page: number, pageSize: number) {
|
||
const p = Math.max(1, page);
|
||
const start = (p - 1) * pageSize;
|
||
return {
|
||
items: SHOP_CHATTER_THREADS.slice(start, start + pageSize),
|
||
page: p,
|
||
totalPages: Math.max(1, Math.ceil(SHOP_CHATTER_THREADS.length / pageSize)),
|
||
total: SHOP_CHATTER_THREADS.length,
|
||
};
|
||
}
|