{
  "name": "jprodriguez-skills",
  "description": "Skills de ingeniería en Markdown para Azure DevOps, .NET, Astro, Python y SEO local.",
  "author": {
    "name": "Jesús Pedro Rodríguez Castro",
    "url": "https://jesusprodriguez.com"
  },
  "license": {
    "id": "CC-BY-4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "installer": "https://jesusprodriguez.com/skills/install.sh",
  "marketplace": "https://jesusprodriguez.com/skills/marketplace.json",
  "generated": "2026-09-25T04:35:24.498Z",
  "count": 24,
  "skills": [
    {
      "slug": "azure-devops-cli",
      "name": "azure-devops-cli",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Base de acceso a Azure DevOps desde la terminal y la REST API - autenticación con PAT, az devops, consultas WIQL, OData de Analytics y paginación. Úsala como cimiento de cualquier tarea que lea o escriba en Azure Repos, Boards o Pipelines.",
      "summary": {
        "es": "Cimiento de acceso a Azure DevOps: PAT con el ámbito justo, defaults de la CLI, WIQL, OData de Analytics y paginación honesta.",
        "en": "The access foundation for Azure DevOps: a PAT with the right scope, CLI defaults, WIQL, Analytics OData and honest pagination."
      },
      "example": {
        "es": "Configura el acceso a Azure DevOps en este repo y comprueba que el PAT tiene los ámbitos que hacen falta.",
        "en": "Set up Azure DevOps access in this repo and check the PAT has the scopes it needs."
      },
      "tech": "Azure DevOps",
      "category": "automate",
      "bundle": "azure-devops",
      "requires": [],
      "bytes": 4609,
      "sha256": "0cd4f97858a02234e24e1737b439365d02936cc1fc559e7350d6d6e90bb1e192",
      "url": "https://jesusprodriguez.com/skills/azure-devops-cli/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-devops-cli/",
      "reference": null
    },
    {
      "slug": "azure-pr-review",
      "name": "azure-pr-review",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Revisa una pull request de Azure Repos de principio a fin - trae el diff, lo analiza por criterios de riesgo y deja comentarios inline en el hilo correcto. Úsala cuando te pidan revisar una PR concreta o preparar el comentario de revisión antes de aprobar.",
      "summary": {
        "es": "Revisar una pull request por criterios de riesgo —correctitud, contrato, seguridad— y dejar los comentarios anclados a la línea que toca.",
        "en": "Review a pull request against risk criteria —correctness, contract, security— and leave every comment anchored to the right line."
      },
      "example": {
        "es": "Revisa la PR 4821 del repo Expedientes y deja los comentarios anclados en el hilo que toca.",
        "en": "Review PR 4821 in the Expedientes repo and leave the comments anchored to the right thread."
      },
      "tech": "Azure DevOps",
      "category": "review",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 4626,
      "sha256": "a4fb3c3f15b25f5eb58f7e800b5243353df006d3da2fbc872697303f392db734",
      "url": "https://jesusprodriguez.com/skills/azure-pr-review/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pr-review/",
      "reference": null
    },
    {
      "slug": "azure-pr-inbox",
      "name": "azure-pr-inbox",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Resume las pull requests pendientes de Azure Repos priorizadas por lo que bloquea a otros - las que esperan tu voto, las tuyas paradas y las que llevan demasiado tiempo abiertas. Úsala al empezar el día o cuando preguntes qué PRs tienes pendientes.",
      "summary": {
        "es": "Bandeja de PRs priorizada por quién bloquea a quién: lo que espera tu voto, lo tuyo parado y lo que lleva demasiado abierto.",
        "en": "A PR inbox prioritised by who is blocking whom: what is waiting on your vote, what of yours is stalled, and what has been open too long."
      },
      "example": {
        "es": "Dime qué pull requests tengo pendientes esta mañana y cuáles están bloqueando a alguien.",
        "en": "Tell me which pull requests are on my plate this morning and which ones are blocking someone."
      },
      "tech": "Azure DevOps",
      "category": "report",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 3603,
      "sha256": "c4e0d209b8ab44082aa4bd389cf0dcff8c438fa30fe407f751e5681985766ee6",
      "url": "https://jesusprodriguez.com/skills/azure-pr-inbox/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pr-inbox/",
      "reference": null
    },
    {
      "slug": "azure-project-status",
      "name": "azure-project-status",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Genera el estado real de un proyecto o sprint en Azure Boards - avance frente a lo comprometido, bloqueos, riesgos y qué llega y qué no. Úsala antes de una daily, una demo o un comité, o cuando pregunten cómo va el proyecto.",
      "summary": {
        "es": "Informe de estado que sirve para decidir: avance frente a lo comprometido, bloqueos, scope entrante y qué no llega.",
        "en": "A status report you can actually decide from: progress against what was committed, blockers, incoming scope and what will not make it."
      },
      "example": {
        "es": "Prepara el estado del sprint actual para la demo del viernes, con lo que no llega marcado.",
        "en": "Prepare the current sprint status for Friday’s demo, flagging what will not make it."
      },
      "tech": "Azure DevOps",
      "category": "report",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 3585,
      "sha256": "75ee04dc94263e6e671f6d4f75724a35aec0605485724693b94b390fbc7d4b2d",
      "url": "https://jesusprodriguez.com/skills/azure-project-status/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-project-status/",
      "reference": null
    },
    {
      "slug": "azure-backlog-health",
      "name": "azure-backlog-health",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Audita el backlog de Azure Boards y avisa de lo que se está pudriendo - items sin estimar, sin criterios de aceptación, parados, duplicados o bugs sin triar. Úsala antes de un refinamiento o como revisión periódica del backlog.",
      "summary": {
        "es": "Auditoría del backlog con umbrales escritos: sin estimar, sin criterios, parados, bugs sin triar, épicas sin cerrar y zombis.",
        "en": "A backlog audit with written thresholds: unestimated, criteria-less, stalled items, untriaged bugs, unclosed epics and zombies."
      },
      "example": {
        "es": "Audita el backlog del proyecto antes del refinamiento del martes y priorízame los avisos.",
        "en": "Audit the project backlog before Tuesday’s refinement and rank the alerts for me."
      },
      "tech": "Azure DevOps",
      "category": "audit",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 3442,
      "sha256": "ad8a1efce2b621932ff14b5e5da97bf9d3e99644262b485f12490155e5d573f3",
      "url": "https://jesusprodriguez.com/skills/azure-backlog-health/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-backlog-health/",
      "reference": null
    },
    {
      "slug": "azure-pbi-authoring",
      "name": "azure-pbi-authoring",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Escribe Product Backlog Items de Azure Boards que se puedan estimar y cerrar sin discusión - criterios de aceptación verificables, alcance acotado y campos completos. Úsala al crear un PBI, un bug o una feature, o al reescribir uno que llega vacío al refinamiento.",
      "summary": {
        "es": "PBIs que se pueden estimar y cerrar sin discusión: criterios verificables, fuera de alcance explícito y campos completos.",
        "en": "PBIs you can estimate and close without argument: verifiable criteria, explicit out-of-scope and complete fields."
      },
      "example": {
        "es": "Reescribe el PBI 3120: llega sin criterios de aceptación y sin alcance definido.",
        "en": "Rewrite PBI 3120: it arrives with no acceptance criteria and no defined scope."
      },
      "tech": "Azure DevOps",
      "category": "plan",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 4006,
      "sha256": "72f93a649a5908a275e8c62e293dad9fba3b746529fb23290e3598d2aa4588e8",
      "url": "https://jesusprodriguez.com/skills/azure-pbi-authoring/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pbi-authoring/",
      "reference": null
    },
    {
      "slug": "azure-sprint-planning",
      "name": "azure-sprint-planning",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Descompone PBIs de Azure Boards en tareas estimadas con dependencias y orden de ejecución, y comprueba si el sprint cabe. Úsala en la planificación de sprint, al partir un PBI grande o cuando preguntes qué hay que hacer para cerrar un item.",
      "summary": {
        "es": "Descomposición de PBIs en tareas de medio día a dos, con dependencias externas señaladas y la pregunta de si el sprint cabe.",
        "en": "Breaking PBIs into half-day to two-day tasks, with external dependencies flagged and the question of whether the sprint actually fits."
      },
      "example": {
        "es": "Descompón el PBI 3477 en tareas y dime si el sprint cabe con la capacidad que tenemos.",
        "en": "Break PBI 3477 into tasks and tell me whether the sprint fits the capacity we have."
      },
      "tech": "Azure DevOps",
      "category": "plan",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 4272,
      "sha256": "abc5ed0506274b5a8688750261f0ac57553c92c44c26e10b0e83b380fe7b6aae",
      "url": "https://jesusprodriguez.com/skills/azure-sprint-planning/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-sprint-planning/",
      "reference": null
    },
    {
      "slug": "azure-pbi-plan",
      "name": "azure-pbi-plan",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Convierte un PBI o Bug de Azure Boards en un plan de implementación anclado al código real, sin escribir ni una línea. Lee el work item, recorre el repositorio, propone el enfoque y adjunta el plan al propio work item. Úsala antes de implementar algo que toca varias capas, o cuando quieras validar el enfoque con el equipo antes de gastar dos días.",
      "summary": {
        "es": "Un PBI convertido en plan anclado al código real, antes de escribir una línea: enfoque razonado, cambios por capa y checklist ejecutable.",
        "en": "A PBI turned into a plan anchored to the real code before a line is written: a reasoned approach, changes per layer and an executable checklist."
      },
      "example": {
        "es": "Planifica el PBI 5104 contra este repositorio y adjunta el plan al work item.",
        "en": "Plan PBI 5104 against this repository and attach the plan to the work item."
      },
      "tech": "Azure DevOps",
      "category": "plan",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 5544,
      "sha256": "e4999c298a77ff9f426d37e5563ace48cdc72c46a7a4a6c1bac733804b7f2ca0",
      "url": "https://jesusprodriguez.com/skills/azure-pbi-plan/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pbi-plan/",
      "reference": null
    },
    {
      "slug": "azure-pbi-implement",
      "name": "azure-pbi-implement",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Lleva un PBI o Bug de Azure Boards de su ID a un árbol de trabajo listo para revisar - lee el work item, crea la rama, implementa contra los criterios de aceptación, pasa build y tests, actualiza el changelog y escribe la descripción de la PR. Nunca commitea, ni hace push, ni abre la pull request. Úsala cuando arranques un work item por su número.",
      "summary": {
        "es": "Del ID del work item a un árbol listo para revisar: rama, implementación contra criterios, build y tests, changelog y nota de PR. Sin commitear.",
        "en": "From work item ID to a tree ready for review: branch, implementation against the criteria, build and tests, changelog and PR note. Nothing committed."
      },
      "example": {
        "es": "Implementa el Bug 5210 y déjalo listo para revisar, sin commitear nada.",
        "en": "Implement Bug 5210 and leave it ready for review, without committing anything."
      },
      "tech": "Azure DevOps",
      "category": "build",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 4803,
      "sha256": "e688b272a54ee3004a2783a4c3615de2cb744541c4ede4a53a00dbcd51d21a27",
      "url": "https://jesusprodriguez.com/skills/azure-pbi-implement/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pbi-implement/",
      "reference": null
    },
    {
      "slug": "azure-repos-audit",
      "name": "azure-repos-audit",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Audita el código de varios repositorios de Azure Repos a la vez - inventario, actividad, dependencias vulnerables, deuda técnica y divergencia de convenciones. Úsala cuando haya que hacerse una foto del estado del código de un proyecto o decidir dónde invertir esfuerzo de mantenimiento.",
      "summary": {
        "es": "Foto del código de varios repos a la vez: actividad, dependencias vulnerables, puntos calientes, divergencia y secretos en el historial.",
        "en": "A snapshot of the code across several repos at once: activity, vulnerable dependencies, hotspots, divergence and secrets in the history."
      },
      "example": {
        "es": "Haz una foto del estado del código de los repos del proyecto Expedientes.",
        "en": "Give me a snapshot of the state of the code across the Expedientes project repos."
      },
      "tech": "Azure DevOps",
      "category": "audit",
      "bundle": "azure-devops",
      "requires": [
        "azure-devops-cli"
      ],
      "bytes": 4166,
      "sha256": "65e9ade71af2f7c29db05d4390ae4b7fb309384f1459bf7320d098a9b35bfa26",
      "url": "https://jesusprodriguez.com/skills/azure-repos-audit/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-repos-audit/",
      "reference": null
    },
    {
      "slug": "azure-pipelines",
      "name": "azure-pipelines",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Escribe y depura pipelines YAML de Azure DevOps - etapas, plantillas reutilizables, caché, variable groups y despliegues con aprobación. Úsala al crear o modificar azure-pipelines.yml, al montar CI para un repo nuevo o cuando una build falle solo en el agente.",
      "summary": {
        "es": "Pipelines YAML que no bloquean al equipo: un artefacto para todos los entornos, plantillas versionadas, secretos fuera del repo.",
        "en": "YAML pipelines that do not block the team: one artefact for every environment, versioned templates, secrets kept out of the repo."
      },
      "example": {
        "es": "Revisa azure-pipelines.yml: la build pasa en local y falla solo en el agente.",
        "en": "Review azure-pipelines.yml: the build passes locally and fails only on the agent."
      },
      "tech": "Azure DevOps",
      "category": "automate",
      "bundle": "azure-devops",
      "requires": [],
      "bytes": 4164,
      "sha256": "f8d03f8b08a036810001b7b02a6ff1b986ec0397da194f14ae074df4055d6607",
      "url": "https://jesusprodriguez.com/skills/azure-pipelines/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/azure-pipelines/",
      "reference": null
    },
    {
      "slug": "astro-static-site",
      "name": "astro-static-site",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Construye y mantiene sitios estáticos en Astro 4/5 con content collections, imágenes optimizadas e islas mínimas. Úsala al crear páginas, componentes .astro, colecciones de contenido o al revisar el rendimiento de un sitio Astro.",
      "summary": {
        "es": "Convenciones para sitios Astro con salida estática: content collections, imágenes optimizadas e islas solo donde hacen falta.",
        "en": "Conventions for Astro sites with static output: content collections, optimised images and islands only where they are needed."
      },
      "example": {
        "es": "Añade una content collection de notas a este sitio Astro, con su página de listado.",
        "en": "Add a notes content collection to this Astro site, with its listing page."
      },
      "tech": "Astro",
      "category": "build",
      "bundle": "web",
      "requires": [],
      "bytes": 2922,
      "sha256": "036d8bc09b7d1f4f85f1e4b572da8e61ee5c951873642a6c720ef5772ec3ce31",
      "url": "https://jesusprodriguez.com/skills/astro-static-site/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/astro-static-site/",
      "reference": null
    },
    {
      "slug": "dotnet-web-api",
      "name": "dotnet-web-api",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Diseña, implementa y revisa APIs REST en .NET 8 con Minimal APIs o controladores, EF Core y validación. Úsala al crear endpoints, configurar el pipeline, modelar entidades con EF Core o depurar consultas lentas.",
      "summary": {
        "es": "Estructura y checklist para una API REST en .NET 8: Minimal APIs por recurso, EF Core sin N+1 y errores en ProblemDetails.",
        "en": "Structure and checklist for a REST API in .NET 8: Minimal APIs per resource, EF Core without N+1, and errors as ProblemDetails."
      },
      "example": {
        "es": "Monta el endpoint de pedidos en .NET 8 siguiendo la estructura que ya tiene el proyecto.",
        "en": "Build the orders endpoint in .NET 8, following the structure the project already has."
      },
      "tech": ".NET Core",
      "category": "build",
      "bundle": "dotnet",
      "requires": [],
      "bytes": 3192,
      "sha256": "4d563ed89717336dba3b2d96cdb6e66ca1f9ddb275f33430f5b915b9fc21db96",
      "url": "https://jesusprodriguez.com/skills/dotnet-web-api/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/dotnet-web-api/",
      "reference": null
    },
    {
      "slug": "bug-hunt",
      "name": "bug-hunt",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Búsqueda dirigida de bugs de correctitud en código C#/.NET y TypeScript - concurrencia, nulos, fechas, transacciones a medias y errores tragados. Úsala cuando pidan encontrar bugs, revisar un módulo sospechoso o entender por qué algo falla de forma intermitente.",
      "summary": {
        "es": "Búsqueda dirigida de bugs de correctitud en C# y TypeScript: concurrencia, nulos, fechas, transacciones a medias y errores tragados.",
        "en": "A targeted hunt for correctness bugs in C# and TypeScript: concurrency, nulls, dates, half-finished transactions and swallowed errors."
      },
      "example": {
        "es": "Busca bugs de correctitud en el módulo de facturación: hay un importe que sale mal de vez en cuando.",
        "en": "Hunt for correctness bugs in the billing module: an amount comes out wrong every now and then."
      },
      "tech": ".NET Core",
      "category": "review",
      "bundle": "dotnet",
      "requires": [],
      "bytes": 4457,
      "sha256": "b62898a471c8684c6514580849b408d5b85128320518165d8d45cf26448d6f75",
      "url": "https://jesusprodriguez.com/skills/bug-hunt/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/bug-hunt/",
      "reference": null
    },
    {
      "slug": "microsoft-docs",
      "name": "microsoft-docs",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Consulta la documentación oficial de Microsoft antes de escribir código con SDKs de Azure, librerías de .NET o APIs de Microsoft, en lugar de tirar de memoria. Sirve para verificar que un método existe, comprobar una firma, encontrar un ejemplo que funciona y descartar patrones obsoletos. Úsala al usar una API por primera vez o cuando un error no cuadre con lo que esperabas.",
      "summary": {
        "es": "Verificar contra la documentación oficial antes de escribir código con SDKs de Azure o .NET: que el método existe, que la firma es esa y que el patrón no está obsoleto.",
        "en": "Checking the official docs before writing code against Azure or .NET SDKs: that the method exists, that the signature is right, and that the pattern is not deprecated."
      },
      "example": {
        "es": "Comprueba en la documentación oficial si BlobClient.UploadAsync admite ese overload.",
        "en": "Check the official docs on whether BlobClient.UploadAsync accepts that overload."
      },
      "tech": ".NET Core",
      "category": "document",
      "bundle": "dotnet",
      "requires": [],
      "bytes": 4034,
      "sha256": "4c6eb3b605e31522534316f671948fa9d33f0dd916a1ec6241695aad972d0638",
      "url": "https://jesusprodriguez.com/skills/microsoft-docs/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/microsoft-docs/",
      "reference": null
    },
    {
      "slug": "github-pr-review",
      "name": "github-pr-review",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Revisa una pull request de GitHub o una merge request de GitLab midiendo primero el radio de impacto - qué más se rompe si esto se rompe - y después seguridad, cambios de contrato y cobertura. Úsala antes de mergear algo que toca una librería compartida, un contrato de API o el esquema de la base de datos, o cuando una PR sea demasiado grande para leerla de arriba abajo.",
      "summary": {
        "es": "Revisar una PR empezando por el radio de impacto —qué más se rompe si esto se rompe— y siguiendo por seguridad, contratos y cobertura.",
        "en": "Reviewing a PR starting from the blast radius —what else breaks if this breaks— and moving on to security, contracts and coverage."
      },
      "example": {
        "es": "Revisa el PR 312: toca la librería compartida y quiero saber qué más se rompe.",
        "en": "Review PR 312: it touches the shared library and I want to know what else breaks."
      },
      "tech": "GitHub",
      "category": "review",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 5508,
      "sha256": "471788462af043f72b8b54512cb3fd859a48753152ed8aa721a43ee3fa708d5f",
      "url": "https://jesusprodriguez.com/skills/github-pr-review/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/github-pr-review/",
      "reference": null
    },
    {
      "slug": "code-tour",
      "name": "code-tour",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Convierte la explicación de un código en un recorrido guiado que se abre dentro del editor, con cada paso anclado a un fichero y una línea reales. Úsala para el onboarding de alguien que entra al proyecto, para explicar una arquitectura, para acompañar una pull request grande o para dejar por escrito la causa raíz de una incidencia.",
      "summary": {
        "es": "Recorridos guiados que se abren dentro del editor, con cada paso anclado a un fichero y una línea que existen de verdad.",
        "en": "Guided walkthroughs that open inside the editor, with every step anchored to a file and a line that actually exist."
      },
      "example": {
        "es": "Prepara un recorrido de onboarding por la capa de dominio para alguien que entra el lunes.",
        "en": "Prepare an onboarding tour of the domain layer for someone starting on Monday."
      },
      "tech": "VS Code",
      "category": "document",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 4943,
      "sha256": "1ee6e6b2551e3e5bb6d46074528f44adfafd51d8d7679ca7d5f90a6080b32ff8",
      "url": "https://jesusprodriguez.com/skills/code-tour/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/code-tour/",
      "reference": null
    },
    {
      "slug": "excalidraw-diagrams",
      "name": "excalidraw-diagrams",
      "version": "1.0.0",
      "updated": "2026-08-17",
      "description": "Genera ficheros .excalidraw a partir de una descripción en lenguaje natural - diagramas de flujo, arquitectura, secuencia, entidad-relación, mapas mentales y carriles por rol. El resultado se abre en Excalidraw y se sigue editando a mano. Úsala cuando haya que explicar un proceso o un sistema con una imagen y no quieras colocar cada caja tú.",
      "summary": {
        "es": "Diagramas generados desde una descripción que salen editables: flujo, arquitectura, secuencia, entidad-relación y carriles por rol.",
        "en": "Diagrams generated from a description that come out editable: flow, architecture, sequence, entity-relationship and swimlanes."
      },
      "example": {
        "es": "Dibuja el flujo de alta de un expediente, desde el formulario hasta la cola de proceso.",
        "en": "Draw the flow for creating a case file, from the form to the processing queue."
      },
      "tech": "Diagramas",
      "category": "document",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 4598,
      "sha256": "021bf8cdab7b43131b7f495721af435f93569788baacd5098348c30312c6882c",
      "url": "https://jesusprodriguez.com/skills/excalidraw-diagrams/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/excalidraw-diagrams/",
      "reference": null
    },
    {
      "slug": "python-automation",
      "name": "python-automation",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Escribe scripts de automatización y procesamiento de datos en Python que se puedan reejecutar sin miedo. Úsala al crear scripts de CLI, tareas programadas, tratamiento de ficheros o integraciones con APIs y LLMs.",
      "summary": {
        "es": "Scripts de automatización que se pueden reejecutar sin miedo: dry-run, logging, códigos de salida honestos e idempotencia.",
        "en": "Automation scripts you can re-run without fear: dry-run, logging, honest exit codes and idempotency."
      },
      "example": {
        "es": "Escribe un script que sincronice la carpeta de facturas con el SFTP, con dry-run por defecto.",
        "en": "Write a script that syncs the invoices folder with the SFTP, dry-run by default."
      },
      "tech": "Python",
      "category": "automate",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 3154,
      "sha256": "5ba18d15ce93522a754af282a4e0f8d98b7eacd1fbadd0d4badf54537b49e361",
      "url": "https://jesusprodriguez.com/skills/python-automation/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/python-automation/",
      "reference": null
    },
    {
      "slug": "pdf-report",
      "name": "pdf-report",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Genera informes en PDF reproducibles desde Python con ReportLab - portada, tablas que no se cortan, tipografías embebidas y salida idéntica en cada ejecución. Úsala al exportar a PDF un informe de estado, una auditoría, un CV o cualquier documento que se vaya a enviar fuera.",
      "summary": {
        "es": "Informes en PDF reproducibles con ReportLab: tablas que no se cortan, tipografías embebidas y la misma salida en cada ejecución.",
        "en": "Reproducible PDF reports with ReportLab: tables that do not break, embedded fonts and identical output on every run."
      },
      "example": {
        "es": "Exporta este informe de auditoría a PDF con las tablas sin cortarse entre páginas.",
        "en": "Export this audit report to PDF with the tables not breaking across pages."
      },
      "tech": "Python",
      "category": "document",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 4956,
      "sha256": "9b3aa523ef067c833b80b1b69df1f0628b072b85beb66b2317eaed66a8c11d16",
      "url": "https://jesusprodriguez.com/skills/pdf-report/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/pdf-report/",
      "reference": null
    },
    {
      "slug": "landing-negocio-local",
      "name": "landing-negocio-local",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Estructura, textos y conversión de una web de una sola página para un negocio local o profesional autónomo. Úsala al montar la landing de un cliente, escribir sus textos o revisar por qué una web bonita no trae llamadas.",
      "summary": {
        "es": "Web de una página para un negocio local: estructura, textos en segunda persona, una sola llamada a la acción y carga rápida en móvil.",
        "en": "A one-page site for a local business: structure, second-person copy, a single call to action and fast loading on mobile."
      },
      "example": {
        "es": "Monta la landing de una clínica dental en Alcorcón, con un solo formulario de contacto.",
        "en": "Build the landing page for a dental clinic in Alcorcón, with a single contact form."
      },
      "tech": "Conversión",
      "category": "build",
      "bundle": "web",
      "requires": [],
      "bytes": 4071,
      "sha256": "a5f9a5981b70947c243b56e480900b56e4668b69daec2cf8370e30a142b76e88",
      "url": "https://jesusprodriguez.com/skills/landing-negocio-local/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/landing-negocio-local/",
      "reference": null
    },
    {
      "slug": "seo-local",
      "name": "seo-local",
      "version": "1.0.0",
      "updated": "2026-08-16",
      "description": "Posicionamiento local para un negocio con zona de servicio - perfil de empresa en Google, coherencia NAP, datos estructurados LocalBusiness y páginas por servicio y ciudad. Úsala al publicar la web de un negocio local o cuando no aparezca en las búsquedas de su zona.",
      "summary": {
        "es": "Posicionamiento en la propia ciudad: perfil de empresa, coherencia NAP, JSON-LD de LocalBusiness y páginas por servicio con contenido propio.",
        "en": "Ranking in your own city: business profile, NAP consistency, LocalBusiness JSON-LD and per-service pages with original content."
      },
      "example": {
        "es": "Esta web de un taller en Getafe no aparece buscando «taller Getafe»: dime por qué.",
        "en": "This site for a garage in Getafe does not show up for “garage Getafe”: tell me why."
      },
      "tech": "SEO local",
      "category": "audit",
      "bundle": "web",
      "requires": [],
      "bytes": 4185,
      "sha256": "c99585d9b494aab6702012f456566b6787dbe074761314937193c386c9805bc9",
      "url": "https://jesusprodriguez.com/skills/seo-local/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/seo-local/",
      "reference": null
    },
    {
      "slug": "artifact-creator",
      "name": "artifact-creator",
      "version": "1.0.0",
      "updated": "2026-08-23",
      "description": ">- Genera artefactos interactivos autocontenidos (estilo Claude Artifacts) como archivos HTML que se abren automáticamente en el navegador local. Soporta aplicaciones web interactivas, dashboards, juegos, visualizaciones de datos, documentos con formato, diagramas SVG y más. Úsala cuando el usuario pida \"crear un artefacto\", \"hazme una app rápida\", \"crea una visualización\", \"genera un diagrama\", \"hazme un dashboard\", \"crea un juego\", \"genera un documento visual\", \"abre esto en el navegador\", \"crea algo interactivo\", o cualquier petición que implique generar contenido visual/interactivo autocontenido para previsualizar.",
      "summary": {
        "es": "Artefactos interactivos autocontenidos al estilo Claude: un HTML con todo inlineado que se abre en el navegador, listo para probar.",
        "en": "Self-contained interactive artifacts à la Claude: a single HTML file with everything inlined that opens in the browser, ready to test."
      },
      "example": {
        "es": "Crea un artefacto con un juego Snake interactivo con diseño premium.",
        "en": "Create an artifact with an interactive Snake game with premium design."
      },
      "tech": "HTML / CSS",
      "category": "build",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 8775,
      "sha256": "0e8e6da373231a371212c4dd61aff883eb2a7404b254acbf122b161ad4b10358",
      "url": "https://jesusprodriguez.com/skills/artifact-creator/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/artifact-creator/",
      "reference": null
    },
    {
      "slug": "eli5",
      "name": "eli5",
      "version": "1.0.0",
      "updated": "2026-08-23",
      "description": ">- Explicaciones claras y fundamentadas a cualquier nivel de profundidad (ELI5, ELI10, ELI15, Experto), con analogías intuitivas, diagramas visuales y fuentes verificables (The Answer Has Receipts). Inspirada en eli5.cc. Úsala cuando el usuario pida \"explícame cómo funciona\", \"hazme un ELI5 de\", \"explica como si tuviera 5 años\", \"desglosa este concepto complejo\", \"enséñame este tema paso a paso\", \"crea un plan de aprendizaje\", o cuando necesite entender una arquitectura, algoritmo, bug, tecnología o concepto con fuentes y modelos mentales claros.",
      "summary": {
        "es": "Explicaciones claras a 4 niveles de profundidad (ELI5 a Experto): analogías que se entienden, diagramas visuales y fuentes verificadas.",
        "en": "Clear explanations across 4 depth levels (ELI5 to Expert): intuitive analogies, visual diagrams, and verified sources."
      },
      "example": {
        "es": "Explícame cómo funciona la autenticación con OAuth2 y JWT en 4 niveles de profundidad, empezando por un ELI5.",
        "en": "Explain how OAuth2 and JWT authentication work across 4 depth levels, starting with an ELI5."
      },
      "tech": "IA aplicada",
      "category": "document",
      "bundle": "ingenieria",
      "requires": [],
      "bytes": 5428,
      "sha256": "0fd005b8a436dd3eb4301ce6ed42347aa34eb6964987cf3df15a920868ccf238",
      "url": "https://jesusprodriguez.com/skills/eli5/SKILL.md",
      "page": "https://jesusprodriguez.com/skills/eli5/",
      "reference": null
    }
  ]
}