/* P.E.S.T Web App — public/guest board (no login). Shows the Core's most-favored projects. */ function Guest({ onExit }) { // Public board data: most-pinned projects + most-watched tokens across all members. // Fetched from the no-auth publicBoard endpoint (the store is empty when not logged in). const [board, setBoard] = useState({ projects: [], tokens: [], loaded: false }); const [qa, setQa] = useState(null); useEffect(() => { let alive = true; window.PEST_APP.api.publicBoard() .then((r) => { if (alive) setBoard({ projects: r.projects || [], tokens: r.tokens || [], loaded: true }); }) .catch(() => { if (alive) setBoard({ projects: [], tokens: [], loaded: true }); }); return () => { alive = false; }; }, []); const ranked = board.projects.slice(0, 8); const pos = window.orbitPositions(ranked.length); return (
P.E.S.T P.E.S.T
Public board

The Core's favorites

{ranked.length}most-favored projects
P.E.S.T
The Hive
{ranked.map((p, i) => (
setQa(p)}> {p.name}
))}
Locked

Want your own dashboard?

This is a glimpse of the hive. Build your personal node, pin your projects and share referrals — earn your rank among the Core Members.

Join the hive
{qa && setQa(null)} />}
); } /* read-only quick access for guests (no pin/unpin) */ function QuickAccessGuest({ project, onClose }) { useEffect(() => { const k = (e) => e.key === "Escape" && onClose(); window.addEventListener("keydown", k); return () => window.removeEventListener("keydown", k); }, []); const links = Object.keys(project.links || {}).filter((k) => project.links[k]); return (
e.stopPropagation()}>

{project.name}

{((project.categories && project.categories.length) ? project.categories : (project.category ? [project.category] : [])).map((c) => {c})}
{links.map((k) => { const meta = window.A_SOCIAL[k]; const I = meta.icon; return {meta.label}; })}
{project.links.website && Open}
); } window.Guest = Guest; window.QuickAccessGuest = QuickAccessGuest;