Badges Dinámicos para Proyectos - Guía Completa Autor: Abkrim Última actualización: 2026-06-22 Propósito: Documentación unificada de badges para los proyectos AichaDigital Principio rector: un badge dinámico no debe poder mentir . Cada badge se emite solo si su fuente de datos existe; los que no tienen un badge dinámico fiable (nivel de PHPStan, versión de Laravel) se regeneran desde la fuente local en lugar de mantenerse a mano. Herramienta: skill /ai-badges Para aplicar esta guía sin trabajo manual existe el skill de Claude Code /ai-badges . Lee el estado real del paquete ( composer.json , phpstan.neon , workflows de CI) y regenera un bloque de badges canónico en el README.md , de forma idempotente, entre marcadores: ...badges... Solo escribe entre los marcadores. El resto del README.md no se toca. Dos capas, todo condicional: essential (siempre): Latest Version, Total Downloads, Tests, Code Style, PHPStan level, PHP Version, Laravel Version, License. extra (opt-in): Code Coverage, Repo Status, Last Commit. Cada badge se emite solo si su fuente existe (no pone coverage sin Codecov, ni PHPStan sin phpstan.neon ). Invocación: /ai-badges check (dry-run, no escribe), /ai-badges (perfil guardado en el marcador), /ai-badges essential | /ai-badges extra . Reporta los badges omitidos con su motivo y la coherencia de la licencia ( composer.json vs badge vs fichero LICENSE ). El catálogo de plantillas de abajo es la referencia canónica; el skill las implementa. Plantilla Base Adaptable # {NOMBRE_PROYECTO} [![Latest Version](https://img.shields.io/packagist/v/{vendor}/{package}.svg?style=flat-square)](https://packagist.org/packages/{vendor}/{package}) [![Total Downloads](https://img.shields.io/packagist/dt/{vendor}/{package}.svg?style=flat-square)](https://packagist.org/packages/{vendor}/{package}) [![Monthly Downloads](https://img.shields.io/packagist/dm/{vendor}/{package}.svg?style=flat-square)](https://packagist.org/packages/{vendor}/{package}) [![Tests](https://img.shields.io/github/actions/workflow/status/{vendor}/{repo}/run-tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/{vendor}/{repo}/actions?query=workflow%3Arun-tests+branch%3Amain) [![Code Style](https://img.shields.io/github/actions/workflow/status/{vendor}/{repo}/fix-php-code-style-issues.yml?branch=main&label=code%20style&style=flat-square)](https://github.com/{vendor}/{repo}/actions?query=workflow%3A"Fix+PHP+code+style+issues"+branch%3Amain) [![PHPStan](https://img.shields.io/github/actions/workflow/status/{vendor}/{repo}/phpstan.yml?branch=main&label=phpstan&style=flat-square)](https://github.com/{vendor}/{repo}/actions/workflows/phpstan.yml) [![PHPStan Level](https://img.shields.io/badge/PHPStan-level%20max-brightgreen.svg?style=flat-square&logo=php)](https://phpstan.org/) [![Code Coverage](https://img.shields.io/codecov/c/github/{vendor}/{repo}?style=flat-square&logo=codecov)](https://codecov.io/gh/{vendor}/{repo}) [![Maintainability](https://img.shields.io/codeclimate/maintainability/{vendor}/{repo}?style=flat-square&logo=code-climate)](https://codeclimate.com/github/{vendor}/{repo}) [![Technical Debt](https://img.shields.io/codeclimate/tech-debt/{vendor}/{repo}?style=flat-square&logo=code-climate)](https://codeclimate.com/github/{vendor}/{repo}) [![PHP Version](https://img.shields.io/packagist/php-v/{vendor}/{package}.svg?style=flat-square&logo=php)](https://packagist.org/packages/{vendor}/{package}) [![Laravel Version](https://img.shields.io/badge/Laravel-12.x-red.svg?style=flat-square&logo=laravel)](https://laravel.com) [![Stack: RabbitMQ](https://img.shields.io/badge/Stack-RabbitMQ-FF6600?style=flat-square&logo=rabbitmq)](https://www.rabbitmq.com/) [![Stack: Elasticsearch](https://img.shields.io/badge/Stack-Elasticsearch-005571?style=flat-square&logo=elasticsearch)](https://www.elastic.co/) [![Stack: Redis](https://img.shields.io/badge/Stack-Redis-DC382D?style=flat-square&logo=redis)](https://redis.io/) [![Stack: PostgreSQL](https://img.shields.io/badge/Stack-PostgreSQL-336791?style=flat-square&logo=postgresql)](https://www.postgresql.org/) [![Last Commit](https://img.shields.io/github/last-commit/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/commits) [![Commit Activity](https://img.shields.io/github/commit-activity/m/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/graphs/commit-activity) [![Issues](https://img.shields.io/github/issues/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/issues) [![Pull Requests](https://img.shields.io/github/issues-pr/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/pulls) [![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![Maintenance](https://img.shields.io/maintenance/yes/2025?style=flat-square)](https://github.com/{vendor}/{repo}/graphs/commit-activity) [![License](https://img.shields.io/github/license/{vendor}/{repo}?style=flat-square)](LICENSE.md) [![GitHub Stars](https://img.shields.io/github/stars/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/network/members) [![Contributors](https://img.shields.io/github/contributors/{vendor}/{repo}?style=flat-square&logo=github)](https://github.com/{vendor}/{repo}/graphs/contributors) [![Security](https://img.shields.io/badge/Security-Snyk-4C4A73?style=flat-square&logo=snyk)](https://snyk.io/) [![Known Vulnerabilities](https://snyk.io/test/github/{vendor}/{repo}/badge.svg?style=flat-square)](https://snyk.io/test/github/{vendor}/{repo}) Variables a reemplazar Variable Ejemplo Descripción {vendor} AichaDigital Nombre de la organización/vendor {repo} lara-verifactu Nombre del repositorio {package} aichadigital/lara-verifactu Nombre completo del paquete en Packagist Badges por Categoría 1. Información del Paquete (Packagist) Versión y Descargas [![Latest Version](https://img.shields.io/packagist/v/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) [![Latest Unstable Version](https://img.shields.io/packagist/vpre/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) [![Total Downloads](https://img.shields.io/packagist/dt/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) [![Monthly Downloads](https://img.shields.io/packagist/dm/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) [![Daily Downloads](https://img.shields.io/packagist/dd/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) [![License](https://img.shields.io/packagist/l/{vendor}/{package})](https://packagist.org/packages/{vendor}/{package}) Configuración URL : https://packagist.org/ Requisitos : Paquete publicado en Packagist Actualización : Automática tras cada release Costo : Gratuito 2. CI/CD y Tests (GitHub Actions) Workflows Estándar [![Tests](https://github.com/{vendor}/{repo}/actions/workflows/run-tests.yml/badge.svg)](https://github.com/{vendor}/{repo}/actions/workflows/run-tests.yml) [![Code Style](https://github.com/{vendor}/{repo}/actions/workflows/fix-php-code-style-issues.yml/badge.svg)](https://github.com/{vendor}/{repo}/actions/workflows/fix-php-code-style-issues.yml) [![PHPStan](https://github.com/{vendor}/{repo}/actions/workflows/phpstan.yml/badge.svg)](https://github.com/{vendor}/{repo}/actions/workflows/phpstan.yml) [![Tests](https://github.com/{vendor}/{repo}/actions/workflows/tests.yml/badge.svg)](https://github.com/{vendor}/{repo}/actions/workflows/tests.yml) [![Build Status](https://github.com/{vendor}/{repo}/workflows/CI/badge.svg)](https://github.com/{vendor}/{repo}/actions) [![Tests](https://img.shields.io/github/actions/workflow/status/{vendor}/{repo}/run-tests.yml?branch=main&label=tests)](https://github.com/{vendor}/{repo}/actions/workflows/run-tests.yml) Configuración Ubicación : .github/workflows/*.yml Requisitos : Workflows activos en GitHub Actions Actualización : Automática en cada push/PR Costo : Gratuito para repos públicos Ejemplo de workflow mínimo: # .github/workflows/run-tests.yml name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.3 - run: composer install - run: vendor/bin/pest 3. Calidad de Código PHPStan (Badges Manuales) [![PHPStan Level 0](https://img.shields.io/badge/PHPStan-level%200-red.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 1](https://img.shields.io/badge/PHPStan-level%201-orange.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 2](https://img.shields.io/badge/PHPStan-level%202-yellow.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 3](https://img.shields.io/badge/PHPStan-level%203-yellowgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 4](https://img.shields.io/badge/PHPStan-level%204-yellowgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 5](https://img.shields.io/badge/PHPStan-level%205-green.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 6](https://img.shields.io/badge/PHPStan-level%206-green.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 7](https://img.shields.io/badge/PHPStan-level%207-brightgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 8](https://img.shields.io/badge/PHPStan-level%208-brightgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan Level 9](https://img.shields.io/badge/PHPStan-level%209-brightgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan Level](https://img.shields.io/badge/PHPStan-level%20max-brightgreen.svg?logo=php)](https://phpstan.org/) [![PHPStan](https://github.com/{vendor}/{repo}/actions/workflows/phpstan.yml/badge.svg)](https://github.com/{vendor}/{repo}/actions/workflows/phpstan.yml) Nota importante : PHPStan no tiene badge oficial dinámico que lea el level automáticamente. El skill /ai-badges lo regenera leyendo level: de phpstan.neon[.dist] , de modo que el badge estático deja de mantenerse a mano (colores: 0-2 rojo, 3-4 naranja, 5-6 verde, 7-9/max verde brillante). Si no usas el skill, actualízalo manualmente o ver Solución Custom para PHPStan más abajo. Codecov [![Code Coverage](https://codecov.io/gh/{vendor}/{repo}/branch/main/graph/badge.svg)](https://codecov.io/gh/{vendor}/{repo}) [![codecov](https://codecov.io/gh/{vendor}/{repo}/branch/main/graph/badge.svg?token=YOUR_TOKEN)](https://codecov.io/gh/{vendor}/{repo}) [![Coverage](https://img.shields.io/codecov/c/github/{vendor}/{repo}?logo=codecov)](https://codecov.io/gh/{vendor}/{repo}) Configuración : Crear cuenta en https://codecov.io/ Vincular repositorio Obtener token (Settings > Repository > Upload Token) Añadir token a GitHub Secrets: CODECOV_TOKEN Configurar workflow: # .github/workflows/tests.yml - name: Run tests with coverage run: vendor/bin/pest --coverage --coverage-clover=coverage.xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage.xml fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} Costo : Gratuito para repos open source Code Climate [![Maintainability](https://api.codeclimate.com/v1/badges/{badge_id}/maintainability)](https://codeclimate.com/github/{vendor}/{repo}/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/{badge_id}/test_coverage)](https://codeclimate.com/github/{vendor}/{repo}/test_coverage) [![Technical Debt](https://img.shields.io/codeclimate/tech-debt/{vendor}/{repo})](https://codeclimate.com/github/{vendor}/{repo}) [![Code Issues](https://img.shields.io/codeclimate/issues/{vendor}/{repo})](https://codeclimate.com/github/{vendor}/{repo}/issues) Configuración : Crear cuenta en https://codeclimate.com/ Conectar repositorio Obtener badge_id del dashboard (Repo Settings > Badges) Crear .codeclimate.yml : version: "2" checks: argument-count: enabled: true config: threshold: 4 complex-logic: enabled: true method-complexity: enabled: true config: threshold: 10 method-lines: enabled: true config: threshold: 50 Costo : Gratuito para repos open source Scrutinizer [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/{vendor}/{repo}/badges/quality-score.png?b=main)](https://scrutinizer-ci.com/g/{vendor}/{repo}/?branch=main) [![Code Coverage](https://scrutinizer-ci.com/g/{vendor}/{repo}/badges/coverage.png?b=main)](https://scrutinizer-ci.com/g/{vendor}/{repo}/?branch=main) [![Build Status](https://scrutinizer-ci.com/g/{vendor}/{repo}/badges/build.png?b=main)](https://scrutinizer-ci.com/g/{vendor}/{repo}/build-status/main) Configuración : URL: https://scrutinizer-ci.com/ Requisitos: Conectar repo, configurar .scrutinizer.yml Costo: Gratuito para repos open source SonarCloud [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=alert_status)](https://sonarcloud.io/dashboard?id={project_key}) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=bugs)](https://sonarcloud.io/dashboard?id={project_key}) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=code_smells)](https://sonarcloud.io/dashboard?id={project_key}) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=coverage)](https://sonarcloud.io/dashboard?id={project_key}) [![Duplicated Lines](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id={project_key}) [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=sqale_index)](https://sonarcloud.io/dashboard?id={project_key}) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id={project_key}) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=security_rating)](https://sonarcloud.io/dashboard?id={project_key}) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=sqale_rating)](https://sonarcloud.io/dashboard?id={project_key}) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project={project_key}&metric=reliability_rating)](https://sonarcloud.io/dashboard?id={project_key}) Configuración : URL: https://sonarcloud.io/ Requisitos: Vincular con GitHub/GitLab, configurar sonar-project.properties Costo: Gratuito para repos open source 4. Requisitos Técnicos [![PHP Version](https://img.shields.io/packagist/php-v/{vendor}/{package}?logo=php)](https://packagist.org/packages/{vendor}/{package}) [![PHP](https://img.shields.io/badge/PHP-%3E%3D8.2-777BB4?logo=php)](https://www.php.net/) [![PHP](https://img.shields.io/badge/PHP-%3E%3D8.3-777BB4?logo=php)](https://www.php.net/) [![Laravel](https://img.shields.io/badge/Laravel-11.x-red?logo=laravel)](https://laravel.com) [![Laravel](https://img.shields.io/badge/Laravel-12.x-red?logo=laravel)](https://laravel.com) [![Laravel](https://img.shields.io/badge/Laravel-11.x%20%7C%2012.x-red?logo=laravel)](https://laravel.com) [![Composer](https://img.shields.io/badge/Composer-2.x-885630?logo=composer)](https://getcomposer.org/) [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js)](https://nodejs.org/) Nota : El badge de PHP desde Packagist lee automáticamente el require.php de composer.json . La versión de Laravel no tiene badge dinámico oficial: el skill /ai-badges la regenera desde la matriz laravel: del workflow de tests (o, si no existe, desde el constraint illuminate/* de composer.json ). 5. Stack Tecnológico Bases de Datos [![MySQL](https://img.shields.io/badge/MySQL-8.0-4479A1?logo=mysql&logoColor=white)](https://www.mysql.com/) [![MySQL](https://img.shields.io/badge/MySQL-8.x-4479A1?logo=mysql&logoColor=white)](https://www.mysql.com/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?logo=postgresql)](https://www.postgresql.org/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15%20%7C%2016-336791?logo=postgresql)](https://www.postgresql.org/) [![MariaDB](https://img.shields.io/badge/MariaDB-11.x-003545?logo=mariadb)](https://mariadb.org/) [![SQLite](https://img.shields.io/badge/SQLite-3.x-003B57?logo=sqlite)](https://www.sqlite.org/) [![MongoDB](https://img.shields.io/badge/MongoDB-7.x-47A248?logo=mongodb&logoColor=white)](https://www.mongodb.com/) Message Queues [![RabbitMQ](https://img.shields.io/badge/RabbitMQ-3.x-FF6600?logo=rabbitmq)](https://www.rabbitmq.com/) [![Apache Kafka](https://img.shields.io/badge/Kafka-latest-231F20?logo=apache-kafka)](https://kafka.apache.org/) [![AWS SQS](https://img.shields.io/badge/AWS-SQS-FF9900?logo=amazon-aws)](https://aws.amazon.com/sqs/) Cache y Storage [![Redis](https://img.shields.io/badge/Redis-7.x-DC382D?logo=redis&logoColor=white)](https://redis.io/) [![Memcached](https://img.shields.io/badge/Memcached-latest-00D8FF)](https://memcached.org/) [![MinIO](https://img.shields.io/badge/MinIO-latest-C72E49?logo=minio&logoColor=white)](https://min.io/) Search Engines [![Elasticsearch](https://img.shields.io/badge/Elasticsearch-8.x-005571?logo=elasticsearch)](https://www.elastic.co/) [![Algolia](https://img.shields.io/badge/Algolia-latest-5468FF?logo=algolia&logoColor=white)](https://www.algolia.com/) [![MeiliSearch](https://img.shields.io/badge/MeiliSearch-latest-FF69B4?logo=meilisearch&logoColor=white)](https://www.meilisearch.com/) [![Typesense](https://img.shields.io/badge/Typesense-latest-D91A5B)](https://typesense.org/) Frontend (si aplica) [![Vue.js](https://img.shields.io/badge/Vue.js-3.x-4FC08D?logo=vue.js&logoColor=white)](https://vuejs.org/) [![React](https://img.shields.io/badge/React-18.x-61DAFB?logo=react&logoColor=black)](https://reactjs.org/) [![Alpine.js](https://img.shields.io/badge/Alpine.js-3.x-8BC0D0?logo=alpine.js&logoColor=black)](https://alpinejs.dev/) [![Livewire](https://img.shields.io/badge/Livewire-3.x-FB70A9?logo=livewire)](https://livewire.laravel.com/) [![Inertia.js](https://img.shields.io/badge/Inertia.js-latest-9553E9?logo=inertia)](https://inertiajs.com/) [![Tailwind CSS](https://img.shields.io/badge/Tailwind-3.x-06B6D4?logo=tailwind-css&logoColor=white)](https://tailwindcss.com/) [![Bootstrap](https://img.shields.io/badge/Bootstrap-5.x-7952B3?logo=bootstrap&logoColor=white)](https://getbootstrap.com/) DevOps y Contenedores [![Docker](https://img.shields.io/badge/Docker-latest-2496ED?logo=docker&logoColor=white)](https://www.docker.com/) [![Kubernetes](https://img.shields.io/badge/Kubernetes-latest-326CE5?logo=kubernetes&logoColor=white)](https://kubernetes.io/) [![Proxmox](https://img.shields.io/badge/Proxmox-VE-E57000?logo=proxmox&logoColor=white)](https://www.proxmox.com/) [![GitHub Actions](https://img.shields.io/badge/GitHub-Actions-2088FF?logo=github-actions&logoColor=white)](https://github.com/features/actions) [![GitLab CI](https://img.shields.io/badge/GitLab-CI-FC6D26?logo=gitlab&logoColor=white)](https://docs.gitlab.com/ee/ci/) 6. Estado del Repositorio [![Last Commit](https://img.shields.io/github/last-commit/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/commits) [![Commit Activity](https://img.shields.io/github/commit-activity/m/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/graphs/commit-activity) [![Commit Activity](https://img.shields.io/github/commit-activity/w/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/graphs/commit-activity) [![Commit Activity](https://img.shields.io/github/commit-activity/y/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/graphs/commit-activity) [![Open Issues](https://img.shields.io/github/issues/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/issues) [![Closed Issues](https://img.shields.io/github/issues-closed/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/issues?q=is%3Aissue+is%3Aclosed) [![Open PRs](https://img.shields.io/github/issues-pr/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/pulls) [![Closed PRs](https://img.shields.io/github/issues-pr-closed/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/pulls?q=is%3Apr+is%3Aclosed) [![Repo Size](https://img.shields.io/github/repo-size/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}) [![Top Language](https://img.shields.io/github/languages/top/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}) [![Language Count](https://img.shields.io/github/languages/count/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}) [![Latest Release](https://img.shields.io/github/v/release/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/releases/latest) [![Release Date](https://img.shields.io/github/release-date/{vendor}/{repo}?logo=github)](https://github.com/{vendor}/{repo}/releases) 7. Estado del Proyecto (dinámicos) RepoStatus.org (Estados Oficiales) [![Active](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![WIP](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) [![Suspended](https://www.repostatus.org/badges/latest/suspended.svg)](https://www.repostatus.org/#suspended) [![Abandoned](https://www.repostatus.org/badges/latest/abandoned.svg)](https://www.repostatus.org/#abandoned) [![Moved](https://www.repostatus.org/badges/latest/moved.svg)](https://www.repostatus.org/#moved) [![Inactive](https://www.repostatus.org/badges/latest/inactive.svg)](https://www.repostatus.org/#inactive) [![Unsupported](https://www.repostatus.org/badges/latest/unsupported.svg)](https://www.repostatus.org/#unsupported) [![Concept](https://www.repostatus.org/badges/latest/concept.svg)](https://www.repostatus.org/#concept) URL : https://www.repostatus.org/ Actualización : Manual (copiar el badge apropiado) Maintenance Status (Año específico) [![Maintenance](https://img.shields.io/maintenance/yes/2025)](https://github.com/{vendor}/{repo}) [![Maintenance](https://img.shields.io/maintenance/no/2025)](https://github.com/{vendor}/{repo}) Nota : Actualizar el año anualmente. 8. Licencia [![License](https://img.shields.io/github/license/{vendor}/{repo})](https://github.com/{vendor}/{repo}/blob/main/LICENSE.md) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![License](https://img.shields.io/packagist/l/{vendor}/{package}.svg)](https://packagist.org/packages/{vendor}/{package}) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![License: BSD-3](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC) [![License: Proprietary](https://img.shields.io/badge/License-Proprietary-red.svg)](LICENSE.md) Criterio de licencia (AichaDigital): Producto / aplicación desplegada como servicio → AGPL-3.0-or-later . Copyleft fuerte: impide que un tercero monte un SaaS cerrado con el motor sin liberar su código. Librería / integración pensada para que otros la integren → MIT . AGPL es vírica y frena la adopción comercial; MIT maximiza el uso (es lo idiomático en el ecosistema Laravel). Forks: el copyleft solo se endurece, nunca se relaja. Desde MIT/Apache puedes pasar tu fork a AGPL; desde (A)GPL estás obligado a mantener (A)GPL. Badge: preferir el dinámico packagist/l (lee la licencia real de composer.json ) frente al estático, para que no se desincronice. 9. Comunidad [![GitHub Stars](https://img.shields.io/github/stars/{vendor}/{repo}?style=social)](https://github.com/{vendor}/{repo}/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/{vendor}/{repo}?style=social)](https://github.com/{vendor}/{repo}/network/members) [![GitHub Watchers](https://img.shields.io/github/watchers/{vendor}/{repo}?style=social)](https://github.com/{vendor}/{repo}/watchers) [![Contributors](https://img.shields.io/github/contributors/{vendor}/{repo})](https://github.com/{vendor}/{repo}/graphs/contributors) [![GitHub Discussions](https://img.shields.io/github/discussions/{vendor}/{repo})](https://github.com/{vendor}/{repo}/discussions) [![GitHub Sponsors](https://img.shields.io/github/sponsors/{vendor}?logo=github)](https://github.com/sponsors/{vendor}) [![Discord](https://img.shields.io/discord/{server_id}?logo=discord&label=Discord)](https://discord.gg/{invite_code}) [![Slack](https://img.shields.io/badge/Slack-Join-4A154B?logo=slack)](https://join.slack.com/...) [![Twitter Follow](https://img.shields.io/twitter/follow/{handle}?style=social)](https://twitter.com/{handle}) 10. Seguridad [![Known Vulnerabilities](https://snyk.io/test/github/{vendor}/{repo}/badge.svg)](https://snyk.io/test/github/{vendor}/{repo}) [![Dependabot](https://img.shields.io/badge/Dependabot-enabled-success?logo=dependabot)](https://github.com/{vendor}/{repo}/network/dependencies) [![Security Policy](https://img.shields.io/badge/Security-Policy-blue)](https://github.com/{vendor}/{repo}/security/policy) [![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/{project_id}/badge)](https://bestpractices.coreinfrastructure.org/projects/{project_id}) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/{vendor}/{repo}/badge)](https://api.securityscorecards.dev/projects/github.com/{vendor}/{repo}) Configuración Snyk : Crear cuenta en https://snyk.io/ Conectar repositorio Badge aparece automáticamente Costo : Gratuito para repos open source 11. Documentación [![Documentation](https://readthedocs.org/projects/{project}/badge/?version=latest)](https://{project}.readthedocs.io/en/latest/) [![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-blue?logo=github)](https://{vendor}.github.io/{repo}/) [![Wiki](https://img.shields.io/badge/docs-Wiki-blue?logo=github)](https://github.com/{vendor}/{repo}/wiki) [![Gitbook](https://img.shields.io/badge/docs-Gitbook-blue?logo=gitbook&logoColor=white)](https://{organization}.gitbook.io/{project}/) [![Documentation](https://img.shields.io/badge/docs-latest-blue)](https://docs.{domain}.com) Servicios Externos Recomendados Servicio Propósito URL API Key Costo OSS Configuración Packagist Stats de paquetes PHP https://packagist.org/ No Gratis Automático tras publish Codecov Code Coverage https://codecov.io/ Sí Gratis Token en GitHub Secrets Code Climate Calidad de código https://codeclimate.com/ Sí Gratis Conectar repo + .codeclimate.yml Scrutinizer Análisis estático https://scrutinizer-ci.com/ No Gratis Conectar + .scrutinizer.yml SonarCloud Análisis de seguridad https://sonarcloud.io/ Sí Gratis sonar-project.properties Snyk Vulnerabilidades https://snyk.io/ Sí Gratis Conectar repositorio Shields.io Badges personalizados https://shields.io/ No Gratis - RepoStatus.org Estado del proyecto https://www.repostatus.org/ No Gratis - OSSF Security Scorecard https://securityscorecards.dev/ No Gratis Configurar workflow Ejemplos Completos por Tipo de Proyecto Ejemplo 1: Paquete Laravel con Testing Completo # Lara-Verifactu > Paquete Laravel para integración con el sistema VeriFactu de la AEAT [![Latest Version](https://img.shields.io/packagist/v/aichadigital/lara-verifactu?style=flat-square)](https://packagist.org/packages/aichadigital/lara-verifactu) [![Total Downloads](https://img.shields.io/packagist/dt/aichadigital/lara-verifactu?style=flat-square)](https://packagist.org/packages/aichadigital/lara-verifactu) [![Tests](https://img.shields.io/github/actions/workflow/status/AichaDigital/lara-verifactu/run-tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/AichaDigital/lara-verifactu/actions/workflows/run-tests.yml) [![PHPStan Level 9](https://img.shields.io/badge/PHPStan-level%209-brightgreen?style=flat-square&logo=php)](https://phpstan.org/) [![Code Coverage](https://img.shields.io/codecov/c/github/AichaDigital/lara-verifactu?style=flat-square&logo=codecov)](https://codecov.io/gh/AichaDigital/lara-verifactu) [![PHP Version](https://img.shields.io/packagist/php-v/aichadigital/lara-verifactu?style=flat-square&logo=php)](https://packagist.org/packages/aichadigital/lara-verifactu) [![Laravel Version](https://img.shields.io/badge/Laravel-11.x%20%7C%2012.x-red?style=flat-square&logo=laravel)](https://laravel.com) [![License](https://img.shields.io/github/license/AichaDigital/lara-verifactu?style=flat-square)](LICENSE.md) ## Instalación \```bash composer require aichadigital/lara-verifactu \``` Ejemplo 2: Proyecto Laravel con Stack Completo # Sistema de Subastas Online > Plataforma empresarial para subastas en tiempo real [![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![Maintenance](https://img.shields.io/maintenance/yes/2025?style=flat-square)](https://github.com/AichaDigital/subastas-app) [![Tests](https://img.shields.io/github/actions/workflow/status/AichaDigital/subastas-app/tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/AichaDigital/subastas-app/actions/workflows/tests.yml) [![Last Commit](https://img.shields.io/github/last-commit/AichaDigital/subastas-app?style=flat-square)](https://github.com/AichaDigital/subastas-app/commits) **Stack Tecnológico:** [![PHP 8.3](https://img.shields.io/badge/PHP-8.3-777BB4?style=flat-square&logo=php)](https://www.php.net/) [![Laravel 12](https://img.shields.io/badge/Laravel-12.x-red?style=flat-square&logo=laravel)](https://laravel.com) [![Livewire](https://img.shields.io/badge/Livewire-3.x-FB70A9?style=flat-square&logo=livewire)](https://livewire.laravel.com/) **Infraestructura:** [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?style=flat-square&logo=postgresql)](https://www.postgresql.org/) [![Redis](https://img.shields.io/badge/Redis-7.x-DC382D?style=flat-square&logo=redis&logoColor=white)](https://redis.io/) [![RabbitMQ](https://img.shields.io/badge/RabbitMQ-3.x-FF6600?style=flat-square&logo=rabbitmq)](https://www.rabbitmq.com/) [![Elasticsearch](https://img.shields.io/badge/Elasticsearch-8.x-005571?style=flat-square&logo=elasticsearch)](https://www.elastic.co/) [![License: Proprietary](https://img.shields.io/badge/License-Proprietary-red?style=flat-square)](LICENSE.md) Ejemplo 3: Paquete PHP Standalone # PHP-Utils > Utilidades PHP para proyectos empresariales [![Latest Version](https://img.shields.io/packagist/v/xerintel/php-utils?style=flat-square)](https://packagist.org/packages/xerintel/php-utils) [![PHP Version](https://img.shields.io/packagist/php-v/xerintel/php-utils?style=flat-square&logo=php)](https://www.php.net/) [![Tests](https://img.shields.io/github/actions/workflow/status/xerintel/php-utils/tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/xerintel/php-utils/actions/workflows/tests.yml) [![PHPStan Level 8](https://img.shields.io/badge/PHPStan-level%208-brightgreen?style=flat-square&logo=php)](https://phpstan.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE.md) Ejemplo 4: Proyecto con Monitorización y Seguridad # Enterprise CRM [![Active](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![Tests](https://img.shields.io/github/actions/workflow/status/empresa/crm/tests.yml?branch=main&style=flat-square)](https://github.com/empresa/crm/actions) [![Security](https://snyk.io/test/github/empresa/crm/badge.svg?style=flat-square)](https://snyk.io/test/github/empresa/crm) **Calidad:** [![Code Coverage](https://img.shields.io/codecov/c/github/empresa/crm?style=flat-square)](https://codecov.io/gh/empresa/crm) [![Maintainability](https://api.codeclimate.com/v1/badges/ABC123/maintainability)](https://codeclimate.com/github/empresa/crm) [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=empresa_crm&metric=alert_status)](https://sonarcloud.io/dashboard?id=empresa_crm) **Stack:** [![Laravel 12](https://img.shields.io/badge/Laravel-12.x-red?style=flat-square&logo=laravel)](https://laravel.com) [![Vue.js 3](https://img.shields.io/badge/Vue.js-3.x-4FC08D?style=flat-square&logo=vue.js)](https://vuejs.org/) [![MySQL 8](https://img.shields.io/badge/MySQL-8.0-4479A1?style=flat-square&logo=mysql)](https://www.mysql.com/) Soluciones Especiales Badge Dinámico para PHPStan (Solución Custom) Como PHPStan no ofrece badges dinámicos oficiales, aquí hay una solución mediante GitHub Actions: Opción 1: Badge con GitHub Actions Status # .github/workflows/phpstan-badge.yml name: PHPStan Badge on: push: branches: [main] pull_request: jobs: phpstan: name: PHPStan Level Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.3 - name: Install dependencies run: composer install --no-interaction - name: Run PHPStan run: vendor/bin/phpstan analyse --no-progress Badge a usar: [![PHPStan](https://img.shields.io/github/actions/workflow/status/{vendor}/{repo}/phpstan-badge.yml?branch=main&label=PHPStan%20Level%209&style=flat-square)](https://github.com/{vendor}/{repo}/actions/workflows/phpstan-badge.yml) Opción 2: Badge Dinámico con Gist (Avanzado) # .github/workflows/phpstan-dynamic-badge.yml name: PHPStan Dynamic Badge on: push: branches: [main] jobs: badge: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.3 - name: Install dependencies run: composer install --no-interaction - name: Extract PHPStan Level id: level run: | if [ -f phpstan.neon ]; then LEVEL=$(grep -oP "level: \K\d+" phpstan.neon || echo "0") elif [ -f phpstan.neon.dist ]; then LEVEL=$(grep -oP "level: \K\d+" phpstan.neon.dist || echo "0") else LEVEL="0" fi echo "level=$LEVEL" >> $GITHUB_OUTPUT echo "PHPStan Level: $LEVEL" - name: Create Badge uses: schneegans/dynamic-badges-action@v1.7.0 with: auth: ${{ secrets.GIST_SECRET }} gistID: YOUR_GIST_ID_HERE filename: phpstan-${{ github.event.repository.name }}.json label: PHPStan message: level ${{ steps.level.outputs.level }} color: brightgreen Configuración : Crear un GitHub Personal Access Token con scope gist Añadirlo a GitHub Secrets como GIST_SECRET Crear un Gist público en https://gist.github.com/ Copiar el Gist ID (última parte de la URL) Reemplazar YOUR_GIST_ID_HERE en el workflow Badge a usar: [![PHPStan](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/{username}/{gist_id}/raw/phpstan-{repo}.json&style=flat-square)](https://phpstan.org/) Opción 3: Badge Manual (Más simple) Si prefieres simplicidad, actualiza manualmente el badge cuando cambies el level: [![PHPStan Level 0](https://img.shields.io/badge/PHPStan-level%200-red.svg?style=flat-square&logo=php)](https://phpstan.org/) [![PHPStan Level 5](https://img.shields.io/badge/PHPStan-level%205-green.svg?style=flat-square&logo=php)](https://phpstan.org/) [![PHPStan Level 8](https://img.shields.io/badge/PHPStan-level%208-brightgreen.svg?style=flat-square&logo=php)](https://phpstan.org/) [![PHPStan Level 9](https://img.shields.io/badge/PHPStan-level%209-brightgreen.svg?style=flat-square&logo=php)](https://phpstan.org/) [![PHPStan Max](https://img.shields.io/badge/PHPStan-level%20max-brightgreen.svg?style=flat-square&logo=php)](https://phpstan.org/) Colores recomendados por level: Level 0-2: red Level 3-4: orange o yellow Level 5-6: yellowgreen o green Level 7-9: brightgreen Badges Personalizados con Shields.io Para crear badges totalmente personalizados: [![Custom](https://img.shields.io/badge/{label}-{message}-{color})](https://example.com) [![Hosted](https://img.shields.io/badge/Hosted-Proxmox-E57000?logo=proxmox)](https://www.proxmox.com/) [![Monitoring](https://img.shields.io/badge/Monitoring-Zabbix-D20000?logo=zabbix)](https://www.zabbix.com/) [![Stack](https://img.shields.io/badge/Stack-LEMP-339933)](https://www.nginx.com/) [![Dynamic](https://img.shields.io/endpoint?url=https://your-api.com/badge.json)](https://example.com) Formato del endpoint JSON: { "schemaVersion": 1, "label": "PHPStan", "message": "level 9", "color": "brightgreen", "logoSvg": "..." } Documentación completa : https://shields.io/ Checklist de Configuración Requisitos Básicos Repositorio público en GitHub Archivo LICENSE.md presente Archivo README.md con badges .gitignore configurado composer.json con metadatos completos Para Paquetes Packagist Publicado en https://packagist.org/ composer.json con: name correcto description clara license especificada require con versiones de PHP autoload configurado Tags/Releases versionados (semver) Para GitHub Actions Workflows en .github/workflows/ Workflow para tests: run-tests.yml Workflow para code style: fix-php-code-style-issues.yml Workflow para PHPStan: phpstan.yml Secrets configurados (si se requieren) Para Code Coverage Cuenta en Codecov.io vinculada Token añadido a GitHub Secrets: CODECOV_TOKEN Workflow configurado para subir coverage Tests generan archivo coverage.xml Para Calidad de Código Code Climate: Repo conectado .codeclimate.yml configurado Badge ID obtenido Scrutinizer: Repo conectado .scrutinizer.yml configurado SonarCloud: Proyecto configurado sonar-project.properties creado Project key obtenido Para Seguridad Snyk vinculado al repositorio Dependabot habilitado SECURITY.md presente Vulnerabilities monitorizadas Para Testing Tests unitarios con PHPUnit o Pest PHPStan configurado ( phpstan.neon ) Code style configurado (Pint, PHP-CS-Fixer) Coverage mínimo definido Documentación README.md completo CONTRIBUTING.md (si es open source) CHANGELOG.md mantenido PHPDoc en código Wiki o docs externas (opcional) Referencias y Recursos Documentación Oficial Shields.io : https://shields.io/ Packagist : https://packagist.org/about GitHub Actions : https://docs.github.com/en/actions RepoStatus : https://www.repostatus.org/ Servicios de Calidad Codecov : https://docs.codecov.com/ Code Climate : https://docs.codeclimate.com/ Scrutinizer : https://scrutinizer-ci.com/docs/ SonarCloud : https://docs.sonarcloud.io/ Herramientas de Testing PHPStan : https://phpstan.org/user-guide/getting-started Pest : https://pestphp.com/docs/ PHPUnit : https://phpunit.de/documentation.html Laravel Pint : https://laravel.com/docs/11.x/pint Seguridad Snyk : https://docs.snyk.io/ Dependabot : https://docs.github.com/en/code-security/dependabot OSSF : https://github.com/ossf/scorecard Mantenimiento de este Documento Responsable : Abkrim Frecuencia de revisión : Trimestral Última revisión : 2026-06-22 Próxima revisión : Septiembre 2026 Historial de Cambios Fecha Versión Cambios 2025-12-31 1.0 Creación del documento inicial 2026-06-22 1.1 Principio «un badge dinámico no debe poder mentir»; sección del skill /ai-badges ; AGPL-3.0 + criterio AGPL-core / MIT-librería; PHPStan y Laravel regenerados desde la fuente; licencia dinámica packagist/l Soporte Para dudas o sugerencias sobre esta guía: Abrir issue en el repositorio del proyecto Consultar con el equipo de desarrollo Revisar documentación oficial de cada servicio Fin del documento