{
"id": "page.cavu.group",
"defs": {
"main": {
"key": "literal:self",
"type": "record",
"record": {
"type": "object",
"required": [
"publication",
"name",
"createdAt"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"description": "What the group calls itself.",
"maxGraphemes": 150
},
"endsAt": {
"type": "string",
"format": "datetime",
"description": "When the group intends to finish. Advisory: nothing enforces it, and a group that runs past it keeps working."
},
"startsAt": {
"type": "string",
"format": "datetime",
"description": "When the group intends to begin reading, when it has agreed on one."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"description": {
"type": "string",
"maxLength": 3000,
"maxGraphemes": 1500
},
"publication": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of the book's site.standard.publication record. The book itself stays public — only the group's reading of it is private — so this resolves for anyone."
}
}
},
"description": "What a group read is reading. Written by the host into their own repo inside a page.cavu.groupread space, under the fixed skey 'self' — one per space, so the space ref alone identifies the group and there is no second record to keep in sync. Deliberately thin: the roster lives with whoever administers membership (the PDS's member list, or the managing app), and every member's own activity lives in that member's repo in the same space. This record carries only what the whole group shares — which book, what it's called, and when it runs."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}