iuna

iuna

iuna - experimental mainnet-candidate protocol
git clone https://getiuna.org/git/iuna.git
Log | Files | Refs | README | LICENSE

commit f2241bfd4f9325b5075e507767b57c7771833bc9
parent 660ff34e87842a89b6cef22ef347da102ae5da82
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Thu,  3 Sep 2026 11:00:22 +0200

Add unified branding and site SEO

Diffstat:
M.dockerignore | 3+++
MDockerfile | 3+++
Mscripts/postprocess_stagit_site.py | 2+-
Msrc-tauri/icons/128x128.png | 0
Msrc-tauri/icons/128x128@2x.png | 0
Msrc-tauri/icons/32x32.png | 0
Msrc-tauri/icons/icon.icns | 0
Msrc-tauri/icons/icon.ico | 0
Msrc-tauri/icons/icon.png | 0
Msrc-tauri/icons/icon.svg | 6+++---
Msrc/adapters/http/index_html.rs | 2+-
Msrc/adapters/http/static_assets.rs | 9++++++---
Mwww/assets/static-listing.css | 23+++--------------------
Mwww/downloads.html | 33++++++++++++++++++++++++++-------
Mwww/index.html | 62+++++++++++++++++++++++++++++++++++++++++---------------------
Awww/robots.txt | 4++++
Awww/site.webmanifest | 17+++++++++++++++++
Awww/sitemap.xml | 9+++++++++
18 files changed, 117 insertions(+), 56 deletions(-)

diff --git a/.dockerignore b/.dockerignore @@ -20,4 +20,7 @@ !scripts/inject_cloudflare_analytics.py !scripts/postprocess_stagit_site.py !src-tauri/icons/32x32.png +!src-tauri/icons/128x128@2x.png +!src-tauri/icons/icon.ico +!src-tauri/icons/icon.svg !nginx.conf diff --git a/Dockerfile b/Dockerfile @@ -62,6 +62,9 @@ RUN set -eux; \ COPY www /site COPY downloads /site/downloads RUN set -eux; \ + cp /src/iuna-work/src-tauri/icons/icon.svg /site/favicon.svg; \ + cp /src/iuna-work/src-tauri/icons/icon.ico /site/favicon.ico; \ + cp /src/iuna-work/src-tauri/icons/128x128@2x.png /site/apple-touch-icon.png; \ version="$(sed -n 's/^version = "\(.*\)"/\1/p' /src/iuna-work/Cargo.toml | head -n 1)"; \ mkdir -p /site/downloads; \ cp /site/downloads.html /site/downloads/index.html; \ diff --git a/scripts/postprocess_stagit_site.py b/scripts/postprocess_stagit_site.py @@ -7,7 +7,7 @@ from pathlib import Path TOPBAR = """ <div class="topbar"> <div class="wrap"> - <a class="brand repo-link" href="/"><span class="mark" aria-label="iuna"><svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"><circle class="mark-dot" cx="9.4" cy="7.6" r="2.8"></circle><path class="mark-loop" d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13"></path></svg></span><span>iuna</span></a> + <a class="brand repo-link" href="/"><span class="mark" aria-hidden="true"><svg viewBox="0 0 32 32" focusable="false"><circle cx="9.4" cy="7.6" r="2.8" fill="currentColor"></circle><path d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13" fill="none" stroke="currentColor" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span>iuna</span></a> <nav aria-label="Page sections"> <a href="/#whatisiuna">What is iuna</a> <a href="/#howtojoin">Join</a> diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png Binary files differ. diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png Binary files differ. diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png Binary files differ. diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns Binary files differ. diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico Binary files differ. diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png Binary files differ. diff --git a/src-tauri/icons/icon.svg b/src-tauri/icons/icon.svg @@ -1,5 +1,5 @@ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> - <rect x="64" y="64" width="896" height="896" rx="224" fill="#d5f55f"/> - <path fill="#101315" d="M301 349c-37 0-67 30-67 67v227c0 156 122 272 278 272s278-116 278-272V416c0-37-30-67-67-67s-67 30-67 67v227c0 81-63 138-144 138s-144-57-144-138V416c0-37-30-67-67-67Z"/> - <circle cx="301" cy="243" r="90" fill="#101315"/> + <rect x="64" y="64" width="896" height="896" rx="224" fill="#101315"/> + <path fill="#d5f55f" d="M301 349c-37 0-67 30-67 67v227c0 156 122 272 278 272s278-116 278-272V416c0-37-30-67-67-67s-67 30-67 67v227c0 81-63 138-144 138s-144-57-144-138V416c0-37-30-67-67-67Z"/> + <circle cx="301" cy="243" r="90" fill="#d5f55f"/> </svg> diff --git a/src/adapters/http/index_html.rs b/src/adapters/http/index_html.rs @@ -4,7 +4,7 @@ pub(super) const INDEX_HTML: &str = concat!( <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="icon" href="data:,"> + <link rel="icon" href="/favicon.ico" sizes="any"> <title>iuna</title> <style> [x-cloak] { display: none !important; } diff --git a/src/adapters/http/static_assets.rs b/src/adapters/http/static_assets.rs @@ -1,5 +1,5 @@ use axum::{ - http::{StatusCode, header}, + http::header, response::{Html, IntoResponse}, }; @@ -11,8 +11,11 @@ pub(super) async fn index() -> Html<&'static str> { pub(super) async fn favicon() -> impl IntoResponse { ( - StatusCode::NO_CONTENT, - [(header::CACHE_CONTROL, "public, max-age=86400")], + [ + (header::CONTENT_TYPE, "image/x-icon"), + (header::CACHE_CONTROL, "public, max-age=86400"), + ], + include_bytes!("../../../src-tauri/icons/icon.ico").as_slice(), ) } diff --git a/www/assets/static-listing.css b/www/assets/static-listing.css @@ -89,36 +89,19 @@ body > :not(.topbar):not(script) { .brand:hover { color: var(--green); } .mark { - position: relative; width: 32px; height: 32px; display: grid; place-items: center; - overflow: hidden; - border: 1px solid #e8ff8d; - border-radius: 8px; - background: linear-gradient(145deg, #ecff8a 0%, var(--green) 54%, var(--cyan) 100%); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .38), 0 9px 20px rgba(213, 245, 95, .14); + color: var(--green); } .mark svg { - position: relative; - z-index: 1; - width: 21px; - height: 21px; + width: 24px; + height: 24px; display: block; } -.mark .mark-loop { - fill: none; - stroke: #101315; - stroke-width: 4.2; - stroke-linecap: round; - stroke-linejoin: round; -} - -.mark .mark-dot { fill: #101315; } - nav { display: flex; gap: 16px; diff --git a/www/downloads.html b/www/downloads.html @@ -4,19 +4,38 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="color-scheme" content="dark"> - <title>iuna Downloads</title> + <meta name="theme-color" content="#0d0f10"> + <meta name="description" content="Download the latest iuna node and desktop app releases for Linux, macOS, and Windows, with SHA-256 checksums."> + <meta name="robots" content="index, follow, max-image-preview:large"> + <link rel="canonical" href="https://getiuna.org/downloads/"> + <link rel="icon" href="/favicon.svg" type="image/svg+xml"> + <link rel="icon" href="/favicon.ico" sizes="any"> + <link rel="apple-touch-icon" href="/apple-touch-icon.png"> + <link rel="manifest" href="/site.webmanifest"> + <meta property="og:title" content="Download iuna"> + <meta property="og:description" content="Get the latest iuna node and desktop app releases for Linux, macOS, and Windows."> + <meta property="og:type" content="website"> + <meta property="og:url" content="https://getiuna.org/downloads/"> + <meta property="og:site_name" content="iuna"> + <meta property="og:locale" content="en_US"> + <meta property="og:image" content="https://getiuna.org/assets/og.png"> + <meta property="og:image:width" content="1200"> + <meta property="og:image:height" content="630"> + <meta property="og:image:type" content="image/png"> + <meta property="og:image:alt" content="iuna — Help test a different kind of network"> + <meta name="twitter:card" content="summary_large_image"> + <meta name="twitter:title" content="Download iuna"> + <meta name="twitter:description" content="Get the latest iuna node and desktop app releases for Linux, macOS, and Windows."> + <meta name="twitter:image" content="https://getiuna.org/assets/og.png"> + <meta name="twitter:image:alt" content="iuna — Help test a different kind of network"> + <title>Download iuna for Linux, macOS, and Windows</title> <link rel="stylesheet" href="/assets/static-listing.css"> </head> <body> <div class="topbar"> <div class="wrap"> <a class="brand repo-link" href="/"> - <span class="mark" aria-label="iuna"> - <svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"> - <circle class="mark-dot" cx="9.4" cy="7.6" r="2.8"></circle> - <path class="mark-loop" d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13"></path> - </svg> - </span> + <span class="mark" aria-hidden="true"><svg viewBox="0 0 32 32" focusable="false"><circle cx="9.4" cy="7.6" r="2.8" fill="currentColor"></circle><path d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13" fill="none" stroke="currentColor" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"></path></svg></span> <span>iuna</span> </a> <nav aria-label="Page sections"> diff --git a/www/index.html b/www/index.html @@ -4,12 +4,24 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="color-scheme" content="dark"> + <meta name="theme-color" content="#0d0f10"> <meta name="description" content="Help test iuna, an open cryptocurrency experiment exploring temporary consensus power, open issuance, and a network shaped by its participants."> + <meta name="robots" content="index, follow, max-image-preview:large"> + <link rel="canonical" href="https://getiuna.org/"> + <link rel="icon" href="/favicon.svg" type="image/svg+xml"> + <link rel="icon" href="/favicon.ico" sizes="any"> + <link rel="apple-touch-icon" href="/apple-touch-icon.png"> + <link rel="manifest" href="/site.webmanifest"> <meta property="og:title" content="A cryptocurrency where power is temporary."> <meta property="og:description" content="iuna is an open cryptocurrency experiment. Try the app, run a node, test the network, or explore the protocol."> <meta property="og:type" content="website"> <meta property="og:url" content="https://getiuna.org/"> + <meta property="og:site_name" content="iuna"> + <meta property="og:locale" content="en_US"> <meta property="og:image" content="https://getiuna.org/assets/og.png"> + <meta property="og:image:width" content="1200"> + <meta property="og:image:height" content="630"> + <meta property="og:image:type" content="image/png"> <meta property="og:image:alt" content="iuna — Help test a different kind of network"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="A cryptocurrency where power is temporary."> @@ -17,6 +29,32 @@ <meta name="twitter:image" content="https://getiuna.org/assets/og.png"> <meta name="twitter:image:alt" content="iuna — Help test a different kind of network"> <title>iuna — A Cryptocurrency Where Power Is Temporary</title> + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@graph": [ + { + "@type": "WebSite", + "@id": "https://getiuna.org/#website", + "url": "https://getiuna.org/", + "name": "iuna", + "description": "An open cryptocurrency experiment exploring temporary consensus power and open issuance.", + "inLanguage": "en" + }, + { + "@type": "SoftwareApplication", + "@id": "https://getiuna.org/#software", + "name": "iuna", + "url": "https://getiuna.org/", + "downloadUrl": "https://getiuna.org/downloads/", + "applicationCategory": "FinanceApplication", + "operatingSystem": "Linux, macOS, Windows", + "isAccessibleForFree": true, + "description": "An experimental cryptocurrency node and wallet for participating in the iuna network." + } + ] + } + </script> <style> :root { color-scheme: dark; @@ -117,31 +155,13 @@ } .brand { display: flex; gap: 10px; align-items: center; font-weight: 900; } .mark { - position: relative; width: 32px; height: 32px; display: grid; place-items: center; - overflow: hidden; - border: 1px solid #e8ff8d; - border-radius: 8px; - background: linear-gradient(145deg, #ecff8a 0%, var(--green) 54%, var(--cyan) 100%); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .38), 0 9px 20px rgba(213, 245, 95, .14); - } - .mark::after { - content: ""; - position: absolute; - inset: -40% -70%; - background: linear-gradient(100deg, transparent 42%, rgba(255, 255, 255, .34) 50%, transparent 58%); - transform: translateX(-58%) rotate(8deg); - opacity: 0; - pointer-events: none; + color: var(--green); } - .mark svg { position: relative; z-index: 1; width: 21px; height: 21px; display: block; } - .mark .mark-loop { fill: none; stroke: #101315; stroke-width: 4.2; stroke-linecap: round; stroke-linejoin: round; } - .mark .mark-dot { fill: #101315; } - .brand:hover .mark::after { animation: mark-sheen .72s ease both; } - @keyframes mark-sheen { from { opacity: 0; transform: translateX(-58%) rotate(8deg); } 32% { opacity: 1; } to { opacity: 0; transform: translateX(58%) rotate(8deg); } } + .mark svg { width: 24px; height: 24px; display: block; } nav { display: flex; gap: 16px; flex-wrap: wrap; color: var(--muted); font-size: 13px; font-weight: 750; } nav a { color: var(--muted); text-decoration: none; } nav a:hover { color: var(--green); } @@ -743,7 +763,7 @@ </svg> <div class="topbar"> <div class="wrap"> - <a class="brand repo-link" href="/"><span class="mark" aria-label="iuna"><svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"><circle class="mark-dot" cx="9.4" cy="7.6" r="2.8"></circle><path class="mark-loop" d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13"></path></svg></span><span>iuna</span></a> + <a class="brand repo-link" href="/"><span class="mark" aria-hidden="true"><svg viewBox="0 0 32 32" focusable="false"><circle cx="9.4" cy="7.6" r="2.8" fill="currentColor"></circle><path d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13" fill="none" stroke="currentColor" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span>iuna</span></a> <nav aria-label="Page sections"> <a href="#why">Why iuna</a> <a href="#join">Take part</a> diff --git a/www/robots.txt b/www/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://getiuna.org/sitemap.xml diff --git a/www/site.webmanifest b/www/site.webmanifest @@ -0,0 +1,17 @@ +{ + "name": "iuna", + "short_name": "iuna", + "description": "An open cryptocurrency experiment.", + "start_url": "/", + "display": "standalone", + "background_color": "#0d0f10", + "theme_color": "#0d0f10", + "icons": [ + { + "src": "/favicon.svg", + "sizes": "any", + "type": "image/svg+xml", + "purpose": "any maskable" + } + ] +} diff --git a/www/sitemap.xml b/www/sitemap.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + <url> + <loc>https://getiuna.org/</loc> + </url> + <url> + <loc>https://getiuna.org/downloads/</loc> + </url> +</urlset>