{
"id": "org.latha.gathering",
"defs": {
"uri": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"description": "The URI."
},
"name": {
"type": "string",
"maxLength": 500,
"description": "Label for the URI.",
"maxGraphemes": 50
}
},
"description": "A named link."
},
"host": {
"type": "token",
"description": "Host of the gathering."
},
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"name",
"createdAt"
],
"properties": {
"host": {
"ref": "org.latha.gathering#actorRef",
"type": "ref",
"description": "The primary host or organizing identity."
},
"mode": {
"ref": "org.latha.gathering#mode",
"type": "ref",
"description": "The attendance mode of the gathering."
},
"name": {
"type": "string",
"maxLength": 2000,
"description": "Name of the gathering.",
"maxGraphemes": 200
},
"uris": {
"type": "array",
"items": {
"ref": "org.latha.gathering#uri",
"type": "ref"
},
"description": "Platform links (OpenMeet, Meetup.com, etc.)."
},
"endsAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when the gathering ends."
},
"format": {
"type": "string",
"maxLength": 1000,
"description": "Gathering format (e.g., unconference, workshop, hackathon, panel).",
"maxGraphemes": 100
},
"status": {
"ref": "org.latha.gathering#status",
"type": "ref",
"description": "The status of the gathering."
},
"sections": {
"type": "array",
"items": {
"refs": [
"org.latha.gathering#thematicCluster"
],
"type": "union",
"closed": false
},
"description": "Modular sections for grouping and analyzing the gathering. Each entry must specify a $type. Built-in: thematicCluster. Other lexicons may add more."
},
"startsAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when the gathering starts."
},
"attendees": {
"type": "array",
"items": {
"ref": "org.latha.gathering#attendee",
"type": "ref"
},
"description": "People who attended the gathering, with roles and metadata."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this record was created."
},
"locations": {
"type": "array",
"items": {
"ref": "org.latha.gathering#location",
"type": "ref"
},
"description": "Where the gathering takes place."
},
"description": {
"type": "string",
"maxLength": 20000,
"description": "Brief description of the gathering.",
"maxGraphemes": 2000
}
}
},
"description": "A community gathering or meetup with structured attendee data and extensible thematic sections."
},
"mode": {
"type": "string",
"description": "Attendance mode of the gathering.",
"knownValues": [
"org.latha.gathering#inperson",
"org.latha.gathering#hybrid",
"org.latha.gathering#virtual"
]
},
"role": {
"type": "string",
"description": "Role of an attendee in the gathering.",
"knownValues": [
"org.latha.gathering#host",
"org.latha.gathering#organizer",
"org.latha.gathering#participant",
"org.latha.gathering#speaker",
"org.latha.gathering#volunteer"
]
},
"hybrid": {
"type": "token",
"description": "Hybrid (in-person and virtual) gathering."
},
"status": {
"type": "string",
"description": "Status of the gathering.",
"knownValues": [
"org.latha.gathering#planned",
"org.latha.gathering#scheduled",
"org.latha.gathering#rescheduled",
"org.latha.gathering#postponed",
"org.latha.gathering#cancelled"
]
},
"planned": {
"type": "token",
"description": "Gathering is planned."
},
"speaker": {
"type": "token",
"description": "Speaker at the gathering."
},
"virtual": {
"type": "token",
"description": "Virtual gathering."
},
"actorRef": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "ATProto DID."
},
"handle": {
"type": "string",
"description": "Current ATProto handle."
}
},
"description": "A lightweight reference to an ATProto identity."
},
"attendee": {
"type": "object",
"required": [
"did"
],
"properties": {
"bio": {
"type": "string",
"maxLength": 5000,
"description": "Short bio or tagline.",
"maxGraphemes": 500
},
"did": {
"type": "string",
"format": "did",
"description": "ATProto DID."
},
"role": {
"ref": "org.latha.gathering#role",
"type": "ref",
"description": "Role in the gathering: host, organizer, participant, speaker, volunteer."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 640
},
"description": "Interest tags (a11y, privacy, transit, category-theory, etc.)."
},
"notes": {
"type": "string",
"maxLength": 10000,
"description": "Researcher notes about this attendee.",
"maxGraphemes": 1000
},
"handle": {
"type": "string",
"description": "ATProto handle."
},
"projects": {
"type": "array",
"items": {
"ref": "org.latha.gathering#projectRef",
"type": "ref"
},
"description": "Projects this person builds or maintains."
},
"displayName": {
"type": "string",
"maxLength": 1000,
"description": "Display name.",
"maxGraphemes": 100
}
},
"description": "A rich attendee record with role, projects, and metadata. Extends community.lexicon.calendar.rsvp with role, bio, projects, and tags."
},
"inperson": {
"type": "token",
"description": "In-person gathering."
},
"location": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 1000,
"description": "Venue name.",
"maxGraphemes": 100
},
"region": {
"type": "string",
"maxLength": 500,
"description": "State or province.",
"maxGraphemes": 50
},
"address": {
"type": "string",
"maxLength": 2000,
"description": "Street address.",
"maxGraphemes": 200
},
"country": {
"type": "string",
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code."
},
"locality": {
"type": "string",
"maxLength": 500,
"description": "City or locality.",
"maxGraphemes": 50
},
"postalCode": {
"type": "string",
"maxLength": 20,
"description": "Postal code."
}
},
"description": "A physical location."
},
"cancelled": {
"type": "token",
"description": "Gathering has been cancelled."
},
"organizer": {
"type": "token",
"description": "Organizer of the gathering."
},
"postponed": {
"type": "token",
"description": "Gathering has been postponed."
},
"scheduled": {
"type": "token",
"description": "Gathering is scheduled."
},
"volunteer": {
"type": "token",
"description": "Volunteer at the gathering."
},
"projectRef": {
"type": "object",
"required": [
"name"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"description": "Link to the project."
},
"name": {
"type": "string",
"maxLength": 1000,
"description": "Project name.",
"maxGraphemes": 100
}
},
"description": "A reference to a project or tool."
},
"participant": {
"type": "token",
"description": "Participant in the gathering."
},
"rescheduled": {
"type": "token",
"description": "Gathering has been rescheduled."
},
"thematicCluster": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 1000,
"description": "Cluster name (e.g., Organizer Core, Protocol Infrastructure, Technologist-Philosophers).",
"maxGraphemes": 100
},
"members": {
"type": "array",
"items": {
"ref": "org.latha.gathering#actorRef",
"type": "ref"
},
"description": "People in this cluster."
},
"description": {
"type": "string",
"maxLength": 10000,
"description": "What brings this group together or what they provide.",
"maxGraphemes": 1000
}
},
"description": "A group of attendees united by a shared theme, practice, or infrastructure role. Each cluster names a social or technical layer present at the gathering."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A community gathering or meetup record with attendees and extensible thematic sections. Covers event metadata, rich attendee data, and modular grouping of people by theme or infrastructure role. Schema: https://gathering.latha.org/#at://did:plc:ngokl2gnmpbvuvrfckja3g7p/org.latha.gathering/3mkdvt6ljja2e"
}