# site.mochott.article

> Published by [tokimeki.blue](https://lexicon.garden/identity/did:plc:4tr5dqti7nmu6g2czpthntak)

✓ This is the authoritative definition for this NSID.

## Description

A blog article record. Contains rich text content, metadata, and optional media attachments.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:4tr5dqti7nmu6g2czpthntak/site.mochott.article)
- [Documentation](https://lexicon.garden/lexicon/did:plc:4tr5dqti7nmu6g2czpthntak/site.mochott.article/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:4tr5dqti7nmu6g2czpthntak/site.mochott.article/examples)

## Definitions

### `site.mochott.article`

**Type**: `record`

Record representing a single blog article published to a publication.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `path` | `string` | No | Custom URL path slug for the article. Used to construct human-readable URLs. |
| `tags` | `array` | No | Tags for categorizing the article. |
| `blobs` | `array` | No | Blob references for media embedded within the article content. |
| `title` | `string` | Yes | Title of the article. |
| `content` | `ref` → `#tiptapDocument` | No | Rich text content in TipTap editor JSON format. |
| `profile` | `string` (at-uri) | Yes | AT URI of the publication profile this article belongs to. |
| `category` | `string` | No | Primary category of the article. |
| `createdAt` | `string` (datetime) | Yes | Timestamp when the article was created. |
| `updatedAt` | `string` (datetime) | No | Timestamp when the article was last updated. |
| `coverImage` | `blob` | No | Cover image displayed at the top of the article and in previews. |
| `description` | `string` | No | Short summary or excerpt of the article, used for previews and SEO. |
| `textContent` | `string` | No | Plain text representation of the article content, primarily for search indexing and text-only consumers. |

### `site.mochott.article#tiptapDocument`

**Type**: `object`

A TipTap editor document node. Represents a recursive tree structure for rich text content.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `text` | `string` | No | Text content for text-type nodes. |
| `type` | `string` | Yes | Node type identifier (e.g. 'doc', 'paragraph', 'heading'). |
| `attrs` | `unknown` | No | Node-specific attributes. |
| `marks` | `array` | No | Inline formatting marks applied to this node. |
| `content` | `array` | No | Child nodes of this document node. |

## Raw Schema

```json
{
  "id": "site.mochott.article",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "profile",
          "title",
          "createdAt"
        ],
        "properties": {
          "path": {
            "type": "string",
            "maxLength": 500,
            "description": "Custom URL path slug for the article. Used to construct human-readable URLs."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 640,
              "maxGraphemes": 64
            },
            "maxLength": 8,
            "description": "Tags for categorizing the article."
          },
          "blobs": {
            "type": "array",
            "items": {
              "ref": "site.mochott.defs#blobMetadata",
              "type": "ref"
            },
            "description": "Blob references for media embedded within the article content."
          },
          "title": {
            "type": "string",
            "maxLength": 5000,
            "description": "Title of the article.",
            "maxGraphemes": 500
          },
          "content": {
            "ref": "#tiptapDocument",
            "type": "ref",
            "description": "Rich text content in TipTap editor JSON format."
          },
          "profile": {
            "type": "string",
            "format": "at-uri",
            "description": "AT URI of the publication profile this article belongs to."
          },
          "category": {
            "type": "string",
            "maxLength": 100,
            "description": "Primary category of the article."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Timestamp when the article was created."
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime",
            "description": "Timestamp when the article was last updated."
          },
          "coverImage": {
            "type": "blob",
            "accept": [
              "image/png",
              "image/jpeg",
              "image/webp"
            ],
            "maxSize": 1000000,
            "description": "Cover image displayed at the top of the article and in previews."
          },
          "description": {
            "type": "string",
            "maxLength": 30000,
            "description": "Short summary or excerpt of the article, used for previews and SEO.",
            "maxGraphemes": 3000
          },
          "textContent": {
            "type": "string",
            "maxLength": 100000,
            "description": "Plain text representation of the article content, primarily for search indexing and text-only consumers."
          }
        }
      },
      "description": "Record representing a single blog article published to a publication."
    },
    "tiptapDocument": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "text": {
          "type": "string",
          "description": "Text content for text-type nodes."
        },
        "type": {
          "type": "string",
          "description": "Node type identifier (e.g. 'doc', 'paragraph', 'heading')."
        },
        "attrs": {
          "type": "unknown",
          "description": "Node-specific attributes."
        },
        "marks": {
          "type": "array",
          "items": {
            "type": "unknown"
          },
          "description": "Inline formatting marks applied to this node."
        },
        "content": {
          "type": "array",
          "items": {
            "type": "unknown"
          },
          "description": "Child nodes of this document node."
        }
      },
      "description": "A TipTap editor document node. Represents a recursive tree structure for rich text content."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "revision": 1,
  "description": "A blog article record. Contains rich text content, metadata, and optional media attachments."
}
```
