{
    "$id": "https://example.com/address.schema.json",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "description": "Gemstate groups",
    "type": "array",
    "items": {
        "type": "object",
        "required": [
            "name",
            "id",
            "locality",
            "addedDate"
        ],
        "additionalProperties": false,
        "properties": {
            "name": {
                "description": "Full name of the group",
                "type": "string"
            },
            "id": {
                "description": "Unique identifier for the group. Feel free to leave this empty string when submitting PR; a value that works well with gemstate.io will be assigned by approver.",
                "type": "string"
            },
            "locality": {
                "description": "Incorporated city/town where this group typically meets in-person, 'Online' if the group doesn't meet in-person, or 'Idaho' if no specific location",
                "type": "string"
            },
            "addedDate": {
                "description": "Date the group was added to this list, intended to help people find new groups. (ISO 8601 format)",
                "format": "date",
                "type": "string"
            },
            "description": {
                "description": "Optional brief description of the group",
                "type": "string"
            },
            "tla": {
                "description": "Optional acronym used by the group, e.g. Boise Software Developers Group members always call themselves BSDG.",
                "type": "string"
            },
            "url": {
                "description": "Optional (strongly encouraged) URL providing more information about the group, and ideally about the next meeting time & place",
                "type": "string"
            },
            "meetupComGroupName": {
                "description": "If meetup.com is used for scheduling, the group name (seen in URLs as https://www.meetup.com/<meetupComGroupName>/",
                "type": "string"
            },
            "eventbriteOrganizerId": {
                "description": "If eventbrite.com is used for scheduling, the Eventbrite organizer ID (typically a number?)",
                "type": "string"
            },
            "eventbriteKeywords": {
                "description": "If eventbrite.com is used, a list of keywords used to narrow the events to those specific to this group",
                "type": "array",
                "items": {
                    "type": "string"
                }
            },
            "iCalendarUrl": {
                "description": "If a generic web calendar is used for scheduling, its iCalendar/RFC5545 URL (e.g. the .ical URLs provided for public Google Calendars)",
                "type": "string"
            },
            "abandonedDate": {
                "type": "string",
                "format": "date",
                "description": "If a group's no longer meeting, add this to record the last date it was known. This could be helpful in determining past interest, rather than deleting the group entirely. (ISO 8601 format)"
            },
            "schedCom": {
                "description": "If sched.com is used to help people choose sessions within big events, add an item per event here",
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "name"
                    ]
                },
                "additionalProperties": false,
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Conference name (seen in sched.com URLs as https://<conference_name>.sched.com)"
                    }
                }
            }
        }
    }
}