SpectrumInfinite's picture
You are an expert Shopify front-end developer. Generate one self-contained, production-ready HTML file that demonstrates a streamlined collection page for “Acme Corporation”. Tech stack: • HTML5 (semantic tags) • TailwindCSS 3.x utility classes (no custom CSS if avoidable) • Alpine JS v3 (only for toggles and mini-cart—keep to < 1 KB) Overall goals: Fully responsive (mobile-first, looks great from 360 px up to 1440 px). Fast: lazy-load imagery, use CSS Grid/Flex, no carousels or heavy scripts. Accessible & SEO-friendly: correct aria labels, logical heading hierarchy, alt text placeholders. Beautiful UX but minimalist—avoids “fancy web-store clutter” while showcasing the core store components for stakeholder review. <header> • Slim announcement bar (dark bg, white text) – dismissible with Alpine. • Main nav: left-aligned logo (links to “/”), inline links (Home, About, Contact), right-aligned icons (search, account, cart with badge). • On ≤768 px: collapse nav links into hamburger button that reveals vertical menu. </header> <main> • Collection hero: - Banner img (1200×400 placeholder) – object-cover, sm:h-48 md:h-64. - Collection title (h1) + subtitle (max-width prose). • Filter/sort bar: - “Sort by” select (Featured | Price Low-High | Price High-Low | Newest). - “Filter” button (Alpine slide-down drawer) with: ▸ Availability (checkbox in-stock) ▸ Price range (min / max inputs) ▸ Collapse on outside click / Esc. • Product grid: - CSS Grid: 2 cols (sm), 3 cols (md), 4 cols (xl). Gap-4. - Each card: square image (lazy), product title, price, unobtrusive “Add to cart” (AJAX-style via Alpine stub), hover second image FX. • Pagination: basic numbered list + “Next”. • Trust strip: flex items with icons & short captions (Shipping | Returns | Secure payments). </main> <footer> • Newsletter sign-up (input + button). • Two-col link list (Policies, Support, Social). • Copyright notice. </footer> 2️⃣ DESIGN & UX DETAILS Tailwind colour palette: neutral grays + one accent (#2563eb or blue-600) for CTAs. Use prose class for readable text blocks. Fixed header shadow on scroll (sticky top-0). Product image hover: group-hover:opacity-0 / second img absolute overlay. Cart badge updates via Alpine reactive cartQty. Form controls styled with form-input, form-select, form-checkbox plugin classes (assume Tailwind Forms plugin). 3️⃣ PERFORMANCE TOUCHES <link rel="preconnect"> to fonts.gstatic.com (if using Google Font, but OK to stick to system UI). loading="lazy" on all <img>. Only one tiny inline <script> block (Alpine CDN import + minimal component code). No external icons—use Heroicons (outline) via inline SVG for zero network calls. 4️⃣ PLACEHOLDERS & COMMENTS Use lorem titles like “Acme Widget A”. Price placeholders “₹1,299” etc. Comment every major section with <!-- SECTION: Collection Hero --> etc. for easy scanning. 5️⃣ DELIVERABLE Return one complete HTML document wrapped in html Copy Edit <!DOCTYPE html> <html lang="en"> … </html> that can be saved as collection-demo.html and opened locally to see the full responsive behaviour. Do NOT include any explanatory text outside the code block—just the file contents. - Follow Up Deployment
a6b4368 verified
Raw History Blame Contribute Delete
23.9 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Acme Corporation Collection</title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
'accent': '#2563eb',
}
}
}
}
</script>
<script src="//unpkg.com/alpinejs" defer></script>
</head>
<body class="font-sans">
<!-- Announcement Bar -->
<div x-data="{ showAnnouncement: true }" x-show="showAnnouncement"
class="bg-gray-900 text-white text-center py-2 px-4 text-sm relative">
<p>✨ Free shipping on orders over ₹499 | Limited time offer!</p>
<button @click="showAnnouncement = false"
class="absolute right-2 top-1/2 -translate-y-1/2"
aria-label="Close announcement">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<!-- Header -->
<header x-data="{ mobileMenuOpen: false, cartOpen: false }"
class="sticky top-0 z-50 bg-white shadow-md transition-all duration-300">
<div class="container mx-auto px-4 py-4 flex items-center justify-between">
<!-- Logo -->
<a href="/" class="text-xl font-bold text-gray-900">ACME</a>
<!-- Desktop Navigation -->
<nav class="hidden md:flex items-center space-x-8">
<a href="#" class="text-gray-700 hover:text-accent">Home</a>
<a href="#" class="text-gray-700 hover:text-accent">About</a>
<a href="#" class="text-gray-700 hover:text-accent">Contact</a>
</nav>
<!-- Icons (Search, Account, Cart) -->
<div class="flex items-center space-x-4">
<button aria-label="Search">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
</svg>
</button>
<button aria-label="Account">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
</svg>
</button>
<div class="relative" x-data="{ cartQty: 0 }">
<button @click="cartOpen = !cartOpen" aria-label="Cart">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
</svg>
</button>
<span x-show="cartQty > 0" x-text="cartQty"
class="absolute -top-2 -right-2 bg-accent text-white rounded-full text-xs w-5 h-5 flex items-center justify-center"></span>
<!-- Mini-cart -->
<div x-show="cartOpen" @click.away="cartOpen = false"
class="absolute right-0 mt-2 w-72 bg-white shadow-xl rounded-lg p-4 z-50">
<h3 class="font-medium text-gray-900 mb-4">Your Cart</h3>
<div class="text-center py-10 text-gray-500">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 mx-auto text-gray-300" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
</svg>
<p class="mt-2">Your cart is empty</p>
</div>
<div class="border-t pt-4 mt-4 text-center">
<p class="text-sm text-gray-500 mb-4">Items added to your cart will appear here</p>
</div>
</div>
</div>
<button @click="mobileMenuOpen = true" class="md:hidden" aria-label="Open menu">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
</div>
<!-- Mobile Menu -->
<div x-show="mobileMenuOpen" class="md:hidden fixed inset-0 bg-white z-50">
<div class="flex justify-between items-center p-4 border-b">
<a href="/" class="text-xl font-bold text-gray-900">ACME</a>
<button @click="mobileMenuOpen = false" aria-label="Close menu">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<nav class="py-4">
<a href="#" class="block py-3 px-6 text-gray-700 hover:bg-gray-50 hover:text-accent">Home</a>
<a href="#" class="block py-3 px-6 text-gray-700 hover:bg-gray-50 hover:text-accent">About</a>
<a href="#" class="block py-3 px-6 text-gray-700 hover:bg-gray-50 hover:text-accent">Contact</a>
</nav>
</div>
</header>
<main>
<!-- SECTION: Collection Hero -->
<div class="relative bg-gray-100 overflow-hidden">
<div class="absolute inset-0">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
</div>
<div class="relative container mx-auto px-4 py-20 sm:py-24 md:py-32 text-center">
<h1 class="text-4xl sm:text-5xl md:text-6xl font-bold text-gray-900 mb-4">Innovative Collection</h1>
<p class="max-w-2xl mx-auto text-lg text-gray-700">Discover precision-crafted tools designed for productivity and longevity. Our collection blends thoughtful design with unmatched durability.</p>
</div>
</div>
<!-- SECTION: Filter/Sort Bar -->
<div class="container mx-auto px-4 py-6 border-b flex flex-wrap gap-4">
<div class="flex-1 min-w-min">
<div x-data="{ filterOpen: false }" class="relative">
<button @click="filterOpen = !filterOpen"
class="flex items-center gap-1 bg-white border border-gray-300 rounded-md py-2 px-4 text-sm"
aria-haspopup="true" :aria-expanded="filterOpen">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" />
</svg>
Filter
</button>
<div x-show="filterOpen" @click.away="filterOpen = false" @keydown.escape="filterOpen = false"
class="absolute z-10 mt-1 w-64 bg-white shadow-lg rounded-md p-4 border"
x-cloak
role="menu">
<!-- Availability -->
<div class="mb-6">
<h3 class="text-sm font-medium text-gray-900 mb-2">Availability</h3>
<div class="flex items-center">
<input id="in-stock" type="checkbox" checked
class="h-4 w-4 text-accent rounded border-gray-300 focus:ring-accent">
<label for="in-stock" class="ml-2 text-sm text-gray-700">In Stock Only</label>
</div>
</div>
<!-- Price Range -->
<div>
<h3 class="text-sm font-medium text-gray-900 mb-2">Price Range</h3>
<div class="flex gap-2">
<div>
<label for="min-price" class="sr-only">Min Price</label>
<input id="min-price" type="number" placeholder="Min"
class="block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-accent focus:border-accent text-sm">
</div>
<div>
<label for="max-price" class="sr-only">Max Price</label>
<input id="max-price" type="number" placeholder="Max"
class="block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-accent focus:border-accent text-sm">
</div>
</div>
</div>
<button class="mt-4 w-full bg-accent text-white rounded-md py-2 px-4 text-sm">Apply Filters</button>
</div>
</div>
</div>
<!-- Sort by -->
<div class="min-w-min">
<label for="sort-by" class="sr-only">Sort By</label>
<select id="sort-by" class="block w-full bg-white border border-gray-300 rounded-md py-2 pl-3 pr-10 text-sm focus:outline-none focus:ring-accent focus:border-accent">
<option>Featured</option>
<option>Price Low-High</option>
<option>Price High-Low</option>
<option>Newest</option>
</select>
</div>
</div>
<!-- SECTION: Product Grid -->
<div class="container mx-auto px-4 py-8">
<div class="grid grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-6">
<!-- Product Card 1 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Widget A</h3>
<p class="text-gray-700 mt-1">₹1,299</p>
</div>
</div>
</div>
<!-- Product Card 2 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Gadget Pro</h3>
<p class="text-gray-700 mt-1">₹2,799</p>
</div>
</div>
</div>
<!-- Product Card 3 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Utility Tool</h3>
<p class="text-gray-700 mt-1">₹899</p>
</div>
</div>
</div>
<!-- Product Card 4 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Portable Kit</h3>
<p class="text-gray-700 mt-1">₹1,699</p>
</div>
</div>
</div>
<!-- Product Card 5 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Precision Tool</h3>
<p class="text-gray-700 mt-1">₹3,499</p>
</div>
</div>
</div>
<!-- Product Card 6 -->
<div class="group" x-data="{ cartQty: 0 }">
<div class="relative aspect-square overflow-hidden rounded-lg mb-4 bg-gray-100">
<div class="bg-gray-200 border-2 border-dashed rounded-xl w-full h-full"></div>
<button @click="cartQty++"
class="absolute bottom-0 left-1/2 -translate-x-1/2 mb-4 bg-white/90 backdrop-blur text-gray-800 rounded-full text-sm py-2 px-8 shadow opacity-0 group-hover:opacity-100 transform translate-y-2 group-hover:translate-y-0 transition-all duration-300">
Add to Cart
</button>
</div>
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-900">Acme Multi-Function</h3>
<p class="text-gray-700 mt-1">₹1,899</p>
</div>
</div>
</div>
</div>
</div>
<!-- SECTION: Pagination -->
<div class="container mx-auto px-4 pb-8 flex justify-center">
<nav class="flex items-center gap-2">
<button class="py-1 px-3 text-gray-500 rounded-md">1</button>
<button class="py-1 px-3 text-gray-500 hover:text-accent">2</button>
<button class="py-1 px-3 text-gray-500 hover:text-accent">3</button>
<button class="py-1 px-3 text-gray-500 hover:text-accent">Next →</button>
</nav>
</div>
<!-- SECTION: Trust Strip -->
<div class="bg-gray-50 border-t border-b py-8">
<div class="container mx-auto px-4">
<div class="flex flex-wrap justify-center gap-8 md:gap-16">
<div class="flex items-center gap-3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-accent" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
</svg>
<div>
<h3 class="font-medium">Secure Payments</h3>
<p class="text-sm text-gray-500 mt-1">SSL protected</p>
</div>
</div>
<div class="flex items-center gap-3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-accent" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" />
</svg>
<div>
<h3 class="font-medium">Free Shipping</h3>
<p class="text-sm text-gray-500 mt-1">Over ₹499</p>
</div>
</div>
<div class="flex items-center gap-3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-accent" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" />
</svg>
<div>
<h3 class="font-medium">Easy Returns</h3>
<p class="text-sm text-gray-500 mt-1">30-day guarantee</p>
</div>
</div>
</div>
</div>
</div>
</main>
<!-- SECTION: Footer -->
<footer class="bg-gray-900 text-white">
<div class="container mx-auto px-4 py-12">
<div class="grid md:grid-cols-2 gap-12 max-w-5xl">
<!-- Newsletter -->
<div>
<h2 class="text-lg font-semibold mb-4">Join Our Newsletter</h2>
<p class="text-gray-400 mb-4">Stay updated with our latest offers and news</p>
<div class="flex">
<input type="email" placeholder="Your email" class="flex-1 py-3 px-4 rounded-l text-gray-900">
<button class="bg-accent px-6 py-3 rounded-r">Subscribe</button>
</div>
</div>
<!-- Links -->
<div class="grid grid-cols-2 gap-8">
<div>
<h3 class="text-sm font-semibold uppercase tracking-wider mb-4">Policies</h3>
<ul class="space-y-3">
<li><a href="#" class="text-gray-400 hover:text-white transition">Privacy Policy</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Terms of Service</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Refund Policy</a></li>
</ul>
</div>
<div>
<h3 class="text-sm font-semibold uppercase tracking-wider mb-4">Support</h3>
<ul class="space-y-3">
<li><a href="#" class="text-gray-400 hover:text-white transition">Contact Us</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">FAQs</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Shipping</a></li>
</ul>
</div>
</div>
</div>
<!-- Copyright -->
<div class="border-t border-gray-800 mt-12 pt-8 text-center text-gray-500 text-sm">
<p>&copy; 2023 Acme Corporation. All rights reserved.</p>
</div>
</div>
</footer>
<style>
[x-cloak] { display: none !important; }
</style>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=SpectrumInfinite/eg-project-website-stores" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>