{
"id": "app.tempomusic.actor.profile",
"defs": {
"main": {
"key": "literal:self",
"type": "record",
"record": {
"type": "object",
"required": [
"displayName",
"createdAt"
],
"properties": {
"avatar": {
"refs": [
"#catalogAvatar"
],
"type": "union",
"description": "Actor's avatar selection. Open union: currently only catalog-based avatars; future variants (e.g. custom blob upload) may be added without a breaking change."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this revision of the profile was authored. NOTE: with the singleton 'self' key, this advances on every edit; it is NOT a ToS-acceptance baseline. AppViews wanting an immutable first-acceptance timestamp must capture it separately."
},
"displayName": {
"type": "string",
"maxLength": 180,
"minLength": 1,
"description": "User-chosen display name shown in posts, replies and profile views. Bounded in graphemes (visible characters) so the UI can render it predictably; the byte budget is set to 10x the grapheme budget to leave headroom for multi-byte UTF-8 sequences.",
"maxGraphemes": 18
}
}
},
"description": "Customizable profile attributes for a Tempo actor. Stored as a singleton per repository under the literal record key 'self'."
},
"catalogAvatar": {
"type": "object",
"required": [
"id",
"backgroundColor"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"description": "Stable catalog identifier (e.g. 'hoodie_jacket'). Lowercase ASCII with underscores; opaque to the protocol."
},
"backgroundColor": {
"type": "string",
"maxLength": 32,
"description": "Stable identifier of the background color, resolved by the client against the Tempo extended theme palette. `knownValues` is informational; AppViews and clients MUST accept unknown values gracefully so the palette can grow non-breakingly.",
"knownValues": [
"userOrange",
"userBlue",
"userPink",
"userRed",
"userCyan",
"userGrey"
]
}
},
"description": "Reference to an avatar from the curated illustration catalog bundled with Tempo clients. The avatar is composed of (1) a character illustration identified by `id` and (2) a background color identified by `backgroundColor`. Clients resolve both against their local catalog/theme at render time and fall back to defaults when a value is unknown."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}