{
  "_comment": "Canonical ecosystem tools catalogue. status: working | wip | proposed. audience: organizers | attendees | developers. order sorts tools within the same status. Fields: name {en,es}, desc {en,es}, status, audience, order, category {en,es}, url (repo or issue), linkKind ('app' → 'Open the tool' for a live app URL; 'npm' → 'View npm package' for a single-package URL; 'npm-scope' → 'View npm packages' for an org/scope URL; omit for a repo URL → 'View repository' unless status is proposed → 'Discuss the idea').",
  "tools": [
    {
      "status": "working",
      "audience": ["organizers"],
      "name": {
        "en": "Organizer kit",
        "es": "Kit del organizador"
      },
      "desc": {
        "en": "The quickest way to start: use a ready-made GitHub repository to publish your community meetups from scratch in minutes, with three free subscribable feeds: OTE, ICS and RSS. Soon integrated with the publishing assistant to speed up distribution to sites that do not consume OTE yet.",
        "es": "La forma más rápida de empezar: usa un repositorio GitHub preparado para publicar los encuentros de tu comunidad desde cero y en minutos, con tres feeds gratuitos y suscribibles: OTE, ICS y RSS. Próximamente integrado con el asistente de publicación para acelerar la distribución a sitios que aún no consumen OTE."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://github.com/OpenTechEvents/ote-template"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "Schema validator",
        "es": "Validador de esquema"
      },
      "desc": {
        "en": "Published as @opentechevents/validate: pure validateEvent/validateFeed functions plus an ote-validate CLI, reused by the editor (live validation) and the kit's CI workflow.",
        "es": "Publicado como @opentechevents/validate: funciones puras validateEvent/validateFeed y un CLI ote-validate, reutilizado por el editor (validación en vivo) y el workflow de CI del kit."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://www.npmjs.com/package/@opentechevents/validate",
      "linkKind": "npm"
    },
    {
      "status": "working",
      "audience": ["organizers"],
      "name": {
        "en": "Event editor / generator",
        "es": "Editor / generador de eventos"
      },
      "desc": {
        "en": "A web form that produces valid OTE JSON, validated live. With ?repo=owner/name it reads the repo's preset and proposes changes via issue→PR; with no repo it works as a standalone generator you copy or download from.",
        "es": "Formulario web que produce JSON OTE válido, validado en vivo. Con ?repo=owner/name lee el preset del repo y propone cambios por issue→PR; sin repo funciona como generador suelto para copiar o descargar."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://tools.opentechevents.org/editor/",
      "linkKind": "app"
    },
    {
      "status": "working",
      "audience": ["organizers", "developers"],
      "order": 5,
      "name": {
        "en": "OTE validator",
        "es": "Validador OTE"
      },
      "desc": {
        "en": "A W3C-style validation page: check a feed or event by URL, file upload or pasted JSON, and get errors pointing at the exact place in the document. Given a site's URL it also follows the <link rel=\"alternate\"> discovery link to find the feed.",
        "es": "Página de validación al estilo del W3C: comprueba un feed o evento por URL, subiendo un fichero o pegando el JSON, y obtén errores que señalan el punto exacto del documento. Si le das la URL de una web, sigue el <link rel=\"alternate\"> de descubrimiento para encontrar el feed."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://validator.opentechevents.org/",
      "linkKind": "app"
    },
    {
      "status": "proposed",
      "audience": ["organizers"],
      "order": 30,
      "name": {
        "en": "Bot to draft OTE events",
        "es": "Bot para redactar eventos OTE"
      },
      "desc": {
        "en": "Describe an event in plain language; the bot drafts the OTE fields, lets you pick one of your usual target repos and sends you to the editor to review, complete and submit it.",
        "es": "Cuentas un evento en lenguaje natural; el bot prepara los campos OTE, te deja elegir uno de tus repos destino habituales y te manda al editor para revisar, completar y enviarlo."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/9"
    },
    {
      "status": "proposed",
      "audience": ["organizers", "developers"],
      "order": 35,
      "name": {
        "en": "MCP server for OTE",
        "es": "Servidor MCP para OTE"
      },
      "desc": {
        "en": "An MCP (Model Context Protocol) server any compatible agent (Claude, ChatGPT, Codex...) can install from its own marketplace: draft an event from a plain-language description, validate it deterministically against the same schemas the CLI and editor use, and answer guidance questions about adopting the spec — grounded in the published prose, not the model's memory.",
        "es": "Servidor MCP (Model Context Protocol) que cualquier agente compatible (Claude, ChatGPT, Codex...) puede instalar desde su propio marketplace: redacta un evento a partir de una descripción en lenguaje natural, lo valida de forma determinista contra los mismos esquemas que usan el CLI y el editor, y responde preguntas de guía sobre cómo adoptar la spec — basándose en la prosa publicada, no en la memoria del modelo."
      },
      "category": {
        "en": "Create & validate",
        "es": "Crear y validar"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/40"
    },
    {
      "status": "proposed",
      "audience": ["organizers"],
      "order": 20,
      "name": {
        "en": "Browser extension",
        "es": "Extensión de navegador"
      },
      "desc": {
        "en": "On your event's page in Meetup, Eventbrite or Luma, it reads the schema.org data the page already exposes, maps it to OTE and pre-fills the registration — only if you are the organiser or have permission, and you review the data before anything is sent. It can also hand you the events.json to publish on your own site.",
        "es": "En la página de tu evento en Meetup, Eventbrite o Luma, lee los datos schema.org que la página ya expone, los mapea a OTE y prerrellena el alta — solo si eres el organizador o tienes permiso, y revisas los datos antes de enviar nada. También te da el events.json para publicarlo en tu propia web."
      },
      "category": {
        "en": "Ingest",
        "es": "Ingesta"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/8"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "iCalendar (.ics) importer",
        "es": "Importador de iCalendar (.ics)"
      },
      "desc": {
        "en": "Built into the editor: upload or paste an .ics (Google Calendar, Meetup…), pick the upcoming events and it prefills the form — the shortest path to adoption for many communities. Also on npm as @opentechevents/import-ics for developers. RSS→OTE import still pending.",
        "es": "Integrado en el editor: sube o pega un .ics (Google Calendar, Meetup…), elige los eventos futuros y precarga el formulario — el camino más corto a la adopción para muchas comunidades. También en npm como @opentechevents/import-ics para desarrolladores. El import RSS→OTE aún está pendiente."
      },
      "category": {
        "en": "Ingest",
        "es": "Ingesta"
      },
      "url": "https://tools.opentechevents.org/editor/",
      "linkKind": "app"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "schema.org / JSON-LD extractor",
        "es": "Extractor de schema.org / JSON-LD"
      },
      "desc": {
        "en": "Built into the editor: paste an event page's HTML, it reads the JSON-LD (schema.org/Event) and prefills the form, flagging what the markup didn't provide. Also on npm as @opentechevents/import-jsonld for developers.",
        "es": "Integrado en el editor: pega el HTML de la página de un evento, lee el JSON-LD (schema.org/Event) y precarga el formulario, marcando lo que el marcado no traía. También en npm como @opentechevents/import-jsonld para desarrolladores."
      },
      "category": {
        "en": "Ingest",
        "es": "Ingesta"
      },
      "url": "https://tools.opentechevents.org/editor/",
      "linkKind": "app"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "OTE → iCalendar",
        "es": "OTE → iCalendar"
      },
      "desc": {
        "en": "Export a feed as .ics so attendees can subscribe from their calendar app. Published as @opentechevents/export-ics and what the organizer kit serves as feed.ics.",
        "es": "Exporta un feed como .ics para suscribirse desde la app de calendario. Publicado como @opentechevents/export-ics y lo que el kit del organizador sirve como feed.ics."
      },
      "category": {
        "en": "Transform",
        "es": "Transformar"
      },
      "url": "https://www.npmjs.com/package/@opentechevents/export-ics",
      "linkKind": "npm"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "OTE → RSS / JSON Feed",
        "es": "OTE → RSS / JSON Feed"
      },
      "desc": {
        "en": "Export to feed readers, the format people have subscribed with for twenty years. Published as @opentechevents/export-rss and what the organizer kit serves as feed.xml.",
        "es": "Exporta a lectores de feeds, el formato con el que la gente lleva veinte años suscribiéndose. Publicado como @opentechevents/export-rss y lo que el kit del organizador sirve como feed.xml."
      },
      "category": {
        "en": "Transform",
        "es": "Transformar"
      },
      "url": "https://www.npmjs.com/package/@opentechevents/export-rss",
      "linkKind": "npm"
    },
    {
      "status": "proposed",
      "audience": ["organizers", "developers"],
      "order": 15,
      "name": {
        "en": "OTE → schema.org/Event",
        "es": "OTE → schema.org/Event"
      },
      "desc": {
        "en": "Generate a schema.org/Event JSON-LD snippet from an OTE event, ready to paste into an event page. It is what turns an event you already wrote into Google's event rich results — date, venue and price shown in search — with no hand-written markup to keep in sync.",
        "es": "Genera un snippet JSON-LD schema.org/Event desde un evento OTE, listo para pegar en la página del evento. Es lo que convierte un evento que ya has escrito en los resultados enriquecidos de Google —fecha, sede y precio en la búsqueda— sin marcado a mano que mantener sincronizado."
      },
      "category": {
        "en": "Transform",
        "es": "Transformar"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/11"
    },
    {
      "status": "proposed",
      "audience": ["organizers", "developers"],
      "order": 25,
      "name": {
        "en": "Hosted conversion service",
        "es": "Servicio de conversión alojado"
      },
      "desc": {
        "en": "Point it at your OTE feed URL and get back live, cached .ics, RSS/Atom and schema.org JSON-LD at their own derived URLs — for organisers and directories who don't want to run and maintain their own exporter.",
        "es": "Le das la URL de tu feed OTE y te devuelve, en vivo y cacheado, .ics, RSS/Atom y JSON-LD schema.org en sus propias URLs derivadas — para organizadores y directorios que no quieren mantener su propio exportador."
      },
      "category": {
        "en": "Transform",
        "es": "Transformar"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/37"
    },
    {
      "status": "proposed",
      "audience": ["organizers"],
      "order": 10,
      "name": {
        "en": "Publishing assistant",
        "es": "Asistente de publicación"
      },
      "desc": {
        "en": "Turn an OTE event into organiser-reviewed outputs for non-OTE channels: copy-paste cheat sheets, email text, contact-form fields, issue links or pull request drafts.",
        "es": "Convierte un evento OTE en salidas revisadas por el organizador para canales que no usan OTE: chuletas de copy-paste, texto de email, campos de formulario, enlaces a issues o borradores de pull request."
      },
      "category": {
        "en": "Publish",
        "es": "Publicar"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/12"
    },
    {
      "status": "proposed",
      "audience": ["attendees"],
      "order": 20,
      "name": {
        "en": "Natural-language event discovery bot",
        "es": "Bot de consulta de eventos"
      },
      "desc": {
        "en": "Ask in plain language for upcoming events by technology, city, date, language, mode or CFP status; the bot searches OTE feeds and returns matching events with source links.",
        "es": "Pregunta en lenguaje natural por próximos eventos según tecnología, ciudad, fecha, idioma, modalidad o CFP; el bot consulta feeds OTE y devuelve eventos relevantes con enlaces a la fuente."
      },
      "category": {
        "en": "Consume",
        "es": "Consumir"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/10"
    },
    {
      "status": "working",
      "audience": ["attendees"],
      "name": {
        "en": "OTE Feed Reader",
        "es": "Lector de Feeds OTE"
      },
      "desc": {
        "en": "Progressive Web App (PWA) to load, browse, and read events published in OTE feeds directly from your browser or installed on your mobile home screen.",
        "es": "Aplicación Web Progresiva (PWA) para cargar, explorar y leer eventos publicados en feeds OTE directamente desde el navegador o instalada en la pantalla de inicio del móvil."
      },
      "category": {
        "en": "Consume",
        "es": "Consumir"
      },
      "url": "https://reader.opentechevents.org/",
      "linkKind": "app"
    },
    {
      "status": "proposed",
      "audience": ["attendees"],
      "order": 10,
      "name": {
        "en": "Event subscriptions & reminders",
        "es": "Suscripciones y recordatorios de eventos"
      },
      "desc": {
        "en": "Background subscriptions for OTE feeds: save topic filters, receive push or email notifications and event, CFP or ticket reminders.",
        "es": "Suscripciones en segundo plano para feeds OTE: guardar filtros por tema, recibir notificaciones push/email y recordatorios de eventos, CFPs o entradas."
      },
      "category": {
        "en": "Consume",
        "es": "Consumir"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/issues/13"
    },
    {
      "status": "working",
      "audience": ["organizers", "developers"],
      "name": {
        "en": "Embeddable widget",
        "es": "Widget embebible"
      },
      "desc": {
        "en": "Embeddable event views for one or more OTE feeds, with configurable layouts such as list or calendar and optional filters by topic, place, mode or date.",
        "es": "Vistas embebibles para uno o varios feeds OTE, con layouts configurables como lista o calendario y filtros opcionales por tema, lugar, modalidad o fecha."
      },
      "category": {
        "en": "Consume",
        "es": "Consumir"
      },
      "url": "https://tools.opentechevents.org/embed/",
      "linkKind": "app"
    },
    {
      "status": "working",
      "audience": ["organizers", "developers"],
      "order": 50,
      "name": {
        "en": "OTE feed badge",
        "es": "Badge de feed OTE"
      },
      "desc": {
        "en": "A static, RSS-style SVG badge that makes a community's feed visible in a README or site footer — full button or icon-only variant, no service or build step involved. Opening the feed in compatible tools, or turning it into an embeddable widget, is still proposed.",
        "es": "Badge SVG estático, al estilo RSS, para hacer visible el feed de una comunidad en un README o en el pie de página — botón completo o solo icono, sin servicio ni paso de build de por medio. Abrir el feed en herramientas compatibles, o convertirlo en un widget embebible, sigue propuesto."
      },
      "category": {
        "en": "Consume",
        "es": "Consumir"
      },
      "url": "https://github.com/OpenTechEvents/opentechevents-spec/tree/main/docs/badge"
    },
    {
      "status": "working",
      "audience": ["developers"],
      "name": {
        "en": "Reference SDKs",
        "es": "SDKs de referencia"
      },
      "desc": {
        "en": "The JS/TS SDK is published under the @opentechevents/* npm scope: validate, export-ics, export-rss, import-ics, import-jsonld, build-feed — pure functions to read, write and validate OTE. Python and an online playground still pending.",
        "es": "El SDK JS/TS está publicado en el scope npm @opentechevents/*: validate, export-ics, export-rss, import-ics, import-jsonld, build-feed — funciones puras para leer, escribir y validar OTE. Python y un playground online siguen pendientes."
      },
      "category": {
        "en": "Libraries",
        "es": "Librerías"
      },
      "url": "https://www.npmjs.com/org/opentechevents",
      "linkKind": "npm-scope"
    }
  ]
}
