smorken/components
smorken/components is a Laravel package that provides reusable Blade components for common UI elements, helping you build consistent forms and interfaces with less repetitive markup. Install via Composer and use the components directly in your Blade views.
Architecture fit. smorken/components is a view-layer package: a curated set of Blade components registered through Laravel's component system, with slots and attribute passthrough. Architecturally it is a leaf dependency — it sits at the presentation edge, publishes views/config, and has no business touching domain logic, persistence, or request lifecycle. That is the lowest-risk class of dependency a Laravel app can carry, and it means the blast radius of a bad release is cosmetic debt rather than an outage. The critical caveat for a TPM is that this fit is conditional on the architecture already existing. Laravel 7 shipped native class-based and anonymous Blade components with slots and attribute bags — which is precisely the capability this package provides. So the honest evaluation is not "does it integrate cleanly" (it does) but "does the platform baseline predate the framework feature that makes it redundant." If the fleet is on Laravel 8+, this package is a solution to a problem we no longer have.
Integration feasibility. Technically straightforward, procedurally annoying. There is no Packagist presence implied by the metadata (Bitbucket-hosted, zero dependents), so consumption requires a composer.json repositories VCS entry plus Bitbucket credentials wired into CI and developer onboarding. That is a permanent friction tax on every environment until the repo is mirrored internally. Version constraints against a VCS source are also weaker than Packagist consumers expect: you either pin a commit SHA (safe but manual) or track a branch (unsafe). Neither gives semver guarantees. Feasibility is high in effort terms; the gating item is that we have no verified evidence of the license, the supported Laravel/PHP matrix, or whether it ships front-end assets that would need reconciling with our Vite pipeline.
Technical risk. Four risks dominate, and a TPM should name them explicitly in any approval memo:
composer install across every environment simultaneously — the single highest-probability, highest-impact failure mode in this assessment.composer audit will not protect us here.Key questions to resolve before any commitment. (1) What does it actually ship — Blade components only, or JS/CSS assets too? (2) Declared illuminate/* and PHP constraints, and does it support our current and next Laravel major? (3) License — is forking and internal redistribution permitted? (4) Is there a test suite and CI, and can we run it locally? (5) Auto-discovery or manual provider registration? (6) Transitive dependencies — are any of them also unmaintained? (7) Is Bitbucket access guaranteed (org ownership vs. personal account)? (8) Who owns it upstream, and is there any responsiveness signal?
Stack fit. Clean, with one caveat. It touches resources/views, possibly resources/js/resources/css, and a service provider — no conflict with domain, auth, or queue architecture. The exception is published front-end assets: anything that ships CSS/JS must be reconciled with our Vite pipeline, either by importing into the build or serving statically. That is the most likely source of integration friction and should be checked first, not last. If the source review reveals global middleware, routes, or model observers, reclassify it from "leaf dependency" to "framework extension" and apply a stricter review — it is not a component library at that point.
Migration path. Adopt-then-fork, not adopt-then-depend. Prototype against upstream pinned to a commit, then mirror into our internal Git host on day one; the mirror becomes the artifact we depend on and upstream becomes an optional patch source. Wrap usage behind our own thin adapter layer so replacing the library with hand-rolled markup is a contained change rather than a codebase-wide search-and-replace. Record a "vendored, pinned at commit X, owner Y" note in the repo.
Compatibility. Pin to a SHA — never dev-main or a branch, and enforce that in code review. Verify the VCS entry resolves from a clean Composer cache in CI with the Bitbucket credential in place. Run the package's own suite (if any) against our lowest and highest supported PHP/Laravel versions before writing product code. Confirm no collisions with existing provider boot order or published view namespaces.
Sequencing. Six gates, roughly one week of elapsed TPM-tracked effort:
composer.json, service provider, README, tests, license.For a fleet on Laravel 7+, skip steps 1–5 entirely and point the team at native Blade components.
Maintenance. Ownership transfers at the moment the package enters the lockfile. There is no release cadence, no deprecation policy, and no upstream maintenance guarantee to plan against. Budget either a small standing allocation for fork upkeep or accept a pinned-commit freeze until a Laravel upgrade forces the issue — and put that choice in the roadmap, because it is a roadmap item whether or not it is written down. The internal mirror must be the CI source of truth; any workflow that reaches Bitbucket at build time is an avoidable single point of failure.
Support. No vendor, no SLA, no issue tracker with a reliable turnaround. Internal engineering is the escalation path, which makes the package's readability an operational property: if the source is small and clean, support is cheap; if it is clever and undocumented, it is not. Onboarding docs should state plainly that this is a pinned third-party component set we now own, with a named internal owner. That named owner is also the gate for any procurement or security dependency inventory — without one, this package will not pass review.
Scaling. View-layer packages scale horizontally with the app; per-request cost is template rendering, negligible against I/O in typical Laravel workloads. The real scaling concern is front-end payload — published CSS/JS that bypasses the build pipeline can bloat bundles and defeat tree-shaking. Measure that delta during the pilot rather than assuming it is zero. Composer resolution time is unaffected at this dependency count; the VCS entry adds a small constant auth/setup cost, not a runtime one.
Failure modes. Ranked by expected pain:
composer install. Mitigated only by the internal mirror. Highest probability, highest impact.Ramp-up. Low for engineers, moderate for the organization. Any Laravel developer can use Blade components in an afternoon; what takes longer is socializing the convention so teams reach for the package's components instead of writing inline markup, and building the habit of checking the pinned-commit constraint before touching composer.json. Plan for a short internal note — what it is, why we pinned it, who owns it, and what replacing it looks like — rather than a full onboarding curriculum. The strongest ramp-up argument is also the strongest argument against adoption: native Blade components require zero ramp-up and carry no ownership burden, which is why the recommendation should be "spike, harvest if useful, and treat adoption as a time-boxed bridge out of legacy — not a platform commitment."
How can I help you explore Laravel packages today?