JP AUTO - Inventory Landing Page Implementation Guide
JP AUTO - Inventory Landing Page Implementation Guide
Date Created: December 22, 2024 Status: Ready for Implementation Estimated Time: 4-6 hours
Table of Contents
Overview
Goal
Transform the inventory page into the main landing page, removing the current homepage and implementing a streamlined, conversion-focused design.
Key Changes
- Remove homepage, make inventory the root landing page
- Redesign header (remove top bar, consolidate navigation)
- Add hero banner to inventory page
- Redesign car cards (custom price badges, 2-column layout, photo overlays)
- Mobile-responsive filter system
- Footer simplification
Brand Colors (Already Configured)
- Primary (Dark Teal):
#083344 - Primary Dark:
#05232e - Primary Light:
#0d4d62 - Background:
#52525b - Foreground:
#ffffff
Pre-Implementation Checklist
- Backup current site:
cp -r . ../jpauto-website-backup-$(date +%Y%m%d) - Create new git branch:
git checkout -b inventory-landing-redesign - Test Jekyll build:
bundle exec jekyll build - Have rollback plan ready (see section below)
Task Breakdown
Phase 1: Header Redesign (Tasks 1-7)
1.1 Remove Top Bar & Consolidate Phone/Hours
File: _includes/header.html
Current Structure (Lines 1-19):
<header class="bg-white shadow-md sticky top-0 z-50">
<div class="container mx-auto px-4">
<!-- Top Bar -->
<div class="flex justify-between items-center py-2 text-sm border-b border-gray-200">
<div class="flex items-center gap-4">
<a href="tel:+19166187197">...</a>
<span class="text-gray-600">Mon-Fri: 9:00 AM - 7:00 PM, Sat-Sun: By Appointment</span>
</div>
<div class="flex items-center gap-4">
<a href="/financing">Get Pre-Approved</a>
</div>
</div>
<!-- Main Navigation -->
<nav class="py-4">
New Structure:
<header class="bg-white shadow-md sticky top-0 z-50">
<div class="container mx-auto px-4">
<!-- Main Navigation (No top bar) -->
<nav class="py-4">
<div class="flex items-center justify-between">
<!-- Logo + Contact Info (Horizontal Layout) -->
<div class="flex items-center gap-6">
<!-- Logo -->
<a href="/" class="flex items-center">
<div class="text-3xl font-bold">
<span class="text-primary">JP</span>
<span class="text-gray-800">AUTO</span>
</div>
</a>
<!-- Vertical Divider -->
<div class="hidden md:block h-10 w-px bg-gray-300"></div>
<!-- Phone & Hours (Desktop Only) -->
<div class="hidden md:flex items-center gap-4">
<a href="tel:+19166187197" class="flex items-center gap-2 text-gray-800 hover:text-primary text-lg font-semibold">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path>
</svg>
(916) 618-7197
</a>
<span class="text-gray-400">|</span>
<span class="text-gray-600 text-base">Mon-Fri: 9AM-7PM</span>
</div>
</div>
1.2 Update Navigation Links
File: _includes/header.html
Remove these links from desktop nav (Lines 33-40):
Home(line 34)Inventory(line 35)Services(line 38)About(line 39)
Keep these links:
Financing(line 36)Trade-In(line 37)Contact Us(line 40 - keep as CTA button)
New Desktop Navigation (Lines 33-41):
<!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8">
<a href="/financing" class="text-gray-700 hover:text-primary font-medium transition">Financing</a>
<a href="/trade-in" class="text-gray-700 hover:text-primary font-medium transition">Trade-In</a>
<a href="/contact" class="bg-primary text-white px-6 py-2 rounded-lg hover:bg-primary-dark transition font-semibold">Contact Us</a>
</div>
Update Mobile Menu (Lines 52-61):
<!-- Mobile Navigation Menu -->
<div id="mobile-menu" class="hidden md:hidden mt-4 pb-4">
<div class="flex flex-col space-y-3">
<!-- Phone (Mobile Only) -->
<a href="tel:+19166187197" class="flex items-center gap-2 text-primary font-semibold px-4 py-2 border-b border-gray-200">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path>
</svg>
(916) 618-7197
</a>
<a href="/financing" class="text-gray-700 hover:text-primary font-medium transition px-4 py-2">Financing</a>
<a href="/trade-in" class="text-gray-700 hover:text-primary font-medium transition px-4 py-2">Trade-In</a>
<a href="/contact" class="bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary-dark transition font-semibold text-center">Contact Us</a>
</div>
</div>
Phase 2: Footer Redesign (Tasks 8-9)
2.1 Remove “Shop” Section, Add “About”
File: _includes/footer.html
Current Structure (Lines 1127-1136):
<!-- Quick Links -->
<div>
<h3 class="text-white font-semibold mb-4">Shop</h3>
<ul class="space-y-2 text-sm">
<li><a href="/inventory">View Inventory</a></li>
<li><a href="/inventory?featured=true">Featured Vehicles</a></li>
<li><a href="/inventory?sort=new">New Arrivals</a></li>
<li><a href="/inventory?price=under20k">Under $20,000</a></li>
</ul>
</div>
Replace with:
<!-- Quick Links -->
<div>
<h3 class="text-white font-semibold mb-4">Company</h3>
<ul class="space-y-2 text-sm">
<li><a href="/about" class="hover:text-primary transition">About Us</a></li>
<li><a href="/financing" class="hover:text-primary transition">Financing</a></li>
<li><a href="/trade-in" class="hover:text-primary transition">Trade-In</a></li>
<li><a href="/contact" class="hover:text-primary transition">Contact</a></li>
</ul>
</div>
Phase 3: Homepage to Inventory Landing (Tasks 10-14)
3.1 Archive Current Homepage
Terminal Commands:
# Archive current homepage
cp index.html index-homepage-backup-$(date +%Y%m%d).html
# Add to .gitignore
echo "index-homepage-backup-*.html" >> .gitignore
3.2 Extract Hero Banner from Homepage
File: index.html (Lines 8-20)
Current Hero Banner:
<!-- Hero Banner Section -->
<section id="home" class="relative w-full overflow-hidden">
<div class="relative w-full h-[400px] md:h-[600px] lg:h-[700px]">
<!-- Hero Banner Image -->
<img src="/assets/images/hero-banner.jpg" alt="JP AUTO - Quality Used Cars Sacramento" class="absolute inset-0 w-full h-full object-cover" loading="eager">
<!-- Banner Content -->
<div class="absolute inset-0 z-10 bg-black/30 flex items-center justify-center text-center text-white px-4">
<div>
<h2 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-4 drop-shadow-lg">Find Your Perfect Ride</h2>
<p class="text-lg md:text-xl lg:text-2xl drop-shadow-md">Quality Pre-Owned Vehicles at Unbeatable Prices</p>
</div>
</div>
</div>
</section>
Resized Hero Banner (Half Height):
<!-- Hero Banner Section -->
<section id="home" class="relative w-full overflow-hidden">
<div class="relative w-full h-[200px] md:h-[300px] lg:h-[350px]">
<!-- Hero Banner Image -->
<img src="/assets/images/hero-banner.jpg" alt="JP AUTO - Quality Used Cars Sacramento" class="absolute inset-0 w-full h-full object-cover object-center" loading="eager" style="object-position: center 40%;">
<!-- Banner Content -->
<div class="absolute inset-0 z-10 bg-black/30 flex items-center justify-center text-center text-white px-4">
<div>
<h1 class="text-3xl md:text-4xl lg:text-5xl font-bold mb-2 drop-shadow-lg">Find Your Perfect Ride</h1>
<p class="text-base md:text-lg lg:text-xl drop-shadow-md">Quality Pre-Owned Vehicles at Unbeatable Prices</p>
</div>
</div>
</div>
</section>
Note: object-position: center 40% helps avoid cropping important parts of the image when reducing height.
3.3 Create New Landing Page
File: Create new index.html in root
Structure:
---
layout: default
title: JP AUTO - Quality Used Cars Sacramento
description: Browse our complete inventory of quality pre-owned vehicles at unbeatable prices. Sacramento's trusted source for used cars.
---
<!-- Hero Banner (from above) -->
<section id="home" class="relative w-full overflow-hidden">
<!-- Insert resized hero banner here -->
</section>
<!-- Inventory Content (from _pages/inventory.md) -->
<div class="bg-white">
<!-- Remove the old page header gradient -->
<!-- Remove breadcrumb navigation -->
<!-- Filters and Results -->
<!-- Copy entire content from _pages/inventory.md starting at line 29 -->
</div>
3.4 Remove Old Inventory Page
Terminal Commands:
# Archive old inventory page
mv _pages/inventory.md _pages/inventory-backup-$(date +%Y%m%d).md
# Update .gitignore
echo "_pages/inventory-backup-*.md" >> .gitignore
Phase 4: Car Card Redesign (Tasks 15-22)
4.1 Adjust Grid for 4:3 Screens
File: New index.html (Vehicle Grid Section)
Current Grid (Line 144 in inventory.md):
<div id="vehicle-grid" class="grid gap-6 mb-8" style="grid-template-columns: repeat(auto-fill, minmax(min(100%, 480px), 1fr));">
New Grid (More Lenient for 4:3 Screens):
<div id="vehicle-grid" class="grid gap-6 mb-8" style="grid-template-columns: repeat(auto-fill, minmax(min(100%, 360px), 1fr));">
Explanation: Reducing from 480px to 360px allows 4 cards to fit on 1440px wide screens (common 4:3 ratio).
4.2 Mobile Filter Collapse
File: New index.html
Add Filter Toggle Button (Mobile Only):
<!-- Mobile Filter Toggle Button -->
<div class="lg:hidden mb-6">
<button id="filter-toggle-btn" class="w-full px-6 py-3 bg-primary text-white rounded-lg hover:bg-primary-dark transition-colors duration-300 font-semibold flex items-center justify-center gap-2">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<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"></path>
</svg>
Filters
<span id="active-filter-count" class="hidden bg-white text-primary px-2 py-0.5 rounded-full text-sm font-bold"></span>
</button>
</div>
Update Sidebar with Mobile Hidden Class:
<!-- Sidebar Filters -->
<aside id="filter-sidebar" class="w-full hidden lg:block">
<div class="bg-white rounded-lg shadow-md p-6 sticky top-24">
<!-- Existing filter content -->
</div>
</aside>
Add Toggle JavaScript (after existing filter script):
// Mobile filter toggle
const filterToggleBtn = document.getElementById('filter-toggle-btn');
const filterSidebar = document.getElementById('filter-sidebar');
const activeFilterCount = document.getElementById('active-filter-count');
filterToggleBtn?.addEventListener('click', () => {
filterSidebar.classList.toggle('hidden');
filterSidebar.classList.toggle('block');
});
// Update active filter count
function updateFilterCount() {
const activeFilters = [
filterMake, filterModel, filterYearMin, filterYearMax,
filterPrice, filterBodyType, filterTransmission, filterFuelType
].filter(f => f.value).length;
if (activeFilters > 0) {
activeFilterCount.textContent = activeFilters;
activeFilterCount.classList.remove('hidden');
} else {
activeFilterCount.classList.add('hidden');
}
}
// Call updateFilterCount in applyFilters function
function applyFilters() {
// ... existing code ...
updateFilterCount();
}
4.3 Redesigned Car Card
File: New index.html
Current Card Structure (Lines 147-233 in inventory.md):
<div class="vehicle-card border border-gray-300 rounded-lg overflow-hidden hover:-translate-y-2 hover:shadow-xl transition-all duration-300"
data-make="..." data-model="..." ...>
<!-- Vehicle Image -->
<div class="w-full h-64 bg-gray-300 overflow-hidden relative">
<img src="..." alt="..." class="w-full h-full object-cover" loading="lazy">
</div>
<!-- Vehicle Info -->
<div class="p-6 flex flex-col">
<!-- Title -->
<div class="h-12 mb-3">
<h3 class="text-lg font-bold text-gray-900 line-clamp-2">
</h3>
</div>
<!-- Price -->
<p class="text-primary text-2xl font-bold mb-4">
$
</p>
<!-- Details List (5 items) -->
<ul class="space-y-2 mb-4 text-gray-700 text-sm flex-grow">
<li>📍 Mileage</li>
<li>📄 Title Status</li>
<li>⚙️ Transmission</li>
<li>⛽ Fuel Type</li>
<li>🎨 Exterior Color</li>
</ul>
<!-- Button -->
<a href="..." class="...">View Details</a>
</div>
</div>
New Card Structure:
<div class="vehicle-card border border-gray-300 rounded-lg overflow-hidden hover:-translate-y-2 hover:shadow-xl transition-all duration-300"
data-make=""
data-model=""
data-year=""
data-price=""
data-body-type=""
data-transmission=""
data-fuel-type=""
data-date="">
<!-- Vehicle Image with Clickable Link & Overlay -->
<a href="" class="block relative">
<div class="w-full h-64 bg-gray-300 overflow-hidden relative">
<div class="w-full h-full flex items-center justify-center bg-gray-200">
<span class="text-gray-400 text-4xl">🚗</span>
</div>
<!-- Bottom Bar Overlay (Only on first image) -->
<div class="absolute bottom-0 left-0 right-0 bg-primary text-white px-3 py-2 text-xs leading-tight">
<div class="font-semibold">JP AUTO | (916) 618-7197</div>
<div class="opacity-90">Sacramento, CA | jpautomotivegroup.com</div>
</div>
</div>
</a>
<!-- Vehicle Info -->
<div class="p-4 flex flex-col">
<!-- Title & Price on Same Line -->
<div class="flex items-start justify-between gap-3 mb-3">
<!-- Title (Left) -->
<div class="flex-1 min-w-0">
<h3 class="text-base font-bold text-gray-900 line-clamp-2 leading-tight">
</h3>
</div>
<!-- Price Badge (Right) - Flag Shape with Cut Corner -->
<div class="price-badge-wrapper flex-shrink-0">
<div class="price-badge bg-primary text-white px-3 py-1.5 font-bold text-base relative">
<div class="price-cut-corner"></div>
$0
</div>
</div>
</div>
<!-- Vehicle Details - 2 Column Layout -->
<div class="grid grid-cols-2 gap-x-3 gap-y-1.5 mb-3 text-gray-700 text-xs">
<!-- Left Column -->
<div class="space-y-1.5">
<!-- Mileage -->
<div class="flex items-center gap-1.5">
<span class="text-sm">📍</span>
<span class="truncate">0K mi</span>
</div>
<!-- Title Status -->
<div class="flex items-center gap-1.5">
<span class="text-sm">📄</span>
<span class="font-bold truncate">N/A</span>
</div>
</div>
<!-- Right Column -->
<div class="space-y-1.5">
<!-- Fuel Type -->
<div class="flex items-center gap-1.5">
<span class="text-sm">⛽</span>
<span class="truncate">N/A</span>
</div>
<!-- Exterior/Interior Color -->
<div class="flex items-center gap-1.5">
<span class="text-sm">🎨</span>
<span class="truncate">N/A</span>
</div>
</div>
</div>
<!-- View Details Button -->
<a href=""
class="inline-block w-full text-center px-4 py-2.5 bg-primary text-white rounded-lg hover:bg-primary-dark transition-colors duration-300 font-semibold text-sm mt-auto">
View Details
</a>
</div>
</div>
4.4 Price Badge Cut Corner CSS
File: _layouts/default.html (Add to <style> section)
Add after existing custom styles:
/* Price Badge with Cut Corner */
.price-badge {
position: relative;
clip-path: polygon(12px 0, 100% 0, 100% 100%, 0 100%, 0 12px);
}
/* Alternative using pseudo-element for cut corner */
.price-badge-wrapper {
position: relative;
}
.price-cut-corner::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
border-style: solid;
border-width: 12px 12px 0 0;
border-color: white transparent transparent transparent;
}
.price-badge {
display: inline-block;
position: relative;
overflow: visible;
}
Note: Two options provided:
- Option 1 (clip-path): Simple, modern, single element
- Option 2 (pseudo-element): Better browser compatibility, uses white triangle overlay
Choose based on browser support requirements.
Phase 5: Photo Overlay Implementation (Task 23)
5.1 Bottom Bar Overlay CSS
File: _layouts/default.html (Add to <style> section)
CSS for Bottom Bar Overlay:
/* Vehicle Photo Bottom Bar Overlay */
.vehicle-card a:first-of-type .bg-primary {
/* Only show on first photo (which is in the card) */
background-color: #083344; /* Solid primary color */
font-family: 'Montserrat', sans-serif;
}
/* Ensure overlay sits above image */
.vehicle-card a:first-of-type {
position: relative;
z-index: 1;
}
/* Responsive font sizing */
@media (max-width: 640px) {
.vehicle-card a:first-of-type .bg-primary {
font-size: 10px;
padding: 6px 8px;
}
}
@media (min-width: 641px) and (max-width: 1024px) {
.vehicle-card a:first-of-type .bg-primary {
font-size: 11px;
}
}
Overlay HTML (already included in card structure above):
<!-- Bottom Bar Overlay -->
<div class="absolute bottom-0 left-0 right-0 bg-primary text-white px-3 py-2 text-xs leading-tight">
<div class="font-semibold">JP AUTO | (916) 618-7197</div>
<div class="opacity-90">Sacramento, CA | jpautomotivegroup.com</div>
</div>
Specifications:
- Layout: Two lines
- Background: Solid
#083344(no transparency) - Text Color: White
- Line 1:
JP AUTO | (916) 618-7197(semibold) - Line 2:
Sacramento, CA | jpautomotivegroup.com(90% opacity) - Height: Auto-adjusting based on content (~50-60px total)
- Position: Absolute, bottom of first photo only
- Always visible: Yes (not on hover)
Phase 6: Configuration Updates (Task 24)
6.1 Update Jekyll Config
File: _config.yml
Current Lines 3-7:
# Site Settings
title: "JP Auto - Quality Used Cars in Sacramento"
description: "Sacramento's trusted source for quality pre-owned vehicles. Browse our inventory, get financing, and find your perfect car today."
url: "https://jpautomotivegroup.com"
baseurl: ""
Update to:
# Site Settings
title: "JP AUTO - Quality Used Cars Sacramento"
description: "Browse our complete inventory of quality pre-owned vehicles at unbeatable prices. Sacramento's trusted dealership for used cars since 2005."
url: "https://jpautomotivegroup.com"
baseurl: ""
Current Collections (Lines 26-32):
# Collections
collections:
vehicles:
output: true
permalink: /vehicles/:title/
pages:
output: true
permalink: /:title/
No changes needed - collections remain the same.
Code Snippets
Complete New Header
File: _includes/header.html
<!-- Navigation Header -->
<header class="bg-white shadow-md sticky top-0 z-50">
<div class="container mx-auto px-4">
<!-- Main Navigation (No top bar) -->
<nav class="py-4">
<div class="flex items-center justify-between">
<!-- Logo + Contact Info (Horizontal Layout) -->
<div class="flex items-center gap-6">
<!-- Logo -->
<a href="/" class="flex items-center">
<div class="text-3xl font-bold">
<span class="text-primary">JP</span>
<span class="text-gray-800">AUTO</span>
</div>
</a>
<!-- Vertical Divider -->
<div class="hidden md:block h-10 w-px bg-gray-300"></div>
<!-- Phone & Hours (Desktop Only) -->
<div class="hidden md:flex items-center gap-4">
<a href="tel:+19166187197" class="flex items-center gap-2 text-gray-800 hover:text-primary text-lg font-semibold transition">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path>
</svg>
(916) 618-7197
</a>
<span class="text-gray-400">|</span>
<span class="text-gray-600 text-base">Mon-Fri: 9AM-7PM</span>
</div>
</div>
<!-- Desktop Navigation Links -->
<div class="hidden md:flex items-center space-x-8">
<a href="/financing" class="text-gray-700 hover:text-primary font-medium transition">Financing</a>
<a href="/trade-in" class="text-gray-700 hover:text-primary font-medium transition">Trade-In</a>
<a href="/contact" class="bg-primary text-white px-6 py-2 rounded-lg hover:bg-primary-dark transition font-semibold">Contact Us</a>
</div>
<!-- Mobile Menu Button -->
<button id="mobile-menu-button" class="md:hidden text-gray-700 hover:text-primary">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
</button>
</div>
<!-- Mobile Navigation Menu -->
<div id="mobile-menu" class="hidden md:hidden mt-4 pb-4">
<div class="flex flex-col space-y-3">
<!-- Phone (Mobile Only) -->
<a href="tel:+19166187197" class="flex items-center gap-2 text-primary font-semibold px-4 py-2 border-b border-gray-200">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path>
</svg>
(916) 618-7197
</a>
<a href="/financing" class="text-gray-700 hover:text-primary font-medium transition px-4 py-2">Financing</a>
<a href="/trade-in" class="text-gray-700 hover:text-primary font-medium transition px-4 py-2">Trade-In</a>
<a href="/contact" class="bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary-dark transition font-semibold text-center">Contact Us</a>
</div>
</div>
</nav>
</div>
</header>
Complete Updated Footer
File: _includes/footer.html
Replace the “Shop” section (div containing h3 “Shop”) with:
<!-- Company Links -->
<div>
<h3 class="text-white font-semibold mb-4">Company</h3>
<ul class="space-y-2 text-sm">
<li><a href="/about" class="hover:text-primary transition">About Us</a></li>
<li><a href="/financing" class="hover:text-primary transition">Financing</a></li>
<li><a href="/trade-in" class="hover:text-primary transition">Trade-In</a></li>
<li><a href="/contact" class="hover:text-primary transition">Contact</a></li>
</ul>
</div>
Testing Checklist
Pre-Launch Testing
Desktop (1920x1080)
- Header: Logo + phone/hours display correctly side-by-side
- Header: Only Financing, Trade-In, Contact links visible
- Hero banner: Displays at ~350px height, image not distorted
- Car cards: 4 cards fit in one row
- Car cards: Price badge displays with cut corner
- Car cards: Photo overlay shows dealer info on first image
-
[ ] Car cards: Details in 2-column layout (Miles+Title Fuel+Colors) - Car cards: Clicking photo navigates to detail page
- Filters: Sidebar visible by default
- Footer: “Company” section shows About link
Tablet (768x1024)
- Header: Phone/hours still visible
- Car cards: 2-3 cards per row
- Filters: Sidebar visible
Mobile (375x667)
- Header: Phone number in mobile menu only
- Header: Mobile menu toggles correctly
- Hero banner: Displays at ~200px height
- Car cards: 1 card per row
- Car cards: Photo overlay text readable (10px font)
- Filters: Hidden by default, toggle button works
- Filters: Count badge shows active filter count
Functional Testing
- Filter by Make → Model dropdown populates
- Filter by Price range → Results update
- Sort dropdown → Cards reorder correctly
- Clear filters → All filters reset
- URL parameters → Filters load from URL on page load
- Vehicle photo click → Navigates to
/vehicles/:title/ - Mobile filter toggle → Sidebar shows/hides
- All links in header/footer work
Performance
- Page loads in <3 seconds
- Images lazy load properly
- No JavaScript errors in console
- No CSS layout shifts
Cross-Browser
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile Safari (iOS)
- Chrome Mobile (Android)
Rollback Plan
If Issues Arise During Implementation
Quick Rollback (Revert to Backup)
# Stop Jekyll server
# Ctrl+C
# Restore from backup
rm -rf ./*
cp -r ../jpauto-website-backup-YYYYMMDD/* .
# Rebuild
bundle exec jekyll build
bundle exec jekyll serve
Git Rollback (If Using Git)
# Discard all changes
git checkout .
# Or revert to specific commit
git log --oneline # Find commit hash before changes
git reset --hard <commit-hash>
# Rebuild
bundle exec jekyll build
Selective Rollback (Keep Some Changes)
Restore just header:
cp ../jpauto-website-backup-YYYYMMDD/_includes/header.html _includes/
Restore just homepage:
cp ../jpauto-website-backup-YYYYMMDD/index.html index.html
Implementation Order Recommendation
Day 1 (2-3 hours)
- ✅ Create backup
- ✅ Create git branch
- ✅ Update header (
_includes/header.html) - ✅ Update footer (
_includes/footer.html) - ✅ Test header/footer on existing site
- ✅ Commit changes:
git commit -m "Update header and footer navigation"
Day 2 (2-3 hours)
- ✅ Archive current
index.html - ✅ Extract and resize hero banner
- ✅ Create new
index.htmlwith hero + inventory content - ✅ Remove breadcrumb navigation
- ✅ Update
_config.yml - ✅ Test new landing page
- ✅ Commit changes:
git commit -m "Create inventory landing page"
Day 3 (1-2 hours)
- ✅ Redesign car cards (HTML structure)
- ✅ Add price badge CSS with cut corner
- ✅ Add photo overlay CSS and HTML
- ✅ Add mobile filter toggle
- ✅ Test all card features
- ✅ Commit changes:
git commit -m "Redesign vehicle cards with overlays"
Day 4 (1 hour)
- ✅ Full testing (desktop, tablet, mobile)
- ✅ Cross-browser testing
- ✅ Performance check
- ✅ Fix any bugs found
- ✅ Final commit:
git commit -m "Final testing and bug fixes" - ✅ Merge to main:
git checkout main && git merge inventory-landing-redesign - ✅ Deploy to production
Notes & Tips
Hero Banner Image Cropping
- Original image height: 700px
- New height: 350px (50% reduction)
- Use
object-position: center 40%to keep the focal point in view - Test on actual image to ensure no important elements are cut off
- May need to adjust percentage based on image composition
Price Badge Corner Cut
- Two CSS methods provided (clip-path vs pseudo-element)
- Clip-path: Modern, clean, but IE11 doesn’t support
- Pseudo-element: Works everywhere, slightly more complex
- Choose based on browser requirements
Photo Overlay Positioning
- Overlay only appears on first photo in each card
- Uses
absolutepositioning within the<a>tag - Ensure parent
<a>hasposition: relative - Z-index ensures overlay sits above image
Mobile Filter Design
- Filter sidebar hidden by default on mobile (
lg:hidden) - Toggle button shows filter count badge
- Clicking toggle slides sidebar in/out
- Consider adding smooth transition:
transition-all duration-300
Grid Responsiveness
- 360px min-width allows 4 cards on 1440px screens (4:3 common)
- At 1920px (16:9), 5 cards will fit
- At 1024px (tablet), 2-3 cards fit
- At 768px and below, 1-2 cards fit
- Test on actual devices to verify
Performance Optimization
- All vehicle images use
loading="lazy" - Hero banner uses
loading="eager"(first visible content) - Consider adding width/height attributes to images to prevent layout shift
- Minify CSS/JS before production deploy
Troubleshooting Common Issues
Issue: Header phone number not visible on desktop
Solution: Check hidden md:flex classes are correct. Parent div should have md:flex, items inside should not have hidden on larger screens.
Issue: Price badge cut corner not showing
Solution: Ensure either clip-path is supported or pseudo-element ::before is rendering. Check browser DevTools for CSS errors.
Issue: Photo overlay covering entire image
Solution: Verify absolute positioning is on overlay div, and parent <a> has relative positioning. Check bottom-0 left-0 right-0 classes.
Issue: Filter toggle not working on mobile
Solution: Verify JavaScript is running (check console for errors). Ensure filter-sidebar ID matches in HTML and JS. Check lg:hidden class is on sidebar.
Issue: Cards not fitting 4 across on 4:3 screen
Solution: Reduce minmax() value from 360px to 340px or lower. Check for extra padding/margins in grid gap.
Issue: Hero banner image looks stretched/distorted
Solution: Use object-fit: cover and adjust object-position percentage. May need to use different image or crop source image.
Issue: Vehicle photos not clickable
Solution: Ensure <a href=""> wraps the image div. Check for z-index conflicts with overlay.
Success Criteria
Project is complete when:
- Current homepage archived
- Inventory page is now root (
/) - Header shows logo + phone/hours horizontally
- Header has only 3 nav links (Financing, Trade-In, Contact)
- Footer has “Company” section with About link
- Hero banner displays at half height (~350px)
- Car cards show 4 across on 4:3 screens
- Price badge has teal background with cut corner
- Photo overlay shows dealer info on first photo
- Vehicle details in 2 columns
- Mobile filter collapses to toggle button
- All photos are clickable
- Site works on desktop, tablet, mobile
- No console errors
- Page load time <3 seconds
Post-Implementation
After successful deployment:
- Monitor Google Analytics for bounce rate changes
- Check Google Search Console for crawl errors
- Update sitemap if needed
- Monitor page speed with Google PageSpeed Insights
- Collect user feedback for 1-2 weeks
- Plan iteration improvements
Possible Future Enhancements:
- Add search box in hero banner
- Implement lazy loading for filter dropdowns
- Add “Compare Vehicles” feature
- Add “Save to Favorites” functionality
- Implement advanced filters (mileage range slider, year slider)
- Add social proof (customer reviews) to homepage
- Implement A/B testing for CTA buttons
END OF IMPLEMENTATION GUIDE
Last Updated: December 22, 2024 Version: 1.0 Author: Claude Code Assistant Estimated Implementation Time: 4-6 hours