site.mochott.layout
Layout of one page. One account has one layout per page: the record key is 'self' for the account's profile home, and equals the minisite record's key for that minisite's home. Other keys are reserved for additional pages. The subject must be a record in the same repository; layouts pointing at another account's records are ignored. A minisite's home only shows blocks about that minisite: renderers skip archive, tagList and seriesList blocks on it, and the tag, series and minisite filters of article lists.
Details · record, key any
| Kind | record |
|---|---|
| Record key | any |
| Authority | mochott.site |
| Indexed |
Record
record · key anyProperties
Sections from top to bottom, below the page header.
maxLength: 20
The page this layout renders: the account's own site.mochott.profile or site.mochott.minisite record.
updatedAt
string · datetime#archive
objectPost counts per month, by publish date in Japan time.
#articleList
objectProperties
filter
unionAbsent means all articles of the subject: the author's articles on a profile, the minisite's articles on a minisite (in the minisite's own order). The category filter is for minisite homes only; the others are for the profile home only.
limit
integerminimum: 1maximum: 20default: 5
sort
string'popular' orders by the number of likes. A popular list shows its own articles only and has no further pages.
maxLength: 64default: "recent"knownValues: recent | popular
view
stringmaxLength: 64default: "list"knownValues: card | list | magazine
#aspectRatio
object#background
stringTheme color token. Never a raw color, so every theme keeps its contrast.
maxLength: 64knownValues: none | surface | accent
#blueskyPosts
objectRecent Bluesky posts (app.bsky.feed.post) of the account that owns the layout, read by the reader's browser from a Bluesky AppView. Replies are never shown, and neither are posts labeled sexual, nudity, porn or graphic-media.
Properties
limit
integerminimum: 1maximum: 10default: 3
mediaOnly
booleanOnly posts with images or a video, drawn as a grid of their first image.
default: false
overflow
stringIn a tile, what happens to posts that do not fit: 'fade' cuts them off with a fade, 'scroll' scrolls inside the tile and reads further posts as the reader reaches the end. Blocks in a flow section grow to fit and ignore it.
maxLength: 64default: "fade"knownValues: fade | scroll
pinned
booleanShow the account's pinned post first.
default: false
reposts
booleanAlso show posts the account reposted.
default: false
#categoryFilter
objectArticles of one of the minisite's own categories (its slug). Shows nothing once the minisite no longer has that category.
Properties
maxLength: 32
#customBlock
objectA site.mochott.block placed on the page, stored the same way as in an article.
#embed
objectEmbedded media. Only providers on the renderer's allowlist are shown, and the player loads on click.
Properties
#flowItem
objectProperties
#flowSection
objectOne to four columns whose height follows the content. Collapses to one column on mobile.
#gallery
objectSeveral images shown together.
Properties
minLength: 1maxLength: 20
view
string'grid' lays the images out in a grid, 'scroll' in one row to scroll sideways, 'slides' one at a time. Unknown values fall back to 'grid'.
maxLength: 64default: "grid"knownValues: grid | scroll | slides
#galleryImage
objectProperties
Alternative text. May be empty for a purely decorative image.
maxLength: 10000maxGraphemes: 1000
aspectRatio
refmaxSize: 1000000accept: image/png, image/jpeg, image/webp, image/gif
#header
objectHow the page header is drawn: the subject's name, description, icon, cover image and links. The header always comes first and is not part of the sections; what it shows is the subject's own record. Only the profile home uses it; a minisite draws its own header.
Properties
links
stringHow the subject's social links are shown. Unknown values fall back to 'buttons'.
maxLength: 64default: "buttons"knownValues: buttons | icons | text | hidden
showDescription
booleandefault: true
style
string'standard' puts the icon beside the name, 'center' stacks them centred, 'cover' draws a large cover image with the icon over its edge. Unknown values fall back to 'standard'.
maxLength: 64default: "standard"knownValues: standard | center | cover
#heading
object#hero
objectA large image with a heading, a short text and a button over it. Without an image the accent colour is drawn instead.
Properties
align
stringmaxLength: 64default: "left"knownValues: left | center
buttonLabel
stringShown only together with buttonUri.
maxLength: 150maxGraphemes: 50
buttonUri
string · uriAn http(s) URL. Renderers must ignore any other scheme.
maxLength: 2048
maxLength: 300maxGraphemes: 100
image
blobmaxSize: 1000000accept: image/png, image/jpeg, image/webp, image/gif
text
stringmaxLength: 900maxGraphemes: 300
#image
objectProperties
Alternative text. May be empty for a purely decorative image.
maxLength: 10000maxGraphemes: 1000
aspectRatio
refcaption
stringmaxLength: 3000maxGraphemes: 300
maxSize: 1000000accept: image/png, image/jpeg, image/webp, image/gif
#linkButton
object#linkCard
objectCard for an external page. The OGP fields are a snapshot taken when the card was edited; viewers never trigger a fetch.
Properties
description
stringmaxLength: 10000maxGraphemes: 1000
thumb
blobmaxSize: 1000000accept: image/png, image/jpeg, image/webp
title
stringmaxLength: 3000maxGraphemes: 300
#minisiteCard
objectProperties
#minisiteFilter
objectProperties
#otherServices
objectThe author's articles on other standard.site services.
Properties
limit
integerminimum: 1maximum: 20default: 6
#pinnedArticle
objectProperties
Always shows the latest version. Skipped when the article is gone or hidden.
#record
objectCard for an AT Protocol record, drawn by a renderer chosen from the record's collection (e.g. sh.tangled.repo). Collections without a renderer are skipped.
Properties
description
stringThe record's description as it was when placed. Refreshed when the page is published.
maxLength: 3000maxGraphemes: 1000
title
stringThe record's name as it was when placed (for sh.tangled.repo, its name or record key). Refreshed when the page is published.
maxLength: 600maxGraphemes: 200
#seriesFilter
objectProperties
#seriesList
object#socialLinks
objectThe social links of the account's site.mochott.profile record. Deprecated: the page header shows them; editors no longer offer this block, renderers still draw it.
Properties
#spacer
objectEmpty cell used to leave a gap in a tile section.
Properties
#tagFilter
objectProperties
maxLength: 640maxGraphemes: 64
#tagList
objectProperties
limit
integerminimum: 1maximum: 30default: 10
#text
objectProperties
#theme
object#tileItem
objectProperties
background
refhideOnMobile
booleanmaxLength: 16
Width x height in cells. A tile wider than its grid (the section's columns on desktop, 2 on mobile) takes the full width and keeps its shape. A size the block does not support is replaced by the block's first supported size.
maxLength: 8knownValues: 1x1 | 2x1 | 1x2 | 2x2 | 4x1 | 4x2
#tileSection
objectA grid of square cells, `columns` wide on desktop and 2 on mobile. Items are packed in order. Future section kinds may be added; renderers skip kinds they do not know.
Similar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
page.mooring.site
recordConfiguration for a Mooring site. The record at rkey 'self' is the owner's default site; other rkeys are reserved for possible future multi-site support.
-
site.mochott.minisite
recordA minisite record. Represents a curated collection of articles with its own branding and URL.
-
app.zeens.portfolio
recordConfiguration for a user's public Portfolio site (e.g. alice.zeens.app). One per user, keyed 'self'. A portfolio is a curated list of the user's COLLECTIONS, displayed beautifully: it holds the subdomain, a theme + layout/columns/gap applied to every collection, the ordered list of collection AT-URIs to show, and an optional home collection. Collections own their own title/subtitle/description/photos/slug, which the portfolio reuses; the site header comes from the user's profile. Stored on the u