mirror of
https://github.com/bretzel-app/crumbs.git
synced 2026-10-12 12:06:57 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f3f0c54ed9 | ||
|
|
cf2772dfc3 | ||
|
|
21b0e25c54 | ||
|
|
81091c28af | ||
|
|
8a7ef196f0 | ||
|
|
d8da61c060 | ||
|
|
09571eda59 |
+1
-1
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
crumbs:
|
||||
image: ghcr.io/bretzel-app/crumbs:0.4.1
|
||||
image: ghcr.io/bretzel-app/crumbs:0.4.3
|
||||
container_name: crumbs
|
||||
ports:
|
||||
- "3000:3000"
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "crumbs",
|
||||
"private": true,
|
||||
"version": "0.4.2",
|
||||
"version": "0.5.0",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"author": "Bretzel (https://bretzel.app)",
|
||||
|
||||
+9
-1
@@ -60,7 +60,15 @@ echo "Bumping $BUMP version..."
|
||||
npm version "$BUMP" -m "chore: bump version to %s" --no-git-tag-version
|
||||
|
||||
NEW_VERSION=$(node -p "require('./package.json').version")
|
||||
git add package.json
|
||||
|
||||
# Update version in marketing website
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
sed -i '' "s|<span class=\"footer-version\">v[^<]*</span>|<span class=\"footer-version\">v$NEW_VERSION</span>|" website/index.html
|
||||
else
|
||||
sed -i "s|<span class=\"footer-version\">v[^<]*</span>|<span class=\"footer-version\">v$NEW_VERSION</span>|" website/index.html
|
||||
fi
|
||||
|
||||
git add package.json website/index.html
|
||||
git commit -m "chore: bump version to $NEW_VERSION"
|
||||
git tag "v$NEW_VERSION"
|
||||
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
interface Props {
|
||||
open: boolean;
|
||||
onClose?: () => void;
|
||||
appVersion?: string;
|
||||
}
|
||||
|
||||
let { open, onClose }: Props = $props();
|
||||
let { open, onClose, appVersion }: Props = $props();
|
||||
|
||||
function setFilter(filter: NoteFilter) {
|
||||
selectedTag.set(null);
|
||||
@@ -83,4 +84,9 @@
|
||||
</div>
|
||||
{/if}
|
||||
</nav>
|
||||
{#if appVersion}
|
||||
<div class="absolute bottom-0 left-0 w-full border-t border-[var(--border-subtle)] px-6 py-3 text-right text-xs text-[var(--text-muted)]">
|
||||
v{appVersion}
|
||||
</div>
|
||||
{/if}
|
||||
</aside>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<div class="flex min-h-screen flex-col bg-[var(--bg-base)] text-[var(--text)]">
|
||||
<Header onMenuToggle={() => (sidebarOpen = !sidebarOpen)} />
|
||||
<Sidebar open={sidebarOpen} onClose={() => (sidebarOpen = false)} />
|
||||
<Sidebar open={sidebarOpen} onClose={() => (sidebarOpen = false)} appVersion={data.appVersion} />
|
||||
|
||||
<main class="flex-1 pt-4 transition-all {sidebarOpen ? 'lg:ml-64' : ''}">
|
||||
<div class="mx-auto max-w-7xl px-4">
|
||||
@@ -31,7 +31,7 @@
|
||||
</main>
|
||||
|
||||
<footer class="pb-4 pt-8 text-center text-xs text-[var(--text-muted)] {sidebarOpen ? 'lg:ml-64' : ''}">
|
||||
Crumbs by Bretzel v{data.appVersion} — made with 🥨 in Strasbourg
|
||||
Crumbs by Bretzel — made with 🥨 in Strasbourg
|
||||
</footer>
|
||||
|
||||
<Toast />
|
||||
|
||||
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 |
+47
-6
@@ -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>
|
||||
@@ -205,11 +221,36 @@
|
||||
<li><a href="https://github.com/bretzel-app/crumbs/blob/main/docs/DEPLOYMENT.md" target="_blank" rel="noopener">Docs</a></li>
|
||||
<li><a href="https://github.com/bretzel-app/crumbs/blob/main/LICENSE" target="_blank" rel="noopener">License</a></li>
|
||||
</ul>
|
||||
<span class="footer-version">v0.3.3</span>
|
||||
<span class="footer-version">v0.5.0</span>
|
||||
</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
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user