Group collaboration
A group is not a row in a table. It is a cloned DNA cell with its own DHT, which makes every membership operation eventually consistent — and that is a UI problem, not just a backend one.
Create
A clone cell is provisioned with a fresh network seed, a GroupProfile is committed to it, and the group is announced on the Lobby DNA.
Invite
The invite link is a base64 payload of seed, DNA hash and name. The button that copies it is invisible until you hover the group row.
Disclose
On first entry each member chooses what their Lobby profile shows to this group. The choice is per group and stays in localStorage.
Work
Members appear in the list only once their membership entry has gossiped to you.
Why the group view polls itself
Joining commits a membership entry best-effort. If that commit lands late, or gossip has not
reached a peer, the joining agent is missing from someone else's member list — and the list is
not wrong, it is early. So GroupView.svelte refreshes on
window focus, on visibility change, and on an eight-second interval.
Nothing in the interface says any of this. A member who does not see a colleague has no way to tell "not joined" from "not yet arrived", and no affordance to check.
Members
- Ada Riverstone
- Tomas Belén
- Kesse Nyarko
- Mira Solano
Open questions
- No freshness indicator. A silent eight-second poll and a stale list look identical.
- The member list shows a name and an optional role; there is no way to see who is the initiator.
- The disclosure modal opens once per group and is dismissible with Skip, after which there is no obvious route back to it.