"use client"; import Link from "next/link"; import { FormEvent, useMemo, useState } from "react"; import { CYBERLUX_SEARCH_INDEX_SIZE, searchCyberluxIndex, searchZoneLabel, VOID_LEXICON_WORDS, type CyberluxSearchDoc, } from "@/lib/cyberluxSearchIndex"; const LEXICON_FOG_SAMPLE = VOID_LEXICON_WORDS.slice(0, 96); function keywordSample(doc: CyberluxSearchDoc, limit = 20): string[] { const seen = new Set(); const out: string[] = []; for (const w of doc.keywords.split(/\s+/)) { const t = w.trim().toLowerCase(); if (t.length < 3 || seen.has(t)) continue; seen.add(t); out.push(t); if (out.length >= limit) break; } return out; } /** v3-style hostnames — one per deployment node; paths are in-app routes. */ const ZONE_ONION_HOST: Record = { hub: "clx7hubz9vmkq2wyn4pj3lrtyx8yd6x3k8fnplwj6tor.onion", forum: "voidagg8n3kx2wz7m4pj6lrtyx8yd5xq9kfvnplwjtor.onion", exchange: "clxexch4kz8vm7nq2wyn9pj3lrtyx8yd2x6kfnplwj.onion", wiki: "clxwiki3jq8vmkq2wyn4pj6lrtyx8yd7x2k9fmwnplwj.onion", syndicate: "clxsyn7kq2wz8vm4n9pj3lrtyx8yd4x3k6fnplwjtor.onion", account: "clxacct9vmkq2wz8n4pj6lrtyx8yd1x7k3fnplwjtor.onion", }; function onionDisplayLine(doc: CyberluxSearchDoc): string { const host = ZONE_ONION_HOST[doc.zone]; const p = doc.path === "/" ? "" : doc.path; return `http://${host}${p}`; } export default function VoidCrawlerSearchPage() { const [query, setQuery] = useState(""); const [submitted, setSubmitted] = useState(""); const [busy, setBusy] = useState(false); const results = useMemo(() => { if (!submitted.trim()) return []; return searchCyberluxIndex(submitted); }, [submitted]); const onSubmit = (e: FormEvent) => { e.preventDefault(); const q = query.trim(); if (!q) return; setBusy(true); window.setTimeout(() => { setSubmitted(q); setBusy(false); }, 320); }; return (

closed corpus · internal index

VOIDCRAWLER

Crawls {CYBERLUX_SEARCH_INDEX_SIZE} signed routes on{" "} this ring only — hub, forum, exchange, wiki, syndicate shells, and account surfaces. Foreign onions and clearnet bridges are deliberately excluded from the corpus.

corpus lexicon fog · sample tokens

{LEXICON_FOG_SAMPLE.map((w) => ( {w} ))}
setQuery(e.target.value)} placeholder="e.g. forum barter vault checkout atlas…" className="w-full border-2 border-[#00ff4133] bg-black/80 py-4 pl-4 pr-28 font-mono text-sm text-[#00ff41] placeholder:text-[#00ff41]/25 focus:border-[#00ff41] focus:outline-none" />

Tip: multi-word queries match all tokens (AND).

{busy ? (

Walking local routes…

) : null} {!busy && submitted && (

{results.length} hit{results.length === 1 ? "" : "s"} for{" "} {submitted}

)} {results.map((doc) => (
{searchZoneLabel(doc.zone)}

{doc.title}

{onionDisplayLine(doc)}

{doc.description}

{keywordSample(doc).map((kw) => ( {kw} ))}

Route:{" "} {doc.path}

))} {!busy && submitted && results.length === 0 ? (

No in-app routes match that query.

Try ,{" "} , or .

) : null}

void crawler v1 · {CYBERLUX_SEARCH_INDEX_SIZE} documents · internal index only

); }