{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A single wearing review of a fragrance",
      "key": "tid",
      "record": {
        "properties": {
          "complexity": {
            "description": "Final: Depth and evolution (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "createdAt": {
            "description": "Timestamp when the review was created",
            "format": "datetime",
            "type": "string"
          },
          "drydownRating": {
            "description": "Mid-Wear: How it smells after settling (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "elevation": {
            "description": "Elevation in meters above sea level",
            "type": "integer"
          },
          "endRating": {
            "description": "Final: How it smells at the end (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "fragrance": {
            "description": "Reference to the social.drydown.fragrance record",
            "format": "at-uri",
            "type": "string"
          },
          "longevity": {
            "description": "Final: Total duration (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "midProjection": {
            "description": "Mid-Wear: Scent bubble radius during mid-wear (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "openingProjection": {
            "description": "First Impression: Immediate scent bubble radius (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "openingRating": {
            "description": "First Impression: How it smells immediately (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "overallRating": {
            "description": "Final: Holistic 'Gut Score' (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "sillage": {
            "description": "Mid-Wear: Trail left behind (1-5)",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "stage1Temp": {
            "description": "Temperature in Celsius at Stage 1 * 10 (e.g. 225 = 22.5°C)",
            "type": "integer"
          },
          "stage2CompletedAt": {
            "description": "Timestamp when Stage 2 was completed (for accurate temperature)",
            "format": "datetime",
            "type": "string"
          },
          "stage2Temp": {
            "description": "Temperature in Celsius at Stage 2 * 10 (e.g. 225 = 22.5°C)",
            "type": "integer"
          },
          "stage3Temp": {
            "description": "Temperature in Celsius at Stage 3 * 10 (e.g. 225 = 22.5°C)",
            "type": "integer"
          },
          "text": {
            "description": "Written review (max 255 graphemes)",
            "maxGraphemes": 255,
            "maxLength": 3000,
            "type": "string"
          },
          "uvIndex": {
            "description": "Daily maximum UV index (0-11+)",
            "maximum": 11,
            "minimum": 0,
            "type": "integer"
          },
          "weatherOptIn": {
            "description": "User opted in to weather data collection",
            "type": "boolean"
          },
          "weightedScore": {
            "description": "Calculated final score * 1000 (e.g. 4250 = 4.25)",
            "type": "integer"
          }
        },
        "required": [
          "fragrance",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "social.drydown.review",
  "lexicon": 1
}
