# page.cavu.defs

- Kind: defs
- Authority: cavu.page
- Lexicon: 1
- Published by [cavu.page](https://lexicon.garden/identity/did:plc:citulkqjdzbnf7wd5xb6lled), the NSID's authority

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.defs)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.defs/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:citulkqjdzbnf7wd5xb6lled/page.cavu.defs/analytics)

## #bookView (`page.cavu.defs#bookView`)

Type: object

Appview projection of one book on the shelf: the join of a site.standard.publication record, its page.cavu.book extension, and index-time enrichment (chapter count read from the TOC document, aggregate rating from BookHive). Only renderable books are indexed — a publication with no book object, an empty spine, or content in an unrecognized format never appears as a view.

### Properties

- `authors` (array, required): Names of contributors credited as authors (or with no stated role), in record order. Empty for books published without contributor credits.
  - Constraints: maxLength: 100
  - `items` (string)
    - Constraints: maxLength: 1000, maxGraphemes: 100
- `chapterCount` (integer): Entries in the book's table of contents, or the linear spine length when the TOC block carries no entries.
  - Constraints: minimum: 0
- `completionStatus` (string): Whether the book is still being serialized, per page.cavu.book.
  - Constraints: knownValues: ongoing | completed | hiatus
- `cover` (string · uri): Fully-qualified URL of the book cover, sized for detail views. Points at the appview's CDN or image proxy; absent when the book has no cover blob.
- `coverAlt` (string): Alt text describing the cover image, for accessibility.
  - Constraints: maxLength: 5000, maxGraphemes: 1000
- `indexedAt` (string · datetime, required): When the appview's index last saw this publication change.
- `rating` (integer): Aggregate rating in thousandths of a star (0–5000), from BookHive's public aggregate for the correlated hive id. Absent when the book has no author to correlate or the hive doesn't know it.
  - Constraints: minimum: 0, maximum: 5000
- `ratingsCount` (integer): How many BookHive reviews the rating aggregates.
  - Constraints: minimum: 0
- `thumb` (string · uri): Fully-qualified URL of a small cover rendition, sized for shelf grids.
- `title` (string, required): The publication's name, per site.standard.publication.
  - Constraints: maxLength: 5000, maxGraphemes: 500
- `uri` (string · at-uri, required): AT-URI of the site.standard.publication record this view projects.

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "bookView": {
      "description": "Appview projection of one book on the shelf: the join of a site.standard.publication record, its page.cavu.book extension, and index-time enrichment (chapter count read from the TOC document, aggregate rating from BookHive). Only renderable books are indexed — a publication with no book object, an empty spine, or content in an unrecognized format never appears as a view.",
      "properties": {
        "authors": {
          "description": "Names of contributors credited as authors (or with no stated role), in record order. Empty for books published without contributor credits.",
          "items": {
            "maxGraphemes": 100,
            "maxLength": 1000,
            "type": "string"
          },
          "maxLength": 100,
          "type": "array"
        },
        "chapterCount": {
          "description": "Entries in the book's table of contents, or the linear spine length when the TOC block carries no entries.",
          "minimum": 0,
          "type": "integer"
        },
        "completionStatus": {
          "description": "Whether the book is still being serialized, per page.cavu.book.",
          "knownValues": [
            "ongoing",
            "completed",
            "hiatus"
          ],
          "type": "string"
        },
        "cover": {
          "description": "Fully-qualified URL of the book cover, sized for detail views. Points at the appview's CDN or image proxy; absent when the book has no cover blob.",
          "format": "uri",
          "type": "string"
        },
        "coverAlt": {
          "description": "Alt text describing the cover image, for accessibility.",
          "maxGraphemes": 1000,
          "maxLength": 5000,
          "type": "string"
        },
        "indexedAt": {
          "description": "When the appview's index last saw this publication change.",
          "format": "datetime",
          "type": "string"
        },
        "rating": {
          "description": "Aggregate rating in thousandths of a star (0–5000), from BookHive's public aggregate for the correlated hive id. Absent when the book has no author to correlate or the hive doesn't know it.",
          "maximum": 5000,
          "minimum": 0,
          "type": "integer"
        },
        "ratingsCount": {
          "description": "How many BookHive reviews the rating aggregates.",
          "minimum": 0,
          "type": "integer"
        },
        "thumb": {
          "description": "Fully-qualified URL of a small cover rendition, sized for shelf grids.",
          "format": "uri",
          "type": "string"
        },
        "title": {
          "description": "The publication's name, per site.standard.publication.",
          "maxGraphemes": 500,
          "maxLength": 5000,
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the site.standard.publication record this view projects.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "title",
        "authors",
        "indexedAt"
      ],
      "type": "object"
    }
  },
  "id": "page.cavu.defs",
  "lexicon": 1
}
```
