{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://indieindex.local/schema/submission.json",
  "title": "IndieIndexSubmission",
  "description": "User-submittable listing fields only. Do not send operator/ops fields (verification_status, ownership_status, editorial_status, link_rel, founded_case, example).",
  "type": "object",
  "required": [
    "slug",
    "name",
    "url",
    "tagline",
    "description",
    "categories",
    "locales"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "name": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "tagline": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "locales": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Locales the PRODUCT supports (not IndieIndex page language variants)."
    },
    "contact": {
      "type": "string"
    },
    "tools": {
      "type": "array",
      "description": "Optional deep links to individual tools on the product site. Do not create a separate IndieIndex listing per tool.",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name_ko",
          "url_ko"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name_ko": {
            "type": "string"
          },
          "name_en": {
            "type": "string"
          },
          "url_ko": {
            "type": "string",
            "format": "uri"
          },
          "url_en": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    }
  },
  "additionalProperties": false
}
