Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Use the rodent emblem as the logo and the favicon

6416cab19d8c205d4ed643399f9a78596f5a31ca · Keenan Nemetz · 13d ago · parent 13cff33f

Use the rodent emblem as the logo and the favicon

The header carried a letter in an accent chip and the favicon was a separate "v"
glyph, so the forge had two marks that could drift apart. They are now one piece of
artwork, served from the binary like every other static asset: a dark rounded tile
with a white rodent face, named by the shell as both the icons and the header mark.

The source drawing is a tile on a white page. Only the page is removed — a fuzz
flood fill from the corner, which leaves the face opaque because the tile encloses
it — so the mark has transparent corners and reads on either theme without a second
set of assets. Sizes are 128 for the header (22 CSS px, so it survives a high-DPI
screen), 32 and 16 for the tab, each square and centred because a favicon that is
31 pixels tall is a favicon some browser will letterbox.

favicon.svg is removed; nothing else referenced it. A test now asserts that the
three files are served as PNG and that the shell names them, so the next rename
cannot leave every page pointing at a missing icon.

server/web/templates/chrome.html +3−2

@@ -10,7 +10,8 @@
10 10 <meta name="csrf" content="{{.CSRF}}">
11 11 <meta name="color-scheme" content="dark light">
12 12 <title>{{.Title}} · Vole</title>
13 <link rel="icon" href="/static/favicon.svg" type="image/svg+xml">
13 <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32.png">
14 <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16.png">
14 15 <link rel="stylesheet" href="/static/vole.css">
15 16 <script src="/static/htmx.min.js" defer></script>
16 17 <script src="/static/auth.js" defer></script>
@@ -18,7 +19,7 @@
18 19 </head>
19 20 <body>
20 21 <header class="topbar">
21 <a class="brand" href="/" aria-label="Vole home"><span class="mark" aria-hidden="true">v</span>vole</a>
22 <a class="brand" href="/" aria-label="Vole home"><img class="mark" src="/static/logo.png" alt="" width="22" height="22" aria-hidden="true">vole</a>
22 23 <nav class="topnav" aria-label="Global">
23 24 <a class="{{if eq .Section "activity"}}active{{end}}" href="/activity"{{if eq .Section "activity"}} aria-current="page"{{end}}>{{icon "activity"}}Activity</a>
24 25 {{if .InstanceAdmin}}<a class="{{if eq .Section "users"}}active{{end}}" href="/users"{{if eq .Section "users"}} aria-current="page"{{end}}>{{icon "users"}}Accounts</a>{{end}}