Skip to content

feat(peers): deterministic constellation identicons across peer surfaces#108

Merged
epicexcelsior merged 3 commits into
anonmesh:stagingfrom
epicexcelsior:night3/identicons
Jun 13, 2026
Merged

feat(peers): deterministic constellation identicons across peer surfaces#108
epicexcelsior merged 3 commits into
anonmesh:stagingfrom
epicexcelsior:night3/identicons

Conversation

@epicexcelsior

Copy link
Copy Markdown
Collaborator

What

Every peer surface gets a recognizable identity mark: deterministic constellation identicons derived from the destination hash replace initials across peer rows, member sheets, thread headers, the nearby card, and the mesh map.

  • Groups keep their #, contacts keep the wallet glyph; anonymous peers get a constellation from destHash.
  • Identity never rests on the glyph alone — the short hash text still renders alongside, so a visual collision is cosmetic only.

Scope

New PeerIdenticon primitive + migration across ThreadHeader, MeshMap, peer rows, member sheets, nearby card.

Test

tsc clean · tier0 config/services clean · fake-money + lint clean. Reviewed: chord-loop indices always valid, seed always a string, no conditional hooks, deterministic; hash-prefix text preserved so identity never rests on the glyph.

…om dest hash

Peers are pseudonymous; raw hash-prefix initials read as noise. Each peer
now gets a deterministic geometric sigil: a core node orbited by 3-5
satellites joined by spokes/chords (a tiny mesh topology), with an accent
hue from an 8-hue neon-on-navy palette. Node count, rotation, orbit bands,
link pattern and hue all derive from FNV-1a/mulberry32 over the hash —
same hash always renders the same mark, no randomness at render time.

Pure spec function with a module-level cache + React.memo keeps 100+ row
lists cheap (~9 SVG elements per mark). Optional online dot and container
border overrides match how PeerAvatar call sites behave today.
…ows, member sheet, thread header, nearby card

Seed = destHash (handle fallback) so the same peer shows the same mark on
every surface. Beacons keep the radio glyph (infrastructure, not people);
groups keep GroupAvatar. ThreadHeader takes destHash so the thread mark
matches the drawer row even for Anonymous peers.
…te initials

Same destHash seed as drawer/thread, so tapping a map node and opening the
conversation shows one continuous identity. Online keeps its existing read
(opacity + iface border) — no status dot at 24px. Drops AVATAR_PALETTE +
nodeAvatar dead code.
@epicexcelsior epicexcelsior merged commit f611bad into anonmesh:staging Jun 13, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant