chelleboyer's picture
Fix carousel images - now hosted on GitHub github-assets branch
b51496b
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Reachy Mini Karen Whisperer - Retail Assistant</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Manrope:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="hero">
<div class="topline">
<div class="brand">
<span class="logo">🤖</span>
<span class="brand-name">Reachy Mini Retail Assistant</span>
</div>
<div class="pill">De-escalation Pro · Signal Intelligence · Slack Integration</div>
</div>
<div class="hero-grid">
<div class="hero-copy">
<p class="eyebrow">aka The Karen Whisperer 🤖✨</p>
<h1>Small robot. Big patience.</h1>
<p class="lede">
De-escalation with built-in chill mode—he handles the "Can I speak to your manager?" so you don't have to. Features signal intelligence, pattern detection, and automatic Slack escalation.
</p>
<div class="hero-actions">
<a class="btn primary" href="https://huggingface.co/spaces/chelleboyer/reachy_mini_retail_assistant" target="_blank" rel="noopener noreferrer">Try Reachy Mini</a>
<a class="btn ghost" href="#highlights">Explore features</a>
</div>
<div class="hero-badges">
<span>99% De-escalation Rate</span>
<span>&lt;2s Response Time</span>
<span>24/7 Always On</span>
<span>Signal Intelligence</span>
</div>
</div>
<div class="hero-visual">
<div class="glass-card carousel-container">
<div class="carousel">
<div class="carousel-track">
<div class="carousel-slide active">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/1-reachy-mini-retail-assistant.PNG" alt="Reachy Mini Retail Assistant">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/2-customer-asks-for-snackers.jpg" alt="Customer asks for Snackers">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/3-reachy-mini-snackers-out-of-stock.png" alt="Reachy Mini: Snackers out of stock">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/4-customer-unhappy.jpg" alt="Customer unhappy">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/5-reachy-mini-calls-manager.png" alt="Reachy Mini calls manager">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/6-manager-saves-the-day.PNG" alt="Manager saves the day">
</div>
<div class="carousel-slide">
<img src="https://raw.githubusercontent.com/chelleboyer/reachy_mini_karen_whisperer/github-assets/images/7-final-shot-happy-customer.jpg" alt="Happy customer">
</div>
</div>
<button class="carousel-btn prev" aria-label="Previous slide"></button>
<button class="carousel-btn next" aria-label="Next slide"></button>
<div class="carousel-indicators">
<span class="indicator active" data-slide="0"></span>
<span class="indicator" data-slide="1"></span>
<span class="indicator" data-slide="2"></span>
<span class="indicator" data-slide="3"></span>
<span class="indicator" data-slide="4"></span>
<span class="indicator" data-slide="5"></span>
<span class="indicator" data-slide="6"></span>
</div>
</div>
<p class="caption">From "Can I speak to your manager?" to "Thank you!" — See how Reachy Mini handles the challenge.</p>
</div>
</div>
</div>
</header>
<section id="highlights" class="section features">
<div class="section-header">
<p class="eyebrow">What Reachy Mini Can Do</p>
<h2>Customer service superpowers, minus the cape</h2>
<p class="intro">
Here's how Reachy keeps his cool while keeping customers happy.
</p>
</div>
<div class="feature-grid">
<div class="feature-card">
<span class="icon">💬</span>
<h3>Smart Q&A</h3>
<p>Answers common questions about returns, prices, store hours, and policies instantly—no human needed.</p>
</div>
<div class="feature-card">
<span class="icon">🗺️</span>
<h3>Aisle Navigation</h3>
<p>Guides customers to the right product or aisle in seconds, reducing wait times and frustration.</p>
</div>
<div class="feature-card">
<span class="icon"></span>
<h3>Issue Detection</h3>
<p>Spots out-of-stock items and inventory issues, flagging them instantly for your team via Slack.</p>
</div>
<div class="feature-card">
<span class="icon"></span>
<h3>De-escalation Pro</h3>
<p>Calms tense situations with friendly, professional prompts designed to diffuse conflict.</p>
</div>
<div class="feature-card">
<span class="icon">🤝</span>
<h3>Smooth Escalation</h3>
<p>When it's actually time for a human, hands off gracefully—politely and drama-free.</p>
</div>
<div class="feature-card">
<span class="icon"></span>
<h3>Lightning Fast</h3>
<p>Sub-2-second response times keep customers engaged and conversations flowing.</p>
</div>
</div>
</section>
<section id="story" class="section story">
<div class="story-grid">
<div class="story-card">
<p class="eyebrow">How It Works</p>
<h3>From "Can I speak to your manager?" to "Thank you so much!"</h3>
<ul class="story-list">
<li><span>01</span> <b>Customer Approaches</b> — A customer asks a question, makes a request, or... starts getting spicy. Reachy Mini is ready.</li>
<li><span>02</span> <b>Instant Analysis</b> — Reachy processes the request in milliseconds, understanding intent, emotion, and urgency.</li>
<li><span>03</span> <b>Perfect Response</b> — Delivers a friendly, helpful answer—or gracefully escalates when a human touch is truly needed.</li>
<li><span>📊</span> <b>Signal Intelligence</b> — Tracks patterns over time and autonomously escalates to Slack when intervention is warranted.</li>
</ul>
</div>
<div class="story-card secondary">
<p class="eyebrow">Status: Chill Mode Active</p>
<h3>Built-in retail intelligence</h3>
<p class="story-text">
Reachy Mini doesn't just respond—it learns. Every interaction is recorded as a signal (intent, entity, resolution, confidence, sentiment). When patterns emerge (25+ requests for unavailable items, repeated confusion, frustration spikes), Reachy autonomously escalates to your team via Slack with evidence and recommendations.
</p>
<div class="chips">
<span class="chip">Signal Tracking</span>
<span class="chip">Pattern Detection</span>
<span class="chip">Slack Integration</span>
<span class="chip">De-escalation</span>
<span class="chip">Chill Mode</span>
</div>
</div>
</div>
</section>
<footer class="footer">
<p>
Reachy Mini Karen Whisperer - Customer service with built-in chill mode. Built on <a href="https://github.com/pollen-robotics/reachy_mini_conversation_app" target="_blank" rel="noopener">Reachy Mini Conversation App</a> by <a href="https://github.com/pollen-robotics" target="_blank" rel="noopener">Pollen Robotics</a>.
Explore more on <a href="https://huggingface.co/spaces/chelleboyer/reachy_mini_karen_whisperer" target="_blank" rel="noopener">Hugging Face</a>.
</p>
</footer>
<script>
// Carousel functionality
const track = document.querySelector('.carousel-track');
const slides = document.querySelectorAll('.carousel-slide');
const prevBtn = document.querySelector('.carousel-btn.prev');
const nextBtn = document.querySelector('.carousel-btn.next');
const indicators = document.querySelectorAll('.indicator');
let currentSlide = 0;
let autoplayInterval;
function goToSlide(index) {
slides[currentSlide].classList.remove('active');
indicators[currentSlide].classList.remove('active');
currentSlide = (index + slides.length) % slides.length;
slides[currentSlide].classList.add('active');
indicators[currentSlide].classList.add('active');
}
function nextSlide() {
goToSlide(currentSlide + 1);
}
function prevSlide() {
goToSlide(currentSlide - 1);
}
function startAutoplay() {
autoplayInterval = setInterval(nextSlide, 4000);
}
function stopAutoplay() {
clearInterval(autoplayInterval);
}
// Event listeners
prevBtn.addEventListener('click', () => {
stopAutoplay();
prevSlide();
startAutoplay();
});
nextBtn.addEventListener('click', () => {
stopAutoplay();
nextSlide();
startAutoplay();
});
indicators.forEach((indicator, index) => {
indicator.addEventListener('click', () => {
stopAutoplay();
goToSlide(index);
startAutoplay();
});
});
// Pause autoplay on hover
const carousel = document.querySelector('.carousel');
carousel.addEventListener('mouseenter', stopAutoplay);
carousel.addEventListener('mouseleave', startAutoplay);
// Start autoplay
startAutoplay();
</script>
</body>
</html>