# com.cultureblocs.offer

> Something a creative or a place offers, or needs, for a while: a recording engineer available for hire, off-peak rehearsal rates, a studio desk free for three months, 'looking for a drummer'. Separate from the profile because offers come and go. Pause and reopen an offer by changing `status` on the same record rather than deleting and recreating it, so links and history survive. Public by nature: carry links, never private contact details.

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

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:l3726um33xesakwqhjkkpoet/com.cultureblocs.offer)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:l3726um33xesakwqhjkkpoet/com.cultureblocs.offer/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:l3726um33xesakwqhjkkpoet/com.cultureblocs.offer/analytics)

## Record (`com.cultureblocs.offer`)

Type: record · key tid

### Properties

- `areas` (array): Where the offer applies. Defaults, for readers, to the offering party's basedIn or place area.
  - Constraints: maxLength: 8
  - `items` (ref)
    - Reference: `com.cultureblocs.defs#areaRef`
- `createdAt` (string · datetime, required): When this record was first stamped. The only immutable field: everything else may be revised by publishing a new commit.
- `description` (string)
  - Constraints: maxGraphemes: 2000
- `disciplines` (array): Freeform, as in creative.profile.
  - Constraints: maxLength: 8
  - `items` (string)
    - Constraints: maxGraphemes: 64
- `kind` (string, required): Offering something, or looking for something. Readers should not display a record whose kind they do not recognise.
  - Constraints: maxGraphemes: 16, knownValues: offer | need
- `links` (array): Booking page, portfolio, enquiry form.
  - Constraints: maxLength: 8
  - `items` (ref)
    - Reference: `com.cultureblocs.defs#linkRef`
- `offerType` (string): Advisory vocabulary: new types need no schema change.
  - Constraints: maxGraphemes: 64, knownValues: service | space_to_let | hire | commission | collaboration | workshop | residency | volunteer
- `offeredBy` (ref): The place.profile this offer belongs to. Omit when the offer is from the repository holder's own creative.profile.
  - Reference: `com.cultureblocs.defs#strongRef`
- `price` (string): Freeform: 'from £20/hr', 'negotiable', 'free for members'.
  - Constraints: maxGraphemes: 200
- `remote` (boolean): Can be done remotely or online.
- `status` (string, required): Readers treat any value other than 'open' as not currently available.
  - Constraints: maxGraphemes: 16, knownValues: open | paused | closed
- `tags` (array)
  - Constraints: maxLength: 8
  - `items` (string)
    - Constraints: maxGraphemes: 64
- `title` (string, required): One line, e.g. 'Mixing and mastering', 'Shared studio desk, Deptford'.
  - Constraints: maxGraphemes: 200
- `updatedAt` (string · datetime): When status or content last changed. Lets readers show 'reopened 2 days ago' and sort by freshness.
- `validFrom` (string · datetime)
- `validUntil` (string · datetime): After this, readers treat the offer as closed whatever its status says, so stale offers drop out without anyone tidying up.

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "Something a creative or a place offers, or needs, for a while: a recording engineer available for hire, off-peak rehearsal rates, a studio desk free for three months, 'looking for a drummer'. Separate from the profile because offers come and go. Pause and reopen an offer by changing `status` on the same record rather than deleting and recreating it, so links and history survive. Public by nature: carry links, never private contact details.",
      "key": "tid",
      "record": {
        "properties": {
          "areas": {
            "description": "Where the offer applies. Defaults, for readers, to the offering party's basedIn or place area.",
            "items": {
              "ref": "com.cultureblocs.defs#areaRef",
              "type": "ref"
            },
            "maxLength": 8,
            "type": "array"
          },
          "createdAt": {
            "description": "When this record was first stamped. The only immutable field: everything else may be revised by publishing a new commit.",
            "format": "datetime",
            "type": "string"
          },
          "description": {
            "maxGraphemes": 2000,
            "type": "string"
          },
          "disciplines": {
            "description": "Freeform, as in creative.profile.",
            "items": {
              "maxGraphemes": 64,
              "type": "string"
            },
            "maxLength": 8,
            "type": "array"
          },
          "kind": {
            "description": "Offering something, or looking for something. Readers should not display a record whose kind they do not recognise.",
            "knownValues": [
              "offer",
              "need"
            ],
            "maxGraphemes": 16,
            "type": "string"
          },
          "links": {
            "description": "Booking page, portfolio, enquiry form.",
            "items": {
              "ref": "com.cultureblocs.defs#linkRef",
              "type": "ref"
            },
            "maxLength": 8,
            "type": "array"
          },
          "offerType": {
            "description": "Advisory vocabulary: new types need no schema change.",
            "knownValues": [
              "service",
              "space_to_let",
              "hire",
              "commission",
              "collaboration",
              "workshop",
              "residency",
              "volunteer"
            ],
            "maxGraphemes": 64,
            "type": "string"
          },
          "offeredBy": {
            "description": "The place.profile this offer belongs to. Omit when the offer is from the repository holder's own creative.profile.",
            "ref": "com.cultureblocs.defs#strongRef",
            "type": "ref"
          },
          "price": {
            "description": "Freeform: 'from £20/hr', 'negotiable', 'free for members'.",
            "maxGraphemes": 200,
            "type": "string"
          },
          "remote": {
            "description": "Can be done remotely or online.",
            "type": "boolean"
          },
          "status": {
            "description": "Readers treat any value other than 'open' as not currently available.",
            "knownValues": [
              "open",
              "paused",
              "closed"
            ],
            "maxGraphemes": 16,
            "type": "string"
          },
          "tags": {
            "items": {
              "maxGraphemes": 64,
              "type": "string"
            },
            "maxLength": 8,
            "type": "array"
          },
          "title": {
            "description": "One line, e.g. 'Mixing and mastering', 'Shared studio desk, Deptford'.",
            "maxGraphemes": 200,
            "type": "string"
          },
          "updatedAt": {
            "description": "When status or content last changed. Lets readers show 'reopened 2 days ago' and sort by freshness.",
            "format": "datetime",
            "type": "string"
          },
          "validFrom": {
            "format": "datetime",
            "type": "string"
          },
          "validUntil": {
            "description": "After this, readers treat the offer as closed whatever its status says, so stale offers drop out without anyone tidying up.",
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "title",
          "status",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "com.cultureblocs.offer",
  "lexicon": 1
}
```
