ethical-jobs/laravel-storage
A Laravel package from Ethical Jobs that provides storage helpers and configuration for managing file uploads and media across local and cloud disks, simplifying consistent storage setup in Laravel applications.
Architecture fit. ethical-jobs/laravel-storage is a repository-pattern persistence abstraction for Laravel — the kind of package that sits between controllers/services and Eloquent models, exposing a Repository contract with criteria/filter objects, and (typically for this genre) optional caching and pagination helpers. It fits cleanly into a layered Laravel architecture only if the team has already committed to repositories. In a codebase that leans on Eloquent active-record directly, adopting this adds an indirection layer with no payoff and creates a second, competing data-access idiom. The package is a leaf dependency — it does not dictate your domain model — which keeps architectural blast radius low.
Integration feasibility. Mechanically trivial: a Composer require, Laravel package auto-discovery for the service provider, and likely a publishable config file. The real feasibility question is not "can we install it" but "should we own it," because the adoption signals are effectively zero: no stars, no dependents, score 0. That is not a disqualifier for an internal-style utility package, but it means we should assume it has only ever been exercised inside Ethical Jobs' own applications and against their domain (job listings, search, filtering). Expect to validate every assumption ourselves.
Technical risk.
illuminate/* version constraints against our target Laravel and PHP versions. A pinned ^8.0 constraint is a hard blocker for a Laravel 10/11 roadmap.Key questions for the maintainers / source audit.
Model::query() — caching, criteria composition, pagination, transactions, or all four?Stack fit. Appropriate for a Laravel service using Composer, standard service-provider registration, and an existing or planned repository/CQRS-lite service layer. Poor fit for small CRUD apps, for teams standardized on spatie/laravel-query-builder-style filtering, or for anything on a Laravel version outside the package's constraints. Confirm the package is framework-agnostic enough to coexist with our existing caching (Redis) and pagination conventions rather than forcing its own.
Migration path. Do not retro-fit existing models. Introduce the package behind an internal interface we control — an adapter layer (App\Contracts\Repository → package implementation). That gives us a one-file swap-out if the package is abandoned, prevents package types leaking into controllers, and makes the build-vs-adopt decision reversible. If a fork becomes necessary, the adapter means applications never see the vendor namespace change.
Compatibility checks before commitment.
composer why-not against our Laravel/PHP targets; inspect composer.json constraints directly.laravel/scout, spatie/*, IDE helpers, static analysis baselines).RefreshDatabase and factory assumptions.Sequencing.
Maintenance. Treat this as internally owned source code from day one, not as a third-party dependency. That means: fork to our namespace, pin to a commit or tag, and budget a small recurring allowance (roughly 1–2 days per Laravel major upgrade cycle) for compatibility patching. The total cost is low if the package is thin — and if it isn't thin, that's a reason to walk away.
Support. There is no community, no issue-tracker momentum, no SLA, and no realistic expectation of upstream fixes. Internal ownership must be explicit: name a maintainer, document the fork, and record the adapter contract as the supported surface. Do not let the package become load-bearing in a team that believes "Composer will handle it."
Scaling. The repository layer itself is not a scalability lever — throughput is governed by the SQL and caching it emits. Watch for: criteria objects composing into unindexed WHERE clauses, cache keys that don't include filter state (cross-tenant or cross-filter bleed), and missing eager-loads producing N+1 under pagination. Load-test the pilot with realistic filters before wide rollout; repository abstractions tend to hide query plans until production traffic finds them.
Failure modes.
Ramp-up. Low for anyone fluent in Laravel — a mid-level engineer should be productive within 1–2 days, dominated by reading source rather than documentation (expect sparse or absent docs). Budget half a day of onboarding for the adapter contract and the fork policy. The harder ramp is organizational: getting the team to consistently route persistence through the repository instead of reaching for Eloquent directly, which is the failure mode that quietly retires packages like this one.
TPM recommendation. Adopt conditionally: spike, don't commit. Given zero adoption signals, the expected value of a fork-and-own approach is only positive if the source audit shows a genuinely non-trivial capability (criteria composition plus caching plus pagination) that would cost us more than a few days to reproduce. If it is a thin Eloquent wrapper — the most likely outcome — build the internal base class and skip the dependency entirely.
How can I help you explore Laravel packages today?