# com.nerdballot.ballot

> One record per track. The record key is {award}-{eligibilityYear}-{category}, for example hugo-2026-novel. Array order is rank order: first earns 5 points, fifth earns 1.

- Kind: record
- Record key: any
- Authority: nerdballot.com
- Lexicon: 1
- Published by [nerdballot.com](https://lexicon.garden/identity/did:plc:h4wwy6staenmbvom5rnwz3no), the NSID's authority

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:h4wwy6staenmbvom5rnwz3no/com.nerdballot.ballot)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:h4wwy6staenmbvom5rnwz3no/com.nerdballot.ballot/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:h4wwy6staenmbvom5rnwz3no/com.nerdballot.ballot/analytics)

## Record (`com.nerdballot.ballot`)

Type: record · key any

### Properties

- `award` (string, required)
  - Constraints: maxLength: 32, knownValues: hugo | nebula
- `category` (string, required)
  - Constraints: maxLength: 32, knownValues: novel
- `eligibilityYear` (integer, required): Publication year of the works on the ballot.
  - Constraints: minimum: 1900, maximum: 2100
- `rankedBooks` (array, required): AT-URIs of com.nerdballot.book records, best first. No duplicates.
  - Constraints: maxLength: 5
  - `items` (string · at-uri)
- `updatedAt` (string · datetime, required): Client time of the edit. Informational only; Nerd Ballot uses its own receipt time for deadlines.
- `version` (integer, required): Schema version of this record. Currently 1.
  - Constraints: minimum: 1

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "One record per track. The record key is {award}-{eligibilityYear}-{category}, for example hugo-2026-novel. Array order is rank order: first earns 5 points, fifth earns 1.",
      "key": "any",
      "record": {
        "properties": {
          "award": {
            "knownValues": [
              "hugo",
              "nebula"
            ],
            "maxLength": 32,
            "type": "string"
          },
          "category": {
            "knownValues": [
              "novel"
            ],
            "maxLength": 32,
            "type": "string"
          },
          "eligibilityYear": {
            "description": "Publication year of the works on the ballot.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "rankedBooks": {
            "description": "AT-URIs of com.nerdballot.book records, best first. No duplicates.",
            "items": {
              "format": "at-uri",
              "type": "string"
            },
            "maxLength": 5,
            "type": "array"
          },
          "updatedAt": {
            "description": "Client time of the edit. Informational only; Nerd Ballot uses its own receipt time for deadlines.",
            "format": "datetime",
            "type": "string"
          },
          "version": {
            "description": "Schema version of this record. Currently 1.",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "version",
          "award",
          "eligibilityYear",
          "category",
          "rankedBooks",
          "updatedAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "description": "A voter's ranked ballot for one Nerd Ballot track. Nerd Ballot is an unofficial community poll, not affiliated with WSFS, Worldcon or SFWA.",
  "id": "com.nerdballot.ballot",
  "lexicon": 1
}
```
