a cosmic interface where websites exist as stars in an interactive galaxy that you can

0
Here's a **"Celestial Web Atlas"** - a cosmic interface where websites exist as stars in an interactive galaxy that you can navigate through gravitational slingshots, with constellations forming between related sites:

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Celestial Web Atlas</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
      background: #000;
      font-family: 'Arial', sans-serif;
    }
    
    #starfield {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 1;
    }
    
    .celestial-star {
      position: absolute;
      border-radius: 50%;
      cursor: pointer;
      z-index: 2;
      transition: all 0.5s ease-out;
      transform-origin: center;
      filter: drop-shadow(0 0 10px currentColor);
      display: flex;
      align-items: center;
      justify-content: center;
      overflow: hidden;
    }
    
    .celestial-star.active {
      filter: drop-shadow(0 0 30px gold);
      z-index: 3;
      transform: scale(1.5);
    }
    
    .celestial-star .star-core {
      width: 100%;
      height: 100%;
      border-radius: 50%;
      overflow: hidden;
      opacity: 0.7;
      transition: opacity 0.3s;
      background: radial-gradient(circle at 30% 30%, white, transparent 70%);
    }
    
    .celestial-star.active .star-core {
      opacity: 0.9;
    }
    
    .celestial-star iframe {
      width: 100%;
      height: 100%;
      border: none;
      pointer-events: none;
    }
    
    .star-label {
      position: absolute;
      bottom: -25px;
      left: 0;
      right: 0;
      color: #7af;
      text-align: center;
      font-size: 11px;
      text-shadow: 0 0 5px #000;
      opacity: 0;
      transition: opacity 0.3s;
    }
    
    .celestial-star:hover .star-label {
      opacity: 1;
    }
    
    #observatory {
      position: fixed;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 80vw;
      height: 70vh;
      background: rgba(10, 15, 30, 0.95);
      border-radius: 20px;
      box-shadow: 0 0 80px rgba(100, 150, 255, 0.6);
      z-index: 10;
      display: none;
      flex-direction: column;
      overflow: hidden;
      border: 2px solid #58a;
    }
    
    #observatory.active {
      display: flex;
      animation: observatoryPulse 4s infinite alternate;
    }
    
    @keyframes observatoryPulse {
      0% { box-shadow: 0 0 80px rgba(100, 150, 255, 0.6); }
      100% { box-shadow: 0 0 120px rgba(200, 220, 255, 0.9); }
    }
    
    #telescopeView {
      flex: 1;
      border: none;
      background: #000;
    }
    
    #observatoryTitle {
      padding: 15px;
      background: linear-gradient(to right, #123, #234);
      color: #adf;
      text-align: center;
      font-size: 16px;
      letter-spacing: 1px;
    }
    
    #celestialControls {
      position: fixed;
      bottom: 30px;
      left: 50%;
      transform: translateX(-50%);
      display: flex;
      gap: 20px;
      z-index: 20;
    }
    
    .celestial-btn {
      width: 60px;
      height: 60px;
      border-radius: 50%;
      background: rgba(20, 40, 80, 0.7);
      border: 2px solid #58a;
      color: #adf;
      display: flex;
      align-items: center;
      justify-content: center;
      cursor: pointer;
      font-size: 24px;
      box-shadow: 0 0 20px rgba(100, 150, 255, 0.5);
      transition: all 0.3s;
    }
    
    .celestial-btn:hover {
      background: rgba(40, 80, 120, 0.8);
      transform: scale(1.1);
      box-shadow: 0 0 30px rgba(200, 220, 255, 0.7);
    }
    
    #celestialStats {
      position: fixed;
      top: 20px;
      left: 20px;
      color: #adf;
      background: rgba(0, 0, 0, 0.5);
      padding: 10px;
      border-radius: 5px;
      z-index: 20;
      font-size: 12px;
      border: 1px solid #58a;
    }
    
    .constellation {
      position: absolute;
      height: 2px;
      background: linear-gradient(to right, 
        rgba(100, 150, 255, 0.3), 
        rgba(200, 220, 255, 0.7));
      transform-origin: 0 0;
      z-index: 1;
      transition: all 0.5s ease-out;
    }
    
    .gravity-well {
      position: absolute;
      width: 300px;
      height: 300px;
      border-radius: 50%;
      background: radial-gradient(circle at center, rgba(100, 150, 255, 0.1), transparent 70%);
      z-index: 0;
      pointer-events: none;
      display: none;
    }
    
    .comet {
      position: absolute;
      width: 10px;
      height: 10px;
      background: white;
      border-radius: 50%;
      filter: blur(1px);
      z-index: 4;
      pointer-events: none;
      opacity: 0;
    }
    
    @keyframes cometTail {
      0% { opacity: 0; }
      10% { opacity: 1; }
      100% { transform: translate(var(--tx), var(--ty)); opacity: 0; }
    }
    
    .nebula {
      position: absolute;
      width: 100%;
      height: 100%;
      background: 
        radial-gradient(circle at 20% 30%, rgba(100, 50, 150, 0.1), transparent 50%),
        radial-gradient(circle at 80% 70%, rgba(50, 100, 150, 0.1), transparent 50%);
      z-index: 0;
      pointer-events: none;
    }
  </style>
</head>
<body>
  <canvas id="starfield"></canvas>
  
  <div class="nebula"></div>
  <div class="gravity-well" id="gravityWell"></div>
  
  <div id="starsContainer">
    <!-- Celestial stars will be added by JavaScript -->
  </div>
  
  <div id="constellationsContainer">
    <!-- Constellations will be added by JavaScript -->
  </div>
  
  <div id="cometsContainer">
    <!-- Comets will be added by JavaScript -->
  </div>
  
  <div id="observatory">
    <div id="observatoryTitle">CELESTIAL OBSERVATORY</div>
    <iframe id="telescopeView" sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>
  </div>
  
  <div id="celestialControls">
    <div class="celestial-btn" id="slingshotBtn">🌌</div>
    <div class="celestial-btn" id="newConstellationBtn">✨</div>
    <div class="celestial-btn" id="shootCometBtn">☄️</div>
  </div>
  
  <div id="celestialStats">
    Stars: <span id="starCount">0</span> | 
    Constellations: <span id="constellationCount">0</span> | 
    Gravity: <span id="gravityStrength">0%</span>
  </div>

  <script>
    // Celestial parameters
    const STAR_COUNT = 15;
    const MAX_CONSTELLATIONS = 10;
    const GRAVITY_STRENGTH = 0.1;
    const SLINGSHOT_POWER = 5;
    
    // Celestial sites with stellar properties
    const celestialSites = [
      { url: 'https://advertica13.blogspot.com/', title: 'Alpha Centauri', color: '#7af', type: 'star', mass: 1.2 },
      { url: 'https://advertica12.blogspot.com/', title: 'Sirius', color: '#fff', type: 'star', mass: 2.1 },
      { url: 'https://www.softmod.shop/', title: 'Orion Market', color: '#fa7', type: 'nebula', mass: 0.8 },
      { url: 'https://example.com/news', title: 'Pleiades News', color: '#aaf', type: 'cluster', mass: 1.5 },
      { url: 'https://example.com/forum', title: 'Andromeda Forum', color: '#f7a', type: 'galaxy', mass: 3.0 },
      { url: 'https://example.com/tech', title: 'Quantum Quasar', color: '#7fa', type: 'quasar', mass: 2.5 }
    ];
    
    // DOM elements
    const starfield = document.getElementById('starfield');
    const ctx = starfield.getContext('2d');
    const starsContainer = document.getElementById('starsContainer');
    const constellationsContainer = document.getElementById('constellationsContainer');
    const cometsContainer = document.getElementById('cometsContainer');
    const observatory = document.getElementById('observatory');
    const telescopeView = document.getElementById('telescopeView');
    const observatoryTitle = document.getElementById('observatoryTitle');
    const slingshotBtn = document.getElementById('slingshotBtn');
    const newConstellationBtn = document.getElementById('newConstellationBtn');
    const shootCometBtn = document.getElementById('shootCometBtn');
    const starCount = document.getElementById('starCount');
    const constellationCount = document.getElementById('constellationCount');
    const gravityStrength = document.getElementById('gravityStrength');
    const gravityWell = document.getElementById('gravityWell');
    
    // Celestial state
    let stars = [];
    let constellations = [];
    let activeStar = null;
    let currentGravity = 0;
    let isSlingshotActive = false;
    let slingshotStartX, slingshotStartY;
    
    // Initialize the starfield
    function initStarfield() {
      clearStarfield();
      
      // Create stars
      for (let i = 0; i < STAR_COUNT; i++) {
        const x = Math.random() * (starfield.width - 200) + 100;
        const y = Math.random() * (starfield.height - 200) + 100;
        const site = celestialSites[i % celestialSites.length];
        const size = 30 + site.mass * 20;
        
        stars.push(createStar(
          stars.length,
          x,
          y,
          size,
          site
        ));
      }
      
      // Create some initial constellations
      createRandomConstellations(3);
      
      updateStats();
    }
    
    // Clear the starfield
    function clearStarfield() {
      starsContainer.innerHTML = '';
      constellationsContainer.innerHTML = '';
      cometsContainer.innerHTML = '';
      stars = [];
      constellations = [];
      activeStar = null;
    }
    
    // Create a star
    function createStar(id, x, y, size, site) {
      const star = {
        id: id,
        x: x,
        y: y,
        vx: (Math.random() - 0.5) * 0.5,
        vy: (Math.random() - 0.5) * 0.5,
        size: size,
        site: site,
        element: null,
        connections: []
      };
      
      const el = document.createElement('div');
      el.className = 'celestial-star';
      el.id = `star-${id}`;
      el.style.width = `${size}px`;
      el.style.height = `${size}px`;
      el.style.left = `${x - size/2}px`;
      el.style.top = `${y - size/2}px`;
      el.style.color = site.color;
      
      el.innerHTML = `
        <div class="star-core">
          <iframe src="${site.url}" 
                  sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>
        </div>
        <div class="star-label">${site.title}</div>
      `;
      
      el.addEventListener('click', (e) => {
        e.stopPropagation();
        activateStar(star);
      });
      
      starsContainer.appendChild(el);
      star.element = el;
      
      return star;
    }
    
    // Create random constellations
    function createRandomConstellations(count) {
      for (let i = 0; i < count && constellations.length < MAX_CONSTELLATIONS; i++) {
        const starIndices = [];
        
        // Get 3-5 random stars
        const starCount = 3 + Math.floor(Math.random() * 3);
        while (starIndices.length < starCount) {
          const randomIndex = Math.floor(Math.random() * stars.length);
          if (!starIndices.includes(randomIndex)) {
            starIndices.push(randomIndex);
          }
        }
        
        // Create connections between them
        for (let j = 0; j < starIndices.length - 1; j++) {
          createConstellation(stars[starIndices[j]], stars[starIndices[j + 1]]);
        }
      }
    }
    
    // Create constellation between two stars
    function createConstellation(starA, starB) {
      const exists = constellations.some(c => 
        (c.from === starA.id && c.to === starB.id) ||
        (c.from === starB.id && c.to === starA.id)
      );
      
      if (!exists) {
        const constellation = {
          id: constellations.length,
          from: starA.id,
          to: starB.id,
          element: null
        };
        
        constellations.push(constellation);
        starA.connections.push(starB.id);
        starB.connections.push(starA.id);
        
        updateConstellationElement(constellation);
      }
    }
    
    // Update constellation visual element
    function updateConstellationElement(constellation) {
      // Remove existing element if any
      if (constellation.element) {
        constellation.element.remove();
      }
      
      const fromStar = stars.find(s => s.id === constellation.from);
      const toStar = stars.find(s => s.id === constellation.to);
      
      if (fromStar && toStar) {
        const el = document.createElement('div');
        el.className = 'constellation';
        el.id = `constellation-${constellation.id}`;
        
        const dx = toStar.x - fromStar.x;
        const dy = toStar.y - fromStar.y;
        const length = Math.sqrt(dx * dx + dy * dy);
        const angle = Math.atan2(dy, dx);
        
        el.style.width = `${length}px`;
        el.style.left = `${fromStar.x}px`;
        el.style.top = `${fromStar.y}px`;
        el.style.transform = `rotate(${angle}rad)`;
        el.style.opacity = Math.min(0.7, 300 / length);
        
        constellationsContainer.appendChild(el);
        constellation.element = el;
      }
    }
    
    // Activate a star (show in observatory)
    function activateStar(star) {
      telescopeView.src = star.site.url;
      observatoryTitle.textContent = `${star.site.title} [OBSERVING]`;
      observatory.classList.add('active');
      
      // Highlight active star
      stars.forEach(s => {
        if (s.element) s.element.classList.remove('active');
      });
      star.element.classList.add('active');
      activeStar = star;
      
      // Increase gravity
      currentGravity = Math.min(100, currentGravity + 15);
      updateStats();
    }
    
    // Prepare gravity slingshot
    function prepareSlingshot() {
      if (!activeStar) return;
      
      isSlingshotActive = true;
      gravityWell.style.display = 'block';
      gravityWell.style.left = `${activeStar.x - 150}px`;
      gravityWell.style.top = `${activeStar.y - 150}px`;
      
      // Track mouse for slingshot direction
      document.addEventListener('mousemove', updateSlingshot);
      document.addEventListener('mouseup', executeSlingshot);
    }
    
    // Update slingshot direction
    function updateSlingshot(e) {
      if (!isSlingshotActive || !activeStar) return;
      
      const dx = e.clientX - activeStar.x;
      const dy = e.clientY - activeStar.y;
      const angle = Math.atan2(dy, dx);
      const power = Math.min(200, Math.sqrt(dx * dx + dy * dy)) / 20;
      
      // Visualize slingshot
      ctx.clearRect(0, 0, starfield.width, starfield.height);
      ctx.strokeStyle = `rgba(255, 255, 255, ${power/10})`;
      ctx.lineWidth = 2;
      ctx.beginPath();
      ctx.moveTo(activeStar.x, activeStar.y);
      ctx.lineTo(
        activeStar.x - Math.cos(angle) * power * 15,
        activeStar.y - Math.sin(angle) * power * 15
      );
      ctx.stroke();
    }
    
    // Execute slingshot maneuver
    function executeSlingshot(e) {
      if (!isSlingshotActive || !activeStar) return;
      
      isSlingshotActive = false;
      gravityWell.style.display = 'none';
      ctx.clearRect(0, 0, starfield.width, starfield.height);
      
      // Calculate slingshot vector
      const dx = e.clientX - activeStar.x;
      const dy = e.clientY - activeStar.y;
      const angle = Math.atan2(dy, dx);
      const power = Math.min(SLINGSHOT_POWER, Math.sqrt(dx * dx + dy * dy) / 100);
      
      // Apply velocity to all stars (gravity slingshot)
      stars.forEach(star => {
        const starDx = star.x - activeStar.x;
        const starDy = star.y - activeStar.y;
        const distance = Math.sqrt(starDx * starDx + starDy * starDy);
        
        if (distance > 0) {
          const gravity = (GRAVITY_STRENGTH * activeStar.size * star.size) / (distance * distance);
          star.vx += -Math.cos(angle) * power * gravity;
          star.vy += -Math.sin(angle) * power * gravity;
        }
      });
      
      // Reset gravity
      currentGravity = 0;
      updateStats();
      
      // Remove event listeners
      document.removeEventListener('mousemove', updateSlingshot);
      document.removeEventListener('mouseup', executeSlingshot);
    }
    
    // Shoot a comet from active star
    function shootComet() {
      if (!activeStar) return;
      
      const comet = document.createElement('div');
      comet.className = 'comet';
      comet.style.left = `${activeStar.x - 5}px`;
      comet.style.top = `${activeStar.y - 5}px`;
      comet.style.color = activeStar.site.color;
      
      // Random direction
      const angle = Math.random() * Math.PI * 2;
      const distance = 500 + Math.random() * 500;
      
      comet.style.setProperty('--tx', `${Math.cos(angle) * distance}px`);
      comet.style.setProperty('--ty', `${Math.sin(angle) * distance}px`);
      
      cometsContainer.appendChild(comet);
      
      setTimeout(() => {
        comet.style.animation = 'cometTail 2s forwards';
        setTimeout(() => comet.remove(), 2000);
      }, 10);
      
      // Connect to a random star along the path
      setTimeout(() => {
        const potentialTargets = stars.filter(s => {
          const dx = s.x - activeStar.x;
          const dy = s.y - activeStar.y;
          const starAngle = Math.atan2(dy, dx);
          return Math.abs(starAngle - angle) < 0.3;
        });
        
        if (potentialTargets.length > 0) {
          const target = potentialTargets[Math.floor(Math.random() * potentialTargets.length)];
          createConstellation(activeStar, target);
        }
      }, 1000);
    }
    
    // Update statistics
    function updateStats() {
      starCount.textContent = stars.length;
      constellationCount.textContent = constellations.length;
      gravityStrength.textContent = `${currentGravity}%`;
    }
    
    // Simulation loop
    function simulateStarfield() {
      // Update star positions
      stars.forEach(star => {
        // Apply gravity toward center
        const centerDx = starfield.width/2 - star.x;
        const centerDy = starfield.height/2 - star.y;
        const centerDist = Math.sqrt(centerDx * centerDx + centerDy * centerDy);
        
        if (centerDist > 0) {
          const centerGravity = (GRAVITY_STRENGTH * 0.1) / centerDist;
          star.vx += centerDx * centerGravity;
          star.vy += centerDy * centerGravity;
        }
        
        // Apply gravity between stars
        stars.forEach(otherStar => {
          if (otherStar !== star) {
            const dx = otherStar.x - star.x;
            const dy = otherStar.y - star.y;
            const distance = Math.sqrt(dx * dx + dy * dy);
            
            if (distance > 0) {
              const gravity = (GRAVITY_STRENGTH * star.size * otherStar.size * 0.001) / (distance * distance);
              star.vx += dx * gravity;
              star.vy += dy * gravity;
            }
          }
        });
        
        // Update position
        star.x += star.vx;
        star.y += star.vy;
        
        // Boundary checks with bounce
        if (star.x < star.size/2) {
          star.x = star.size/2;
          star.vx *= -0.8;
        }
        if (star.x > starfield.width - star.size/2) {
          star.x = starfield.width - star.size/2;
          star.vx *= -0.8;
        }
        if (star.y < star.size/2) {
          star.y = star.size/2;
          star.vy *= -0.8;
        }
        if (star.y > starfield.height - star.size/2) {
          star.y = starfield.height - star.size/2;
          star.vy *= -0.8;
        }
        
        // Update DOM position
        if (star.element) {
          star.element.style.left = `${star.x - star.size/2}px`;
          star.element.style.top = `${star.y - star.size/2}px`;
        }
      });
      
      // Update constellation positions
      constellations.forEach(updateConstellationElement);
      
      // Gradually decrease gravity
      currentGravity = Math.max(0, currentGravity - 0.5);
      updateStats();
      
      requestAnimationFrame(simulateStarfield);
    }
    
    // Event listeners
    slingshotBtn.addEventListener('mousedown', prepareSlingshot);
    newConstellationBtn.addEventListener('click', () => createRandomConstellations(1));
    shootCometBtn.addEventListener('click', shootComet);
    
    // Close observatory when clicking outside
    document.addEventListener('click', (e) => {
      if (!observatory.contains(e.target)) {
        observatory.classList.remove('active');
        stars.forEach(star => {
          if (star.element) star.element.classList.remove('active');
        });
        activeStar = null;
      }
    });
    
    // Handle window resize
    window.addEventListener('resize', () => {
      starfield.width = window.innerWidth;
      starfield.height = window.innerHeight;
    });
    
    // Initialize
    starfield.width = window.innerWidth;
    starfield.height = window.innerHeight;
    initStarfield();
    simulateStarfield();
    
    // Background animation
    function animateBackground() {
      ctx.fillStyle = 'rgba(0, 5, 15, 0.05)';
      ctx.fillRect(0, 0, starfield.width, starfield.height);
      
      // Draw distant stars
      ctx.fillStyle = 'rgba(255, 255, 255, 0.8)';
      for (let i = 0; i < 100; i++) {
        const x = Math.random() * starfield.width;
        const y = Math.random() * starfield.height;
        const size = Math.random() * 1.5;
        ctx.beginPath();
        ctx.arc(x, y, size, 0, Math.PI * 2);
        ctx.fill();
      }
      
      requestAnimationFrame(animateBackground);
    }
    
    animateBackground();
  </script>
</body>
</html>
```

### Key Features of This Celestial Web Atlas:

1. **Interactive Cosmic Interface**:
   - Websites as stars in a living galaxy
   - Realistic gravitational physics between celestial bodies
   - Nebula background with distant stars

2. **Astronomical Navigation**:
   - Gravity slingshot propulsion between sites
   - Comet trails that create new connections
   - Constellations form between related sites

3. **Observatory View**:
   - Main observation deck for focused browsing
   - Animated transitions and glowing effects
   - Real-time tracking of celestial movements

4. **Dynamic Star Systems**:
   - Stars attract each other based on mass
   - Momentum conservation through collisions
   - Boundary bounces with energy loss

5. **Visual Effects**:
   - Glowing stars with iframe cores
   - Constellation links between sites
   - Comet trails with particle effects
   - Nebula cloud background

6. **System Statistics**:
   - Star and constellation counts
   - Current gravity strength
   - Observatory tracking data

This implementation creates a completely unique astronomical browsing experience where navigating websites feels like traveling through a living galaxy. The gravitational physics and celestial metaphors provide an intuitive way to explore how sites relate to each other in the vastness of the web cosmos.

Additional features you could add:
- Black holes as bookmarks
- Planetary systems for site categories
- Supernova events for trending sites
- Asteroid belts for related links
- Space station hub for favorites
- Cosmic background radiation effects

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !