A zeen: a sequence of 1:1.414 pages (ISO A-series proportion) mixing photographs and writing, published as a readable object. Pages may draw photos from a collection, from individual posts, or from the author's own uploads — a zeen is a standalone document, not a view of a collection. The AUTHORED PAGES are the artifact: layout is recomputed from them at read time, so a layout improvement reaches every existing zeen. Replaces an earlier record of this NSID that described a print-ready PDF; that shape is gone and its records are inert.
tid
Timestamp-based ID
Properties
allowDownload
boolean
Optional
Whether readers other than the author may export this zeen as a PDF. Absent means false: an author who has not said otherwise has not agreed to hand out a file. The author can always export their own work, so this governs OTHER people only. It is a permission on the export endpoint, not a protection on the pages themselves, which are readable by anyone once the zeen is published.
app.zeens.v
integer
Optional
Zeens marker so the firehose and lua filters can identify our records.
cover
ref
#photoRef
Optional
The photo to show as this zeen's card in listings and as its og:image. Normally the front cover's photo, stored here so a listing needs neither to parse `pages` nor to lay anything out.
createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
description
string
Optional
Short summary for listings and share previews. Used as the meta description when the zeen is published.
maxLength: 2000 bytespages
array
of
ref
#page
Required
The zeen in reading order, first page first. Stored as authored specs rather than computed geometry: the layout engine turns these into frames at read time, so pages stay editable and re-layout when the engine improves. Capped at 60 — well past the length anyone reads in one sitting, and it bounds the record size.
maxLength: 60 itemsminLength: 1 itemspublishedAt
string
datetime
Optional
When the zeen was first published. Set once and not updated by later edits, so a re-edited zeen keeps its place in reverse-chronological listings.
sourceCollection
string
at-uri
Optional
Optional provenance: the app.zeens.collection photos were seeded from. A zeen is a SNAPSHOT — later changes to that collection do not alter it.
status
string
Optional
'draft' = still being authored; visible only to its author, carries no engagement, and is never indexed. 'published' = readable by anyone, likeable and commentable. Absent means 'draft': a record that never said it was published should not be treated as public.
draft, publishedtheme
ref
#theme
Optional
Type and colour choices. Absent means the defaults (modern / neutral).
title
string
Required
Display title. Also the front cover's title unless that page overrides it.
maxLength: 200 bytesView raw schema
{
"description": "A zeen: a sequence of 1:1.414 pages (ISO A-series proportion) mixing photographs and writing, published as a readable object. Pages may draw photos from a collection, from individual posts, or from the author's own uploads — a zeen is a standalone document, not a view of a collection. The AUTHORED PAGES are the artifact: layout is recomputed from them at read time, so a layout improvement reaches every existing zeen. Replaces an earlier record of this NSID that described a print-ready PDF; that shape is gone and its records are inert.",
"key": "tid",
"record": {
"properties": {
"allowDownload": {
"description": "Whether readers other than the author may export this zeen as a PDF. Absent means false: an author who has not said otherwise has not agreed to hand out a file. The author can always export their own work, so this governs OTHER people only. It is a permission on the export endpoint, not a protection on the pages themselves, which are readable by anyone once the zeen is published.",
"type": "boolean"
},
"app.zeens.v": {
"description": "Zeens marker so the firehose and lua filters can identify our records.",
"type": "integer"
},
"cover": {
"description": "The photo to show as this zeen's card in listings and as its og:image. Normally the front cover's photo, stored here so a listing needs neither to parse `pages` nor to lay anything out.",
"ref": "#photoRef",
"type": "ref"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"description": {
"description": "Short summary for listings and share previews. Used as the meta description when the zeen is published.",
"maxLength": 2000,
"type": "string"
},
"pages": {
"description": "The zeen in reading order, first page first. Stored as authored specs rather than computed geometry: the layout engine turns these into frames at read time, so pages stay editable and re-layout when the engine improves. Capped at 60 — well past the length anyone reads in one sitting, and it bounds the record size.",
"items": {
"ref": "#page",
"type": "ref"
},
"maxLength": 60,
"minLength": 1,
"type": "array"
},
"publishedAt": {
"description": "When the zeen was first published. Set once and not updated by later edits, so a re-edited zeen keeps its place in reverse-chronological listings.",
"format": "datetime",
"type": "string"
},
"sourceCollection": {
"description": "Optional provenance: the app.zeens.collection photos were seeded from. A zeen is a SNAPSHOT — later changes to that collection do not alter it.",
"format": "at-uri",
"type": "string"
},
"status": {
"description": "'draft' = still being authored; visible only to its author, carries no engagement, and is never indexed. 'published' = readable by anyone, likeable and commentable. Absent means 'draft': a record that never said it was published should not be treated as public.",
"knownValues": [
"draft",
"published"
],
"type": "string"
},
"theme": {
"description": "Type and colour choices. Absent means the defaults (modern / neutral).",
"ref": "#theme",
"type": "ref"
},
"title": {
"description": "Display title. Also the front cover's title unless that page overrides it.",
"maxLength": 200,
"type": "string"
}
},
"required": [
"title",
"pages",
"createdAt"
],
"type": "object"
},
"type": "record"
}