From 5d827e5eab7af6d5a38bd9eacaa7846ad1817156 Mon Sep 17 00:00:00 2001 From: Daniel Maksymilian Syrnicki Date: Wed, 26 Aug 2026 13:30:10 +0200 Subject: [PATCH] feat(website): logo showcase on /logo/, poll link + current feature list on the homepage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both marks now appear everywhere they would have to work: five sizes down to the real 16 px tab icon, horizontal and stacked lockups, browser tab + site header, phone tiles, console banner + boot splash, social card, and four colour grounds — generated from one geometry source by website/tools/logo-assets.py (outputs committed under data/logo and static/img/logo). The homepage links to the vote and its 'what works today' list catches up with 26.8–26.17: password login, online app catalog, app dependencies, opt-in HTTPS. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MScAinbyMdeNc7H2BZdnnG --- website/README.md | 4 + website/assets/css/main.css | 119 ++++++---- website/assets/js/poll.js | 24 +- website/content/_index.de.md | 8 +- website/content/_index.md | 8 +- website/content/logo.de.md | 26 ++- website/content/logo.md | 25 +- website/data/logo/m.json | 12 + website/data/logo/r.json | 12 + website/layouts/index.html | 3 + website/layouts/poll/single.html | 171 +++++++++++--- website/static/img/logo/m/social.png | Bin 0 -> 8317 bytes website/static/img/logo/m/splash.png | Bin 0 -> 13030 bytes website/static/img/logo/m/tile-round.png | Bin 0 -> 2412 bytes website/static/img/logo/m/tile.png | Bin 0 -> 2187 bytes website/static/img/logo/r/social.png | Bin 0 -> 11938 bytes website/static/img/logo/r/splash.png | Bin 0 -> 18886 bytes website/static/img/logo/r/tile-round.png | Bin 0 -> 5588 bytes website/static/img/logo/r/tile.png | Bin 0 -> 5384 bytes website/tools/FONT-PROVENANCE.md | 9 + website/tools/FamiljenGrotesk-SemiBold.ttf | Bin 0 -> 56520 bytes website/tools/logo-assets.py | 254 +++++++++++++++++++++ 22 files changed, 588 insertions(+), 87 deletions(-) create mode 100644 website/data/logo/m.json create mode 100644 website/data/logo/r.json create mode 100644 website/static/img/logo/m/social.png create mode 100644 website/static/img/logo/m/splash.png create mode 100644 website/static/img/logo/m/tile-round.png create mode 100644 website/static/img/logo/m/tile.png create mode 100644 website/static/img/logo/r/social.png create mode 100644 website/static/img/logo/r/splash.png create mode 100644 website/static/img/logo/r/tile-round.png create mode 100644 website/static/img/logo/r/tile.png create mode 100644 website/tools/FONT-PROVENANCE.md create mode 100644 website/tools/FamiljenGrotesk-SemiBold.ttf create mode 100644 website/tools/logo-assets.py diff --git a/website/README.md b/website/README.md index 0634614..13684dd 100644 --- a/website/README.md +++ b/website/README.md @@ -75,6 +75,10 @@ layouts/ Custom inline theme — no external theme or framework index.html Home-only layout with editorial hero assets/css/main.css Stylesheet (fingerprinted + minified on build) assets/js/poll.js Vote script for /logo/ — plain fetch, no cookies, no storage +data/logo/{m,r}.json Generated: mark SVGs, lockups, 16 px icons, console banner per proposal +static/img/logo/ Generated: tiles, splash and social card per proposal +tools/logo-assets.py Generator for the two lines above (cairosvg + Pillow + fontTools); + run on the dev box, commit the output. Font: tools/FONT-PROVENANCE.md static/favicon.svg Gate mark in crimson deploy.sh Manual rsync + remote Hugo build (over SSH, for off-CI pushes) deploy-ci.sh Local rsync + Hugo build — runs on forge-runner-01 from CI diff --git a/website/assets/css/main.css b/website/assets/css/main.css index aeb5bb2..3d04992 100644 --- a/website/assets/css/main.css +++ b/website/assets/css/main.css @@ -458,50 +458,14 @@ main.container { background: var(--card-bg); transition: border-color 160ms, box-shadow 160ms; } -.poll-card.is-yours { - border-color: var(--accent); - box-shadow: 0 0 0 3px var(--accent-glow); -} +.is-yours { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow); } .poll-card h2 { margin: 0; font-size: 1.25rem; letter-spacing: -0.01em; } .poll-desc { margin: 0; color: var(--fg-muted); font-size: 0.95rem; } -.poll-art { - display: grid; - place-items: center; - padding: 2.2rem 1rem; - border-radius: 0.75rem; -} -.poll-art--m { background: var(--bg-subtle); color: var(--accent); } -.poll-art--r { background: #151515; color: #af6428; } +.poll-art { display: grid; place-items: center; padding: 2.2rem 1rem; border-radius: 0.75rem; } +.poll-art--m { background: var(--bg-subtle); } +.poll-art--r { background: #151515; } +.poll-art .pm { height: 9rem; width: auto; } .pm { display: block; } -.pm--big { height: 9rem; width: auto; } -.pm--head { height: 1.1em; width: auto; } -.poll-ctx { - display: flex; - flex-wrap: wrap; - gap: 0.6rem; - align-items: center; -} -.poll-ctx-head, .poll-ctx-tab { - display: inline-flex; - align-items: center; - gap: 0.45rem; - padding: 0.35rem 0.7rem; - border: 1px solid var(--border); - border-radius: 0.5rem; - background: var(--bg); - font-size: 0.82rem; - color: var(--fg-muted); -} -.poll-ctx-head { color: var(--accent); } -.poll-ctx-head--r { color: #af6428; } -.poll-ctx-name { - font-weight: 600; - letter-spacing: 0.12em; - text-transform: uppercase; - font-size: 0.7rem; - color: var(--fg); -} -.poll-ctx-tab img { image-rendering: pixelated; } .poll-btn { margin-top: auto; padding: 0.85rem 1.2rem; @@ -522,9 +486,76 @@ main.container { .poll-bar i { display: block; height: 100%; width: 0; background: var(--accent); transition: width 500ms ease; } .poll--voted .poll-bar { display: block; } .poll-count { margin: 0; min-height: 1.4em; font-size: 0.85rem; color: var(--fg-muted); font-variant-numeric: tabular-nums; } -.poll-status { margin: 1.5rem 0 0; min-height: 1.5em; color: var(--fg-muted); } +.poll-status { margin: 1.25rem 0 0; min-height: 1.5em; color: var(--fg-muted); } .poll-note { margin-top: 1rem; max-width: var(--measure); font-size: 0.85rem; color: var(--fg-muted); } .poll-note a { color: var(--accent); } -@media (prefers-reduced-motion: reduce) { - .poll-bar i, .poll-btn { transition: none; } + +/* showcase */ +.show { display: flex; flex-direction: column; gap: 3rem; margin-top: 4rem; } +.show-intro { margin: 0; } +.show-row { display: flex; flex-direction: column; gap: 0.6rem; } +.show-h { margin: 0; font-size: 1.35rem; letter-spacing: -0.01em; } +.show-p { margin: 0 0 0.6rem; max-width: var(--measure); color: var(--fg-muted); font-size: 0.95rem; } +.show-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); gap: 1.25rem; } +.show-cell { + display: flex; flex-direction: column; gap: 0.9rem; + padding: 1.1rem; border: 1px solid var(--card-border); border-radius: 0.9rem; background: var(--card-bg); } +.show-cell--m { color: var(--accent); } +.show-cell--r { color: #af6428; } +.show-tag { font-size: 0.7rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg-muted); } +.sizes { display: flex; align-items: flex-end; gap: 1.1rem; flex-wrap: wrap; } +.sizes figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 0.35rem; } +.sizes figcaption { font-family: var(--font-mono); font-size: 0.65rem; color: var(--fg-muted); } +.sz { display: block; } +.sz .pm { width: auto; } +.sz-96 .pm { height: 96px; } .sz-48 .pm { height: 48px; } .sz-32 .pm { height: 32px; } .sz-24 .pm { height: 24px; } +.px { image-rendering: pixelated; } +.lock { display: grid; place-items: center; padding: 1rem; border-radius: 0.6rem; background: var(--bg-subtle); } +.lock-h .pm { height: 3rem; width: auto; max-width: 100%; } +.lock-s .pm { height: 7rem; width: auto; max-width: 100%; } +.mock { border: 1px solid var(--border); border-radius: 0.7rem; overflow: hidden; background: var(--bg); color: var(--fg); font-size: 0.8rem; } +.tabbar { background: var(--bg-subtle); padding: 0.55rem 0.65rem; } +.tab { display: inline-flex; align-items: center; gap: 0.45rem; padding: 0.3rem 0.65rem; border: 1px solid var(--border); border-radius: 0.4rem; background: var(--bg); color: var(--fg-muted); } +.urlbar { padding: 0.45rem 0.75rem; border-top: 1px solid var(--border); font-family: var(--font-mono); font-size: 0.72rem; color: var(--fg-muted); } +.uihead { display: flex; align-items: center; gap: 0.5rem; padding: 0.8rem 0.9rem; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } +.uihead-mark { display: inline-flex; color: inherit; } +.show-cell--m .uihead-mark { color: var(--accent); } +.show-cell--r .uihead-mark { color: #af6428; } +.uihead-mark .pm { height: 1.25rem; width: auto; } +.uihead-name { font-weight: 600; letter-spacing: 0.13em; text-transform: uppercase; font-size: 0.72rem; color: var(--fg); } +.uihead-nav { margin-left: auto; display: flex; gap: 0.7rem; color: var(--fg-muted); } +.uibody { padding: 0.9rem; display: flex; flex-direction: column; gap: 0.45rem; } +.uibody i { display: block; height: 0.45rem; border-radius: 3px; background: var(--bg-subtle); } +.uibody i.s { width: 45%; } +.tiles { display: flex; gap: 1rem; justify-content: center; padding: 1.2rem; border-radius: 0.6rem; background: var(--bg-subtle); } +.tiles img { width: 6rem; height: 6rem; } +.term { + margin: 0; padding: 0.9rem 1rem; border-radius: 0.6rem; overflow-x: auto; + background: #100f0c; color: #d8d2c2; font-family: var(--font-mono); font-size: 0.6rem; line-height: 1.3; +} +.term i, .term b { font-style: normal; font-weight: 400; color: inherit; } +.show-cell--m .term i { color: #ff6b56; } .show-cell--m .term b { color: #ff6b56; } +.show-cell--r .term i { color: #c9803f; } .show-cell--r .term b { color: #c9803f; } +.shot { display: block; width: 100%; height: auto; border-radius: 0.6rem; } +.grounds { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.6rem; } +.ground { display: grid; place-items: center; padding: 1.2rem; border-radius: 0.6rem; border: 1px solid var(--border); } +.ground--fg { background: var(--bg-subtle); color: var(--fg); } +.ground .pm { height: 3.2rem; width: auto; } +.poll-final { margin-top: 3.5rem; display: flex; flex-direction: column; gap: 1rem; } +.poll-final-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: 1.25rem; } +.poll-final-card { + display: flex; flex-direction: column; gap: 0.8rem; align-items: stretch; + padding: 1.1rem; border: 1px solid var(--card-border); border-radius: 0.9rem; background: var(--card-bg); +} +.poll-final-mark { display: grid; place-items: center; padding: 0.8rem; } +.poll-final-mark .pm { height: 3.5rem; width: auto; } +.home-poll { + display: inline-flex; align-items: center; gap: 0.6rem; margin-top: 1.4rem; + padding: 0.55rem 0.95rem; border: 1px solid var(--border); border-radius: 999px; + background: var(--card-bg); color: var(--fg); text-decoration: none; font-size: 0.92rem; +} +.home-poll:hover { border-color: var(--accent); } +.home-poll .pm { height: 1.1rem; width: auto; color: var(--accent); } +.home-poll .pm + .pm { color: #af6428; } +@media (prefers-reduced-motion: reduce) { .poll-bar i, .poll-btn { transition: none; } } diff --git a/website/assets/js/poll.js b/website/assets/js/poll.js index 70cb18b..0a5f9bd 100644 --- a/website/assets/js/poll.js +++ b/website/assets/js/poll.js @@ -10,20 +10,22 @@ var busy = false; function pct(n, total) { return total ? Math.round((n / total) * 100) : 0; } + function each(sel, fn) { Array.prototype.forEach.call(root.querySelectorAll(sel), fn); } function render(d) { var total = d.total || 0; root.classList.toggle('poll--voted', !!d.yours); Object.keys(d.counts).forEach(function (k) { - var card = root.querySelector('[data-choice="' + k + '"]'); - if (!card) return; - var n = d.counts[k], p = pct(n, total); - card.classList.toggle('is-yours', d.yours === k); - card.querySelector('.poll-bar i').style.width = p + '%'; - card.querySelector('[data-count]').textContent = d.yours ? p + ' % · ' + n : ''; - var b = card.querySelector('[data-vote]'); - b.disabled = d.yours === k; - b.textContent = d.yours === k ? t.tVoted : (d.yours ? t.tChange : b.dataset.label); + var n = d.counts[k], p = pct(n, total), mine = d.yours === k; + each('[data-choice="' + k + '"]', function (card) { + card.classList.toggle('is-yours', mine); + var bar = card.querySelector('.poll-bar i'); if (bar) bar.style.width = p + '%'; + var c = card.querySelector('[data-count]'); if (c) c.textContent = d.yours ? p + ' % · ' + n : ''; + }); + each('[data-vote="' + k + '"]', function (b) { + b.disabled = mine; + b.textContent = mine ? t.tVoted : (d.yours ? t.tChange : b.dataset.label); + }); }); status.textContent = d.yours ? t.tTotal.replace('{n}', total) : ''; } @@ -35,7 +37,7 @@ .catch(function () { status.textContent = t.tError; }); } - buttons.forEach(function (b) { + Array.prototype.forEach.call(buttons, function (b) { b.dataset.label = b.textContent; b.addEventListener('click', function () { if (busy) return; @@ -46,7 +48,7 @@ body: JSON.stringify({ choice: b.dataset.vote }) }) .then(function (r) { if (!r.ok) throw r; return r.json(); }) - .then(render) + .then(function (d) { render(d); status.scrollIntoView({ block: 'nearest' }); }) .catch(function () { status.textContent = t.tError; b.disabled = false; }) .then(function () { busy = false; }); }); diff --git a/website/content/_index.de.md b/website/content/_index.de.md index 067ee9a..922180c 100644 --- a/website/content/_index.de.md +++ b/website/content/_index.de.md @@ -2,6 +2,8 @@ title: "Furtka" description: "Offenes Heimserver-Betriebssystem — einfach genug für alle." status: "26.20-alpha — in Arbeit" +poll_link: "/de/logo/" +poll_text: "Wir suchen ein Logo — hilf uns beim Aussuchen" # features_today / features_next müssen index-parallel zu content/_index.md bleiben. intro: | **Furtka** ist ein offenes Heimserver-Betriebssystem. @@ -19,11 +21,15 @@ features_today: - "Apps mit einem Klick installieren und entfernen" - "Eine installierte App mit einem Klick aktualisieren (holt das neueste Container-Image)" - "Furtka selbst mit einem Klick aktualisieren — keine Neuinstallation mehr für neue Features" + - "Die Bedienseite fragt nach einem Passwort — niemand im WLAN kommt einfach so rein" + - "Neue Apps kommen aus einem Online-Katalog, ohne auf ein Furtka-Update zu warten" + - "Apps können auf anderen Apps aufbauen — was eine braucht, wird mit installiert" + - "Verschlüsselte Verbindung im Heimnetz, in den Einstellungen einschaltbar" features_next_label: "Was als Nächstes kommt" features_next: - "Apps für Fotos, Dateien, Smarthome, Spiele-Streaming und Medien" - "Einfachere Sprache im Einrichtungs-Assistenten" - - "Sichere Verbindung im Heimnetz (ohne Warnmeldung im Browser)" + - "Den Server auch von unterwegs erreichen" - "Mehrere Server zusammenschalten" --- diff --git a/website/content/_index.md b/website/content/_index.md index 295e2f2..ffb814e 100644 --- a/website/content/_index.md +++ b/website/content/_index.md @@ -2,6 +2,8 @@ title: "Furtka" description: "Open-source home server OS — simple enough for everyone." status: "26.20-alpha — work in progress" +poll_link: "/logo/" +poll_text: "We're picking a logo — help us choose" # Keep features_today / features_next index-aligned with content/_index.de.md. intro: | **Furtka** is an open-source home server OS. @@ -19,11 +21,15 @@ features_today: - "Install and remove apps with one click" - "Update an installed app with one click (pulls the newest container image)" - "Update Furtka itself with one click — no reinstalling for new features" + - "The control page asks for a password — nobody on the Wi-Fi can just walk in" + - "New apps arrive from an online catalog, without waiting for a Furtka update" + - "Apps can build on other apps — what one needs gets installed alongside it" + - "Encrypted connection on your home network, switched on in settings" features_next_label: "What's coming next" features_next: - "Apps for photos, files, smart home, game streaming and media" - "Plainer language in the setup wizard" - - "Secure connection on your home network (no browser warning)" + - "Reaching your server from outside the house" - "Linking several servers together" --- diff --git a/website/content/logo.de.md b/website/content/logo.de.md index 9e57132..fe820ad 100644 --- a/website/content/logo.de.md +++ b/website/content/logo.de.md @@ -8,11 +8,32 @@ poll: logo sitemap: priority: 0.5 m: + short: "M" title: "M — das f im Tor" text: "Ein kleines f, aus einem Rundbogentor ausgestanzt. Der Stamm ist der Torpfosten, die zwei Balken sind die Querriegel." r: + short: "R" title: "R — Fenster, Rad und F" text: "Ein Bogenfenster mit einem Speichenrad dahinter; in der oberen rechten Scheibe wird die Speiche zum F." +show: + intro: "Noch unentschieden? Hier ist jedes Zeichen überall dort, wo es funktionieren muss." + sizes: "Groß und klein" + sizes_text: "Vom Poster bis zum 16-Pixel-Symbol im Browser-Tab. Unter 32 Pixeln wechseln beide auf eine vereinfachte Zeichnung — M verliert nichts, R behält Fenster, Kreuz und Nabe." + name: "Mit dem Namen" + name_text: "Nebeneinander und gestapelt. Die Wortmarke ist bei beiden dieselbe, also entscheidet nur das Zeichen." + browser: "Im Browser" + browser_text: "Das Tab-Symbol in echter Größe und die Kopfzeile von furtka.org." + nav1: "Doku" + nav2: "Blog" + phone: "Auf dem Handy" + phone_text: "Startbildschirm-Symbol — eckig wie auf Android, rund wie manche Launcher es beschneiden." + box: "Auf dem Server" + box_text: "Der Text-Willkommensbildschirm, den der Server am Monitor zeigt, und der Startbildschirm beim Booten." + shared: "Geteilt" + shared_text: "Die Vorschaukarte, die erscheint, wenn jemand einen Link zu furtka.org postet." + colour: "In Farbe" + colour_text: "Auf hell, auf dunkel, auf der eigenen Farbe und in normaler Textfarbe — jedes Zeichen ist eine Form und nimmt die Farbe an, die es umgibt." + final: "Genug gesehen?" labels: vote: "Dieses hier" voted: "Deine Wahl" @@ -26,5 +47,6 @@ labels: *Furtka* ist polnisch für die kleine Gartenpforte — die Tür im Zaun, durch die man hineinkommt, ohne das große Tor aufzumachen. Beide Zeichen spielen damit: das eine zeichnet den Buchstaben ins Tor, das andere schaut durchs -Tor auf ein Rad. Unter jedem Zeichen siehst du, wie es in der Kopfzeile -der Seite sitzt und als echtes 16-Pixel-Symbol im Browser-Tab. +Tor auf ein Rad. Stimm direkt hier ab — oder scroll erst weiter und sieh +beide Zeichen überall, wo sie funktionieren müssen, vom Poster bis zum +winzigen Symbol im Browser-Tab. diff --git a/website/content/logo.md b/website/content/logo.md index 75c954f..7091e93 100644 --- a/website/content/logo.md +++ b/website/content/logo.md @@ -9,11 +9,32 @@ poll: logo sitemap: priority: 0.5 m: + short: "M" title: "M — the f in the gate" text: "A lowercase f cut out of an arched gate. The stem is the gate post, the two rails are the crossbars." r: + short: "R" title: "R — window, wheel and F" text: "An arched window with a wheel of spokes behind it; in the top-right pane the spoke becomes an F." +show: + intro: "Not sure yet? Here is each mark everywhere it would have to work." + sizes: "Big and small" + sizes_text: "From a poster to the 16-pixel icon in a browser tab. Below 32 pixels both marks switch to a simplified drawing — M drops nothing, R keeps the window, the cross and the hub." + name: "With the name" + name_text: "Side by side and stacked. The wordmark is the same for both, so only the mark decides." + browser: "In the browser" + browser_text: "The tab icon at its real size, and the site header of furtka.org." + nav1: "Docs" + nav2: "Blog" + phone: "On the phone" + phone_text: "Home-screen icon — square as on Android, round as some launchers cut it." + box: "On the box" + box_text: "The text-mode welcome screen your server shows on a monitor, and the boot splash." + shared: "Shared" + shared_text: "The preview card that appears when someone posts a link to furtka.org." + colour: "In colour" + colour_text: "On light, on dark, on its own colour, and in plain text colour — each mark is one shape and takes whatever colour is around it." + final: "Seen enough?" labels: vote: "This one" voted: "Your pick" @@ -27,5 +48,5 @@ labels: *Furtka* is Polish for a small garden gate — the little door in the fence that lets you in without opening the whole thing. Both marks play with that: one draws the letter into the gate, the other looks through the gate at a -wheel. Below each mark you see how it sits in the site header and as a -real 16-pixel browser-tab icon. +wheel. Vote right here — or scroll on first and see both marks everywhere +they would have to work, from a poster to the tiny icon in a browser tab. diff --git a/website/data/logo/m.json b/website/data/logo/m.json new file mode 100644 index 0000000..ea69beb --- /dev/null +++ b/website/data/logo/m.json @@ -0,0 +1,12 @@ +{ + "display": "", + "flat": "", + "min": "", + "lockup_h": "", + "lockup_s": "", + "tab16": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABJklEQVR42sWRvUoDURCFv9msf1hoZyFCGmEjWks2iIkSi9gIIZ2FQWx9BX0Gn0GsrUwjCSmMaB1ICBEsxMJGK8F13bHYmFzWJQQi+HX3zsyZc88VIlyvry7YCf8YZQ9huXfdUeRyEu8s03h4MfvFPFTd1K5FcA4yTzyvIrK/edO6+iVQTa9sWxJUgAmG4wXKztZtu94XqGWT0+JNdUCWGI3H9znfKVS6HzaAeDMlUGNY7hUOc41W05yquc6pwAmQnH2zi8CFFZaCvNHn69dnMTocRYU8gN3buGjUnnN33SeAetpxEdkYDGkG/QkvdBwKKJbxH4Gx5Qj0YLDWcKCSMBzEk220y0A5JoM+FmMy1EE9kyqgrMVlMJKAqpaA2Az+7An/LzA232GMWfyHzvuOAAAAAElFTkSuQmCC", + "full16": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABJUlEQVR42sWRz0oCYRTFf3dmkDbSbqCwTQQzPUGkgRriE6TQrnqGwKB1u54jwjbtIxzB0hdIC7fppjb92SQ1t0WMfZlOgUFnd7977uGc8wlj0Mh4yYFK0UaWABDt2ujZ2sXN0yhXzKFawnb7fgVlD0iOcB9BDrKXnUOB8JtAtYTt9vxjYIM4qFSzzc5mJGJF727fr/x4/BGnXE8v735x0Mh4yVeVnmH7NlRr6z7VDsonvEXkYNWvIeSAB03YqXxw9ewADFSKlpFZQ9leb7XPY3zM8hIWgFMHwBI89HN7t9Cp0YJ62ttXZMc4nDfK8AEcAFUS5ndEtlWlgLA4vgtmhgKTkGte583Z6GAIiykR6yBI+0fAyvgOfiGAMjexg7+K8P8CU+Md2cpUHzmzh4cAAAAASUVORK5CYII=", + "banner": " ▄▄██████▄▄\n ▄████████████▄\n ██████▀▀▀▀▀▀████\n ████▀ ████\n █████ ██████████\n █████ █████\n █████ ▄▄▄▄▄█████\n █████ ██████████\n █████ ██████████\n ▀▀▀▀ ▀▀▀▀▀▀▀▀▀", + "color": "#c03a28", + "ink": "#0d0d0f" +} \ No newline at end of file diff --git a/website/data/logo/r.json b/website/data/logo/r.json new file mode 100644 index 0000000..fc38af4 --- /dev/null +++ b/website/data/logo/r.json @@ -0,0 +1,12 @@ +{ + "display": "", + "flat": "", + "min": "", + "lockup_h": "", + "lockup_s": "", + "tab16": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAB4klEQVR42o2TPWhTYRSGn/Pdm7Qd/NnqpoPYqIvVguAP7SwUmlRrhw5qrx1dHF0c7OoiFElTOyhOpjFrJ6uIgihSKKYloiBCwSJ00bTJva9DbtubEKHveM77nPN+Bz4joYUgk3PGLYl+oCfR+gt8FJrLFVbLO0UDmL9xrPuQ3/3cIGuwLrQko8dhQxF6ZXI10CDQK3jR3dOYuPKouuUADqe68gYjwP3tTe9otrA6jngicRBRk6Jvkp4iKxtc3aqlZgDs5dSp84qi94iH2bnK3Z1IxckTgTM3S6veGXwQ3AEGXKToOlCv400nXV7kfgBImjazXD3tHcgWKhe2w8YDoCFj3JnUB1Ydm1v5nYQjz44DmNk9SQt+PZwCGJuv/gK+msg4sBSm7SQoMCPqjW/6zAsZ2qzXZtg7cw3o8umgUtCXNyyIR02EHn9uFr4vtfusFGQWDU5j9raZl1RkGrGkCYSsjKPenKeLghU/jplGOtd0mmdtGwSG0Y8UxqU0gB+P/pmdrZzZjT158g2mSwn4da7wZXC3fzvzGYHr9GbfC7OCUkwWUy4a7eTrCA/n1zYs4nEM54fzaxv7hvcrKwWZReAsUGw5kunI3sew9TZuFPjkA8vAAHCtZaoMQWjY5f8sXv4HrfW+WZX2x04AAAAASUVORK5CYII=", + "full16": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAChUlEQVR42nWTT4jUZRjHP993fr/ZSSSKoFu4UDC/TQNLErrUVQndSaigw2o0oyRG7KkgFAKxS9TFIpp1W4I6eHCmdutSHcwgoaK10FndFkwIRNSD5u7On9/77TA7y4T1PT087/u8z/f7fd5HDKH58paHnHT3AtuwNg7yhtvgX9LEM7s+uvTXIB8GQaNaftWF3gLWdqMzwrPAVuFZxA9BeqrXC5ca1Wz/oEYAjVq2D/OeCOOVqQtnAOZeeuz+7obuTQhvS14BIHrE8qTFoT31i5/p5MHNG9NOfkVmb+XEwuzg1VMT2QMqcl1SE+j2+XseqWW7vqFd3JQUO/HNiEuBpDWsX6GUwyo2p2X+7uRh7oWZ81cBmtXs2HKpsyNER7CWovL5Rq38+qA4KRaSNbvGLb84Enpj6wbKP2E9mgQFsH9Emoxm5lQ1e6aU9w6s5Ms7giDEMLV7+sLnAq+zilpFjKy7Xam3vk1D3CpZ7UJ6OYT4LvBHVP5Oszr2Af+BZG2Oo83a2Bu5QdG/Wq6EGHaOn2h9//VrWx7uLPcWm7XsKqgN4OhRwbU1XdwLbOvrCSWItNPiEkAnp2Mh9c/bQ/f7nQW/Veqt/QY1atmk7GfTbvurL2rln2Ontx3II5x+rt56X+DmK9nHAGpWx45iPyglhyPdadDmQs6hPPFOrIOI47a+FP4Q/Gck31dwcgTpWuhTZTTSOy+FO2maPr77k4U5uve8BUC3dHjPVOubEP0EaClQ+B14BCCJuCx4GnmiUl84yf9gfPribeBAo1b+zvCp8Y2koLAYo88B9/3706+UjK4rWZloVLNVhlYM61whaDGB/CzSk8Dzw53c35l5o1130ZBvQTz7D8VtHXvXpMGjAAAAAElFTkSuQmCC", + "banner": " ▄▄████████▄▄\n ▄██▀ ██▄▄▄███▄\n▄█▀ ██▀▀▀▀ ▀█▄\n██ ████▀ ██\n██ ▄████▄ ██\n██████████████████\n██ ██████ ██\n██ ██ ██\n██ ██ ██\n██████████████████", + "color": "#af6428", + "ink": "#151515" +} \ No newline at end of file diff --git a/website/layouts/index.html b/website/layouts/index.html index 9b88d3b..5975241 100644 --- a/website/layouts/index.html +++ b/website/layouts/index.html @@ -12,6 +12,9 @@

+ {{ with .Params.poll_link }} +

{{ partial "mark-m.html" (dict "class" "" "id" "hm") }}{{ partial "mark-r.html" (dict "class" "" "id" "hr") }}{{ $.Params.poll_text }} →

+ {{ end }} {{ with .Params.intro }} diff --git a/website/layouts/poll/single.html b/website/layouts/poll/single.html index 9b4bcbc..e62b99b 100644 --- a/website/layouts/poll/single.html +++ b/website/layouts/poll/single.html @@ -1,5 +1,8 @@ {{ define "main" }} {{- $p := .Params -}} +{{- $M := hugo.Data.logo.m -}} +{{- $R := hugo.Data.logo.r -}} +{{- $s := $p.show -}}
{{ .Content }}
-
-
-
{{ partial "mark-m.html" (dict "class" "pm--big" "id" "m") }}
-
- {{ partial "mark-m.html" (dict "class" "pm--head" "id" "mh") }}Furtka - Furtka -
-

{{ $p.m.title }}

-

{{ $p.m.text }}

- + {{/* ── Quick vote ─────────────────────────────────────────── */}} +
+ {{ range $k, $d := (dict "m" $M "r" $R) }} + {{ $c := index $p $k }} +
+
{{ $d.display | safeHTML }}
+

{{ $c.title }}

+

{{ $c.text }}

+ -

-
- -
-
{{ partial "mark-r.html" (dict "class" "pm--big" "id" "r") }}
-
- {{ partial "mark-r.html" (dict "class" "pm--head" "id" "rh") }}Furtka - Furtka -
-

{{ $p.r.title }}

-

{{ $p.r.text }}

- - -

+

+ {{ end }}
-

{{ $p.labels.nojs }}

+ + {{/* ── Showcase ───────────────────────────────────────────── */}} +
+

{{ $s.intro }}

+ +
+

{{ $s.sizes }}

+

{{ $s.sizes_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
+
{{ $d.flat | safeHTML }}
96
+
{{ $d.flat | safeHTML }}
48
+
{{ $d.min | safeHTML }}
32
+
{{ $d.min | safeHTML }}
24
+
16
+
+
+ {{ end }} +
+
+ +
+

{{ $s.name }}

+

{{ $s.name_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
{{ $d.lockup_h | safeHTML }}
+
{{ $d.lockup_s | safeHTML }}
+
+ {{ end }} +
+
+ +
+

{{ $s.browser }}

+

{{ $s.browser_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
+
Furtka
+
https://furtka.org
+
{{ $d.flat | safeHTML }}Furtka{{ $s.nav1 }}{{ $s.nav2 }}
+
+
+
+ {{ end }} +
+
+ +
+

{{ $s.phone }}

+

{{ $s.phone_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
+
+ {{ end }} +
+
+ +
+

{{ $s.box }}

+

{{ $s.box_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
{{ $d.banner }}
+
+  Furtka is ready.  Open http://furtka.local
+ +
+ {{ end }} +
+
+ +
+

{{ $s.shared }}

+

{{ $s.shared_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} + +
+ {{ end }} +
+
+ +
+

{{ $s.colour }}

+

{{ $s.colour_text }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ index $p $k "short" }} +
+ {{ $d.flat | safeHTML }} + {{ $d.flat | safeHTML }} + {{ $d.flat | safeHTML }} + {{ $d.flat | safeHTML }} +
+
+ {{ end }} +
+
+
+ + {{/* ── Vote again at the end ─────────────────────────────── */}} +
+

{{ $s.final }}

+
+ {{ range $k, $d := (dict "m" $M "r" $R) }} +
+ {{ $d.flat | safeHTML }} + + +

+
+ {{ end }} +
+

{{ $p.labels.note | safeHTML }}

{{ $js := resources.Get "js/poll.js" | minify | fingerprint }} diff --git a/website/static/img/logo/m/social.png b/website/static/img/logo/m/social.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5477e98eaf43df9e6171e1a83338aba7aaa17f GIT binary patch literal 8317 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 MEkjM@eY=SN0!5oDxBvhE literal 0 HcmV?d00001 diff --git a/website/static/img/logo/m/splash.png b/website/static/img/logo/m/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..7d43290381effd961b7500b739130ec0cb1b0c66 GIT binary patch literal 13030 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 literal 0 HcmV?d00001 diff --git a/website/static/img/logo/m/tile.png b/website/static/img/logo/m/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..d4bb0b97b2bb70f180d8e636624b217bce660718 GIT binary patch literal 2187 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 IdDiFFpG`FRkpKVy literal 0 HcmV?d00001 diff --git a/website/static/img/logo/r/social.png b/website/static/img/logo/r/social.png new file mode 100644 index 0000000000000000000000000000000000000000..bc25571f8dbef924705cd75978273681755185d0 GIT binary patch literal 11938 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 I-E~0!5271YjQ{`u literal 0 HcmV?d00001 diff --git a/website/static/img/logo/r/tile.png b/website/static/img/logo/r/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..cc56a6437b1fd747828d04c30d6c9a59d2065bb4 GIT binary patch literal 5384 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 literal 0 HcmV?d00001 diff --git a/website/tools/FONT-PROVENANCE.md b/website/tools/FONT-PROVENANCE.md new file mode 100644 index 0000000..8de91b9 --- /dev/null +++ b/website/tools/FONT-PROVENANCE.md @@ -0,0 +1,9 @@ +# Build-time font + +`FamiljenGrotesk-SemiBold.ttf` — Familjen Grotesk, weight 600, fetched from +Google Fonts (fonts.gstatic.com, family `Familjen+Grotesk:wght@600`) on +2026-08-26. Licence: SIL Open Font License 1.1. + +It is used **only** by `tools/logo-assets.py` to outline the wordmark into +SVG paths and to render the splash / social-card PNGs. The site itself ships +no webfonts. diff --git a/website/tools/FamiljenGrotesk-SemiBold.ttf b/website/tools/FamiljenGrotesk-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..946a979ffd76db7c4d8248d65b10557b1db204fb GIT binary patch literal 56520 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 Gs{aFPt^0`p literal 0 HcmV?d00001 diff --git a/website/tools/logo-assets.py b/website/tools/logo-assets.py new file mode 100644 index 0000000..f9a865e --- /dev/null +++ b/website/tools/logo-assets.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +"""Generate the logo-poll showcase assets for /logo/ from one geometry source. + + python3 website/tools/logo-assets.py + +Writes website/static/img/logo/{m,r}/*.png and website/data/logo/{m,r}.json. +Needs: cairosvg, Pillow, fontTools (pip). Run it on the dev box and commit +the output — the site build itself needs nothing beyond Hugo. + +Mark M: lowercase f knocked out of a gate, 64-unit grid (even-odd fill). +Mark R: window, wheel and F, 104x114 grid, stroke 8 (from Robert's sketch). +""" +import base64 +import io +import json +import os +import sys + +import cairosvg +from fontTools.pens.svgPathPen import SVGPathPen +from fontTools.ttLib import TTFont +from PIL import Image, ImageDraw + +HERE = os.path.dirname(os.path.abspath(__file__)) +SITE = os.path.dirname(HERE) +FONT = os.path.join(HERE, "FamiljenGrotesk-SemiBold.ttf") +XMLNS = 'xmlns="http://www.w3.org/2000/svg"' + +# ---------------------------------------------------------------- geometry +M_FLAT = ( + "M6 60V28a26 26 0 0 1 52 0v32Z M20.0 60V26.5A10.5 10.5 0 0 1 30.5 16H45.0v8.6" + "H32.5a3.5 3.5 0 0 0-3.5 3.5V32h16v8.6H29.0V60Z" +) +M_MIN = ( + "M5 60V27a27 27 0 0 1 54 0v33Z M19.5 60V26A10 10 0 0 1 29.5 16H46v10H32" + "a2.5 2.5 0 0 0-2.5 2.5V32H46v10H29.5v18Z" +) +R_FRAME = "M6 108V42A36 36 0 0 1 42 6H62A36 36 0 0 1 98 42V108Z" +R_OUTER = "M2 112V42A40 40 0 0 1 42 2H62A40 40 0 0 1 102 42V112Z" +R_HOLE = "M63 65a11 11 0 1 0-22 0a11 11 0 1 0 22 0Z" +R_SPOKES = "M52 8V106 M8 65H96 M52 65L4 31.1 M52 65L4 98.9 M52 65L100 98.9" +R_ARMS = "M52 22H79M52 37H69" + +MARKS = { + "m": { + "vb": (0, 0, 64, 64), + "box": (6, 2, 52, 58), # x, y, w, h of the drawn mark inside the viewBox + "color": "#c03a28", + "ink": "#0d0d0f", + "grad": ("#d95a45", "#c03a28", "#8a2618"), + }, + "r": { + "vb": (0, 0, 104, 114), + "box": (2, 2, 100, 110), + "color": "#af6428", + "ink": "#151515", + "grad": ("#c9803f", "#af6428", "#9a561f"), + }, +} + + +def body(k, tier, color="currentColor", uid=""): + """SVG inner markup for mark k at tier display | flat | min.""" + if k == "m": + if tier == "display": + g = MARKS["m"]["grad"] + return ( + f'' + f'' + f'' + f'' + f'' + f'' + ) + path = M_MIN if tier == "min" else M_FLAT + return f'' + if tier == "min": + return ( + f'' + f'' + f'' + f'' + ) + defs = ( + f'' + ) + if tier == "display": + g = MARKS["r"]["grad"] + defs += ( + f'' + f'' + f'' + ) + color = f"url(#g{uid})" + return ( + f"{defs}" + f'' + f'' + f'' + ) + + +def svg(k, tier, color="currentColor", uid="", cls="pm", standalone=False): + x, y, w, h = MARKS[k]["vb"] + ns = f" {XMLNS}" if standalone else "" + return ( + f'" + ) + + +# ---------------------------------------------------------------- raster +def raster(svgtxt, w, h): + png = cairosvg.svg2png(bytestring=svgtxt.encode(), output_width=w, output_height=h) + return Image.open(io.BytesIO(png)).convert("RGBA") + + +def mark_png(k, tier, height, color=None): + _, _, w, h = MARKS[k]["vb"] + return raster(svg(k, tier, color or MARKS[k]["color"], standalone=True), round(height * w / h), height) + + +# ---------------------------------------------------------------- wordmark +_font = TTFont(FONT) +_upm = _font["head"].unitsPerEm +_cap = _font["OS/2"].sCapHeight or int(_upm * 0.7) +_glyphs = _font.getGlyphSet() +_cmap = _font.getBestCmap() + + +def wordmark(text, size, x0=0.0, baseline=0.0, tracking=-0.028): + """Outline text as one SVG path; returns (path_d, advance_width).""" + s = size / _upm + parts, x = [], x0 + for ch in text: + name = _cmap[ord(ch)] + pen = SVGPathPen(_glyphs) + g = _glyphs[name] + g.draw(pen) + d = pen.getCommands() + if d: + parts.append(f'') + x += g.width * s + tracking * size + return "".join(parts), x - x0 - tracking * size + + +def lockup(k, stacked=False): + """Mark + 'furtka', outlined, currentColor. Returns an inline SVG string.""" + bx, by, bw, bh = MARKS[k]["box"] + H = 58.0 # mark height in lockup units + sc = H / bh + mw = bw * sc + size = H * 0.72 * _upm / _cap # cap height = 72 % of the mark height + if stacked: + paths, tw = wordmark("furtka", size) + gap = 12 + total_w = max(mw, tw) + total_h = H + gap + size * _cap / _upm + size * 0.22 + mx = (total_w - mw) / 2 + tx = (total_w - tw) / 2 + base = H + gap + size * _cap / _upm + paths, _ = wordmark("furtka", size, x0=tx, baseline=base) + inner = ( + f'{body(k, "flat")}' + f'{paths}' + ) + return f'' + gap = H * 0.28 + paths, tw = wordmark("furtka", size, x0=mw + gap, baseline=H) + total_w = mw + gap + tw + inner = ( + f'{body(k, "flat")}' + f'{paths}' + ) + return f'' + + +def lockup_png(k, W, Hpx, stacked, mark_h): + """Rasterise the lockup on the mark's ink ground (splash / social card).""" + ink = MARKS[k]["ink"] + col = MARKS[k]["color"] + inner = lockup(k, stacked).replace("currentColor", col) + inner = inner.replace(' 110 + b = a.getpixel((x, y + 1)) > 110 + s += "█" if t and b else "▀" if t else "▄" if b else " " + lines.append(s.rstrip()) + return "\n".join(lines) + + +def b64png(im): + buf = io.BytesIO() + im.save(buf, "PNG", optimize=True) + return "data:image/png;base64," + base64.b64encode(buf.getvalue()).decode() + + +def main(): + for k in MARKS: + out = os.path.join(SITE, "static", "img", "logo", k) + os.makedirs(out, exist_ok=True) + tile(k, 192, radius=42).save(os.path.join(out, "tile.png"), optimize=True) + tile(k, 192, radius=96).save(os.path.join(out, "tile-round.png"), optimize=True) + lockup_png(k, 960, 540, True, 190).save(os.path.join(out, "splash.png"), optimize=True) + lockup_png(k, 600, 315, False, 130).save(os.path.join(out, "social.png"), optimize=True) + data = { + "display": svg(k, "display", uid=f"{k}d"), + "flat": svg(k, "flat"), + "min": svg(k, "min"), + "lockup_h": lockup(k), + "lockup_s": lockup(k, stacked=True), + "tab16": b64png(mark_png(k, "min", 16)), + "full16": b64png(mark_png(k, "flat", 16)), + "banner": banner(k), + "color": MARKS[k]["color"], + "ink": MARKS[k]["ink"], + } + with open(os.path.join(SITE, "data", "logo", f"{k}.json"), "w") as f: + json.dump(data, f, indent=1, ensure_ascii=False) + print(k, "ok") + + +if __name__ == "__main__": + sys.exit(main())