/** Themed relay slugs — each `/w/[slug]` applies a different chrome; routing stays in-app. */ export type SyndicateEntry = { slug: string; tagline: string; /** Visual bucket for /w/[slug] chrome */ skin: number; }; /** Relay catalogue — each `/w/[slug]` maps to a layout skin bucket. */ export const SYNDICATE_NODES: SyndicateEntry[] = [ { slug: "voidmail", tagline: "Dead-letter drop UI prototype", skin: 0 }, { slug: "glasshouse", tagline: "Mirror node (empty room)", skin: 1 }, { slug: "rustbucket", tagline: "FTP cosplay terminal", skin: 2 }, { slug: "neonvault", tagline: "Savings vaporware vault", skin: 3 }, { slug: "papertrail", tagline: "Audit log aesthetic", skin: 4 }, { slug: "ghostcart", tagline: "Abandoned cart shrine", skin: 5 }, { slug: "cipherkids", tagline: "PGP meme archive", skin: 6 }, { slug: "midnightbazaar", tagline: "Tile mosaic lobby", skin: 7 }, { slug: "nullsector", tagline: "404 ritual chamber", skin: 0 }, { slug: "echochamber", tagline: "Forum screenshot museum", skin: 1 }, { slug: "tarpit", tagline: "Honeypot styleguide", skin: 2 }, { slug: "liquidsky", tagline: "Gradient overdose", skin: 3 }, { slug: "hardcopy", tagline: "Xerox noir", skin: 4 }, { slug: "softlaunch", tagline: "Beta forever landing", skin: 5 }, { slug: "wiremesh", tagline: "Brutalist wireframe", skin: 6 }, { slug: "dustcover", tagline: "Old hardcover intro", skin: 7 }, { slug: "parallelcart", tagline: "Alternate checkout skin", skin: 0 }, { slug: "sidechannel", tagline: "Noise generator page", skin: 1 }, { slug: "loworbit", tagline: "Satellite status board", skin: 2 }, { slug: "deepfreeze", tagline: "Cold storage copy", skin: 3 }, { slug: "burnerline", tagline: "Disposable number UI", skin: 4 }, { slug: "opalgrid", tagline: "Art deco grids", skin: 5 }, { slug: "inkwell", tagline: "Fountain pen terminal", skin: 6 }, { slug: "cobaltroom", tagline: "Blue chamber index", skin: 7 }, { slug: "sleeveNotes", tagline: "Album liner notes as site", skin: 0 }, { slug: "rollCredits", tagline: "End-credits scroll", skin: 1 }, { slug: "junkdrawer", tagline: "Misc links bucket", skin: 2 }, { slug: "hourglass", tagline: "Timer demo", skin: 3 }, { slug: "patchbay", tagline: "Audio patch console", skin: 4 }, { slug: "snowfield", tagline: "Whitespace maximalism", skin: 5 }, { slug: "redindex", tagline: "Red-string board", skin: 6 }, { slug: "greenroom", tagline: "Backstage pass pasteboard", skin: 7 }, ]; export function syndicateSkinForSlug(slug: string): number { const hit = SYNDICATE_NODES.find((n) => n.slug === slug); if (hit) return hit.skin; let h = 0; for (let i = 0; i < slug.length; i++) h = (h + slug.charCodeAt(i) * (i + 1)) % 8; return h; }