at.rolld.play

A single logged session of playing a board game. The high-volume event record. Reads ('times played', 'who played this game') are served by querying Constellation for backlinks to the 'target' URL — derived live, never stored.

Repository @rolld.at did:plc:vjpkp7kuxs6iicilpqlibvl4 namespace authority
Details · record, key tid
Kindrecord
Record keytid
Authorityrolld.at
Indexed

Record

record · key tid

Properties

Strong ref (uri + cid) to a companion app.bsky.feed.post, if the user chose to share this play on Bluesky. The post links back to the per-entry permalink (/@<handle>/play/<rkey>). Storing the ref also enables showing Bluesky replies as discussion on the entry later (the Leaflet POSSE pattern).

content

union

Optional rich note about how the play went. Open union (bring-your-own-content, like standard.site's content field) so the format can grow without a breaking change. v1 accepts markpub Markdown. Render via the $type; consumers that don't understand it fall back to textContent.

createdAt

requiredstring · datetime

When this record was created.

How long the session actually took.

  • minimum: 0

Expansions in play, by BGG id.

itemsref

game

requiredref

The game played, referenced by BGG id.

images

array

Optional photos of the play (board, table, scores). Up to 4, matching Bluesky's per-post image limit so the same blobs can be embedded in a companion app.bsky.feed.post. Each blob lives in the user's PDS and is referenced here; the photo is part of the play (not a standalone record). Powers the per-game photo gallery via the existing plays-of-this-game Constellation query (filter plays that have images). See DECISIONS D-33.

  • maxLength: 4
itemsref

location

string

Free text: whose house, which convention, which cafe.

  • maxLength: 500

playedAt

requiredstring · datetime

When the play session occurred (may differ from createdAt if logged later).

players

array

Who played. Each entry may carry an atproto DID (for real handles) and/or a plain display name.

itemsref

target

requiredstring · uri

Canonical per-game web URL (https://rolld.at/g/<bggId>) that Constellation indexes as a backlink target. FROZEN format, emitted from one shared helper shared by write and read paths. This is the linchpin of the serverless read model — backlinks to this URL ARE the play aggregation. No catalog segment: game identity is permanently BGG-keyed.

Plain-text rendering of `content`, always populated when `content` is present. The universal fallback for any consumer that can't render the content union's $type, and the field to index for search/previews. Same role as standard.site's textContent. No grapheme limit.

  • maxLength: 100000

DIDs of winning players, if any were recorded as identities.

itemsstring · did

Names of winners not represented by a DID.

itemsstring
  • maxLength: 320

Similar lexicons

semantic match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • Image dimensions in pixels (1:1 with app.bsky.embed.defs#aspectRatio shape).

  • A single board game play

  • The user's grade for a game. Single overwritable record per game (BGG id in the record key); re-rating replaces it, no history kept in v1. Scale is 1-10 to align with BGG's community average you already hydrate.