pics.2bit.challenge.list

2bit.pics

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A photo challenge: a named set of prompts, published by its organizer, that anyone can enter by writing a pics.2bit.challenge.entry for one of their own photos. The record key is a short readable slug (e.g. `gbcamtober-2026`) and is only unique within the organizer's repo, so a challenge is always named by organizer and key together - in URLs as `<organizer handle>/<rkey>`, in records by its at-uri.",
      "key": "any",
      "record": {
        "properties": {
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "description": {
            "description": "The rules or intro text, shown on the challenge page.",
            "maxGraphemes": 1000,
            "maxLength": 10000,
            "type": "string"
          },
          "endsAt": {
            "description": "When the challenge closes, exclusive. Must be after `startsAt`.",
            "format": "datetime",
            "type": "string"
          },
          "hashtag": {
            "description": "The challenge's hashtag, without the leading `#`, e.g. `GBCamtober2026`. Clients add it to the caption of a photo entered into the challenge, so entries also reach the tag's page and feed. Must be a tag under this app's hashtag grammar (see pics.2bit.feed.photo#caption); a list whose hashtag isn't one is indexed as if it had none.",
            "maxLength": 64,
            "type": "string"
          },
          "name": {
            "description": "Display name, e.g. \"GBCamtober 2026\".",
            "maxGraphemes": 64,
            "maxLength": 640,
            "minLength": 1,
            "type": "string"
          },
          "prompts": {
            "description": "The prompts, in display order. Keys must be unique within the list.",
            "items": {
              "ref": "#prompt",
              "type": "ref"
            },
            "maxLength": 64,
            "minLength": 1,
            "type": "array"
          },
          "startsAt": {
            "description": "When the challenge opens. Together with `endsAt` this decides whether the challenge is active and which prompt is today's; it never limits when an entry can be written - entering late is allowed.",
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "name",
          "startsAt",
          "endsAt",
          "prompts",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "prompt": {
      "properties": {
        "key": {
          "description": "Stable identifier that entries point at, e.g. `6`. Letters, digits, `-` and `_` only - this app's AppView skips a list with any other key. No padding is needed for order: the array order is the display order, and numeric keys compare naturally. Keep keys fixed once entries exist; titles can change freely.",
          "maxLength": 32,
          "minLength": 1,
          "type": "string"
        },
        "title": {
          "description": "The prompt as shown, e.g. \"Duck\".",
          "maxGraphemes": 64,
          "maxLength": 640,
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "key",
        "title"
      ],
      "type": "object"
    }
  },
  "id": "pics.2bit.challenge.list",
  "lexicon": 1
}

Validate Record

Validate a record against pics.2bit.challenge.list

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:sbmntiflmknij2axeck3w6u7
CID
bafyreic4iqmtl5robiqkcpb5jnq37yqpuhux7rnn4enhkn5otgcernrwa4
Indexed At
2026-09-27 21:14 UTC
AT-URI
at://did:plc:sbmntiflmknij2axeck3w6u7/com.atproto.lexicon.schema/pics.2bit.challenge.list

Similar Lexicons

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

  • One of the author's own photos entered into a challenge for one of its prompts. One entry per person per prompt is enforced by this app's AppView rather than the record key: its write path deletes an author's earlier en…

Lexicon Garden

@