kami/icobench-client
A PHP client for the ICOBench API that wraps endpoints for ICO listings, ratings, and related data in a simple, framework-friendly interface for Laravel and standalone PHP applications, helping streamline integration of ICOBench data into your projects.
Architecture fit. kami/icobench-client is a thin HTTP wrapper: a Laravel service provider, a facade or bound client, Guzzle under the hood, and a handful of request methods that map to ICOBench REST endpoints (ICO listings, ratings, profiles). As an architectural pattern, it fits any Laravel codebase that wants vendor integrations isolated behind a gateway interface — config-driven credentials, PSR-compatible transport, swappable backing service. As an architectural fit for the actual domain, it is irrelevant: ICOBench is a 2017–2018 ICO-ratings service that has been offline for years. The structure is clean; the thing it talks to no longer answers.
Integration feasibility. Mechanically trivial (composer require, publish config, set two env vars), functionally near-zero. Three facts dominate:
--ignore-platform-reqs, manual constraint edits, or a fork — with no upstream to merge the fix.Technical risk. High and non-diversifiable. The three risks a TPM should carry into any decision:
Key questions to resolve before spending any engineering time:
Stack fit. Nominally Laravel, but specifically Laravel 5.x-era Laravel. On a modern stack it does not "integrate" so much as "get vendored and patched." If the team insists on installing the Packagist artifact, budget for constraint relaxation and a fork from day one.
Migration path. The only defensible route, if a genuine requirement exists:
internal/icobench-client).base_uri at whatever live, mirrored, or internal endpoint you actually control. If the published config does not expose a base URL override, the fork is mandatory.composer.json.Compatibility. Verify hard, and early, against your actual target versions:
^7.0/^7.1; modern stacks expect ^8.1+).^6.0 vs. ^7.0 — a common Composer conflict).Assume incompatibility and design around it. The cost of confirming is an hour; the cost of assuming "it just works" is a mid-sprint surprise.
Sequencing for a TPM.
curl against the ICOBench API. If it does not respond, stop. Do not commission a spike, do not open a Jira epic. Redirect to a current provider.MarketDataGateway interface so the transport is swappable when the next provider dies. For a client this thin, building your own Guzzle wrapper is usually less total effort than resurrecting an abandoned one — and you own it cleanly.Maintenance. Effectively zero upstream. Once adopted, you own every line: no security backports, no compatibility fixes for new Laravel/PHP versions, no bug triage from the author. The maintenance burden is 100% internal from day one, in perpetuity, for a component whose primary function is to call a service that no longer exists. That is a structurally poor trade.
Support. No community, no active issues, no release cadence, 3 stars, 0 dependents. "Support" means a team member reading seven-year-old source under time pressure. Escalation paths do not exist; there is nobody to escalate to.
Scaling. Client-side scaling is a non-issue — it is HTTP calls. The real scaling question is availability of the upstream, and the upstream is presumed dead. If a substitute endpoint is sourced, throughput becomes a provider-selection question (rate limits, quotas, SLA), not a package question. Do not let "scaling" become a discussion here; it distracts from the actual blocker.
Failure modes to design against (if anyone adopts this anyway):
Ramp-up. The code is small, readable, and easy to onboard — a junior engineer can understand it in an afternoon. That is the easy part. The expensive part is organizational: justifying the adoption, forking and maintaining the fork, and carrying the reputational risk of shipping stale crypto data as if it were live. Even a fast ramp leaves you owning a liability.
Recommendation for the TPM: do not adopt this package. It is not a dependency decision; it is an archaeological artifact. Its genuine leverage is as (a) a five-minute reference for how a Laravel API-client package should be structured, and (b) a concrete data point in the build-vs-buy argument for crypto data ingestion — vendor wrappers churn on a two-to-three-year cycle, so the durable answer is a thin first-party adapter behind an interface with a named replacement path. If ICO or asset data is a real requirement, scope a current provider and own the client. Make this call early and cheaply, and move the team on.
How can I help you explore Laravel packages today?