toriiMask
untyped stringtoriiMask is the Samouraï Coop mark, redrawn as vectors: a torii gate cut out of a full circle, in a 480x480 box. Everything painted through the mask takes the shape of the mark.
Value
"<mask id=\"torii\"><circle cx=\"238\" cy=\"240\" r=\"240\" fill=\"#fff\"/><g fill=\"#000\"><path d=\"M-10 90 Q238 164 490 90 L490 140 Q238 190 -10 140 Z\"/><path d=\"M102 140 L165 140 L162 206 L96 206 Z\"/><path d=\"M302 140 L364 140 L370 206 L304 206 Z\"/><rect x=\"-10\" y=\""...
heroText
typeValue
home.heroText
heroSVG
func(h home.heroText) stringheroSVG draws the page banner: the mark set in a cyan sun on the right, the text stack on the left.
- OID
- 0c332a…10c8:3
heroSVG details
heroImage
func() string- OID
- 0c332a…10c8:5
heroImage details
activitySlot
untyped stringValue
"activity"
reviewActivitySlot
untyped stringValue
"reviewactivity"
chartWidth
untyped bigintValue
(720 <untyped> bigint)
chartX
untyped bigintValue
(24 <untyped> bigint)
maxBar
untyped bigintValue
(90 <untyped> bigint)
scaledFill
untyped stringValue
"#fbbf24"
othersFill
untyped stringValue
"#94a3b8"
monthNames
[]string- OID
- 0c332a…10c8:7
monthNames details
repoFills
map[string]string- OID
- 0c332a…10c8:9
repoFills details
spareFills
[]string- OID
- 0c332a…10c8:11
spareFills details
month
typeValue
home.month
activity
typeValue
home.activity
parseActivity
func(spec string) home.activityparseActivity reads a chart section; a malformed line is skipped.
- OID
- 0c332a…10c8:12
parseActivity details
parseMonth
func(line string, width int, first bool) (home.month, bool)- OID
- 0c332a…10c8:14
parseMonth details
formatDay
func(s string) stringformatDay turns 2026-09-24 into "24 Sep 2026", or "" when it is not a date.
- OID
- 0c332a…10c8:15
formatDay details
renderChart
func(slot string) stringrenderChart draws a chart section as a markdown image, or "" when it holds no month.
- OID
- 0c332a…10c8:16
renderChart details
rect
func(b *strings.Builder, x int, y int, w int, h int, r int, fill string)- OID
- 0c332a…10c8:17
rect details
text
func(b *strings.Builder, x int, y int, class string, fill string, s string)text writes s as SVG text; callers pass repository names and numbers, so it escapes the three characters that could break the markup.
- OID
- 0c332a…10c8:18
text details
areasSlot
untyped stringValue
"areas"
areaFills
[]string- OID
- 0c332a…10c8:20
areaFills details
slice
typeValue
home.slice
parseAreas
func(spec string) (noun string, subtitle string, updated string, slices []home.slice)- OID
- 0c332a…10c8:21
parseAreas details
renderAreas
func() stringrenderAreas draws the "areas" section as a ring, or "" when it holds no slice.
- OID
- 0c332a…10c8:22
renderAreas details
hero
home.heroTexthero holds the banner text a "herotext" section leaves out.
- OID
- 0c332a…10c8:24
hero details
defaultSlots
[]struct{...}defaultSlots seeds the page at deploy time. Later edits go through Set.
- OID
- 0c332a…10c8:26
defaultSlots details
wallCols
untyped bigintValue
(24 <untyped> bigint)
wallMaxRows
untyped bigintValue
(10 <untyped> bigint)
wallCell
untyped bigintValue
(28 <untyped> bigint)
heartRed
untyped stringValue
"#e63946"
heartPath
untyped stringValue
"M12 21C12 21 3 15.5 3 9.5 3 6.5 5.4 4 8.3 4 10 4 11.2 5 12 6.2 12.8 5 14 4 15.7 4 18.6 4 21 6.5 21 9.5 21 15.5 12 21 12 21Z"
renderHeartsWall
func() stringrenderHeartsWall returns the wall as a markdown image; with no heart yet it is one row of empty slots.
- OID
- 0c332a…10c8:38
renderHeartsWall details
admin
.uverse.addressadmin is the only address allowed to edit sections.
Value
<gnolang.StringValue>
home
untyped stringValue
"/r/g1rayfgklwl0aspz488wvrcrvt7t2quy6q06lgk2/home"
orderSlot
untyped stringValue
"order"
maxNameLen
untyped bigintValue
(32 <untyped> bigint)
maxPathLen
untyped bigintValue
(256 <untyped> bigint)
slots
*v0.Tree// section name -> markdown body
- OID
- 0c332a…10c8:41
slots details
hearts
*v0.Tree// address -> block height of the heart
- OID
- 0c332a…10c8:44
hearts details
init.42
func()- OID
- 0c332a…10c8:46
init.42 details
Set
func(name string, body string)Set writes one section of the page. Only the admin can call it. name is the section to write and body is its markdown. The text sections are "header", the bio at the top, then "gno", "projects", "peerdev" and "unrelated"; any other name creates a new section. name "order" decides which sections show and in which order. Its body lists every section name, comma separated, with no spaces. A name left out of the list is hidden, so copy the current list, from Get("order"), and edit it. name "herotext" is the banner's text: "key value" pairs split by ";", with the keys kicker, the small line on top, title, subtitle, tagline, footline, the small line at the bottom, and alt, the banner's description for screen readers. A key left out keeps its current default. "hero", "banner", "reviews", "areachart", "game" and "hearts" are drawn by the page itself: they cannot be set, only placed through "order". Examples, as the two fields of the form: name: header body: I'm a developer engineer at [Samouraï Coop](https://www.samourai.world/). name: herotext body: title David G.; subtitle Developer engineer at Samouraï Coop; footline Open for contribution name: talks body: ## Talks name: order body: hero,header,activityhead,banner,reviews,gno,areachart,projects,peerdev,unrelated,talks,game,hearts
- OID
- 0c332a…10c8:48
Set details
SetActivity
func(activity string, reviews string, areas string)SetActivity refreshes the three charts in one transaction. Only the admin can call it. Its three arguments are the bodies of the "activity", "reviewactivity" and "areas" sections, as scripts/activity.py prints them; an empty argument leaves that chart as it is.
- OID
- 0c332a…10c8:49
SetActivity details
Delete
func(name string)Delete removes one section. Only the admin can call it. name is the section to remove, "talks" for example. Its name can stay in "order": a name with no section shows nothing.
- OID
- 0c332a…10c8:50
Delete details
Get
func(name string) stringGet returns a section's markdown, or "" when it does not exist. Get("order") returns the current section list, the one to edit before setting "order".
- OID
- 0c332a…10c8:51
Get details
Heart
func()Heart records one heart from the caller. Each address can send exactly one.
- OID
- 0c332a…10c8:52
Heart details
Hearts
func() intHearts returns how many distinct addresses sent a heart.
- OID
- 0c332a…10c8:53
Hearts details
HasHeart
func(addr .uverse.address) boolHasHeart reports whether addr already sent a heart.
- OID
- 0c332a…10c8:54
HasHeart details
assertAdmin
func()- OID
- 0c332a…10c8:55
assertAdmin details
Render
func(path string) stringRender serves: "" the profile page "wordle/..." the Gnordle game "hearts[/<n>]" the addresses that sent a heart, heartsPerPage per page
- OID
- 0c332a…10c8:56
Render details
renderPage
func() string- OID
- 0c332a…10c8:57
renderPage details
renderHeartsTeaser
func() string- OID
- 0c332a…10c8:58
renderHeartsTeaser details
drawnSections
map[string]booldrawnSections are rendered from code and state, so Set refuses their names.
- OID
- 0c332a…10c8:60
drawnSections details
heroSlot
untyped stringheroSlot holds the banner's text, one "key value" pair per field, split by ";": kicker, title, subtitle, tagline, footline and alt, the image's description. A field the section leaves out keeps its value from hero.
Value
"herotext"
currentHero
func() home.heroText- OID
- 0c332a…10c8:61
currentHero details
mdText
func(s string) stringmdText keeps s from closing a markdown link or image label.
- OID
- 0c332a…10c8:62
mdText details
xmlText
func(s string) stringxmlText escapes s for SVG text and attributes.
- OID
- 0c332a…10c8:63
xmlText details
heartsPerPage
untyped bigintheartsPerPage keeps one page of the list far under the query gas limit, which a list of every heart would pass at about 15,000 of them.
Value
(100 <untyped> bigint)
renderHearts
func(page string) string- OID
- 0c332a…10c8:64
renderHearts details
wordLen
untyped bigintValue
(5 <untyped> bigint)
maxGuesses
untyped bigintValue
(6 <untyped> bigint)
launchDay
untyped bigint// 2026-09-23, in days since 1970-01-01 UTC: puzzle #1
Value
(20719 <untyped> bigint)
stride
untyped bigint// coprime with len(words), so every word comes up once per cycle
Value
(17 <untyped> bigint)
words
[]stringwords are the answers, gno and blockchain flavoured.
- OID
- 0c332a…10c8:66
words details
today
func() inttoday returns the number of the current puzzle, from the last block's time.
- OID
- 0c332a…10c8:67
today details
answer
func(n int) stringanswer returns the word of puzzle n.
- OID
- 0c332a…10c8:69
answer details
score
func(guess string, ans string) stringscore colours a guess against the answer, handling repeated letters the way the original game does: a letter is marked present only as many times as it is still unmatched in the answer.
- OID
- 0c332a…10c8:70
score details
validGuess
func(g string) bool- OID
- 0c332a…10c8:71
validGuess details
renderWordle
func(path string) string- OID
- 0c332a…10c8:72
renderWordle details
solved
func(guesses []string, ans string) bool- OID
- 0c332a…10c8:73
solved details
missing
func(guesses []string, ans string) stringmissing lists the guessed letters that are not in the answer, in guess order.
- OID
- 0c332a…10c8:74
missing details
wordleError
func(msg string) string- OID
- 0c332a…10c8:75
wordleError details
renderGameTeaser
func() string- OID
- 0c332a…10c8:76