feat: add app screenshots, lightbox, and polish landing page

- 6 screenshots (3 desktop + 3 mobile) with real app data
- Click-to-zoom lightbox on all screenshots
- Align header logo color (gold) between website and app
- Remove placeholder images

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Frederic Cabassut
2026-03-07 20:32:04 +01:00
co-authored by Claude Opus 4.6
parent 8a7ef196f0
commit 81091c28af
8 changed files with 118 additions and 7 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

+46 -5
View File
@@ -70,7 +70,7 @@
</a>
</div>
<div class="hero-screenshot animate-in delay-3">
<div class="screenshot-placeholder"></div>
<img src="assets/screenshot-grid.png" alt="Crumbs notes grid view showing colorful note cards with checklists, tags, and rich text" width="1280" height="800" loading="eager">
</div>
</div>
</section>
@@ -142,18 +142,34 @@
<section class="screenshots" id="screenshots">
<div class="container">
<h2 class="animate-in">See it in action</h2>
<h3 class="screenshots-subtitle animate-in">Desktop</h3>
<div class="screenshots-grid">
<div class="screenshot-card animate-in delay-1">
<div class="screenshot-placeholder"></div>
<img src="assets/screenshot-grid.png" alt="Notes grid view with colorful cards, checklists, and tags" width="1280" height="800" loading="lazy">
<div class="screenshot-label">Notes grid view</div>
</div>
<div class="screenshot-card animate-in delay-2">
<div class="screenshot-placeholder"></div>
<img src="assets/screenshot-editor.png" alt="Rich text editor with formatting toolbar" width="1280" height="800" loading="lazy">
<div class="screenshot-label">Rich text editor</div>
</div>
<div class="screenshot-card animate-in delay-3">
<div class="screenshot-placeholder"></div>
<div class="screenshot-label">Mobile view</div>
<img src="assets/screenshot-tags.png" alt="Tag filtering showing bretzel-tagged notes" width="1280" height="800" loading="lazy">
<div class="screenshot-label">Tag filtering</div>
</div>
</div>
<h3 class="screenshots-subtitle animate-in">Mobile</h3>
<div class="screenshots-grid screenshots-grid-mobile">
<div class="screenshot-card screenshot-card-mobile animate-in delay-1">
<img src="assets/screenshot-mobile-grid.png" alt="Mobile grid view with notes and tags" width="390" height="844" loading="lazy">
<div class="screenshot-label">Notes view</div>
</div>
<div class="screenshot-card screenshot-card-mobile animate-in delay-2">
<img src="assets/screenshot-mobile-editor.png" alt="Mobile checklist editor" width="390" height="844" loading="lazy">
<div class="screenshot-label">Checklist editor</div>
</div>
<div class="screenshot-card screenshot-card-mobile animate-in delay-3">
<img src="assets/screenshot-mobile-sidebar.png" alt="Mobile sidebar with tags" width="390" height="844" loading="lazy">
<div class="screenshot-label">Sidebar & tags</div>
</div>
</div>
</div>
@@ -209,7 +225,32 @@
</div>
</footer>
<!-- Lightbox -->
<div class="lightbox" id="lightbox" role="dialog" aria-label="Image preview">
<img src="" alt="">
</div>
<script>
// Lightbox
const lightbox = document.getElementById('lightbox');
const lightboxImg = lightbox.querySelector('img');
document.querySelectorAll('.screenshot-card img, .hero-screenshot img').forEach(img => {
img.addEventListener('click', () => {
lightboxImg.src = img.src;
lightboxImg.alt = img.alt;
lightbox.classList.add('active');
});
});
lightbox.addEventListener('click', () => {
lightbox.classList.remove('active');
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') lightbox.classList.remove('active');
});
// Mobile nav toggle
const toggle = document.querySelector('.nav-toggle');
const navLinks = document.querySelector('.nav-links');
+72 -2
View File
@@ -126,7 +126,7 @@ section {
display: flex;
align-items: center;
gap: 0.75rem;
color: var(--text);
color: var(--primary);
font-family: 'Press Start 2P', cursive;
font-size: 1rem;
}
@@ -404,13 +404,35 @@ section {
.screenshots h2 {
text-align: center;
font-size: clamp(0.9rem, 2.5vw, 1.25rem);
margin-bottom: 3rem;
margin-bottom: 2rem;
}
.screenshots-subtitle {
text-align: center;
font-size: 0.7rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.1em;
margin-bottom: 1.5rem;
}
.screenshots-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
gap: 1.5rem;
margin-bottom: 3rem;
}
.screenshots-grid-mobile {
grid-template-columns: repeat(3, 1fr);
max-width: 48rem;
margin-left: auto;
margin-right: auto;
}
.screenshot-card-mobile {
max-width: 14rem;
justify-self: center;
}
.screenshot-card {
@@ -569,6 +591,46 @@ section {
padding: 0.2rem 0.6rem;
}
/* ── Lightbox ── */
.lightbox {
position: fixed;
inset: 0;
z-index: 200;
background: rgba(26, 26, 46, 0.85);
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
cursor: zoom-out;
opacity: 0;
visibility: hidden;
transition: opacity 150ms ease-out, visibility 150ms ease-out;
}
.lightbox.active {
opacity: 1;
visibility: visible;
}
.lightbox img {
max-width: 100%;
max-height: 90vh;
border: 2px solid var(--border-subtle);
border-radius: 2px;
box-shadow: 4px 4px 0px rgba(0, 0, 0, 0.3);
transform: scale(0.95);
transition: transform 150ms ease-out;
}
.lightbox.active img {
transform: scale(1);
}
.screenshot-card img,
.hero-screenshot img {
cursor: zoom-in;
}
/* ── Animations ── */
@keyframes fade-up {
from {
@@ -634,6 +696,14 @@ section {
.screenshots-grid {
grid-template-columns: 1fr;
}
.screenshots-grid-mobile {
grid-template-columns: repeat(3, 1fr);
}
.screenshot-card-mobile {
max-width: none;
}
}
@media (max-width: 480px) {