W3AI Celestial Map
OASIS identity · Surge launches · LabLab builders
Plotting the four anchor systems
"Space is big. Really big. You just won't believe how vastly, hugely, mind-bogglingly big it is."
W3AI
|
× OASIS · CELESTIAL MAP
Surge
LabLab
Galaxy Map
↺ Reset View
⬡ Pre-Check →
ACTIVE
Live tally
—
live
—
OAPPs
—
building
—
partners
—
concepts
—
holonized
Loading galaxy data…
⬡ Filter
◎ Info
↺ Reset
Selected System
Click any system
to explore it
Filter
System Types
All
—
Live
—
Holonic OAPPs
—
Building
—
Partners
—
Concepts
—
Holonized
All holonized
—
Tier Sizes
Grand SuperStar
SuperStar
Star
Planet
Moon
Tech Stack
Holonize a project
to see its languages
Orbit ON
1×
2×
3×
5×
Map View
Labels
Routes
Pangalactic Timebank
2,142
TEA
W12 ·
+42 hrs pledged
Active Quest Cycle
Fabulous Machine · W12
Day
6
of 42 ·
36
remaining
Scroll to zoom · Drag to rotate · Click a system
—
—
Close
// // Position encoding: // New OAPPs land in the "outer discovery arm" (radius 28–48) unless the OAPP // author encodes a specific galaxy position in ourWorldLat / ourWorldLong when // registering: // ourWorldLat (-90 → +90) maps to x (-45 → +45) // ourWorldLong (-180 → +180) maps to z (-45 → +45) // If both are 0 (the default), position is derived deterministically from the UUID. // Collect static OAPP IDs so we never duplicate them const _staticOappIds = new Set( SYSTEMS.filter(s => s.oappId).map(s => s.oappId) ); function _positionFromUuid(uuid) { // Derive a stable position in the outer discovery arm from the UUID hex string. const hex = uuid.replace(/-/g, ''); const angle = (parseInt(hex.slice(0, 8), 16) / 0xffffffff) * Math.PI * 2; const radius = 28 + (parseInt(hex.slice(8, 16), 16) / 0xffffffff) * 20; // 28–48 const y = ((parseInt(hex.slice(16, 24), 16) / 0xffffffff) - 0.5) * 8; // -4..+4 return [ Math.round(Math.cos(angle) * radius * 10) / 10, Math.round(y * 10) / 10, Math.round(Math.sin(angle) * radius * 10) / 10, ]; } function _oappTypeLabel(t) { return { 0:'OAPP', 1:'Console OAPP', 2:'WebAPI OAPP', 3:'Blazor OAPP', 4:'MAUI OAPP', 5:'OAPP Template', 6:'Generated Code' }[t] || 'OAPP'; } function _oappToSystem(oapp) { const pos = (oapp.ourWorldLat || oapp.ourWorldLong) ? [ Math.round(oapp.ourWorldLat / 90 * 45 * 10) / 10, 0, Math.round(oapp.ourWorldLong / 180 * 45 * 10) / 10, ] : _positionFromUuid(oapp.id); const typeLabel = _oappTypeLabel(oapp.oAPPType); return { name: oapp.name, shortName: oapp.name.length > 16 ? oapp.name.slice(0, 14) + '…' : oapp.name, type: 'oapp', pos, subtitle: `${typeLabel} · Holonic OAPP · STAR Registered`, region: 'Outer Arm', sector: 'STARNET Discovery Sector', cat: `${typeLabel} / Holonic OAPP`, desc: oapp.description || `${oapp.name} — registered on STARNET.`, oappId: oapp.id, oappType: typeLabel, oappFeatures: 'STAR Registered,Holonic', link: oapp.link || null, _fromStarnet: true, }; } async function fetchStarnetOapps() { if (!OASIS_API) return; const jwt = window.__OASIS_JWT__ || null; // Try authenticated list first; fall back to public search const endpoints = jwt ? [`${OASIS_API}/api/OAPPs`, `${OASIS_API}/api/OAPPs/search?searchTerm=`] : [`${OASIS_API}/api/OAPPs/search?searchTerm=`]; for (const url of endpoints) { try { const ctrl = new AbortController(); const tid = setTimeout(() => ctrl.abort(), 8000); const headers = { Accept: 'application/json' }; if (jwt) headers['Authorization'] = `Bearer ${jwt}`; const r = await fetch(url, { signal: ctrl.signal, headers }); clearTimeout(tid); if (!r.ok) continue; const body = await r.json(); // Unwrap OASIS envelope: body.result or body.results or body (array) const list = Array.isArray(body) ? body : Array.isArray(body?.result) ? body.result : Array.isArray(body?.results) ? body.results : []; if (!list.length) continue; let added = 0; for (const oapp of list) { if (!oapp?.id || !oapp?.name) continue; if (_staticOappIds.has(oapp.id)) continue; // already in static list if (systemMeshes.some(m => m.userData.oappId === oapp.id)) continue; // already rendered const sys = _oappToSystem(oapp); _addStarnetOapp(sys); added++; } if (added > 0) { renderTally(); renderTicker(); } return; // success — stop trying endpoints } catch { continue; } } } function _addStarnetOapp(s) { if (systemMeshes.some(m => m.userData.name === s.name)) return; const cfg = TYPE_CFG['oapp']; if (!cfg) return; const p = new THREE.Vector3(...s.pos); const glowMat = new THREE.SpriteMaterial({ color: cfg.color, transparent:true, opacity: cfg.glow, depthWrite:false }); const glow = new THREE.Sprite(glowMat); glow.scale.setScalar(cfg.size * 7.5); glow.position.copy(p); scene.add(glow); const geo = new THREE.SphereGeometry(cfg.size * 0.001, 8, 8); const mat = new THREE.MeshBasicMaterial({ color: cfg.color }); const mesh = new THREE.Mesh(geo, mat); mesh.position.copy(p); scene.add(mesh); const visualGeo = new THREE.SphereGeometry(cfg.size * 0.95, 16, 16); const visualMat = new THREE.MeshBasicMaterial({ color: cfg.color }); const visualMesh = new THREE.Mesh(visualGeo, visualMat); visualMesh.position.copy(p); scene.add(visualMesh); mesh.userData = { ...s, glow, visualMesh, _fromStarnet: true }; const div = document.createElement('div'); div.className = 'sys-label'; div.textContent = s.shortName || s.name; div.dataset.type = 'oapp'; document.getElementById('labels-overlay').appendChild(div); systemMeshes.push(mesh); labelDivs.push({ div, mesh }); _staticOappIds.add(s.oappId); } // Fetch STARNET OAPPs 2 seconds after page load (after the static scene is built) setTimeout(fetchStarnetOapps, 2000); // ── Mobile panel toggles ────────────────────────────────────────────────────── window.toggleMobFilter = function() { const fp = document.getElementById('filter-panel'); const btn = document.getElementById('mob-filter-btn'); const open = fp.classList.toggle('mob-open'); btn.classList.toggle('active', open); if (open) { document.getElementById('info-panel').classList.remove('mob-open'); document.getElementById('mob-info-btn').classList.remove('active'); } }; window.toggleMobInfo = function() { const ip = document.getElementById('info-panel'); const btn = document.getElementById('mob-info-btn'); const open = ip.classList.toggle('mob-open'); btn.classList.toggle('active', open); if (open) { document.getElementById('filter-panel').classList.remove('mob-open'); document.getElementById('mob-filter-btn').classList.remove('active'); } }; // Auto-open info panel when a system is tapped on mobile window._mobAutoOpenInfo = function() { if (window.innerWidth <= 768) { document.getElementById('info-panel').classList.add('mob-open'); document.getElementById('mob-info-btn').classList.add('active'); document.getElementById('filter-panel').classList.remove('mob-open'); document.getElementById('mob-filter-btn').classList.remove('active'); } };