// Hero + nav for gohegan.net landing. // Layout: compact text block at top, full-width upstream map below. const NAV_ITEMS = [ { label: 'Upstreams', href: '#upstreams' }, { label: 'Network', href: '#network' }, { label: 'Status', href: '#status', external: true }, { label: 'RIPE', href: '#ripe', external: true }, ]; const MarketingNav = () => (
{(() => { return ( <> ); })()}
); const Hero = ({ animate = true, density = 'cosy' }) => { const pad = density === 'compact' ? '56px 32px 40px' : '88px 32px 56px'; return (
{/* Soft radial fade so the grid melts out at the edges */}
AS198657 · announced · 4 upstreams

We carry packets.{" "} Sometimes {" "} with feeling.

gohegan.net {" "} is a small autonomous system — a learning exercise that picked up real-world applications along the way.

If you've landed here from RIPE, a routing table, an abuse contact, or a traceroute that surprised you —{" "} welcome. The facts are{" "} a short scroll away.

); }; // Full-width upstream peering map section. The signature moment. const UpstreamsSection = ({ animate = true }) => (
fig. 1 · upstream topology

Four paths to the rest of the internet.

Every prefix we announce leaves through one of four direct transits — ROUTE64,{" "} Inferno,{" "} Hop179, or{" "} Lagrange — and ends up, sooner or later, at one of fifteen tier-1 networks.{" "} Best-effort routing, sincerely meant.

{animate ? "live · packets at observed rate" : "feed paused"}
28 sessions · 26 ASes · last route update 4h ago
); const Legend = ({ color, border, label }) => ( {label} ); Object.assign(window, { MarketingNav, Hero, UpstreamsSection });