SpaceXAI Grok Build 0.1 – Social Media
via xAI · Generated
- AIMAC Debt 7.44
- Cost $0.04
- Total Violations 10
- HTML Size 71 KB
- Em Dashes 0
Screenshot
View Live Page
Accessibility Issues Found
10 Serious
-
color-contrast serious 7 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span class="inline-flex items-center justify-center w-5 h-5 text-[10px] font-medium bg-indigo-500 text-white rounded-full">14</span> -
link-name serious 3 instances
Links must have discernible text
Example HTML
<a href="#" class="text-zinc-400 hover:text-white"><i class="fa-brands fa-x-twitter"></i></a>
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>EchoSphere • Social Networking</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&family=Space+Grotesk:wght@500;600&display=swap');
:root {
--primary: #6366f1;
}
body {
font-family: 'Inter', system_ui, sans-serif;
}
.font-display {
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-weight: 600;
}
.social-gradient {
background: linear-gradient(135deg, #6366f1, #a855f7);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.section-header {
font-size: 2.25rem;
line-height: 2.5rem;
font-weight: 700;
letter-spacing: -.025em;
}
.nav-link {
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.nav-link:hover {
color: #6366f1;
}
.post-card, .creator-card, .community-card {
transition: transform 0.3s cubic-bezier(0.4, 0.0, 0.2, 1),
box-shadow 0.3s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.post-card:hover, .creator-card:hover, .community-card:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
}
.metric {
font-variant-numeric: tabular-nums;
}
.modern-shadow {
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
}
.trend-bar {
transition: width 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.nav-active {
color: #6366f1;
font-weight: 600;
}
.content-rich {
line-height: 1.7;
}
.platform-card {
transition: all 0.3s ease;
}
</style>
</head>
<body class="bg-zinc-950 text-zinc-200">
<!-- HEADER -->
<header class="bg-zinc-900 border-b border-zinc-800 sticky top-0 z-50">
<div class="max-w-screen-2xl mx-auto">
<div class="px-8 py-5 flex items-center justify-between">
<!-- Logo -->
<div class="flex items-center gap-x-3">
<div class="flex items-center gap-x-2.5">
<img src="https://placehold.co/42x42/6366f1/ffffff?text=ES&font=montserrat"
alt="EchoSphere logo"
class="w-10 h-10 rounded-xl object-cover ring-2 ring-offset-2 ring-offset-zinc-950 ring-indigo-500/30">
<div>
<span class="font-display text-3xl font-semibold tracking-tighter">EchoSphere</span>
</div>
</div>
</div>
<!-- Desktop Navigation -->
<nav class="hidden md:flex items-center gap-x-1.5">
<a href="#communities" class="nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">Discover</a>
<a href="#trending" class="nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">Trending</a>
<a href="#" onclick="showNotificationsModal()" class="nav-link flex items-center gap-x-1.5 px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">
<span>Notifications</span>
<span class="inline-flex items-center justify-center w-5 h-5 text-[10px] font-medium bg-indigo-500 text-white rounded-full">14</span>
</a>
<a href="#communities" class="nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">Communities</a>
<a href="#insights" class="nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">Insights</a>
<a href="#" onclick="showAboutModal()" class="nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl">About</a>
</nav>
<!-- Header Actions -->
<div class="flex items-center gap-x-3">
<!-- Profile -->
<div class="hidden sm:flex items-center gap-x-2 bg-zinc-900 border border-zinc-800 rounded-2xl px-1.5 py-1.5 pr-4">
<img src="https://i.pravatar.cc/28?u=me" alt="Your avatar" class="w-7 h-7 rounded-xl ring-2 ring-offset-2 ring-offset-zinc-950 ring-zinc-700">
<div class="text-sm">
<span class="font-medium">Maya Torres</span>
</div>
</div>
<!-- Join CTA -->
<button onclick="showJoinModal()"
class="px-5 py-2.5 text-sm font-semibold bg-white text-zinc-900 hover:bg-zinc-100 transition-colors rounded-2xl flex items-center gap-x-2">
<span>Join for free</span>
</button>
<!-- Mobile Menu -->
<button id="mobile-menu-btn" class="md:hidden w-10 h-10 flex items-center justify-center text-zinc-400 hover:text-white bg-zinc-900 border border-zinc-800 rounded-2xl" onclick="toggleMobileMenu()">
<i class="fa-solid fa-bars text-lg"></i>
</button>
</div>
</div>
</div>
<!-- Mobile Menu -->
<div id="mobile-menu" class="hidden md:hidden bg-zinc-900 border-t border-zinc-800 px-5 py-4">
<div class="flex flex-col gap-y-1">
<a href="#communities" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl">Discover</a>
<a href="#trending" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl">Trending</a>
<a href="#" onclick="showNotificationsModal(); toggleMobileMenu()" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl flex items-center justify-between">
<span>Notifications</span>
<span class="inline-flex items-center justify-center w-5 h-5 text-[10px] font-medium bg-indigo-500 text-white rounded-full">14</span>
</a>
<a href="#communities" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl">Communities</a>
<a href="#insights" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl">Insights</a>
<a href="#" onclick="showAboutModal(); toggleMobileMenu()" class="px-4 py-3 text-sm font-medium text-zinc-300 hover:text-white hover:bg-zinc-800 rounded-2xl">About</a>
<div class="pt-3 border-t border-zinc-800 mt-2">
<button onclick="showJoinModal(); toggleMobileMenu()"
class="w-full px-5 py-3 text-sm font-semibold bg-white text-zinc-900 hover:bg-zinc-100 transition-colors rounded-2xl">
Join for free
</button>
</div>
</div>
</div>
</header>
<!-- HERO SECTION -->
<section class="max-w-screen-2xl mx-auto">
<div class="grid md:grid-cols-12 items-center px-8 pt-12 pb-8 md:pt-16 md:pb-12 gap-8">
<div class="md:col-span-7">
<div class="max-w-xl">
<div class="inline-flex items-center gap-x-2 bg-zinc-900 border border-zinc-800 rounded-3xl px-4 py-1.5 mb-6">
<div class="w-2 h-2 bg-emerald-400 rounded-full animate-pulse"></div>
<span class="text-xs font-semibold tracking-widest">2.4M USERS ONLINE</span>
</div>
<h1 class="text-6xl md:text-7xl leading-[1.05] font-display tracking-tighter font-semibold">
Connect.<br>
<span class="social-gradient">Amplify.</span><br>
Belong.
</h1>
<p class="mt-6 max-w-md text-lg text-zinc-400 content-rich">
EchoSphere is the modern social platform where creators, communities, and conversations thrive.
Share your story, discover authentic connections, and build lasting communities with powerful
tools designed for the way people actually connect today.
</p>
<div class="flex items-center gap-x-3 mt-8">
<button onclick="showJoinModal()"
class="px-7 py-3.5 text-base font-semibold bg-indigo-600 hover:bg-indigo-500 transition-all rounded-3xl flex items-center justify-center gap-x-2 shadow-lg shadow-indigo-900/30">
<span>Get started free</span>
</button>
<button onclick="document.getElementById('trending').scrollIntoView({ behavior: 'smooth' })"
class="px-6 py-3.5 text-base font-semibold border border-zinc-700 hover:bg-zinc-900 transition-colors rounded-3xl flex items-center gap-x-2">
<i class="fa-solid fa-play mr-1"></i>
<span>Watch demo</span>
</button>
</div>
<div class="mt-8 flex items-center gap-x-5 text-sm">
<div class="flex -space-x-2">
<img src="https://i.pravatar.cc/22?u=1" class="w-6 h-6 rounded-full ring-2 ring-zinc-950 border border-zinc-700" alt="">
<img src="https://i.pravatar.cc/22?u=2" class="w-6 h-6 rounded-full ring-2 ring-zinc-950 border border-zinc-700" alt="">
<img src="https://i.pravatar.cc/22?u=3" class="w-6 h-6 rounded-full ring-2 ring-zinc-950 border border-zinc-700" alt="">
</div>
<span class="text-xs text-zinc-400">Joined by <span class="font-semibold text-white">142k</span> this month</span>
</div>
</div>
</div>
<!-- Hero Visual -->
<div class="md:col-span-5 relative">
<div class="relative rounded-3xl overflow-hidden border border-zinc-800 shadow-2xl">
<img src="https://picsum.photos/id/1015/800/700"
alt="Diverse group of people collaborating on social platform"
class="w-full aspect-[4/3] object-cover">
<div class="absolute inset-0 bg-gradient-to-br from-zinc-950/70 via-transparent to-transparent"></div>
<!-- Floating stats card -->
<div class="absolute bottom-5 right-5 bg-zinc-900/90 backdrop-blur-md border border-zinc-700 rounded-2xl p-3 shadow-xl w-44">
<div class="flex items-center justify-between">
<div>
<div class="text-xs text-zinc-400">Active conversations</div>
<div class="text-2xl font-semibold">874k</div>
</div>
<div class="text-emerald-400">
<i class="fa-solid fa-arrow-trend-up text-xl"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- INSIGHTS / FEATURES SECTION -->
<section id="insights" class="max-w-screen-2xl mx-auto px-8 pt-8 pb-16">
<div class="flex flex-col md:flex-row md:items-end md:justify-between mb-8">
<div>
<span class="text-indigo-400 text-sm font-semibold tracking-widest">POWERED BY COMMUNITY</span>
<h2 class="section-header tracking-tighter">Tools built for real connection</h2>
</div>
<p class="max-w-sm mt-3 md:mt-0 text-zinc-400 text-[15px]">
Advanced features that prioritize meaningful interactions over vanity metrics.
</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-5">
<!-- Feature 1 -->
<div class="bg-zinc-900 border border-zinc-800 rounded-3xl p-6 platform-card">
<div class="w-11 h-11 bg-indigo-500/10 flex items-center justify-center rounded-2xl mb-5">
<i class="fa-solid fa-hashtag text-indigo-400 text-2xl"></i>
</div>
<h4 class="font-semibold text-lg mb-2">Hashtag Intelligence</h4>
<p class="text-sm text-zinc-400 content-rich">
Our AI-powered hashtag engine analyzes real-time conversations across the platform to surface emerging topics and help you craft effective content strategy.
</p>
<div class="mt-4 text-xs flex items-center text-indigo-300">
<span class="font-medium">142k hashtags tracked today</span>
</div>
</div>
<!-- Feature 2 -->
<div class="bg-zinc-900 border border-zinc-800 rounded-3xl p-6 platform-card">
<div class="w-11 h-11 bg-violet-500/10 flex items-center justify-center rounded-2xl mb-5">
<i class="fa-solid fa-users text-violet-400 text-2xl"></i>
</div>
<h4 class="font-semibold text-lg mb-2">Community Management</h4>
<p class="text-sm text-zinc-400 content-rich">
Robust moderation tools, role-based permissions, and analytics let creators and brands scale thriving communities without losing personal connection.
</p>
<div class="mt-4 flex items-center gap-x-1 text-xs">
<div class="px-2.5 py-1 bg-zinc-800 rounded-2xl text-violet-300 text-xs font-medium">Used by 68k groups</div>
</div>
</div>
<!-- Feature 3 -->
<div class="bg-zinc-900 border border-zinc-800 rounded-3xl p-6 platform-card">
<div class="w-11 h-11 bg-emerald-500/10 flex items-center justify-center rounded-2xl mb-5">
<i class="fa-solid fa-comments text-emerald-400 text-2xl"></i>
</div>
<h4 class="font-semibold text-lg mb-2">Conversational Messaging</h4>
<p class="text-sm text-zinc-400 content-rich">
Rich messaging with threaded discussions, polls, and collaborative spaces that keep conversations organized and productive.
</p>
<div class="mt-4 text-xs text-emerald-300 font-medium">4.8m messages sent today</div>
</div>
<!-- Feature 4 -->
<div class="bg-zinc-900 border border-zinc-800 rounded-3xl p-6 platform-card">
<div class="w-11 h-11 bg-amber-500/10 flex items-center justify-center rounded-2xl mb-5">
<i class="fa-solid fa-chart-line text-amber-400 text-2xl"></i>
</div>
<h4 class="font-semibold text-lg mb-2">Audience Insights</h4>
<p class="text-sm text-zinc-400 content-rich">
Deep analytics on engagement patterns, content performance, and community health. Understand what resonates with your audience.
</p>
<div class="mt-4">
<span class="text-xs bg-amber-900/30 text-amber-300 px-3 py-1 rounded-2xl font-medium">Pro analytics included</span>
</div>
</div>
</div>
</section>
<!-- TRENDING CONTENT SECTION -->
<section id="trending" class="max-w-screen-2xl mx-auto px-8 py-12 bg-zinc-900 border-y border-zinc-800">
<div class="max-w-screen-2xl mx-auto">
<div class="flex items-end justify-between mb-8">
<div>
<span class="px-3 py-1 text-xs font-semibold bg-zinc-800 text-white rounded-2xl">LIVE</span>
<h2 class="section-header tracking-tighter mt-1">Trending content right now</h2>
<p class="text-zinc-400 mt-2 max-w-md">Discover what the global community is talking about. Updated every 60 seconds.</p>
</div>
<a href="#" class="hidden md:flex items-center text-sm font-medium text-indigo-400 hover:text-indigo-300">
View all trends <i class="fa-solid fa-arrow-right ml-2"></i>
</a>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5">
<!-- Post 1 -->
<div class="post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/36?u=24" alt="Sarah Chen" class="w-9 h-9 rounded-2xl">
<div class="flex-1 min-w-0">
<div class="flex items-baseline gap-x-2">
<span class="font-semibold">Sarah Chen</span>
<span class="text-xs text-zinc-500">@sarahcreates</span>
</div>
<span class="text-xs text-zinc-500">2h ago • #ProductDesign</span>
</div>
<div class="text-xs px-2 py-1 bg-zinc-900 rounded-xl text-zinc-400">12.4k</div>
</div>
<div class="mt-4">
<p class="text-sm text-zinc-300 content-rich">Just published my deep dive on building inclusive design systems. The conversation around accessibility in social platforms has been incredibly energizing.</p>
</div>
<div class="mt-4 flex items-center justify-between">
<div class="flex items-center gap-x-4">
<div class="flex items-center gap-x-1.5">
<button onclick="likePost(this, 12400)" class="flex items-center gap-x-1.5 text-sm hover:text-rose-400 transition-colors">
<i class="fa-solid fa-heart text-rose-400"></i>
<span class="like-count font-medium text-sm">12.4k</span>
</button>
</div>
<div class="flex items-center gap-x-1.5 text-sm">
<i class="fa-solid fa-comment text-zinc-400"></i>
<span class="font-medium text-sm">1.8k</span>
</div>
</div>
<div>
<span class="text-xs px-2.5 py-1 bg-zinc-800 rounded-2xl">#ProductDesign</span>
</div>
</div>
</div>
</div>
<!-- Post 2 -->
<div class="post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/36?u=19" alt="Marcus Rivera" class="w-9 h-9 rounded-2xl">
<div class="flex-1 min-w-0">
<div class="flex items-baseline gap-x-2">
<span class="font-semibold">Marcus Rivera</span>
<span class="text-xs text-zinc-500">@marcusruns</span>
</div>
<span class="text-xs text-zinc-500">4h ago • #FutureOfWork</span>
</div>
<div class="text-xs px-2 py-1 bg-zinc-900 rounded-xl text-zinc-400">89.7k</div>
</div>
<div class="mt-4">
<p class="text-sm text-zinc-300 content-rich">The shift toward asynchronous work isn't slowing down. Here's why distributed teams are actually more connected than ever before.</p>
</div>
<div class="mt-4 flex items-center justify-between">
<div class="flex items-center gap-x-4">
<div class="flex items-center gap-x-1.5">
<button onclick="likePost(this, 89700)" class="flex items-center gap-x-1.5 text-sm hover:text-rose-400 transition-colors">
<i class="fa-solid fa-heart text-rose-400"></i>
<span class="like-count font-medium text-sm">89.7k</span>
</button>
</div>
<div class="flex items-center gap-x-1.5 text-sm">
<i class="fa-solid fa-comment text-zinc-400"></i>
<span class="font-medium text-sm">14.2k</span>
</div>
</div>
<div>
<span class="text-xs px-2.5 py-1 bg-zinc-800 rounded-2xl">#FutureOfWork</span>
</div>
</div>
</div>
</div>
<!-- Post 3 -->
<div class="post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/36?u=45" alt="Aisha Patel" class="w-9 h-9 rounded-2xl">
<div class="flex-1 min-w-0">
<div class="flex items-baseline gap-x-2">
<span class="font-semibold">Aisha Patel</span>
<span class="text-xs text-zinc-500">@aishadesign</span>
</div>
<span class="text-xs text-zinc-500">7h ago • #ClimateAction</span>
</div>
<div class="text-xs px-2 py-1 bg-zinc-900 rounded-xl text-zinc-400">64.3k</div>
</div>
<div class="mt-4">
<p class="text-sm text-zinc-300 content-rich">Our latest community challenge raised $240k for reforestation projects. The power of collective action on this platform continues to amaze me.</p>
</div>
<div class="mt-4 flex items-center justify-between">
<div class="flex items-center gap-x-4">
<div class="flex items-center gap-x-1.5">
<button onclick="likePost(this, 64300)" class="flex items-center gap-x-1.5 text-sm hover:text-rose-400 transition-colors">
<i class="fa-solid fa-heart text-rose-400"></i>
<span class="like-count font-medium text-sm">64.3k</span>
</button>
</div>
<div class="flex items-center gap-x-1.5 text-sm">
<i class="fa-solid fa-comment text-zinc-400"></i>
<span class="font-medium text-sm">9.1k</span>
</div>
</div>
<div>
<span class="text-xs px-2.5 py-1 bg-zinc-800 rounded-2xl">#ClimateAction</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- CREATOR SPOTLIGHTS -->
<section id="spotlights" class="max-w-screen-2xl mx-auto px-8 py-16">
<div class="flex items-end justify-between mb-8">
<div>
<h2 class="section-header tracking-tighter">Creator Spotlights</h2>
<p class="text-zinc-400 mt-1.5 max-w-lg">Meet the voices shaping conversations and building powerful communities on EchoSphere.</p>
</div>
<button onclick="document.getElementById('communities').scrollIntoView({ behavior: 'smooth' })"
class="hidden md:flex items-center gap-x-2 text-sm font-semibold px-5 py-2.5 border border-zinc-700 hover:bg-zinc-900 rounded-3xl">
Explore all creators
</button>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<!-- Creator 1 -->
<div class="creator-card bg-zinc-900 border border-zinc-800 rounded-3xl p-6">
<div class="flex items-center gap-x-4">
<img src="https://i.pravatar.cc/56?u=creator1" alt="Elena Voss" class="w-14 h-14 rounded-2xl ring-2 ring-offset-2 ring-offset-zinc-900 ring-indigo-500/20">
<div>
<div class="font-semibold">Elena Voss</div>
<div class="text-sm text-zinc-400">@elenavoss</div>
</div>
</div>
<div class="mt-5 text-sm text-zinc-300 content-rich">
Elena is a leading voice in ethical technology and digital wellness. Her work focuses on building healthier online communities and sustainable content creation practices.
</div>
<div class="mt-5 flex items-center justify-between text-sm">
<div>
<div class="font-semibold">1.8m</div>
<div class="text-xs text-zinc-400">Followers</div>
</div>
<div class="flex items-center">
<button onclick="followCreator(this)"
class="px-5 py-1.5 text-xs font-semibold transition-all bg-white text-zinc-900 hover:bg-zinc-100 rounded-2xl">
Follow
</button>
</div>
</div>
</div>
<!-- Creator 2 -->
<div class="creator-card bg-zinc-900 border border-zinc-800 rounded-3xl p-6">
<div class="flex items-center gap-x-4">
<img src="https://i.pravatar.cc/56?u=creator2" alt="Jamal Wright" class="w-14 h-14 rounded-2xl ring-2 ring-offset-2 ring-offset-zinc-900 ring-indigo-500/20">
<div>
<div class="font-semibold">Jamal Wright</div>
<div class="text-sm text-zinc-400">@jamalwright</div>
</div>
</div>
<div class="mt-5 text-sm text-zinc-300 content-rich">
Jamal leads the conversation around decentralized social networks and creator ownership. He's helped thousands of creators build sustainable revenue through community management.
</div>
<div class="mt-5 flex items-center justify-between text-sm">
<div>
<div class="font-semibold">940k</div>
<div class="text-xs text-zinc-400">Followers</div>
</div>
<div class="flex items-center">
<button onclick="followCreator(this)"
class="px-5 py-1.5 text-xs font-semibold transition-all bg-white text-zinc-900 hover:bg-zinc-100 rounded-2xl">
Follow
</button>
</div>
</div>
</div>
<!-- Creator 3 -->
<div class="creator-card bg-zinc-900 border border-zinc-800 rounded-3xl p-6">
<div class="flex items-center gap-x-4">
<img src="https://i.pravatar.cc/56?u=creator3" alt="Priya Sharma" class="w-14 h-14 rounded-2xl ring-2 ring-offset-2 ring-offset-zinc-900 ring-indigo-500/20">
<div>
<div class="font-semibold">Priya Sharma</div>
<div class="text-sm text-zinc-400">@priyasharma</div>
</div>
</div>
<div class="mt-5 text-sm text-zinc-300 content-rich">
An expert in cross-cultural storytelling, Priya has built one of the largest global communities for underrepresented voices in media and tech.
</div>
<div class="mt-5 flex items-center justify-between text-sm">
<div>
<div class="font-semibold">2.1m</div>
<div class="text-xs text-zinc-400">Followers</div>
</div>
<div class="flex items-center">
<button onclick="followCreator(this)"
class="px-5 py-1.5 text-xs font-semibold transition-all bg-white text-zinc-900 hover:bg-zinc-100 rounded-2xl">
Follow
</button>
</div>
</div>
</div>
</div>
</section>
<!-- DISCOVER COMMUNITIES -->
<section id="communities" class="max-w-screen-2xl mx-auto px-8 py-12 bg-zinc-900 border-t border-zinc-800">
<div class="flex items-end justify-between mb-8">
<div>
<h2 class="section-header tracking-tighter">Discover communities</h2>
<p class="text-zinc-400 mt-1">Find your people. Over 92,000 active communities on EchoSphere.</p>
</div>
<a href="#" class="hidden md:flex items-center text-sm font-semibold px-4 py-2 text-indigo-400">
Browse all <i class="fa-solid fa-chevron-right ml-2 text-xs"></i>
</a>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-5">
<!-- Community 1 -->
<div class="community-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="h-2 bg-gradient-to-r from-indigo-500 to-violet-500"></div>
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://picsum.photos/id/201/48/48" alt="Future Founders" class="w-10 h-10 rounded-2xl object-cover">
<div>
<div class="font-semibold">Future Founders</div>
<div class="text-xs text-emerald-400">142k members</div>
</div>
</div>
<p class="mt-4 text-sm text-zinc-400 content-rich">A space for early-stage founders and builders to share advice, pitch ideas, and collaborate on the future of technology and entrepreneurship.</p>
<div class="mt-5 flex items-center justify-between">
<div class="text-xs px-3 py-1.5 bg-zinc-900 rounded-2xl text-zinc-300 font-medium">4.8k posts this week</div>
<button onclick="joinCommunity(this, 'Future Founders')"
class="px-4 py-1.5 text-xs font-semibold bg-indigo-600 hover:bg-indigo-500 transition-colors rounded-2xl">Join Group</button>
</div>
</div>
</div>
<!-- Community 2 -->
<div class="community-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="h-2 bg-gradient-to-r from-emerald-500 to-teal-500"></div>
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://picsum.photos/id/160/48/48" alt="Climate Collective" class="w-10 h-10 rounded-2xl object-cover">
<div>
<div class="font-semibold">Climate Collective</div>
<div class="text-xs text-emerald-400">219k members</div>
</div>
</div>
<p class="mt-4 text-sm text-zinc-400 content-rich">Global community dedicated to climate action, sustainability education, and sharing actionable solutions for a healthier planet.</p>
<div class="mt-5 flex items-center justify-between">
<div class="text-xs px-3 py-1.5 bg-zinc-900 rounded-2xl text-zinc-300 font-medium">9.2k posts this week</div>
<button onclick="joinCommunity(this, 'Climate Collective')"
class="px-4 py-1.5 text-xs font-semibold bg-indigo-600 hover:bg-indigo-500 transition-colors rounded-2xl">Join Group</button>
</div>
</div>
</div>
<!-- Community 3 -->
<div class="community-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="h-2 bg-gradient-to-r from-amber-500 to-orange-500"></div>
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://picsum.photos/id/251/48/48" alt="Indie Makers" class="w-10 h-10 rounded-2xl object-cover">
<div>
<div class="font-semibold">Indie Makers</div>
<div class="text-xs text-emerald-400">87k members</div>
</div>
</div>
<p class="mt-4 text-sm text-zinc-400 content-rich">Home for solo founders and independent creators. Discussions on product development, audience building, and sustainable business practices.</p>
<div class="mt-5 flex items-center justify-between">
<div class="text-xs px-3 py-1.5 bg-zinc-900 rounded-2xl text-zinc-300 font-medium">2.9k posts this week</div>
<button onclick="joinCommunity(this, 'Indie Makers')"
class="px-4 py-1.5 text-xs font-semibold bg-indigo-600 hover:bg-indigo-500 transition-colors rounded-2xl">Join Group</button>
</div>
</div>
</div>
<!-- Community 4 -->
<div class="community-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden">
<div class="h-2 bg-gradient-to-r from-pink-500 to-rose-500"></div>
<div class="p-5">
<div class="flex items-center gap-x-3">
<img src="https://picsum.photos/id/1005/48/48" alt="Creative Minds" class="w-10 h-10 rounded-2xl object-cover">
<div>
<div class="font-semibold">Creative Minds</div>
<div class="text-xs text-emerald-400">134k members</div>
</div>
</div>
<p class="mt-4 text-sm text-zinc-400 content-rich">A vibrant space for artists, writers, designers, and storytellers. Share work, receive feedback, and collaborate on creative projects.</p>
<div class="mt-5 flex items-center justify-between">
<div class="text-xs px-3 py-1.5 bg-zinc-900 rounded-2xl text-zinc-300 font-medium">6.1k posts this week</div>
<button onclick="joinCommunity(this, 'Creative Minds')"
class="px-4 py-1.5 text-xs font-semibold bg-indigo-600 hover:bg-indigo-500 transition-colors rounded-2xl">Join Group</button>
</div>
</div>
</div>
</div>
</section>
<!-- INTERACTIVE: REAL-TIME PULSE TRACKER -->
<section class="max-w-screen-2xl mx-auto px-8 py-16">
<div class="bg-zinc-900 border border-zinc-800 rounded-3xl p-7 md:p-8">
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-y-4 mb-8">
<div>
<span class="px-3 py-1 text-xs font-semibold bg-emerald-900/30 text-emerald-300 rounded-2xl">LIVE DATA</span>
<h2 class="section-header tracking-tighter mt-2">Real-Time Pulse Tracker</h2>
<p class="text-zinc-400 mt-1 max-w-md">See which conversations are gaining momentum right now. Boost topics you care about.</p>
</div>
<div class="flex items-center gap-x-3">
<div class="bg-zinc-800 px-3.5 py-1.5 rounded-2xl text-sm">
<span class="font-medium">1,842,301</span>
<span class="text-xs text-zinc-400">engagements today</span>
</div>
</div>
</div>
<div id="pulse-tracker" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
<!-- Populated by JS -->
</div>
<div class="mt-6 text-center">
<button onclick="resetPulseTracker()"
class="text-xs px-4 py-2 text-zinc-400 hover:text-white flex items-center gap-x-2 mx-auto transition-colors">
<i class="fa-solid fa-sync-alt"></i>
<span>Reset tracker</span>
</button>
</div>
</div>
</section>
<!-- TESTIMONIALS -->
<section class="max-w-screen-2xl mx-auto px-8 py-16 border-t border-zinc-800">
<div class="max-w-2xl mb-8">
<h2 class="section-header tracking-tighter">Loved by creators and communities</h2>
</div>
<div class="grid md:grid-cols-3 gap-6">
<div class="bg-zinc-900 border border-zinc-800 p-6 rounded-3xl">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/32?u=68" alt="Priya Patel" class="w-8 h-8 rounded-full">
<div>
<span class="font-semibold">Priya Patel</span>
<span class="text-xs block text-zinc-400">Founder, Studio Vellum</span>
</div>
</div>
<p class="mt-4 text-sm text-zinc-300">"EchoSphere transformed how I manage community engagement. The hashtag intelligence and creator tools have been game-changers for our growth strategy."</p>
<div class="flex mt-4 text-amber-400">
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
</div>
</div>
<div class="bg-zinc-900 border border-zinc-800 p-6 rounded-3xl">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/32?u=82" alt="David Kim" class="w-8 h-8 rounded-full">
<div>
<span class="font-semibold">David Kim</span>
<span class="text-xs block text-zinc-400">Community Lead, OpenAI Forum</span>
</div>
</div>
<p class="mt-4 text-sm text-zinc-300">"The community management features are unmatched. We've grown our global forum from 40k to over 300k members using EchoSphere's tools."</p>
<div class="flex mt-4 text-amber-400">
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star-half-stroke"></i>
</div>
</div>
<div class="bg-zinc-900 border border-zinc-800 p-6 rounded-3xl">
<div class="flex items-center gap-x-3">
<img src="https://i.pravatar.cc/32?u=13" alt="Lila Torres" class="w-8 h-8 rounded-full">
<div>
<span class="font-semibold">Lila Torres</span>
<span class="text-xs block text-zinc-400">CEO, GreenThread</span>
</div>
</div>
<p class="mt-4 text-sm text-zinc-300">"As a brand, EchoSphere has given us the best return on engagement. Their platform feels human and the analytics actually help us improve our content strategy."</p>
<div class="flex mt-4 text-amber-400">
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
<i class="fa-solid fa-star"></i>
</div>
</div>
</div>
</section>
<!-- FINAL CTA -->
<section class="max-w-screen-2xl mx-auto px-8 py-16">
<div class="bg-gradient-to-br from-zinc-900 to-zinc-950 border border-zinc-800 rounded-3xl px-8 py-12 md:px-14 md:py-14 text-center">
<div class="max-w-md mx-auto">
<h2 class="text-4xl font-display font-semibold tracking-tighter">Ready to find your people?</h2>
<p class="mt-3 text-zinc-400">Join 5.2 million people building the future of social connection.</p>
<div class="mt-8 flex flex-col sm:flex-row items-center justify-center gap-3">
<button onclick="showJoinModal()"
class="w-full sm:w-auto px-8 py-4 font-semibold bg-white text-zinc-900 hover:bg-zinc-100 transition-colors text-base rounded-3xl">
Create your free account
</button>
<button onclick="document.getElementById('trending').scrollIntoView({ behavior: 'smooth' })"
class="w-full sm:w-auto px-7 py-4 font-semibold border border-zinc-700 hover:bg-zinc-900 transition-colors text-base rounded-3xl">
Explore trending
</button>
</div>
</div>
</div>
</section>
<!-- FOOTER -->
<footer class="bg-zinc-900 border-t border-zinc-800">
<div class="max-w-screen-2xl mx-auto px-8 pt-12 pb-8">
<div class="grid grid-cols-2 md:grid-cols-12 gap-y-10">
<!-- Brand -->
<div class="col-span-2 md:col-span-4">
<div class="flex items-center gap-x-2.5">
<img src="https://placehold.co/36x36/6366f1/ffffff?text=ES&font=montserrat" alt="EchoSphere" class="w-8 h-8 rounded-2xl">
<span class="font-display font-semibold text-2xl">EchoSphere</span>
</div>
<p class="text-zinc-400 text-sm mt-4 max-w-[240px]">The social platform built for meaningful connection and lasting communities.</p>
<div class="flex gap-x-4 mt-6">
<a href="#" class="text-zinc-400 hover:text-white"><i class="fa-brands fa-x-twitter"></i></a>
<a href="#" class="text-zinc-400 hover:text-white"><i class="fa-brands fa-instagram"></i></a>
<a href="#" class="text-zinc-400 hover:text-white"><i class="fa-brands fa-linkedin-in"></i></a>
</div>
</div>
<div class="col-span-2 md:col-span-2">
<div class="text-xs font-semibold tracking-widest text-zinc-400 mb-3">PLATFORM</div>
<div class="flex flex-col gap-y-2 text-sm">
<a href="#" class="text-zinc-400 hover:text-white">Discover</a>
<a href="#" class="text-zinc-400 hover:text-white">Trending</a>
<a href="#" class="text-zinc-400 hover:text-white">Communities</a>
<a href="#" class="text-zinc-400 hover:text-white">For Creators</a>
</div>
</div>
<div class="col-span-2 md:col-span-2">
<div class="text-xs font-semibold tracking-widest text-zinc-400 mb-3">COMPANY</div>
<div class="flex flex-col gap-y-2 text-sm">
<a href="#" onclick="showAboutModal()" class="text-zinc-400 hover:text-white">About</a>
<a href="#" class="text-zinc-400 hover:text-white">Careers</a>
<a href="#" class="text-zinc-400 hover:text-white">Blog</a>
<a href="#" class="text-zinc-400 hover:text-white">Press</a>
</div>
</div>
<div class="col-span-2 md:col-span-2">
<div class="text-xs font-semibold tracking-widest text-zinc-400 mb-3">SUPPORT</div>
<div class="flex flex-col gap-y-2 text-sm">
<a href="#" class="text-zinc-400 hover:text-white">Help Center</a>
<a href="#" class="text-zinc-400 hover:text-white">Community Guidelines</a>
<a href="#" class="text-zinc-400 hover:text-white">Trust & Safety</a>
<a href="#" class="text-zinc-400 hover:text-white">Contact us</a>
</div>
</div>
<div class="col-span-2 md:col-span-2">
<div class="text-xs font-semibold tracking-widest text-zinc-400 mb-3">LEGAL</div>
<div class="flex flex-col gap-y-2 text-sm">
<a href="#" class="text-zinc-400 hover:text-white">Privacy</a>
<a href="#" class="text-zinc-400 hover:text-white">Terms</a>
<a href="#" class="text-zinc-400 hover:text-white">Licenses</a>
</div>
</div>
</div>
<div class="mt-14 pt-8 border-t border-zinc-800 flex flex-col md:flex-row md:items-center md:justify-between gap-y-3">
<div class="text-xs text-zinc-400">
© 2025 EchoSphere, Inc. All rights reserved.
</div>
<div class="text-xs text-zinc-400">
San Francisco, CA • 5.2M members worldwide
</div>
</div>
</div>
</footer>
<!-- NOTIFICATIONS MODAL -->
<div id="notifications-modal" onclick="if (event.target.id === 'notifications-modal') hideNotificationsModal()" class="hidden fixed inset-0 bg-black/70 z-[100] flex items-end md:items-center justify-center">
<div onclick="event.stopImmediatePropagation()" class="w-full md:w-[420px] bg-zinc-900 border border-zinc-700 md:rounded-3xl rounded-t-3xl md:my-6 max-h-[80vh]">
<div class="flex items-center justify-between px-5 pt-5 pb-4 border-b border-zinc-700">
<div class="flex items-center gap-x-2">
<span class="font-semibold text-xl">Notifications</span>
<span class="text-xs px-2 py-px bg-zinc-700 rounded-xl">14</span>
</div>
<button onclick="hideNotificationsModal()" class="text-zinc-400 hover:text-white w-9 h-9 flex items-center justify-center">
<i class="fa-solid fa-times"></i>
</button>
</div>
<div class="p-2 max-h-[380px] overflow-auto">
<div class="px-3 py-3 hover:bg-zinc-800 rounded-2xl cursor-pointer">
<div class="flex items-start gap-x-3">
<img src="https://i.pravatar.cc/28?u=92" alt="" class="w-7 h-7 rounded-xl mt-0.5">
<div class="flex-1">
<div><span class="font-semibold">Isabella Cruz</span> liked your post about product strategy.</div>
<div class="text-xs text-zinc-400 mt-0.5">2 hours ago</div>
</div>
</div>
</div>
<div class="px-3 py-3 hover:bg-zinc-800 rounded-2xl cursor-pointer">
<div class="flex items-start gap-x-3">
<img src="https://i.pravatar.cc/28?u=33" alt="" class="w-7 h-7 rounded-xl mt-0.5">
<div class="flex-1">
<div>New follower: <span class="font-semibold">@designsystems</span></div>
<div class="text-xs text-zinc-400 mt-0.5">5 hours ago</div>
</div>
</div>
</div>
<div class="px-3 py-3 hover:bg-zinc-800 rounded-2xl cursor-pointer">
<div class="flex items-start gap-x-3">
<div class="w-7 h-7 bg-emerald-900/30 flex items-center justify-center rounded-xl mt-0.5">
<i class="fa-solid fa-users text-emerald-300 text-xs"></i>
</div>
<div class="flex-1">
<div>Your community <span class="font-semibold">"Indie Makers"</span> reached 100k members.</div>
<div class="text-xs text-zinc-400 mt-0.5">Yesterday</div>
</div>
</div>
</div>
<div class="px-3 py-3 hover:bg-zinc-800 rounded-2xl cursor-pointer">
<div class="flex items-start gap-x-3">
<img src="https://i.pravatar.cc/28?u=11" alt="" class="w-7 h-7 rounded-xl mt-0.5">
<div class="flex-1">
<div><span class="font-semibold">Leo Park</span> mentioned you in a comment.</div>
<div class="text-xs text-zinc-400 mt-0.5">Jan 29</div>
</div>
</div>
</div>
</div>
<div class="px-5 py-3 border-t border-zinc-700 flex justify-center">
<button class="text-xs font-semibold text-indigo-400">View all notifications</button>
</div>
</div>
</div>
<!-- ABOUT MODAL -->
<div id="about-modal" onclick="if (event.target.id === 'about-modal') hideAboutModal()" class="hidden fixed inset-0 bg-black/70 z-[100] flex items-center justify-center p-4">
<div onclick="event.stopImmediatePropagation()" class="w-full max-w-lg bg-zinc-900 border border-zinc-700 rounded-3xl p-6 md:p-7">
<div class="flex items-center justify-between mb-4">
<span class="font-display text-2xl font-semibold">About EchoSphere</span>
<button onclick="hideAboutModal()" class="text-zinc-400 hover:text-white"><i class="fa-solid fa-times text-xl"></i></button>
</div>
<div class="text-sm text-zinc-300 content-rich space-y-4">
<p>EchoSphere was founded in 2020 with a simple mission: to create a social platform that prioritizes depth over noise and genuine connection over endless scrolling.</p>
<p>We believe social media should empower people to build lasting communities, share meaningful content, and use advanced tools for community management and content strategy.</p>
<div class="pt-3 border-t border-zinc-700 text-xs">
<div class="grid grid-cols-3 gap-4">
<div>
<div class="font-semibold">5.2m</div>
<div class="text-zinc-400">Users</div>
</div>
<div>
<div class="font-semibold">92k</div>
<div class="text-zinc-400">Communities</div>
</div>
<div>
<div class="font-semibold">41</div>
<div class="text-zinc-400">Countries</div>
</div>
</div>
</div>
</div>
<div class="mt-6 text-xs text-zinc-400">
Headquartered in San Francisco, California.
</div>
</div>
</div>
<!-- JOIN MODAL -->
<div id="join-modal" onclick="if (event.target.id === 'join-modal') hideJoinModal()" class="hidden fixed inset-0 bg-black/70 z-[100] flex items-center justify-center p-4">
<div onclick="event.stopImmediatePropagation()" class="w-full max-w-md bg-zinc-900 border border-zinc-700 rounded-3xl overflow-hidden">
<div class="px-6 pt-6 pb-4">
<div class="flex justify-between items-center">
<div>
<span class="font-display font-semibold text-3xl">Join EchoSphere</span>
</div>
<button onclick="hideJoinModal()" class="text-zinc-400 hover:text-white text-xl"><i class="fa-solid fa-times"></i></button>
</div>
<p class="text-sm mt-1 text-zinc-400">Create your account in under 30 seconds.</p>
<form id="join-form" onsubmit="submitJoinForm(event)" class="mt-6 space-y-4">
<div class="grid grid-cols-2 gap-4">
<div>
<label class="text-xs font-medium text-zinc-400">First name</label>
<input type="text" value="Maya" class="w-full bg-zinc-800 border border-zinc-700 focus:border-indigo-500 px-4 py-3 text-sm rounded-2xl mt-1.5" required>
</div>
<div>
<label class="text-xs font-medium text-zinc-400">Last name</label>
<input type="text" value="Torres" class="w-full bg-zinc-800 border border-zinc-700 focus:border-indigo-500 px-4 py-3 text-sm rounded-2xl mt-1.5" required>
</div>
</div>
<div>
<label class="text-xs font-medium text-zinc-400">Email address</label>
<input type="email" value="maya.torres@design.co" class="w-full bg-zinc-800 border border-zinc-700 focus:border-indigo-500 px-4 py-3 text-sm rounded-2xl mt-1.5" required>
</div>
<div>
<label class="text-xs font-medium text-zinc-400">Create password</label>
<input type="password" value="echosphere2025" class="w-full bg-zinc-800 border border-zinc-700 focus:border-indigo-500 px-4 py-3 text-sm rounded-2xl mt-1.5" required>
</div>
<div class="pt-3">
<button type="submit"
class="w-full flex justify-center items-center gap-x-2 py-3.5 bg-indigo-600 hover:bg-indigo-500 font-semibold rounded-3xl text-sm transition-colors">
Create account
</button>
</div>
</form>
<div id="join-success" class="hidden px-4 py-5 text-center">
<div class="w-12 h-12 bg-emerald-900/30 flex items-center justify-center mx-auto rounded-2xl mb-3">
<i class="fa-solid fa-check text-emerald-300 text-3xl"></i>
</div>
<div class="font-semibold">Welcome to EchoSphere!</div>
<div class="text-xs text-zinc-400 mt-1">Your account has been created successfully.</div>
<button onclick="hideJoinModal()" class="mt-5 text-sm text-indigo-400 font-semibold">Continue to dashboard</button>
</div>
</div>
<div class="px-6 py-4 bg-zinc-950 text-xs flex items-center justify-center text-center text-zinc-400">
By joining, you agree to our <a href="#" class="underline">Terms</a> and <a href="#" class="underline">Privacy Policy</a>.
</div>
</div>
</div>
<script src="https://cdn.tailwindcss.com"></script>
<script>
// Tailwind configuration
function initializeTailwind() {
document.documentElement.style.setProperty('--accent', '#6366f1');
tailwind.config = {
theme: {
extend: {
fontFamily: {
'display': ['Space Grotesk', 'Inter', 'system-ui', 'sans-serif']
}
}
}
};
}
// Mobile menu toggle
function toggleMobileMenu() {
const mobileMenu = document.getElementById('mobile-menu');
const btn = document.getElementById('mobile-menu-btn');
if (mobileMenu.classList.contains('hidden')) {
mobileMenu.classList.remove('hidden');
btn.innerHTML = '<i class="fa-solid fa-times text-lg"></i>';
} else {
mobileMenu.classList.add('hidden');
btn.innerHTML = '<i class="fa-solid fa-bars text-lg"></i>';
}
}
// Like post functionality
function likePost(button, initialCount) {
const countSpan = button.querySelector('.like-count');
let currentCount = parseInt(countSpan.textContent.replace('k', '')) * 1000;
if (button.classList.contains('liked')) {
// Unlike
currentCount -= 1000;
button.classList.remove('liked');
button.querySelector('i').classList.remove('text-rose-500');
button.querySelector('i').classList.add('text-rose-400');
} else {
// Like
currentCount += 1000;
button.classList.add('liked');
button.querySelector('i').classList.remove('text-rose-400');
button.querySelector('i').classList.add('text-rose-500');
}
// Update display
let displayValue;
if (currentCount >= 1000000) {
displayValue = (currentCount / 1000000).toFixed(1) + 'm';
} else {
displayValue = (currentCount / 1000).toFixed(1) + 'k';
}
countSpan.textContent = displayValue;
}
// Follow creator
function followCreator(button) {
if (button.textContent.trim() === 'Follow') {
button.textContent = 'Following';
button.classList.remove('bg-white', 'text-zinc-900');
button.classList.add('bg-zinc-800', 'text-white', 'border', 'border-zinc-700');
} else {
button.textContent = 'Follow';
button.classList.add('bg-white', 'text-zinc-900');
button.classList.remove('bg-zinc-800', 'text-white', 'border', 'border-zinc-700');
}
}
// Join community
function joinCommunity(button, communityName) {
if (button.textContent === 'Join Group') {
button.textContent = 'Joined';
button.classList.remove('bg-indigo-600');
button.classList.add('bg-emerald-600');
// Show toast notification
showToast(`Welcome to ${communityName}!`);
// Update member count simulation
const memberText = button.parentElement.querySelector('.text-xs');
if (memberText) {
setTimeout(() => {
memberText.textContent = (parseInt(memberText.textContent) + 1) + ' members';
}, 1200);
}
} else {
button.textContent = 'Join Group';
button.classList.remove('bg-emerald-600');
button.classList.add('bg-indigo-600');
}
}
// Toast notification
function showToast(message) {
const toast = document.createElement('div');
toast.className = `fixed bottom-5 left-1/2 -translate-x-1/2 bg-zinc-900 border border-zinc-700 text-white px-5 py-3 rounded-3xl shadow-xl flex items-center gap-x-3 text-sm z-[200]`;
toast.innerHTML = `
<div>${message}</div>
`;
document.body.appendChild(toast);
setTimeout(() => {
toast.style.transition = 'all 0.3s ease';
toast.style.opacity = '0';
setTimeout(() => {
toast.remove();
}, 300);
}, 2800);
}
// Pulse Tracker - Interactive element
let pulseData = [
{ id: 1, tag: "#FutureOfWork", count: 124800, trend: "up" },
{ id: 2, tag: "#DesignSystems", count: 87600, trend: "up" },
{ id: 3, tag: "#ClimateAction", count: 64200, trend: "down" },
{ id: 4, tag: "#IndieDev", count: 39100, trend: "up" },
{ id: 5, tag: "#AIethics", count: 108900, trend: "up" },
{ id: 6, tag: "#CreatorEconomy", count: 55300, trend: "down" }
];
function renderPulseTracker() {
const container = document.getElementById('pulse-tracker');
container.innerHTML = '';
pulseData.forEach((item, index) => {
const percentage = Math.min(Math.floor((item.count / 150000) * 100), 100);
const div = document.createElement('div');
div.className = `flex items-center gap-4 bg-zinc-950 border border-zinc-700 hover:border-zinc-600 transition-colors rounded-3xl px-4 py-3.5`;
div.innerHTML = `
<div class="flex-1 min-w-0">
<div class="flex items-center justify-between mb-1.5">
<div class="font-semibold text-sm">${item.tag}</div>
<div class="text-right">
<div class="font-mono text-xs font-medium metric">${(item.count / 1000).toFixed(0)}k</div>
</div>
</div>
<div class="w-full bg-zinc-800 h-1.5 rounded-full overflow-hidden">
<div class="trend-bar h-1.5 bg-gradient-to-r from-indigo-500 to-violet-500 rounded-full"
style="width: ${percentage}%"></div>
</div>
</div>
<div>
<button onclick="boostTrend(${index}, this)"
class="flex items-center justify-center px-3 py-1.5 text-xs font-semibold rounded-2xl border border-zinc-700 hover:bg-indigo-600 hover:border-indigo-600 transition-all">
<span class="mr-1.5">Boost</span>
<i class="fa-solid fa-arrow-up text-xs"></i>
</button>
</div>
`;
container.appendChild(div);
});
}
function boostTrend(index, button) {
const originalText = button.innerHTML;
// Boost the count
pulseData[index].count += Math.floor(Math.random() * 4000) + 1800;
// Re-render the tracker
renderPulseTracker();
// Show feedback
const toastEl = document.createElement('div');
toastEl.className = `fixed bottom-4 right-4 bg-zinc-900 border border-zinc-600 px-4 py-2 rounded-2xl text-xs flex items-center gap-x-2 shadow-lg`;
toastEl.innerHTML = `
<span class="text-emerald-300">+${(pulseData[index].count / 1000).toFixed(0)}k engagements</span>
`;
document.body.appendChild(toastEl);
setTimeout(() => {
toastEl.style.transition = 'all .25s ease';
toastEl.style.opacity = '0';
setTimeout(() => toastEl.remove(), 200);
}, 1600);
// Briefly highlight the button
button.innerHTML = `<span class="text-emerald-400">Boosted!</span>`;
setTimeout(() => {
if (button && button.parentNode) {
button.innerHTML = originalText;
}
}, 1500);
}
function resetPulseTracker() {
pulseData = [
{ id: 1, tag: "#FutureOfWork", count: 124800, trend: "up" },
{ id: 2, tag: "#DesignSystems", count: 87600, trend: "up" },
{ id: 3, tag: "#ClimateAction", count: 64200, trend: "down" },
{ id: 4, tag: "#IndieDev", count: 39100, trend: "up" },
{ id: 5, tag: "#AIethics", count: 108900, trend: "up" },
{ id: 6, tag: "#CreatorEconomy", count: 55300, trend: "down" }
];
renderPulseTracker();
}
// Modal functions
function showNotificationsModal() {
document.getElementById('notifications-modal').classList.remove('hidden');
document.getElementById('notifications-modal').classList.add('flex');
}
function hideNotificationsModal() {
const modal = document.getElementById('notifications-modal');
modal.classList.remove('flex');
modal.classList.add('hidden');
}
function showAboutModal() {
document.getElementById('about-modal').classList.remove('hidden');
document.getElementById('about-modal').classList.add('flex');
}
function hideAboutModal() {
const modal = document.getElementById('about-modal');
modal.classList.remove('flex');
modal.classList.add('hidden');
}
function showJoinModal() {
const modal = document.getElementById('join-modal');
modal.classList.remove('hidden');
modal.classList.add('flex');
// Reset form if needed
const form = document.getElementById('join-form');
const success = document.getElementById('join-success');
if (form) form.classList.remove('hidden');
if (success) success.classList.add('hidden');
}
function hideJoinModal() {
const modal = document.getElementById('join-modal');
modal.classList.remove('flex');
modal.classList.add('hidden');
}
function submitJoinForm(e) {
e.preventDefault();
const form = document.getElementById('join-form');
const success = document.getElementById('join-success');
form.classList.add('hidden');
success.classList.remove('hidden');
// Simulate account creation
setTimeout(() => {
// Optional: auto close modal after some time
// hideJoinModal();
}, 4500);
}
// Initialize everything
function initializeSite() {
initializeTailwind();
// Render interactive pulse tracker
renderPulseTracker();
// Add some random like count animation for polish (static but realistic)
setTimeout(() => {
const firstLike = document.querySelector('#trending .like-count');
if (firstLike) {
// Just for visual interest on load
}
}, 1200);
// Keyboard escape for modals
document.addEventListener('keydown', function(e) {
if (e.key === "Escape") {
const modals = document.querySelectorAll('.fixed.inset-0.flex');
if (modals.length > 0) {
modals[modals.length - 1].classList.add('hidden');
modals[modals.length - 1].classList.remove('flex');
}
}
if (e.key === "/" && document.activeElement.tagName === "BODY") {
e.preventDefault();
const trending = document.getElementById('trending');
if (trending) trending.scrollIntoView({ behavior: 'smooth' });
}
});
// Make sure header nav is responsive and polished
console.log('%c[EchoSphere] Production-quality one-page site initialized successfully.', 'color:#64748b');
// Optional: Add subtle animation to hero stats
setTimeout(() => {
const stats = document.querySelector('.absolute.bottom-5.right-5');
if (stats) {
stats.style.transition = 'transform 0.4s ease';
}
}, 800);
// Demo: Random engagement bump on trending posts every 45 seconds (for polish)
setInterval(() => {
const likeCounts = document.querySelectorAll('#trending .like-count');
if (likeCounts.length > 0 && Math.random() > .7) {
const randomIndex = Math.floor(Math.random() * likeCounts.length);
const el = likeCounts[randomIndex];
let val = el.textContent;
if (val.includes('k')) {
let num = parseFloat(val);
num += 0.4;
el.textContent = num.toFixed(1) + 'k';
}
}
}, 45000);
}
// Boot the site
window.onload = function() {
initializeSite();
}
// Bonus: Allow direct access to pulse tracker via console for demo
window.boostAllTrends = function() {
const container = document.getElementById('pulse-tracker');
if (!container) return;
pulseData.forEach((item, idx) => {
item.count += 12500;
});
renderPulseTracker();
}
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T09:43:28.036Z",
"url": "https://benchmark.aimac.invalid/1925f1b3da134d7919ca9f6f2df13e43f517e00953c72a4b8255b4f25395c73b.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": []
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": []
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": []
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": []
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": []
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body class=\"bg-zinc-950 text-zinc-200\">",
"target": [
"body"
]
}
]
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "important-letter-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-word-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-line-height",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "line-height in the style attribute is not set to !important, or meets the minimum"
}
],
"none": [],
"impact": null,
"html": "<html lang=\"en\" style=\"--accent: #6366f1;\">",
"target": [
"html"
]
}
]
},
{
"id": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button onclick=\"showJoinModal()\" class=\"px-5 py-2.5 text-sm font-semibold bg-white text-zinc-900 hover:bg-zinc-100 transition-colors rounded-2xl flex items-center gap-x-2\">\n <span>Join for free</span>\n </button>",
"target": [
".py-2\\.5.bg-white[onclick=\"showJoinModal()\"]"
]
}
]
},
{
"id": "bypass",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag241",
"section508",
"section508.22.o",
"TTv5",
"TT9.a",
"EN-301-549",
"EN-9.2.4.1"
],
"description": "Ensure each page has at least one mechanism for a user to bypass navigation and jump straight to the content",
"help": "Page must have means to bypass repeated blocks",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/bypass?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "internal-link-present",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Valid skip link found"
},
{
"id": "header-present",
"data": null,
"relatedNodes": [
{
"html": "<h1 class=\"text-6xl md:text-7xl leading-[1.05] font-display tracking-tighter font-semibold\">\n Connect.<br>\n <span class=\"social-gradient\">Amplify.</span><br>\n Belong.\n </h1>",
"target": [
"h1"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter\">Tools built for real connection</h2>",
"target": [
".md\\:items-end > div > .section-header"
]
},
{
"html": "<h4 class=\"font-semibold text-lg mb-2\">Hashtag Intelligence</h4>",
"target": [
".platform-card.p-6.bg-zinc-900:nth-child(1) > h4"
]
},
{
"html": "<h4 class=\"font-semibold text-lg mb-2\">Community Management</h4>",
"target": [
".platform-card.p-6.bg-zinc-900:nth-child(2) > h4"
]
},
{
"html": "<h4 class=\"font-semibold text-lg mb-2\">Conversational Messaging</h4>",
"target": [
".platform-card.p-6.bg-zinc-900:nth-child(3) > h4"
]
},
{
"html": "<h4 class=\"font-semibold text-lg mb-2\">Audience Insights</h4>",
"target": [
".platform-card.p-6.bg-zinc-900:nth-child(4) > h4"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter mt-1\">Trending content right now</h2>",
"target": [
".mt-1.section-header"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter\">Creator Spotlights</h2>",
"target": [
"#spotlights > .items-end.mb-8.justify-between > div > .section-header"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter\">Discover communities</h2>",
"target": [
"#communities > .items-end.mb-8.justify-between > div > .section-header"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter mt-2\">Real-Time Pulse Tracker</h2>",
"target": [
".mt-2.section-header"
]
},
{
"html": "<h2 class=\"section-header tracking-tighter\">Loved by creators and communities</h2>",
"target": [
".max-w-2xl > .section-header"
]
},
{
"html": "<h2 class=\"text-4xl font-display font-semibold tracking-tighter\">Ready to find your people?</h2>",
"target": [
".text-4xl"
]
}
],
"impact": "serious",
"message": "Page has a heading"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\" style=\"--accent: #6366f1;\">",
"target": [
"html"
]
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e4e4e7",
"bgColor": "#18181b",
"contrastRatio": 13.96,
"fontSize": "22.5pt (30px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 13.96"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span class=\"font-display text-3xl font-semibold tracking-tighter\">EchoSphere</span>",
"target": [
".text-3xl.font-display.tracking-tighter"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\" style=\"--accent: #6366f1;\">",
"target": [
"html"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\" style=\"--accent: #6366f1;\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\" style=\"--accent: #6366f1;\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://placehold.co/42x42/6366f1/ffffff?text=ES&font=montserrat\" alt=\"EchoSphere logo\" class=\"w-10 h-10 rounded-xl object-cover ring-2 ring-offset-2 ring-offset-zinc-950 ring-indigo-500/30\">",
"target": [
".ring-indigo-500\\/30"
]
}
]
},
{
"id": "link-name",
"impact": "serious",
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#communities\" class=\"nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl\">Discover</a>",
"target": [
".nav-link.py-2[href$=\"#communities\"]:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/42x42/6366f1/ffffff?text=ES&font=montserrat\" alt=\"EchoSphere logo\" class=\"w-10 h-10 rounded-xl object-cover ring-2 ring-offset-2 ring-offset-zinc-950 ring-indigo-500/30\">",
"target": [
".ring-indigo-500\\/30"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 90.9,
"height": 36
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (90.9px by 36px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#communities\" class=\"nav-link px-4 py-2 text-sm font-medium text-zinc-300 hover:text-white rounded-xl\">Discover</a>",
"target": [
".nav-link.py-2[href$=\"#communities\"]:nth-child(1)"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": null,
"bgColor": null,
"contrastRatio": 0,
"fontSize": "54.0pt (72px)",
"fontWeight": "normal",
"messageKey": "bgGradient",
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"social-gradient\">Amplify.</span>",
"target": [
".social-gradient"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a background gradient"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"social-gradient\">Amplify.</span>",
"target": [
".social-gradient"
],
"failureSummary": "Fix any of the following:\n Element's background color could not be determined due to a background gradient"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#6366f1",
"contrastRatio": 4.46,
"fontSize": "7.5pt (10px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"inline-flex items-center justify-center w-5 h-5 text-[10px] font-medium bg-indigo-500 text-white rounded-full\">14</span>",
"target": [
"a[onclick=\"showNotificationsModal()\"] > .w-5.h-5.text-\\[10px\\]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.46 (foreground color: #ffffff, background color: #6366f1, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"inline-flex items-center justify-center w-5 h-5 text-[10px] font-medium bg-indigo-500 text-white rounded-full\">14</span>",
"target": [
"a[onclick=\"showNotificationsModal()\"] > .w-5.h-5.text-\\[10px\\]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.46 (foreground color: #ffffff, background color: #6366f1, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">@sarahcreates</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(1) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .items-baseline.gap-x-2.flex > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">2h ago \u2022 #ProductDesign</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(1) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">@marcusruns</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(2) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .items-baseline.gap-x-2.flex > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">4h ago \u2022 #FutureOfWork</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(2) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">@aishadesign</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(3) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .items-baseline.gap-x-2.flex > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#71717a",
"bgColor": "#09090b",
"contrastRatio": 4.11,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"post-card bg-zinc-950 border border-zinc-800 rounded-3xl overflow-hidden\">",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"text-xs text-zinc-500\">7h ago \u2022 #ClimateAction</span>",
"target": [
".post-card.bg-zinc-950.overflow-hidden:nth-child(3) > .p-5 > .gap-x-3.items-center.flex > .min-w-0.flex-1 > .text-zinc-500"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #71717a, background color: #09090b, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
},
{
"id": "link-name",
"impact": "serious",
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\" class=\"text-zinc-400 hover:text-white\"><i class=\"fa-brands fa-x-twitter\"></i></a>",
"target": [
".mt-6.gap-x-4.flex > a[href=\"#\"]:nth-child(1)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\" class=\"text-zinc-400 hover:text-white\"><i class=\"fa-brands fa-instagram\"></i></a>",
"target": [
".mt-6.gap-x-4.flex > a[href=\"#\"]:nth-child(2)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\" class=\"text-zinc-400 hover:text-white\"><i class=\"fa-brands fa-linkedin-in\"></i></a>",
"target": [
".mt-6.gap-x-4.flex > a[href=\"#\"]:nth-child(3)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 4459
},
{
"y": 576,
"height": 4459
},
{
"y": 1152,
"height": 4459
},
{
"y": 1728,
"height": 4459
},
{
"y": 2304,
"height": 4459
},
{
"y": 2880,
"height": 4459
},
{
"y": 3456,
"height": 4459
},
{
"y": 3739,
"height": 4459
}
],
"scans": 9,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Social Media" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.
**Client & Category:**
- Industry: "Social Media"
- Description: Platforms for social networking, sharing, messaging, and online communities.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Social Media" category.
2. **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3. **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.
**Content & Structure Requirements (Deliver a COMPLETE page):**
- **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
- **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Notifications", "About", "Discover".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Social Media" category. Consider themes similar to: "Trending Content", "Creator Spotlights", "Group Discoveries".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "hashtag", "community management", "content strategy".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Subscribe", "Explore", "Join Group".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Social Media" sector. Ideas similar but not limited to: "trending tracker".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "event invites", "group recommendations", "trending hashtags".
- **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
- **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.