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/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

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

Draw a vole portrait for every name

753cd703960a1f024b3e5819ae6330bb2ab1cd08 · Keenan Nemetz · 7d ago · parent a6b42433

Draw a vole portrait for every name

The wordmark is a vole's face, so a name gets one too: the profile, the
directory, comment cards, inline review notes, approvals and the
contributor list all render a small vole drawn from the account name.

The portrait is derived with SHA-256 rather than stored. The same name
draws the same ears, eyes, whiskers, fur shade and ground colour on every
page and between visits, and the instance keeps no image, accepts no
upload, and calls no avatar service. The seven grounds are the
Everforest accents pulled toward the page, the head and features use the
palette's cream and dark ground, and the picture is inline SVG: the CSP,
the single binary, and an instance with no outbound requests are all
unchanged.

The name never reaches the markup. The builder takes only integer
traits, which is what makes it safe to hand the template as HTML, and a
test holds that a hostile name cannot appear in the output.

Two shapes were tried and dropped. Separating the ears with a
ground-coloured gap, the way the wordmark does, collapses into noise
below 24px, so the ears and head are one silhouette. Cheek patches and
brow strokes read as smudges at the same size, so a blaze down the
forehead is the only marking left; the rest of the variation is colour.

server/web/templates/components.html +1−1

@@ -78,7 +78,7 @@
78 78 {{else}}
79 79 <header class="comment-head">
80 80 {{$u := user .Author}}
81 {{template "useravatar" $u}}
81 {{template "avatar" (useravatar $u)}}
82 82 <span class="comment-author">{{template "userlink" $u}}</span>
83 83 {{if .ReplyTo}}<span class="reply-context">replying to {{if .ReplyToDeleted}}<a href="#c-{{.ReplyTo}}">a deleted comment</a>{{else}}<a href="#c-{{.ReplyTo}}">{{who .ReplyToName}}</a>{{end}}</span>{{end}}
84 84 <span class="muted">{{since .Created.Unix}}</span>