app.attrails.review

attrails.app

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A review of a route: a 1-5 rating, optional text, and optional photos. Activity-neutral. The AppView treats the most recent review per (author, subject) as canonical.",
      "key": "tid",
      "record": {
        "properties": {
          "completedAt": {
            "description": "When the reviewer last did the route (rode, ran, hiked), if they want to say.",
            "format": "datetime",
            "type": "string"
          },
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "images": {
            "items": {
              "ref": "app.attrails.defs#image",
              "type": "ref"
            },
            "maxLength": 10,
            "type": "array"
          },
          "labels": {
            "description": "Self-label values for this review, e.g. to flag sensitive photos.",
            "refs": [
              "com.atproto.label.defs#selfLabels"
            ],
            "type": "union"
          },
          "langs": {
            "description": "Languages of this record's text (review text, image alt text), as BCP-47 tags. If absent, consumers should assume English ('en').",
            "items": {
              "format": "language",
              "type": "string"
            },
            "maxLength": 3,
            "type": "array"
          },
          "rating": {
            "description": "Star rating from 1 (worst) to 5 (best).",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "subject": {
            "description": "Strong reference to an attrails record, often an app.attrails.route record.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "text": {
            "description": "Review text, as CommonMark markdown. Clients must not render raw HTML.",
            "maxGraphemes": 3000,
            "maxLength": 30000,
            "type": "string"
          }
        },
        "required": [
          "subject",
          "rating",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "app.attrails.review",
  "lexicon": 1
}

Validate Record

Validate a record against app.attrails.review

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:q7v2r4sxk4pecbwmaucvb2vn
CID
bafyreie6m42ytgh2kb2j7hhkdviqpqp7ccucbyckayv4nly3kco3g3ijhu
Indexed At
2026-10-26 22:50 UTC
AT-URI
at://did:plc:q7v2r4sxk4pecbwmaucvb2vn/com.atproto.lexicon.schema/app.attrails.review

Referenced Schemas (2)

Similar Lexicons

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

  • A portable user-owned review of an Atmosphere project profile. The reviewer writes this record to their own PDS; AppViews may index and moderate their own display of it.

  • how.bun.reviews.review recordnot from the namespace authority

    Record containing a review of something.

  • A public review of a real-world place (restaurant, cafe, shop, etc.). Designed so any AT Protocol app can read, render, and aggregate place reviews regardless of which app created them.

  • One person's review of a BBQ joint, held in their own repository. The reviewer owns it: they can edit or delete it, and it travels with them to any other app that reads this collection.

  • A rating gives a subject a dated integer score from 1 to 10. To re-rate, create a new record with an updated createdAt; the current score is the latest per (author, subject).

Lexicon Garden

@