-
Notifications
You must be signed in to change notification settings - Fork 0
Add gift page #114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add gift page #114
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces a new dedicated landing page for the EchoKit Gift Version product, presenting a premium, customizable AI companion device designed specifically for gifting. The page features a modern, visually-rich design with interactive elements including audio samples, image galleries, and detailed product information sections.
Key Changes
- New standalone gift version product page with comprehensive sections covering experience, features, creator studio, unboxing, pricing, and timeline
- Interactive audio player implementation with custom controls for voice sample demonstrations
- Responsive gallery showcasing device capabilities through images and functional audio samples
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <h3>Emotional Connection</h3> | ||
| <p>It’s not just a speaker; it’s a time capsule. Without the distraction of a touchscreen, the <strong>Voice-Only Interface</strong> encourages deeper, more natural conversations.</p> | ||
| </div> | ||
| </div> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incomplete feature display: The features grid is incomplete. The closing div tag for the features-grid is missing, and only 2 feature boxes are included when the grid layout suggests space for more features.
| </div> | |
| <div class="feature-box"> | |
| <div class="feature-icon" style="color: var(--accent-cool);"><i class="fas fa-microchip"></i></div> | |
| <h3>Private & Secure</h3> | |
| <p>Your data never leaves your hands. All training and voice data are processed securely, and the device operates offline for maximum privacy.</p> | |
| </div> | |
| </div> |
echokit-gift.html
Outdated
| <p style="color: #a1a1aa;">A talking device in your design. Pre-loaded with your custom AI.</p> | ||
| <ul style="margin-top: 20px; color: #d4d4d8;"> | ||
| <li><i class="fas fa-check"></i> 2.4-inch OLED Screen</li> | ||
| <li><i class="fas fa-check"></i> WiFi 2.4 GHz, Bluetooth 5.0 LE</li> | ||
| </ul> | ||
| </div> | ||
| <i class="fas fa-tv bento-icon-lg" style="color: white;"></i> | ||
| </div> | ||
|
|
||
| <!-- Item 2: Gift Card --> | ||
| <div class="bento-item bento-card"> | ||
| <div style="position: relative; z-index: 2;"> | ||
| <h4 style="color: #3730a3;">Voice Pass</h4> | ||
| <p style="font-size: 0.9rem; color: #4338ca;">Comes with 2 hours of AI conversation monthly on us.</p> | ||
| </div> | ||
| <i class="fas fa-qrcode bento-icon-lg" style="color: #4338ca;"></i> | ||
| </div> | ||
|
|
||
| <!-- Item 3: Accessories --> | ||
| <div class="bento-item bento-acc"> | ||
| <div style="position: relative; z-index: 2;"> | ||
| <h4 style="color: #9a3412;">Accessories</h4> | ||
| <p style="font-size: 0.9rem; color: #c2410c;">Premium braided cable & power bank included.</p> | ||
| </div> | ||
| <i class="fas fa-plug bento-icon-lg" style="color: #c2410c;"></i> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- PRICING --> | ||
| <section id="pricing" class="section-padding" style="background: white;"> | ||
| <div class="container"> | ||
| <div class="text-center" style="margin-bottom: 50px;"> | ||
| <h2>Gift Editions</h2> | ||
| </div> | ||
|
|
||
| <div class="pricing-grid"> | ||
| <!-- Starter --> | ||
| <div class="price-card"> | ||
| <h3 style="font-family: var(--font-serif);">Starter Gift</h3> | ||
| <div style="font-size: 2.5rem; font-weight: 800; margin: 10px 0;">$89</div> | ||
| <p style="font-size: 0.9rem; margin-bottom: 20px;">Perfect for visual storytelling.</p> | ||
| <a href="#studio" class="btn btn-outline">Select Starter</a> | ||
| <ul style="margin-top: 30px; font-size: 0.9rem; display: flex; flex-direction: column; gap: 10px;"> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Custom Bootscreen</li> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Custom Welcome Voice</li> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Choose Any pre-trained Voice</li> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Customize Personality via System Prompt</li> | ||
| </ul> | ||
| </div> | ||
|
|
||
| <!-- Advanced --> | ||
| <div class="price-card featured"> | ||
| <div class="popular-badge">Most Gifted</div> | ||
| <h3 style="font-family: var(--font-serif);">Advanced Edition</h3> | ||
| <div style="font-size: 2.5rem; font-weight: 800; margin: 10px 0;">$199</div> | ||
| <p style="font-size: 0.9rem; margin-bottom: 20px;">Deep customization with voice cloning.</p> | ||
| <a href="#studio" class="btn btn-primary">Craft This Gift</a> | ||
| <ul style="margin-top: 30px; font-size: 0.9rem; display: flex; flex-direction: column; gap: 10px;"> | ||
| <li><i class="fas fa-check" style="color: var(--accent-tech);"></i> <strong>Everything in Starter</strong></li> | ||
| <li><i class="fas fa-check" style="color: var(--accent-tech);"></i> Voice Cloning</li> | ||
| <li><i class="fas fa-check" style="color: var(--accent-tech);"></i> Long Memory Vector</li> | ||
| <li><i class="fas fa-check" style="color: var(--accent-tech);"></i> MCP Tools</li> | ||
| </ul> | ||
| </div> | ||
|
|
||
| <!-- Corporate --> | ||
| <div class="price-card"> | ||
| <h3 style="font-family: var(--font-serif);">Corporate Box</h3> | ||
| <div style="font-size: 2.5rem; font-weight: 800; margin: 10px 0;">Custom</div> | ||
| <p style="font-size: 0.9rem; margin-bottom: 20px;">High-end gifts for VIP clients.</p> | ||
| <a href="#" class="btn btn-outline">Contact Sales</a> | ||
| <ul style="margin-top: 30px; font-size: 0.9rem; display: flex; flex-direction: column; gap: 10px;"> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Self-hosted Server</li> | ||
| <li><i class="fas fa-check" style="color: var(--text-main);"></i> Bulk Management</li> | ||
| </ul> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- PROCESS (Timeline) --> | ||
| <section class="section-padding"> | ||
| <div class="container"> | ||
| <h3 class="text-center" style="margin-bottom: 40px;">Timeline</h3> | ||
| <div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center; text-align: center;"> | ||
| <div style="flex: 1; min-width: 200px;"> | ||
| <div style="font-weight: 700; margin-bottom: 5px;">1. Prepare the data</div> | ||
| <p style="font-size: 0.85rem;">Upload materials (1 days)</p> | ||
| </div> | ||
| <div style="font-size: 1.5rem; color: #e4e4e7;">→</div> | ||
| <div style="flex: 1; min-width: 200px;"> | ||
| <div style="font-weight: 700; margin-bottom: 5px;">2. Training</div> | ||
| <p style="font-size: 0.85rem;">AI Model Training (5 days)</p> | ||
| </div> | ||
| <div style="font-size: 1.5rem; color: #e4e4e7;">→</div> | ||
| <div style="flex: 1; min-width: 200px;"> | ||
| <div style="font-weight: 700; margin-bottom: 5px;">3. Delivery</div> | ||
| <p style="font-size: 0.85rem;">World global Shipping</p> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Best practices violation: Inline styles are extensively used throughout the HTML instead of using CSS classes. This makes the code harder to maintain and reuse. For example, lines 279, 285, 288, 337, and many others contain inline style attributes that should be moved to CSS classes.
| <img src="./assets/showcase-01.jpeg" class="visual-mode-img" alt="Birthday Cake"> | ||
| <div class="visual-overlay"> | ||
| <i class="fas fa-birthday-cake" style="color: white; margin-bottom: 5px;"></i> | ||
| <span style="color: white; font-size: 0.8rem; font-weight: 500;">Birthday Mode</span> | ||
| </div> | ||
| </div> | ||
|
|
||
| <!-- Image 2: Stories (Book/Cozy) --> | ||
| <div class="visual-mode-item"> | ||
| <img src="./assets/showcase-02.jpeg" class="visual-mode-img" alt="Reading"> | ||
| <div class="visual-overlay"> | ||
| <i class="fas fa-book-open" style="color: white; margin-bottom: 5px;"></i> | ||
| <span style="color: white; font-size: 0.8rem; font-weight: 500;">Storytelling</span> | ||
| </div> | ||
| </div> | ||
|
|
||
| <!-- Image 3: Now Playing (Abstract/Music) --> | ||
| <div class="visual-mode-item"> | ||
| <img src="./assets/showcase-03.jpeg" class="visual-mode-img" alt="Music Waves"> | ||
| <div class="visual-overlay"> | ||
| <i class="fas fa-music" style="color: white; margin-bottom: 5px;"></i> | ||
| <span style="color: white; font-size: 0.8rem; font-weight: 500;">Now Playing</span> | ||
| </div> | ||
| </div> | ||
|
|
||
| <!-- Image 4: Photo Frame (Family) --> | ||
| <div class="visual-mode-item"> | ||
| <img src="./assets/showcase-04.jpeg" class="visual-mode-img" alt="Family Photo"> | ||
| <div class="visual-overlay"> | ||
| <i class="fas fa-image" style="color: white; margin-bottom: 5px;"></i> | ||
| <span style="color: white; font-size: 0.8rem; font-weight: 500;">Digital Frame</span> | ||
| </div> | ||
| </div> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Accessibility issue: All images in the gallery section lack alt text. The img tags should have descriptive alt attributes for screen readers to understand the visual content being displayed.
| <div class="audio-player-ui" style="background: white; border-radius: 50px; padding: 10px 15px; display: flex; align-items: center; gap: 15px;"> | ||
| <div class="play-btn-circle" onclick="toggleAudio('audio1', this)" style="width: 35px; height: 35px; background: var(--text-main); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer;"> | ||
| <i class="fas fa-play" style="color: white; font-size: 0.8rem;"></i> | ||
| </div> | ||
| <div style="height: 4px; background: #e4e4e7; flex-grow: 1; border-radius: 2px; overflow: hidden;"> | ||
| <div id="progress1" style="width: 0%; height: 100%; background: var(--accent-tech); transition: width 0.2s;"></div> | ||
| </div> | ||
| <span style="color: #18181b; font-size: 0.8rem; font-weight: 600;">0:12</span> | ||
| </div> | ||
| <audio id="audio1" src="./assets/grandma.mp3" ontimeupdate="updateProgress('audio1', 'progress1')" onended="resetPlayer('audio1', this)"></audio> | ||
| </div> | ||
| <p style="font-size: 0.85rem; margin-top:15px; opacity: 0.7; font-style: italic; color: white;">"Don't forget the cinnamon pinch..."</p> | ||
| </div> | ||
|
|
||
| <!-- Audio Sample 2 --> | ||
| <div class="gallery-card"> | ||
| <h3 style="color: #a5b4fc; margin-bottom: 5px;">AI Twin</h3> | ||
| <p style="font-size: 0.85rem; opacity: 0.6; color: white;">Your personal tone & style.</p> | ||
|
|
||
| <div style="margin-top: 20px;"> | ||
| <div class="audio-player-ui" style="background: white; border-radius: 50px; padding: 10px 15px; display: flex; align-items: center; gap: 15px;"> | ||
| <div class="play-btn-circle" onclick="toggleAudio('audio2', this)" style="width: 35px; height: 35px; background: var(--accent-tech); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer;"> | ||
| <i class="fas fa-play" style="color: white; font-size: 0.8rem;"></i> | ||
| </div> | ||
| <div style="height: 4px; background: #e4e4e7; flex-grow: 1; border-radius: 2px; overflow: hidden;"> | ||
| <div id="progress2" style="width: 0%; height: 100%; background: var(--accent-tech); transition: width 0.2s;"></div> | ||
| </div> | ||
| <span style="color: #18181b; font-size: 0.8rem; font-weight: 600;">0:08</span> | ||
| </div> | ||
| <audio id="audio2" src="./assets/girl.mp3" ontimeupdate="updateProgress('audio2', 'progress2')" onended="resetPlayer('audio2', this)"></audio> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Accessibility issue: The audio players lack proper ARIA labels and keyboard navigation support. The play buttons should have aria-label attributes to describe their function, and the custom audio controls should be keyboard accessible with appropriate event handlers for Enter/Space keys.
| </p> | ||
| <div style="display: flex; gap: 15px;"> | ||
| <a href="https://form.jotform.com/253442751110042" class="btn btn-primary">Build your Own</a> | ||
| <a href="#gallery" class="btn btn-outline"><i class="fas fa-play"></i> Watch Demo</a> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Accessibility issue: Multiple buttons and links lack descriptive text for screen readers. For example, the "Watch Demo" link icon should have sr-only text, and navigation links should have clearer context when read by screen readers.
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | ||
| <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&family=Playfair+Display:ital,wght@0,500;0,600;1,400&display=swap" rel="stylesheet"> | ||
| <!-- Font Awesome --> | ||
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Security concern: External resources are loaded from CDNs (Google Fonts, cdnjs) without Subresource Integrity (SRI) attributes. This exposes users to potential supply chain attacks if these CDNs are compromised. Consider adding integrity and crossorigin attributes to the link tags.
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha512-papm6H1Qb6QwQK4Q1r5l6QwO5jM90+hCbGyF/F7fs/3Gzdh0dX8GZFODdgNpTiFqouBZfyqCk41sJLbvOjFh1w==" crossorigin="anonymous"> |
| <div class="play-btn-circle" onclick="toggleAudio('audio1', this)" style="width: 35px; height: 35px; background: var(--text-main); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer;"> | ||
| <i class="fas fa-play" style="color: white; font-size: 0.8rem;"></i> | ||
| </div> | ||
| <div style="height: 4px; background: #e4e4e7; flex-grow: 1; border-radius: 2px; overflow: hidden;"> | ||
| <div id="progress1" style="width: 0%; height: 100%; background: var(--accent-tech); transition: width 0.2s;"></div> | ||
| </div> | ||
| <span style="color: #18181b; font-size: 0.8rem; font-weight: 600;">0:12</span> | ||
| </div> | ||
| <audio id="audio1" src="./assets/grandma.mp3" ontimeupdate="updateProgress('audio1', 'progress1')" onended="resetPlayer('audio1', this)"></audio> | ||
| </div> | ||
| <p style="font-size: 0.85rem; margin-top:15px; opacity: 0.7; font-style: italic; color: white;">"Don't forget the cinnamon pinch..."</p> | ||
| </div> | ||
|
|
||
| <!-- Audio Sample 2 --> | ||
| <div class="gallery-card"> | ||
| <h3 style="color: #a5b4fc; margin-bottom: 5px;">AI Twin</h3> | ||
| <p style="font-size: 0.85rem; opacity: 0.6; color: white;">Your personal tone & style.</p> | ||
|
|
||
| <div style="margin-top: 20px;"> | ||
| <div class="audio-player-ui" style="background: white; border-radius: 50px; padding: 10px 15px; display: flex; align-items: center; gap: 15px;"> | ||
| <div class="play-btn-circle" onclick="toggleAudio('audio2', this)" style="width: 35px; height: 35px; background: var(--accent-tech); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer;"> |
Copilot
AI
Dec 12, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Accessibility issue: Interactive elements that use onclick handlers (lines 398, 418) should also be keyboard accessible. Add tabindex="0" and handle keyboard events (keydown with Enter/Space) to ensure users can interact with these elements using keyboard only.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Michael Yuan <michael@secondstate.io>
No description provided.