orca-services/nova-api
Expose Laravel Nova resources through a clean JSON API. Provides endpoints for models, authentication, filtering, and CRUD operations, making it easy to power mobile apps or external clients from your existing Nova admin.
Architecture fit. orca-services/nova-api is a thin, purpose-built HTTP SDK for a single upstream service (NOVA), not a framework package. It has no obvious Laravel service provider, config publishing, or facade — so it lands in the infrastructure/adapter layer of a hexagonal or repository-pattern Laravel codebase, behind a domain-owned port (NovaGateway interface). That is a good fit if we treat it as a replaceable edge adapter and never let its DTOs leak into domain code. It is a poor fit as a core dependency, because an archived SDK becomes architecture by default the moment business logic couples to it.
Integration feasibility. Low technical effort, moderate governance effort. Composer install is straightforward (MIT, PHP package), and the request/response surface is presumably PSR-7/PSR-18-compatible or Guzzle-based, so it can sit alongside Laravel's Http client. The real integration work is contract discovery: the client's method signatures and DTOs are effectively the only machine-readable description of the NOVA API we have, so we should mine them for endpoint shapes, auth flow, and pagination semantics before writing a single line of integration code.
Technical risk. Concentrated and asymmetric:
Key questions.
Stack fit. Target: Laravel 11/12 on PHP 8.2+. The SDK should be wrapped, not consumed directly. Pattern:
App\Infrastructure\Nova\NovaClientAdapter implements App\Domain\Contracts\NovaGateway.NovaServiceProvider with credentials sourced from config/services.php and secrets from the environment/secret manager — never from a committed config file.Migration path. Do not depend on the Packagist artifact from a public, archived repo long-term. Options, in order of preference:
orca-services/nova-api → ourorg/nova-api), pin to the final tag, and add a README note that we own it. Composer vcs repository entry, version-pinned.packages/nova-api in a monorepo if we only need a handful of endpoints — often the cheaper end state for a client of this size.Http client, using the SDK purely as reference documentation. Preferred if we touch fewer than ~10 endpoints.Compatibility. Before adopting, verify in composer.json: PHP constraint (^7.x vs ^8.x), Guzzle major version (a Guzzle 6 pin will conflict with modern Laravel), PSR interface versions (http-client 1.x vs 2.x), and whether the package declares a php-http/discovery dependency. Run composer why-not against our target Laravel version. If constraints are stale, forking with a relaxed composer.json is usually a 30-minute fix — but it is a fork we now maintain.
Sequencing.
Maintenance. This is the dominant cost and it is entirely ours. Upstream is archived, so budget an explicit owner (a named engineer, not "the team") and a standing allocation of roughly 1–2 days per quarter for dependency bumps and contract verification, plus a re-audit at every Laravel major upgrade. Treat the fork as a first-class internal package with its own changelog and version tags — otherwise it silently rots until an upgrade forces the issue.
Support. There is no upstream support channel. Escalation runs through the Orca commercial relationship, which means API breakages are resolved at business speed, not engineering speed. Get the deprecation/notice commitment in writing; if Orca will not commit to notice periods, plan for the integration to fail closed and degrade gracefully rather than assume smooth sailing.
Scaling. The client itself is stateless and trivially horizontally scalable — it will not be our bottleneck. Throughput is bounded by NOVA's rate limits and latency. Plan for: per-tenant token/rate budgeting, connection reuse via a shared Guzzle handler, async/batched calls where the API supports them, and a queue in front of any write path so that upstream slowness does not propagate into request latency. Explicit timeouts and a circuit breaker are mandatory, not optional.
Failure modes to instrument and alert on.
Ramp-up. Code comprehension is cheap — this is a small library that a mid-level PHP developer can read in half a day. The genuine ramp-up cost is NOVA domain knowledge: its resource model, pagination, idempotency semantics, and error taxonomy, none of which are documented outside the source. Expect ~1 sprint from kickoff to a production-ready, observable, feature-flagged integration, with the bulk of that time spent on contract discovery and failure-path testing rather than on wiring up the client.
Bottom line. Adopt as a reference implementation and short-term accelerator, not as a durable runtime dependency. The strategic value here is the API contract encoded in the source and the commercial relationship behind it; the library itself is scaffolding we should expect to own, fork, or replace within two quarters.
How can I help you explore Laravel packages today?