An anonymous question, optionally with a published answer. While unanswered the question text is encrypted server-side (private to roe.dev). Once published, the question is rewritten in plaintext alongside the answer and per-platform URLs.
tid
Timestamp-based ID
Properties
answeredAt
string
datetime
Optional
An RFC 3339 formatted timestamp.
backgroundStyle
string
Optional
ID of the background style used to render the image, either a preset name or a serialised custom emoji-and-gradient id. The set of styles is internal to roe.dev.
maxLength: 128 bytescreatedAt
string
datetime
Required
An RFC 3339 formatted timestamp.
encryptedQuestion
string
Optional
AES-256-GCM envelope holding the raw question text. Present iff status=unanswered.
maxLength: 500000 bytesimage
blob
Optional
No description available.
maxSize: 5.0 MBimageDimensions
ref
community.lexicon.app.defs#aspectRatio
Optional
Pixel dimensions of `image`. Stored alongside because PDS blobs don't carry intrinsic dimensions and Bluesky's image embed needs `aspectRatio`.
platforms
ref
#platforms
Optional
Which platforms the editor enabled when publishing.
posts
array
of
ref
#post
Optional
Thread of response posts. Each post is the body of one Bluesky-thread item (and one Mastodon status, one LinkedIn comment chain entry, etc).
maxLength: 16 itemspublishedLinks
ref
#publishedLinks
Optional
Resolved per-platform URLs after publish.
question
string
Optional
Plaintext question. Present iff status=answered; the editor decrypts encryptedQuestion at publish time and writes it here so the record is self-contained going forward.
maxLength: 500000 bytesmaxGraphemes: 50000 graphemesstatus
string
Required
No description available.
unanswered, answeredView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"status",
"createdAt"
],
"properties": {
"image": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 5000000
},
"posts": {
"type": "array",
"items": {
"ref": "#post",
"type": "ref"
},
"maxLength": 16,
"description": "Thread of response posts. Each post is the body of one Bluesky-thread item (and one Mastodon status, one LinkedIn comment chain entry, etc)."
},
"status": {
"type": "string",
"knownValues": [
"unanswered",
"answered"
]
},
"question": {
"type": "string",
"maxLength": 500000,
"description": "Plaintext question. Present iff status=answered; the editor decrypts encryptedQuestion at publish time and writes it here so the record is self-contained going forward.",
"maxGraphemes": 50000
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"platforms": {
"ref": "#platforms",
"type": "ref",
"description": "Which platforms the editor enabled when publishing."
},
"answeredAt": {
"type": "string",
"format": "datetime"
},
"publishedLinks": {
"ref": "#publishedLinks",
"type": "ref",
"description": "Resolved per-platform URLs after publish."
},
"backgroundStyle": {
"type": "string",
"maxLength": 128,
"description": "ID of the background style used to render the image, either a preset name or a serialised custom emoji-and-gradient id. The set of styles is internal to roe.dev."
},
"imageDimensions": {
"ref": "community.lexicon.app.defs#aspectRatio",
"type": "ref",
"description": "Pixel dimensions of `image`. Stored alongside because PDS blobs don't carry intrinsic dimensions and Bluesky's image embed needs `aspectRatio`."
},
"encryptedQuestion": {
"type": "string",
"maxLength": 500000,
"description": "AES-256-GCM envelope holding the raw question text. Present iff status=unanswered."
}
}
},
"description": "An anonymous question, optionally with a published answer. While unanswered the question text is encrypted server-side (private to roe.dev). Once published, the question is rewritten in plaintext alongside the answer and per-platform URLs."
}