{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "$id": "https://raw.githubusercontent.com/dkhamsing/open-source-ios-apps/master/.github/schema.json",
    "type": "object",
    "properties": {
        "title": {
            "type": "string"
        },
        "subtitle": {
            "type": "string"
        },
        "description": {
            "type": "string"
        },
        "header": {
            "type": "string"
        },
        "sponsor": {
            "type": "string"
        },
        "footer": {
            "type": "string"
        },
        "categories": {
            "type": "array",
            "_uniqueItems": true,
            "items": {
                "title": "Category Object",
                "description": "A category to group project objects under.",
                "properties": {
                    "title": {
                        "title": "Category Title",
                        "description": "A human-readable identifier for the category.",
                        "type": "string"
                    },
                    "id": {
                        "title": "Category Identifier",
                        "description": "A short identifier designed for programs. It should only contain lowercase alphanumeric characters and a - (dash) for replacing spaces.",
                        "type": "string",
                        "pattern": "^[^A-Z_ ]+$"
                    },
                    "description": {
                        "title": "Category Description",
                        "description": "A description of the category meant to be provided to the user.",
                        "type": "string",
                        "default": ""
                    },
                    "parent": {
                        "title": "Category Parent",
                        "description": "Makes the current category a subcategory of the category with an id that matches this value.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "default": null
                    }
                },
                "required": [
                    "title",
                    "id"
                ],
                "additionalProperties": false
            }
        },
        "projects": {
            "type": "array",
            "_uniqueItems": true,
            "items": {
                "title": "Project Object",
                "description": "An object that holds all the information for a specific project.",
                "properties": {
                    "title": {
                        "title": "Project Title",
                        "description": "The official title of the project.",
                        "type": "string"
                    },
                    "category-ids": {
                        "title": "Project Category",
                        "description": "The list of categories that the project falls under. If it is a list, the categories should be ordered from most to least relevant/applicable to the project.",
                        "type": [
                            "array"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "description": {
                        "title": "Project Description",
                        "description": "A brief 1 sentence summary of the project.",
                        "type": "string"
                    },
                    "lang": {
                        "title": "Project Language",
                        "description": "A three-character ISO 639-2 code representing the primary language of the project, or a list of such codes, with the primary language first.",
                        "type": [
                            "string",
                            "array"
                        ],
                        "minLength": 3,
                        "maxLength": 3,
                        "minItems": 1,
                        "items": {
                            "type": "string",
                            "minLength": 3,
                            "maxLength": 3
                        },
                        "default": "eng"
                    },
                    "country": {
                        "title": "Project Country",
                        "description": "The country that the project operates out of or the country the project is designed for (if designed for a specific location). Null if country is unclear/unspecified.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "minLength": 2,
                        "maxLength": 2,
                        "default": null
                    },
                    "license": {
                        "title": "Project License",
                        "description": "The license that the project's source is under.",
                        "type": "string",
                        "enum": [
                            "mit",
                            "mpl-2.0",
                            "gpl-3.0",
                            "lgpl-3.0",
                            "unlicense",
                            "bsd-2-clause",
                            "isc",
                            "lgpl-2.1",
                            "gpl-2.0",
                            "apache-2.0",
                            "cc0-1.0",
                            "artistic-2.0",
                            "bsd-3-clause",
                            "agpl-3.0",
                            "epl-1.0",
                            "other"
                        ],
                        "default": "other"
                    },
                    "source": {
                        "title": "Project Source",
                        "description": "A URL where the source code to the project can be found.",
                        "type": "string",
                        "pattern": "^https?:\\/\\/.*?\\..*$"
                    },
                    "homepage": {
                        "title": "Project Homepage",
                        "description": "The URL for the project's homepage.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "pattern": "^https?:\\/\\/.*?\\..*$",
                        "default": null
                    },
                    "itunes": {
                        "title": "Project iTunes Page",
                        "description": "The URL for iTunes page for the project's app.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "pattern": "^https:\\/\\/apps\\.apple\\.com\\/.*?app\\/([^\\/]+\\/)?id[0-9]+$",
                        "default": null
                    },
                    "stars": {
                        "title": "Project Stars",
                        "description": "The number of stars a project has on Github, or null if the project is not a Github project.",
                        "type": [
                            "null",
                            "number"
                        ],
                        "multipleOf": 1.0,
                        "minimum": 0,
                        "default": null
                    },
                    "tags": {
                        "title": "Project Tags",
                        "description": "A place to put any metadata for a project. The items can be any type.",
                        "type": "array",
                        "minItems": 1,
                        "default": []
                    },
                    "suggested_by": {
                        "title": "Suggested By",
                        "description": "Name of person who suggested project.",
                        "type": "string"
                    },
                    "date_added": {
                        "title": "Date Added",
                        "description": "Date when project was added.",
                        "type": "string"
                    },
                    "screenshots": {
                        "title": "Screenshots",
                        "description": "Links to screenshot images.",
                        "type": "array"
                    }
                },
                "required": [
                    "title",
                    "category-ids",
                    "source"
                ],
                "additionalProperties": false
            }
        }
    },
    "required": [
        "title",
        "categories",
        "projects"
    ],
    "additionalProperties": false
}