Save the code as index.html and open in any modern browser. No build step required. All styles, icons (FontAwesome), and logic are self-contained.

Headline:
The New Era of Celebrity. Unfiltered. Unmissable. Unstoppable.

Subheadline:
Get closer to the stars. Breaking news, exclusive interviews, red carpet moments, and behind-the-scenes access — all in one sleek, ad-light space.

Primary CTA Button:
[ Join the Inner Circle – Free ]

Secondary CTA Button:
[ Explore Latest Stories ]

Background Visual Suggestion:
A dynamic collage of high-res celebrity portraits + paparazzi-style candid shots fading into a premium dark/light gradient.


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
  <title>CelebGae — Latest Celebrity News & Gossip</title>
  <!-- Font Awesome 6 (free icons) -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,600;14..32,700;14..32,800&display=swap" rel="stylesheet">
  <style>
    * 
      margin: 0;
      padding: 0;
      box-sizing: border-box;
body 
  font-family: 'Inter', sans-serif;
  background-color: #faf8f5;
  color: #1e1e2a;
  scroll-behavior: smooth;
/* Utility classes */
.container 
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px;
.section-title 
  font-size: 1.8rem;
  font-weight: 800;
  margin-bottom: 24px;
  letter-spacing: -0.3px;
  border-left: 5px solid #e91e63;
  padding-left: 16px;
/* Header / Navbar */
.top-header 
  background: white;
  box-shadow: 0 2px 12px rgba(0,0,0,0.03);
  position: sticky;
  top: 0;
  z-index: 100;
  backdrop-filter: blur(2px);
.navbar 
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 0;
  flex-wrap: wrap;
  gap: 16px;
.logo h1 
  font-size: 1.9rem;
  font-weight: 800;
  background: linear-gradient(135deg, #e91e63, #ff9800);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  letter-spacing: -1px;
.logo span 
  font-size: 0.75rem;
  background: #f0f0f0;
  color: #e91e63;
  padding: 2px 8px;
  border-radius: 30px;
  margin-left: 8px;
  font-weight: 400;
.nav-links 
  display: flex;
  gap: 28px;
  list-style: none;
.nav-links a 
  text-decoration: none;
  font-weight: 600;
  color: #2d2d3a;
  transition: 0.2s;
.nav-links a:hover, .nav-links a.active 
  color: #e91e63;
.search-icon 
  background: #f0f0f0;
  padding: 8px 14px;
  border-radius: 40px;
  cursor: pointer;
  font-size: 0.9rem;
/* Hero Carousel (full width) */
.hero 
  margin-top: 8px;
  background: #111;
  overflow: hidden;
.carousel-container 
  position: relative;
  max-width: 1400px;
  margin: auto;
.carousel-slide 
  display: flex;
  transition: transform 0.5s ease;
.hero-card 
  min-width: 100%;
  position: relative;
  height: 500px;
  background-size: cover;
  background-position: center 30%;
  display: flex;
  align-items: flex-end;
.hero-overlay 
  background: linear-gradient(to top, rgba(0,0,0,0.85), transparent);
  width: 100%;
  padding: 40px 50px;
  color: white;
.hero-category 
  background: #e91e63;
  display: inline-block;
  padding: 4px 14px;
  border-radius: 30px;
  font-size: 0.7rem;
  font-weight: bold;
  letter-spacing: 0.5px;
  margin-bottom: 12px;
.hero-title 
  font-size: 2.4rem;
  font-weight: 800;
  max-width: 700px;
  margin-bottom: 12px;
.hero-desc 
  max-width: 550px;
  opacity: 0.9;
  margin-bottom: 16px;
.carousel-btn 
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0,0,0,0.5);
  color: white;
  border: none;
  font-size: 1.8rem;
  padding: 8px 16px;
  cursor: pointer;
  z-index: 2;
  border-radius: 30px;
.prev  left: 20px; 
.next  right: 20px;
.dots 
  text-align: center;
  position: relative;
  bottom: 30px;
  z-index: 2;
.dot 
  display: inline-block;
  width: 10px;
  height: 10px;
  background: #ccc;
  border-radius: 50%;
  margin: 0 5px;
  cursor: pointer;
.dot.active  background: #e91e63; width: 24px; border-radius: 8px;
/* Grid layout */
.two-columns 
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 40px;
  margin: 48px 0;
/* Trending / News Grid */
.news-grid 
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 28px;
.news-card 
  background: white;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 8px 20px rgba(0,0,0,0.02);
  transition: 0.25s ease;
  border: 1px solid #f0eae3;
.news-card:hover 
  transform: translateY(-5px);
  box-shadow: 0 20px 30px -12px rgba(0,0,0,0.1);
.card-img 
  height: 180px;
  background-size: cover;
  background-position: center;
.card-content 
  padding: 18px;
.card-category 
  color: #e91e63;
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.5px;
.card-title 
  font-weight: 800;
  font-size: 1.2rem;
  margin: 10px 0 8px;
  line-height: 1.3;
.card-meta 
  display: flex;
  gap: 12px;
  font-size: 0.7rem;
  color: #777;
  margin-top: 12px;
/* Sidebar */
.sidebar 
  background: white;
  border-radius: 24px;
  padding: 20px;
  border: 1px solid #eeece8;
.sidebar-widget 
  margin-bottom: 32px;
.sidebar h3 
  font-size: 1.3rem;
  margin-bottom: 16px;
  border-bottom: 2px solid #ffe0e7;
  display: inline-block;
.trending-list 
  list-style: none;
.trending-list li 
  padding: 12px 0;
  border-bottom: 1px solid #f0eae3;
  display: flex;
  gap: 12px;
  align-items: center;
.trend-num 
  font-weight: 800;
  font-size: 1.2rem;
  color: #e91e63;
  width: 28px;
.social-icons 
  display: flex;
  gap: 16px;
  margin-top: 12px;
.social-icons a 
  color: #333;
  font-size: 1.4rem;
/* Video Section */
.video-grid 
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 30px;
  margin: 40px 0;
.video-card 
  background: #000;
  border-radius: 20px;
  overflow: hidden;
  position: relative;
.video-card img 
  width: 100%;
  display: block;
  opacity: 0.85;
.play-icon 
  position: absolute;
  top: 40%;
  left: 45%;
  color: white;
  font-size: 2.5rem;
  background: rgba(0,0,0,0.5);
  border-radius: 50%;
  padding: 10px;
/* Footer */
footer 
  background: #151515;
  color: #ccc;
  margin-top: 60px;
  padding: 40px 0 20px;
.footer-grid 
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px,1fr));
  gap: 40px;
  margin-bottom: 40px;
.footer-logo 
  font-size: 1.8rem;
  font-weight: 800;
  background: linear-gradient(135deg, #e91e63, #ff9800);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
@media (max-width: 800px) 
  .two-columns  grid-template-columns: 1fr; 
  .hero-title  font-size: 1.6rem; 
  .hero-card  height: 380px; 
  .navbar  flex-direction: column; align-items: center; 
  .nav-links  gap: 18px; flex-wrap: wrap; justify-content: center;

</style> </head> <body>

<header class="top-header"> <div class="container"> <div class="navbar"> <div class="logo"> <h1>CELEBGAE <span>🔥 gossip hub</span></h1> </div> <ul class="nav-links"> <li><a href="#" class="active">Home</a></li> <li><a href="#">News</a></li> <li><a href="#">Exclusives</a></li> <li><a href="#">Red Carpet</a></li> <li><a href="#">Videos</a></li> <li><a href="#">Rankings</a></li> </ul> <div class="search-icon"> <i class="fas fa-search"></i> Search </div> </div> </div> </header>

<!-- Hero Carousel Full --> <section class="hero"> <div class="carousel-container"> <div class="carousel-slide" id="carouselSlide"> <!-- slides injected via JS but also static fallback --> </div> <button class="carousel-btn prev" id="prevBtn"><i class="fas fa-chevron-left"></i></button> <button class="carousel-btn next" id="nextBtn"><i class="fas fa-chevron-right"></i></button> <div class="dots" id="dotsContainer"></div> </div> </section>

<div class="container"> <!-- Two column layout --> <div class="two-columns"> <!-- Main content: Latest News --> <main> <div class="section-title">🔥 Latest Buzz</div> <div class="news-grid" id="newsGrid"></div> </main>

<!-- Sidebar -->
<aside class="sidebar">
  <div class="sidebar-widget">
    <h3><i class="fas fa-chart-line"></i> Trending Now</h3>
    <ul class="trending-list" id="trendingList"></ul>
  </div>
  <div class="sidebar-widget">
    <h3><i class="fas fa-calendar-alt"></i> This Week in Gae</h3>
    <p>✨ Selena's new look<br>🎤 Drake's surprise album<br>🍿 Marvel casting rumors</p>
  </div>
  <div class="sidebar-widget">
    <h3>Follow Us</h3>
    <div class="social-icons">
      <a href="#"><i class="fab fa-instagram"></i></a>
      <a href="#"><i class="fab fa-twitter"></i></a>
      <a href="#"><i class="fab fa-tiktok"></i></a>
      <a href="#"><i class="fab fa-youtube"></i></a>
    </div>
  </div>
</aside>

</div>

<!-- Video highlights section --> <div class="section-title">🎥 Viral Clips</div> <div class="video-grid" id="videoGrid"></div> </div>

<footer> <div class="container"> <div class="footer-grid"> <div> <div class="footer-logo">CELEBGAE</div> <p style="margin-top:12px;">Unfiltered celebrity news, behind the scenes & pop culture.</p> </div> <div> <h4>Explore</h4> <p>About<br>Advertise<br>Privacy<br>Contact</p> </div> <div> <h4>Hot right now</h4> <p>Met Gala looks<br>Breakups 2025<br>Oscar predictions</p> </div> </div> <hr style="border-color:#2a2a2a;"> <p style="text-align:center; margin-top:24px;">© 2025 CelebGae — gossip never sleeps ✨</p> </div> </footer>

<script> // ---------- HERO CAROUSEL DATA ---------- const heroSlides = [ img: "https://picsum.photos/id/20/1400/500", // Celebrity-like random (use unsplash later) category: "EXCLUSIVE", title: "Taylor Swift & Travis Kelce: The secret wedding plans?", desc: "Insider reveals couple is ‘more serious than ever’ and planning a summer ceremony." , img: "https://picsum.photos/id/104/1400/500", category: "SCANDAL", title: "Blockbuster feud: Kanye vs. The Industry – full timeline", desc: "Everything you missed from the explosive rant to label meetings." , img: "https://picsum.photos/id/106/1400/500", category: "RED CARPET", title: "Oscars 2025 best dressed: Shocking winners and worst looks", desc: "Zendaya, Timothée and unexpected fashion moments." ];

// News data const newsArticles = [ img: "https://picsum.photos/id/26/400/250", category: "ROYALS", title: "Prince Harry makes surprise London appearance – without Meghan", date: "2 hours ago", comments: 47 , img: "https://picsum.photos/id/30/400/250", category: "BIZ", title: "Beyoncé becomes most decorated artist in Grammys history", date: "5 hours ago", comments: 203 , img: "https://picsum.photos/id/64/400/250", category: "COUPLES", title: "Ben Affleck and JLo spotted together amid divorce rumors", date: "Yesterday", comments: 112 , img: "https://picsum.photos/id/91/400/250", category: "EXCLUSIVE", title: "Inside Dua Lipa's $20M Malibu mansion – pool, studio & more", date: "Yesterday", comments: 88 ];

const trendingItems = [ "#1 Zendaya's new haircut breaks the internet", "#2 Did Ariana Grande confirm new album?", "#3 Johnny Depp returns to Hollywood", "#4 Kardashians under fire over tone-deaf post", "#5 Stranger Things final season spoilers leak" ];

const videoItems = [ thumb: "https://picsum.photos/id/155/400/220", title: "Best celebrity interviews 2025" , thumb: "https://picsum.photos/id/169/400/220", title: "Top 10 red carpet fails" , thumb: "https://picsum.photos/id/177/400/220", title: "Drama alert: podcast full episode" ];

// Render news grid function renderNews() const grid = document.getElementById('newsGrid'); if(!grid) return; grid.innerHTML = newsArticles.map(article => <div class="news-card"> <div class="card-img" style="background-image: url('$article.img');"></div> <div class="card-content"> <div class="card-category">$article.category</div> <div class="card-title">$article.title</div> <div class="card-meta"><span><i class="far fa-clock"></i> $article.date</span> <span><i class="far fa-comment"></i> $article.comments</span></div> </div> </div>).join('');

function renderTrending() const list = document.getElementById('trendingList'); list.innerHTML = trendingItems.map((item, idx) => <li><span class="trend-num">$idx+1</span> $item</li>).join('');

function renderVideos() const videoGrid = document.getElementById('videoGrid'); videoGrid.innerHTML = videoItems.map(vid => <div class="video-card"> <img src="$vid.thumb" alt="video thumb"> <div class="play-icon"><i class="fas fa-play-circle"></i></div> <div style="padding:12px; background:#151515; color:white;">$vid.title</div> </div>).join('');

// Carousel logic let currentIndex = 0; const slideContainer = document.getElementById('carouselSlide'); const dotsContainer = document.getElementById('dotsContainer'); let autoInterval;

function buildCarousel() slideContainer.innerHTML = ''; heroSlides.forEach((slide, idx) => const slideDiv = document.createElement('div'); slideDiv.className = 'hero-card'; slideDiv.style.backgroundImage = linear-gradient(to top, rgba(0,0,0,0.8), rgba(0,0,0,0.2)), url('$slide.img'); slideDiv.innerHTML = <div class="hero-overlay"> <div class="hero-category">$slide.category</div> <div class="hero-title">$slide.title</div> <div class="hero-desc">$slide.desc</div> </div>; slideContainer.appendChild(slideDiv); ); updateDots(); updateSlideTransform();

function updateDots() dotsContainer.innerHTML = ''; heroSlides.forEach((_, idx) => const dot = document.createElement('span'); dot.classList.add('dot'); if (idx === currentIndex) dot.classList.add('active'); dot.addEventListener('click', () => goToSlide(idx)); dotsContainer.appendChild(dot); );

function updateSlideTransform() if(slideContainer) slideContainer.style.transform = translateX(-$currentIndex * 100%); if(dotsContainer) const dots = document.querySelectorAll('.dot'); dots.forEach((dot, idx) => if(idx === currentIndex) dot.classList.add('active'); else dot.classList.remove('active'); );

function goToSlide(index) currentIndex = (index + heroSlides.length) % heroSlides.length; updateSlideTransform(); updateDots(); // refresh active state resetAutoSlide();

function nextSlide() goToSlide(currentIndex + 1); function prevSlide() goToSlide(currentIndex - 1);

function resetAutoSlide() if(autoInterval) clearInterval(autoInterval); autoInterval = setInterval(() => nextSlide(); , 5000);

// Event listeners for carousel document.getElementById('prevBtn')?.addEventListener('click', prevSlide); document.getElementById('nextBtn')?.addEventListener('click', nextSlide);

// Initialize full homepage function initHomepage() renderNews(); renderTrending(); renderVideos(); buildCarousel(); resetAutoSlide();

initHomepage(); </script> </body> </html>


Leave a Comment