{
"id": "tech.devrelish.event.meta",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"event",
"group",
"createdAt"
],
"properties": {
"event": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the community.lexicon.calendar.event record this metadata extends."
},
"group": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong reference to the tech.devrelish.group record this event belongs to."
},
"capacity": {
"type": "integer",
"minimum": 1,
"description": "Maximum number of attendees. Omit for unlimited."
},
"sessions": {
"type": "array",
"items": {
"ref": "#session",
"type": "ref"
},
"maxLength": 50,
"description": "Agenda sessions for the event."
},
"speakers": {
"type": "array",
"items": {
"ref": "#speaker",
"type": "ref"
},
"maxLength": 50,
"description": "Speakers presenting at the event."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this metadata was created."
},
"eventContext": {
"type": "string",
"maxLength": 200,
"description": "Conference or event the meetup is co-located with (e.g. 'KubeCon EU 2026')."
}
}
},
"description": "Extended metadata for a community.lexicon.calendar.event record, adding group affiliation, capacity, speakers, and sessions."
},
"session": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200
},
"abstract": {
"type": "string",
"maxLength": 5000
},
"startTime": {
"type": "string",
"description": "Local start time in HH:MM 24-hour format."
},
"speakerIndices": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0
},
"description": "Indices into the speakers array for this session's speakers."
}
},
"description": "An agenda session at the event."
},
"speaker": {
"type": "object",
"required": [
"name"
],
"properties": {
"bio": {
"type": "string",
"maxLength": 2000
},
"did": {
"type": "string",
"format": "did",
"description": "The DID the speaker's handle resolved to, when known."
},
"name": {
"type": "string",
"maxLength": 120
},
"handle": {
"type": "string",
"description": "Speaker's AT Protocol handle, without the @. Any provider, not just Bluesky."
},
"company": {
"type": "string",
"maxLength": 120
},
"imageUrl": {
"type": "string",
"format": "uri",
"description": "URL to the speaker's photo."
},
"jobTitle": {
"type": "string",
"maxLength": 120
}
},
"description": "A speaker at the event."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}