Desmond-Dong's picture
feat: version pill auto-reads from changelog.json
9d13c1a
raw
history blame
11.1 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Reachy Mini for Home Assistant</title>
<meta name="description" content="Voice assistant integration for Reachy Mini robot with Home Assistant. Control your smart home with voice commands and expressive robot movements.">
<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 for Home Assistant</span>
</div>
<div class="pill">Voice Β· Gestures Β· Smart Home</div>
<div class="version-pill" id="version-pill">v0.8.3</div>
</div>
<div class="hero-grid">
<div class="hero-copy">
<p class="eyebrow">Reachy Mini App</p>
<h1>Your robot meets your Home Assistant.</h1>
<p class="lede">
Transform Reachy Mini Wi-Fi into a voice-controlled smart home hub. Natural conversations, expressive movements, gesture recognition β€” all seamlessly connected to Home Assistant.
</p>
<div class="hero-actions">
<a class="btn primary" href="#requirements">Requirements</a>
<a class="btn ghost" href="#install">Quick Start</a>
<a class="btn ghost" href="#features">Features</a>
</div>
<div class="hero-badges">
<span>🎀 Wake Word</span>
<span>πŸ‘€ Face Tracking</span>
<span>πŸ”„ Body Following</span>
<span>🀚 18 Gestures</span>
<span>πŸ”Š Multi-room Audio</span>
<span>⚑ Zero Config</span>
<span>πŸƒ Dashboard Card</span>
</div>
</div>
<div class="hero-visual">
<div class="video-container">
<iframe src="https://www.youtube.com/embed/OuhTSTKB25o" title="Reachy Mini for Home Assistant Demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
</div>
</div>
</header>
<section id="requirements" class="section">
<div class="section-header">
<p class="eyebrow">Before You Start</p>
<h2>Requirements</h2>
<p class="intro">Make sure you have everything ready for a smooth setup.</p>
</div>
<div class="requirements-grid">
<div class="requirement-card">
<span class="icon">πŸ€–</span>
<h3>Reachy Mini Wi-Fi</h3>
<p>This app requires the <strong>Wi-Fi version</strong> of Reachy Mini. The USB version has not been validated</p>
</div>
<div class="requirement-card">
<span class="icon">🏠</span>
<h3>Home Assistant</h3>
<p>A running Home Assistant instance </p>
</div>
<div class="requirement-card">
<span class="icon">πŸ“Ά</span>
<h3>Same Network</h3>
<p>Both Reachy Mini and Home Assistant must be on the <strong>same local network</strong>.</p>
</div>
<div class="requirement-card">
<span class="icon">πŸŽ™οΈ</span>
<h3>Voice Pipeline</h3>
<p>Configure a <strong>Voice Assistant pipeline</strong> in Home Assistant (STT + TTS).</p>
</div>
</div>
</section>
<section id="install" class="section story">
<div class="section-header">
<p class="eyebrow">Getting Started</p>
<h2>Quick Start</h2>
<p class="intro">Install and connect in under a minute. No configuration needed.</p>
</div>
<div class="story-grid">
<div class="story-card">
<p class="eyebrow">Installation</p>
<h3>Up and running in 1 minutes</h3>
<ul class="story-list">
<li><span>1️⃣</span> Open Reachy Mini Dashboard β†’ Applications</li>
<li><span>2️⃣</span> Enable "Show community apps"</li>
<li><span>3️⃣</span> Install "Reachy Mini for Home Assistant"</li>
<li><span>4️⃣</span> Home Assistant discovers automatically</li>
</ul>
</div>
<div class="story-card secondary">
<p class="eyebrow">How it works</p>
<h3>Seamless integration</h3>
<p class="story-text">
This Reachy Mini app uses ESPHome protocol to communicate with Home Assistant β€” no ESPHome device needed. Home Assistant discovers it via mDNS and adds all 45+ entities automatically. Voice commands are processed by your Home Assistant instance β€” STT, intent recognition, and TTS all happen there.
</p>
<div class="chips">
<span class="chip">ESPHome Protocol</span>
<span class="chip">mDNS Discovery</span>
<span class="chip">45+ Entities</span>
<span class="chip">Zero Config</span>
</div>
</div>
</div>
</section>
<section id="features" class="section features">
<div class="section-header">
<p class="eyebrow">Capabilities</p>
<h2>Everything you need for smart home control</h2>
<p class="intro">45+ Home Assistant entities. Zero configuration. Auto-discovery via mDNS.</p>
</div>
<div class="feature-grid">
<div class="feature-card">
<span class="icon">🎀</span>
<h3>Voice Wake</h3>
<p>Local wake word detection with MicroWakeWord and OpenWakeWord. Say "Okay Nabu" or "Hey Reachy" to activate.</p>
</div>
<div class="feature-card">
<span class="icon">🏠</span>
<h3>Smart Home Control</h3>
<p>Full Home Assistant integration. Control lights, switches, climate, media β€” anything in your Home Assistant.</p>
</div>
<div class="feature-card">
<span class="icon">πŸ‘€</span>
<h3>Face Tracking</h3>
<p>YOLO-based face detection with body following. Head and body move together naturally to track you during conversations.</p>
</div>
<div class="feature-card">
<span class="icon">🀚</span>
<h3>Gesture Detection</h3>
<p>HaGRID ONNX models recognize 18 hand gestures: πŸ‘πŸ‘ŽβœŒοΈπŸ€˜πŸ‘ŒβœŠπŸ€™πŸ€« and more.</p>
</div>
<div class="feature-card">
<span class="icon">😊</span>
<h3>Expressive Motion</h3>
<p>280+ emotion keywords trigger 35 expressions. Real-time audio-driven animations with natural head sway during conversations.</p>
</div>
<div class="feature-card">
<span class="icon">πŸ“Ή</span>
<h3>Camera Stream</h3>
<p>MJPEG video stream as ESPHome Camera entity. Real-time monitoring in Home Assistant dashboard.</p>
</div>
<div class="feature-card">
<span class="icon">πŸ”Š</span>
<h3>Multi-room Audio</h3>
<p>Sendspin protocol support. Sync audio playback with other speakers throughout your home.</p>
</div>
<div class="feature-card">
<span class="icon">⚑</span>
<h3>Zero Configuration</h3>
<p>Install and go. mDNS auto-discovery means Home Assistant finds your robot automatically.</p>
</div>
<div class="feature-card">
<span class="icon">πŸƒ</span>
<h3>Dashboard Card</h3>
<p>Custom Lovelace card for Home Assistant. Real-time 3D visualization of robot pose and status.</p>
</div>
</div>
</section>
<section id="changelog" class="section">
<div class="section-header">
<p class="eyebrow">Updates</p>
<h2>Changelog</h2>
</div>
<div id="changelog-grid" class="changelog-grid"></div>
<div class="changelog-more">
<details id="changelog-details">
<summary>View older versions</summary>
<div id="changelog-older" class="changelog-grid older"></div>
</details>
</div>
</section>
<script>
const VISIBLE_COUNT = 6;
fetch('changelog.json')
.then(res => res.json())
.then(data => {
// Update version pill with latest version
if (data.length > 0) {
const versionPill = document.getElementById('version-pill');
if (versionPill) {
versionPill.textContent = `v${data[0].version}`;
}
}
// Populate changelog grid
const mainGrid = document.getElementById('changelog-grid');
const olderGrid = document.getElementById('changelog-older');
data.forEach((item, index) => {
const card = document.createElement('div');
card.className = 'changelog-card';
card.innerHTML = `
<div class="version-badge">v${item.version}</div>
<span class="date">${item.date}</span>
<ul>${item.changes.map(c => `<li>${c}</li>`).join('')}</ul>
`;
(index < VISIBLE_COUNT ? mainGrid : olderGrid).appendChild(card);
});
if (data.length <= VISIBLE_COUNT) {
document.getElementById('changelog-details').style.display = 'none';
}
})
.catch(err => console.error('Failed to load changelog:', err));
</script>
<section class="section links">
<div class="section-header">
<p class="eyebrow">Resources</p>
<h2>Links & References</h2>
</div>
<div class="links-grid">
<a href="https://github.com/Desmond-Dong/ha-reachy-mini" target="_blank" class="link-card">
<span class="icon">πŸƒ</span>
<h3>HA Dashboard Card</h3>
<p>Lovelace Card for HA</p>
</a>
<a href="https://huggingface.co/spaces/djhui5710/reachy_mini_ha_voice/tree/main" target="_blank" class="link-card">
<span class="icon">πŸ“¦</span>
<h3>Source Code</h3>
<p>HuggingFace Spaces</p>
</a>
<a href="https://www.pollen-robotics.com/" target="_blank" class="link-card">
<span class="icon">πŸ€–</span>
<h3>Pollen Robotics</h3>
<p>Reachy Mini Creator</p>
</a>
<a href="https://www.home-assistant.io/" target="_blank" class="link-card">
<span class="icon">🏠</span>
<h3>Home Assistant</h3>
<p>Smart Home Platform</p>
</a>
<a href="https://esphome.io/" target="_blank" class="link-card">
<span class="icon">⚑</span>
<h3>ESPHome Protocol</h3>
<p>Communication Protocol</p>
</a>
<a href="https://github.com/OHF-Voice/linux-voice-assistant" target="_blank" class="link-card">
<span class="icon">🎀</span>
<h3>linux-voice-assistant</h3>
<p>Voice Assistant Base</p>
</a>
<a href="https://github.com/kahrendt/microWakeWord" target="_blank" class="link-card">
<span class="icon">πŸ‘‚</span>
<h3>microWakeWord</h3>
<p>Wake Word Detection</p>
</a>
<a href="https://huggingface.co/AdamCodd/YOLOv11n-face-detection" target="_blank" class="link-card">
<span class="icon">πŸ‘€</span>
<h3>YOLOv11n-face</h3>
<p>Face Detection Model</p>
</a>
<a href="https://github.com/ai-forever/dynamic_gestures" target="_blank" class="link-card">
<span class="icon">βœ‹</span>
<h3>Dynamic Gestures</h3>
<p>ONNX Models</p>
</a>
<a href="https://github.com/Sendspin/sendspin-cli" target="_blank" class="link-card">
<span class="icon">πŸ”Š</span>
<h3>Sendspin</h3>
<p>Multi-room Audio</p>
</a>
<a href="https://huggingface.co/spaces/pollen-robotics/reachy-mini-landing-page#apps" target="_blank" class="link-card">
<span class="icon">πŸ›’</span>
<h3>Reachy Mini App Store</h3>
<p>More Apps</p>
</a>
</div>
</section>
<footer class="footer">
<p>Built by <a href="https://github.com/Desmond-Dong" target="_blank">Desmond</a></p>
</footer>
</body>
</html>