import { motion } from "framer-motion"; import { Link } from "wouter"; import { useQuery } from "@tanstack/react-query"; import { Terminal, Users, Cpu, Globe, ExternalLink, Shield, ArrowLeft, Zap, Lock, Code, Sparkles } from "lucide-react"; interface ApiArchitect { id: string; name: string; role: string; bio: string | null; level: number; xp: number; passportId: string | null; skills: string[] | null; } interface DisplayArchitect { id: string; index: number; name: string; role: string; slug?: string; isReserved?: boolean; isLive?: boolean; } interface Protocol { id: string; name: string; description: string; link?: string; } interface Domain { name: string; purpose: string; } const NUM_RESERVED_SLOTS = 10; const PROTOCOLS: Protocol[] = [ { id: "aegis", name: "AEGIS", description: "Identity & Security Layer", link: "https://github.com" }, { id: "warden", name: "WARDEN", description: "Browser Security Extension", link: "https://chrome.google.com/webstore" }, { id: "lonestar", name: "LONE STAR", description: "Simulation Engine", link: "https://roblox.com" }, ]; const DOMAINS: Domain[] = [ { name: ".foundation", purpose: "Governance & Policy" }, { name: ".studio", purpose: "Labs & Education" }, { name: ".dev", purpose: "Developer Tools" }, { name: ".network", purpose: "Public Directory" }, ]; export default function Network() { const { data: metrics } = useQuery({ queryKey: ["metrics"], queryFn: async () => { const res = await fetch("/api/metrics"); return res.json(); }, }); const { data: liveArchitects = [] } = useQuery({ queryKey: ["directory-architects"], queryFn: async () => { const res = await fetch("/api/directory/architects"); if (!res.ok) return []; return res.json(); }, }); // Combine live architects with reserved slots const displayArchitects: DisplayArchitect[] = [ ...liveArchitects.map((a, index) => ({ id: String(index + 1).padStart(3, "0"), index: index + 1, name: a.name, role: a.role || "Architect", slug: a.passportId || a.name.toLowerCase().replace(/\s+/g, '-'), isLive: true, })), ...Array.from({ length: Math.max(0, NUM_RESERVED_SLOTS - liveArchitects.length) }, (_, i) => ({ id: String(liveArchitects.length + i + 1).padStart(3, "0"), index: liveArchitects.length + i + 1, name: "[RESERVED FOR FOUNDRY]", role: "Available Slot", isReserved: true, })), ]; const activeNodes = liveArchitects.length; return (

The Network

A directory of verified entities in the AeThex ecosystem.

Nodes Detected: {activeNodes}
Last Sync: {new Date().toLocaleDateString()}

The Architects

// Humans
{displayArchitects.map((architect: DisplayArchitect, idx: number) => (
[{architect.id}]
{architect.name} — {architect.role}
{architect.isReserved ? ( Join Foundry ) : architect.isLive && architect.slug ? ( View Profile ) : null}
))}

The Protocols

// Technology
{PROTOCOLS.map((protocol, idx) => (
{protocol.id === "aegis" && } {protocol.id === "warden" && } {protocol.id === "lonestar" && }
{protocol.name} — {protocol.description}
))}

The Domains

// Real Estate
{DOMAINS.map((domain, idx) => (
{domain.name}
{domain.purpose}
))}

Want Your Name on This List?

Join The Foundry and become a verified Architect in the AeThex ecosystem. Your name gets hardcoded into the Network Genesis Block.

Join The Foundry
); }