nowo-tech/php-quality-tools
A Laravel/PHP package that bundles and configures quality tooling such as PHPStan, Pint, PHPCS and Rector, with ready-made configs and Composer scripts so you can enforce coding standards, run static analysis and automate refactoring with minimal setup.
Architecture fit
bin entries (check-no-inline-svg, check-asset-budgets, check-doc-links) plus an ops Makefile snippet.require-dev, no service provider, no autoloaded production classes, invoked from CI or a Makefile/Composer script. Runtime footprint remains zero. The gates are Symfony Console commands but are consumed as CLI binaries, so the framework coupling is a packaging detail, not an integration constraint.check-asset-budgets reads a Vite production manifest (Laravel ships Vite), and check-doc-links just walks tracked Markdown. check-no-inline-svg is the outlier — its defaults (templates/, .twig) are Symfony/Twig-shaped and do not cover Blade.php-worker-reset.mk) is a different category entirely: it is a local/dev-environment convenience targeting Docker Compose service names and healthchecks. Useful, but it belongs to a team's own tooling repo, not to a shared quality baseline.Integration feasibility
composer require --dev). Adoption of a gate is opt-in per binary, so the release is degradable — you can take the formatter presets and ignore the gates, or vice versa.check-asset-budgets is the highest-value addition for a Vite-based Laravel app: it gives a concrete, per-entry JS/CSS budget check on the real build output rather than a vague Lighthouse aspiration. Needs verification that the manifest shape (entry + static chunk traversal, _-prefixed metadata, CSS arrays) matches the Vite major you run.asset-budgets.{yaml,yml,json,php} but symfony/yaml is only a suggestion, not a requirement — YAML config silently becomes unusable unless that package is pulled in. Prefer the .php or .json form to avoid an undeclared dependency.check-no-inline-svg requires explicit --templates / --template-ext overrides for Blade (resources/views, .blade.php). Until that's proven, treat it as Twig-only and out of scope for a Blade app.--allow=<path> with stale-entry failure is the right design (prevents allow-list rot) but converts a config hygiene issue into a build failure — needs an owner.Technical risk
release-check hash, spec directory, USAGE docs, self-dogfooding (make docs-links runs in the project's own release check), and bugs found by its own gate. That materially weakens the earlier "synthetic/future-dated" concern; treat the repo as actively maintained by one author rather than dormant.symfony/yaml suggested-but-not-required is a classic silent-misconfiguration source; assert that a supplied config file is actually loaded.Key questions
check-no-inline-svg actually support .blade.php via --template-ext, or does extension matching only handle simple suffixes?.gz files vs computed)? Do lazy chunks and CSS-only entries behave as documented?asset-budgets.yaml exists but symfony/yaml is absent, does the gate fail loudly or pass silently?check-doc-links behave correctly on shallow CI clones (git ls-files vs "new files"), and is the anchor-slug algorithm pinned to GitHub's current behaviour?Stack fit
check-asset-budgets against public/build/manifest.json in the CI job that runs after npm run build; check-doc-links on the repo's Markdown; check-no-inline-svg only after Blade coverage is confirmed, otherwise skip.php-worker-reset.mk into application repos — it hardcodes Compose service assumptions and belongs in a dev-environment repo if anywhere.Migration path
--check-anchors only after the link backlog is clean — anchors generate more churn.Compatibility
asset-budgets.php or .json unless symfony/yaml is already a dev dependency.git ls-files and any base-ref diffing the doc-links gate performs.composer.lock; a minor bump of this package should be treated as a CI-affecting change and reviewed.Sequencing
Maintenance
Support
Scaling
check-doc-links --check-anchors on a large docs corpus is the only new gate with meaningful runtime; keep it out of the per-PR critical path for very large repos or run it nightly.Failure modes
--allow entries that outlive the file now fail the build — correct design, but a new class of PR-blocking hygiene error.symfony/yaml missing → gate runs with no budgets and passes. Assert on non-empty config load.--check-anchors opt-in and non-blocking initially.Ramp-up
How can I help you explore Laravel packages today?