sukohi/surpass
Surpass is a lightweight Laravel package by sukohi that adds practical, reusable functionality to your app with minimal setup. Install it via Composer, configure it to fit your project, and use its simple API to speed up everyday development.
Architecture fit. sukohi/surpass is a single-purpose Laravel package that bundles three concerns into one: an AJAX upload endpoint (routes + controller), a persistence layer (a migration/model for image records), and a front-end asset bundle (JS/jQuery for drag-and-drop uploading and thumbnail rendering). It assumes a server-rendered Blade application with jQuery already present. It is a reasonable fit only for a legacy-style Laravel app that wants a "drop-in gallery uploader" and has no existing media pipeline. It is a poor fit for API-first, SPA, or Livewire/Inertia architectures, where the upload endpoint and thumbnail logic would need to be re-exposed as headless services — at which point the package's value collapses to a thin wrapper you could write yourself in a day.
Integration feasibility. Mechanically simple: composer require sukohi/surpass, register the service provider (auto-discovery if Laravel ≥5.5), publish config/migrations/assets, run php artisan migrate, and include the provided JS/CSS in a Blade view. The real feasibility question is version compatibility. Given the package is archived and sits at 28 stars, its composer.json constraints almost certainly target PHP 5.6–7.x and Laravel 5.x. On any modern stack (PHP 8.2+, Laravel 10/11), Composer resolution will likely fail outright, or succeed only with --ignore-platform-reqs and then break at runtime. Expect to fork and patch before the first commit lands.
Technical risk. High, and concentrated in four areas:
public/ with user-controlled names, and lack CSRF/rate-limit hardening beyond Laravel defaults. Each of these needs an explicit audit before exposure to untrusted users.Key questions.
--ignore-platform-reqs?public/, storage/, or a configured disk?Stack fit. Only adopt on a Blade + jQuery front end. If the target app is React/Vue/Inertia, skip the package and take only its ideas — a thin POST /media controller using Laravel's native UploadedFile validation plus intervention/image v3 for derivatives. That is roughly the same effort as forking and materially lower risk.
Migration path. Two scenarios:
Storage + Intervention\Image (minimal, zero third-party surface), or a hosted service (Cloudinary/imgix) if thumbnail variants and CDN delivery matter.path repository or copy into app/Support/) so Composer no longer reaches an archived remote. Step 2, pin the lockfile and add an explicit composer audit gate to CI. Step 3, build a parallel native upload path behind a feature flag, backfill existing image rows/files, then cut over and delete the fork.Compatibility. Verify in a throwaway branch before promising anything: composer require on the target PHP/Laravel pair, run the migration, exercise an upload, and confirm thumbnail generation. Budget for at least one compatibility patch (namespace, facade registration, deprecated helpers like str_*/array_*, $dates vs $casts). Front-end assets will need to be moved from public/vendor publishing into the build pipeline, and jQuery deduplicated if the app already ships it.
Sequencing.
Maintenance. Effectively 100% internal. There is no upstream to receive fixes from, so every PHP/Laravel upgrade becomes a manual patch task on your fork. Realistically 1–3 days per major framework upgrade, plus unbounded time if a security issue lands in a bundled JS or image library. Compare against a maintained package where that cost is near zero, or a native implementation where the surface is code your team already understands.
Support. None. No issue triage, no maintainer response, no release notes. Internal teams will file tickets against your platform team instead. Plan for a named owner and a documented "this is a fork" note in the service catalog so on-call isn't surprised.
Scaling. Two pressure points. First, synchronous thumbnail generation on the upload request makes upload latency proportional to image size and CPU; at any real volume this needs to move to a queue job (and the package won't do that for you). Second, local-disk writes don't survive horizontal scaling — files land on one pod and 404 from another. Both are solvable (queue + S3 disk) but the work is yours, at which point you've rewritten the package's core value.
Failure modes.
Ramp-up. Low for a mid-level Laravel developer to use (hours). Moderate to own (a few days to read the source end-to-end, write characterization tests, and harden the upload path). The asymmetry is the point: adoption is cheap, ownership is not, and with an archived package you are buying the ownership whether you planned to or not.
Recommendation. Do not adopt for new work. If already in the codebase, contain it this sprint (vendor + pin + audit gate) and schedule replacement within one or two quarters using native Laravel uploads plus a maintained image library. The opportunity score here reflects a small, cheap-to-reimplement utility — the correct TPM read is that the package's scope is small enough that replacing it costs less than owning it.
How can I help you explore Laravel packages today?