{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://memo.d.foundation/schemas/dwarves.json",
  "$comment": "memo-api mirrors this schema as a strict zod object (dwarvesf/foundation-workers workers/platform/memo-api/src/memoV2Profile.ts profileSchema) and pins it to a vendored copy in test/fixtures/dwarves.schema.json. A change here needs a refresh there (test/fixtures/refresh-dwarves-schema.sh).",
  "title": "Dwarves Memo writer profile",
  "description": "The file a guest writer serves at https://<domain>/.well-known/dwarves.json. It is world-readable, so it carries only what the blog already shows.",
  "type": "object",
  "required": ["name"],
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Display name shown on the contributor page."
    },
    "avatar": {
      "type": "string",
      "pattern": "^https://",
      "description": "HTTPS URL of the avatar image."
    },
    "feed": {
      "type": "string",
      "pattern": "^https://",
      "description": "HTTPS URL of the RSS or Atom feed. Lets memo suggest new posts."
    },
    "bio": {
      "type": "string",
      "minLength": 1,
      "maxLength": 300,
      "description": "Plain-text bio shown on the contributor page. One line, no markup."
    },
    "memo_verification": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The one-time verification_code returned by POST /api/memo/join. Valid for 24 hours."
    },
    "native": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$",
      "maxLength": 39,
      "description": "The GitHub login this writer claims as their native contributor identity. A claim alone never links; a memo:admin approves it out of band."
    }
  },
  "examples": [
    {
      "name": "Han Ngo",
      "avatar": "https://truonghan.com/avatar.png",
      "feed": "https://truonghan.com/rss.xml",
      "memo_verification": "<verification_code>"
    }
  ]
}
