# at.margin.readingRoom

> Published by [margin.at](https://lexicon.garden/identity/did:plc:rjqn3agdb74cszhqcpii4sne)

✓ This is the authoritative definition for this NSID.

## Description

A user's public reading room configuration

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:rjqn3agdb74cszhqcpii4sne/at.margin.readingRoom)
- [Documentation](https://lexicon.garden/lexicon/did:plc:rjqn3agdb74cszhqcpii4sne/at.margin.readingRoom/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:rjqn3agdb74cszhqcpii4sne/at.margin.readingRoom/examples)

## Definitions

### `at.margin.readingRoom`

**Type**: `record`

Presentational configuration for a user's public reading room — a curated, themed view over their annotations. One per user.

**Key**: `literal:self`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `theme` | `ref` → `#theme` | No | Visual theme for the room. |
| `title` | `string` | No | Title shown at the top of the reading room. |
| `subtitle` | `string` | No | Tagline shown beneath the title. |
| `createdAt` | `string` (datetime) | Yes |  |
| `description` | `string` | No | Longer description of what the room collects. |
| `featuredUris` | `array` | No | AT URIs of annotations pinned to the top of the room. |
| `showExternalBookmarks` | `boolean` | No | Whether bookmarks from external services (Semble, Lichen, etc.) are shown in the room. |

### `at.margin.readingRoom#theme`

**Type**: `object`

Visual theme for a reading room. Omitted fields fall back to app defaults.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `layout` | `string` | No | Arrangement of notes on the room page. |
| `fontFamily` | `string` | No | CSS font family identifier for body text. |
| `accentColor` | `string` | No | Accent color as a hex string (e.g. #3b82f6). |
| `backgroundColor` | `string` | No | Page background color as a hex string (e.g. #fcfcfc). |

## Raw Schema

```json
{
  "id": "at.margin.readingRoom",
  "defs": {
    "main": {
      "key": "literal:self",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "createdAt"
        ],
        "properties": {
          "theme": {
            "ref": "#theme",
            "type": "ref",
            "description": "Visual theme for the room."
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "description": "Title shown at the top of the reading room.",
            "maxGraphemes": 100
          },
          "subtitle": {
            "type": "string",
            "maxLength": 300,
            "description": "Tagline shown beneath the title.",
            "maxGraphemes": 150
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "description": "Longer description of what the room collects.",
            "maxGraphemes": 600
          },
          "featuredUris": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "at-uri"
            },
            "maxLength": 12,
            "description": "AT URIs of annotations pinned to the top of the room."
          },
          "showExternalBookmarks": {
            "type": "boolean",
            "default": true,
            "description": "Whether bookmarks from external services (Semble, Lichen, etc.) are shown in the room."
          }
        }
      },
      "description": "Presentational configuration for a user's public reading room — a curated, themed view over their annotations. One per user."
    },
    "theme": {
      "type": "object",
      "properties": {
        "layout": {
          "type": "string",
          "default": "masonry",
          "description": "Arrangement of notes on the room page.",
          "knownValues": [
            "masonry",
            "grid",
            "list"
          ]
        },
        "fontFamily": {
          "type": "string",
          "maxLength": 100,
          "description": "CSS font family identifier for body text."
        },
        "accentColor": {
          "type": "string",
          "maxLength": 20,
          "description": "Accent color as a hex string (e.g. #3b82f6)."
        },
        "backgroundColor": {
          "type": "string",
          "maxLength": 20,
          "description": "Page background color as a hex string (e.g. #fcfcfc)."
        }
      },
      "description": "Visual theme for a reading room. Omitted fields fall back to app defaults."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "description": "A user's public reading room configuration"
}
```
