/* P.E.S.T — content sections: Manifesto, Structure, Members + Modal, Partners, Footer */ const { useState: useS, useEffect: useE } = React; function useReveal() { useE(() => { const els = document.querySelectorAll(".reveal"); const io = new IntersectionObserver( (entries) => entries.forEach((e) => e.isIntersecting && e.target.classList.add("in")), { threshold: 0.12 } ); els.forEach((el) => io.observe(el)); return () => io.disconnect(); }); } /* ---------- Manifesto ---------- */ function Manifesto() { const pts = [ { n: "01", h: "Hivemind", p: "We think together. Knowledge flows freely between nodes — what one learns, the hive learns." }, { n: "02", h: "Trust", p: "Core members share the highest level of trust. It is the foundation everything else is built on." }, { n: "03", h: "Open Door", p: "Anyone who wants to join is welcome as a Member. A seat at the core, however, is earned." }, { n: "04", h: "Global, DE-rooted", p: "Members span the globe, but our roots and working language are German. English is our shared front door." }, ]; return (
Manifesto

P.E.S.T is a single mind running on many people — a collective that turns shared web3 knowledge into an edge no one holds alone.

{pts.map((x) => (

{x.n} {x.h}

{x.p}

))}
); } /* ---------- Structure ---------- */ function Structure() { const all = window.PEST_DATA.members; const coCount = all.filter((m) => m.role === "co-leader").length; const coreCount = all.length; const tiers = [ { rank: "01", name: "Leader", count: "1", desc: "Sets direction and holds the hive together.", t1: true }, { rank: "02", name: "Co-Leader", count: String(coCount), desc: "Right hands to the Leader — operations and steering." }, { rank: "03", name: "Core-Member", count: String(coreCount), desc: "The trusted inner circle. Earned, never given." }, { rank: "04", name: "Member", count: "∞", desc: "The wider hive. Open to everyone who wants in." }, ]; return (
Structure

Four tiers, one organism

{tiers.map((t, i) => (
{t.rank}
{t.name}
{t.desc}
{t.count}
))}
New Core-Members are elected by the existing Core — an absolute majority is required. There is no fixed cap on the core; trust sets the pace.
Special designations

Held in addition to a Core-Member's seat — earned for what they bring to the hive.

Oracle

Members who consistently stand out — sharp calls, signal, and insight that lifts the whole hive.

Genetic Coder

Keepers of the machine — responsible for P.E.S.T's IT infrastructure, tooling and the tech that runs underneath.

); } /* ---------- Members ---------- */ // Sort order: Leader -> Co-Leader -> Genetic Coder -> Oracle -> rest (stable within group) function sortPriority(m) { if (m.role === "leader") return 0; if (m.role === "co-leader") return 1; if ((m.tags || []).includes("genetic-coder")) return 2; if ((m.tags || []).includes("oracle")) return 3; return 4; } function sortMembers(list) { return list .map((m, i) => [m, i]) .sort((a, b) => sortPriority(a[0]) - sortPriority(b[0]) || window.badgePriority(a[0]) - window.badgePriority(b[0]) || a[1] - b[1]) .map((x) => x[0]); } const BADGE_META = { leader: { full: "Leader", short: "Leader", cls: "lead" }, "co-leader": { full: "Co-Leader", short: "Co-Lead", cls: "co" }, oracle: { full: "Oracle", short: "Oracle", cls: "oracle" }, "genetic-coder": { full: "Genetic Coder", short: "Coder", cls: "gcoder" }, }; function memberBadges(m) { const b = []; if (m.role === "leader") b.push("leader"); if (m.role === "co-leader") b.push("co-leader"); (m.tags || []).forEach((t) => BADGE_META[t] && b.push(t)); return b; } function roleLabel(m) { if (m.role === "leader") return "Leader"; if (m.role === "co-leader") return "Co-Leader"; if ((m.tags || []).includes("oracle")) return "Oracle"; if ((m.tags || []).includes("genetic-coder")) return "Genetic Coder"; return "Core-Member"; } function HMedals({ m, big }) { const hb = window.honoraryBadges ? window.honoraryBadges(m) : []; if (!hb.length) return null; return (
{hb.map((k) => { const B = window.HBADGE[k]; const I = B.icon; return ; })}
); } function Avatar({ m, pfp, big }) { const initials = m.nick.slice(0, 2); const img = pfp && pfp.img; return (
{img ? {m.nick} : {initials}}
); } function MemberCard({ m, onOpen }) { const badges = memberBadges(m); return (
onOpen(m)}> {badges.length > 0 && (
{badges.map((b) => ( {BADGE_META[b].short} ))}
)} {m.pfps.length > 1 && {m.pfps.length}×}
{m.nick}
{roleLabel(m)}
); } function DiscordPill({ user }) { const [copied, setCopied] = useS(false); const copy = () => { navigator.clipboard && navigator.clipboard.writeText(user); setCopied(true); setTimeout(() => setCopied(false), 1400); }; return ( ); } function scrollToPartner(abbr) { const p = (window.PEST_DATA.partners || []).find((x) => x.abbr === abbr); if (!p) return; const el = document.getElementById("partner-" + p.id); if (!el) return; const top = el.getBoundingClientRect().top + window.scrollY - 90; window.scrollTo({ top, behavior: "smooth" }); el.classList.add("p-flash"); setTimeout(() => el.classList.remove("p-flash"), 1600); } function MemberModal({ m, onClose, onGoPartner }) { const [idx, setIdx] = useS(0); useE(() => { const k = (e) => e.key === "Escape" && onClose(); window.addEventListener("keydown", k); return () => window.removeEventListener("keydown", k); }, []); useE(() => setIdx(0), [m]); if (!m) return null; const socials = Object.keys(m.socials || {}); const badges = memberBadges(m); const pfp = m.pfps[idx] || m.pfps[0]; return (
e.stopPropagation()}>
{roleLabel(m)}
{m.nick}
PFP · {pfp.name} {pfp.partner && ( )}
{badges.length > 0 && (
{badges.map((b) => ( {BADGE_META[b].full} ))}
)} {window.honoraryBadges(m).length > 0 && (
{window.honoraryBadges(m).map((k) => { const B = window.HBADGE[k]; const I = B.icon; return {B.label}; })}
)}
{m.pfps.length > 1 && (
PFP Collection
{m.pfps.map((p, i) => ( ))}
)} {m.desc ?

{m.desc}

:

No bio yet.

} {(socials.length > 0 || m.discord) && (
{socials.map((s) => { const meta = window.SOCIAL_META[s]; const I = meta.icon; return ( {meta.label} ); })} {m.discord && }
)}
); } function Members() { const [open, setOpen] = useS(null); const data = sortMembers(window.PEST_DATA.members); return (
Core Members

The inner circle

Thirty nodes of trust. Tap any member to see their dossier and personal channels.

{data.map((m, i) => )}
{open && setOpen(null)} onGoPartner={(abbr) => { setOpen(null); setTimeout(() => scrollToPartner(abbr), 80); }} />}
); } /* ---------- Partners ---------- */ function Partners() { const data = window.PEST_DATA.partners; return (
Allies

Partner communities

Collectives we build, share and ship alongside. Placeholders for now — your real partners drop in here.

{data.map((p, i) => (
{p.logo ? {p.name} : p.name.slice(0, 1)}
{p.tag}

{p.name}

{p.desc}

{Object.keys(p.links).map((k) => { const meta = window.SOCIAL_META[k]; const I = meta.icon; return ( {meta.label} ); })}
))}
); } /* ---------- Footer ---------- */ function Footer() { return ( ); } Object.assign(window, { Manifesto, Structure, Members, Partners, Footer, useReveal });