porto-sap/hello-api
Porto SAP Hello API is a Laravel-based starter framework for building scalable, modular APIs. It offers a clean architecture, built-in authentication and authorization, API documentation, validation, and code generators to accelerate enterprise API development.
Architecture fit. Apiato (published here under the porto-sap/hello-api name, pointing at apiato/apiato) is not a drop-in library — it is an opinionated Laravel application skeleton built on the Porto SAP architecture. Code is organized into Containers (one per domain: Actions, Tasks, Repositories, UI/API, Requests, Transformers, Tests) plus a Ship layer for shared infrastructure. It assumes greenfield service design and enforces boundaries that a typical Laravel monolith does not have. Fit is strong if we are building a new API-centric backend with multiple bounded contexts; it is poor if the intent is to bolt structured layering onto an existing app.
v13.2.0 does not change this evaluation: it is a non-breaking minor release containing a single feature PR ("modern responsive UI") from a first-time contributor. The signal worth registering is scope, not architecture — a UI-oriented change inside an API-first skeleton. We need to confirm whether this touches the docs/site or ships assets (views, CSS, frontend build tooling) into the skeleton itself.
Integration feasibility. Greenfield: high. The composer create-project flow, Docker setup, and pre-wired auth (OAuth2), transformers, and exception handling compress 4–8 weeks of platform scaffolding into days. Brownfield: low. Apiato replaces app/, bootstraps containers through its own service provider and kernel, and owns the exception handler, route loading, and test harness. Third-party packages that assume App\Models or standard PSR-4 autoloading will need bridging.
v13.2.0 is non-breaking on its face, but if the UI work introduces npm/Vite assets into the skeleton, the evaluation build must validate build-pipeline and Docker image impact before pinning.
Technical risk. The dominant risk is governance, not code. Two diligence red flags must be resolved before adoption:
create-project, not as a Composer dependency, which explains dependents=0 — but the published artifact name (porto-sap/hello-api) does not match the repo, so we must confirm what we are actually vendoring and pin a specific commit/tag. v13.1.0 → v13.2.0 gives us a usable diff to inspect, which partially de-risks this.Secondary risks: tight coupling to Laravel major versions, reliance on Laravel Passport (OAuth2) and Fractal transformers — both areas where the wider ecosystem has moved on (Sanctum, API Resources). Expect to own these decisions rather than inherit them. New in this release: scope creep into presentation-layer concerns in a codebase whose value proposition is backend architecture discipline.
Key questions for the maintainer/pilot.
apiato/core usable as a standalone dependency, or is the skeleton mandatory?Stack fit. Laravel + PHP 8.2+, MySQL/Postgres, Redis, Docker-based local environment, OAuth2 auth. This aligns with our existing PHP footprint and CI tooling. The Container model maps cleanly to team ownership boundaries — one squad, one Container — which is the main strategic reason to consider it. If v13.2.0 brings frontend build tooling into the skeleton, add Node/npm to the CI matrix expectations; that is a small but real expansion of the stack surface.
Migration path. Do not attempt a lift-and-shift of an existing service. Two viable paths:
Both paths survive v13.2.0 unchanged; it is an additive minor release.
Compatibility. Pin Laravel and PHP versions explicitly in the ADR, and pin Apiato to v13.2.0 or later rather than a branch, now that there is a clean tagged delta. Verify no conflicts with our auth provider, observability SDKs, and static analysis pipeline (PHPStan/Larastan need Container-aware config). Confirm migration and seeder paths, since Apiato relocates them per Container. Review the PR #786 diff for new transitive dependencies before locking the pin.
Sequencing.
Maintenance. Assume we fork and own. Upgrades will be re-diffing the skeleton against our fork rather than a composer update, so budget ~5–10% of one engineer per quarter for upstream tracking. This is the single largest hidden cost. v13.2.0 is a favourable sample of what that tracking looks like — a one-line changelog with an inspectable single-PR diff — but a UI-oriented diff is also the kind we may choose not to merge into an API-only fork, which is exactly the divergence cost to plan for.
Support. Community channels only — no SLA, no guaranteed triage. Mitigate with an internal champion (ideally two, to address bus factor) and a documented escalation path to Path B if upstream stalls. The first-time contributor in v13.2.0 is encouraging but is not a support commitment and should not be cited as such to stakeholders.
Scaling. Containers are stateless by design and scale horizontally without ceremony. The real scaling constraint is developer throughput: a single endpoint touches roughly 8–12 files (Request, Controller, Action, Task, Repository, Transformer, Test, routes). This is deliberate and pays off at 30+ endpoints across 5+ teams, but it slows the first 10 endpoints measurably. Set expectations with stakeholders accordingly.
Failure modes to monitor.
Ramp-up. 2–4 weeks to fluency for a mid/senior Laravel engineer; documentation is substantial but has known drift versus the current skeleton, so treat the reference Container in-repo as the source of truth. Junior engineers take longer — the pattern rewards discipline over speed. If UI assets are now part of the skeleton, add a short note on frontend conventions to the onboarding path.
TPM recommendation. Unchanged. v13.2.0 is a low-risk, non-breaking minor release that does not alter the architecture assessment, the integration paths, or the score (33.8) and opportunity (3.84). It supplies two small positives — a clean tagged delta and a first outside contributor — and one new diligence item: confirm the UI work does not pull presentation-layer scope and frontend build tooling into an API-first skeleton. Pursue only as a greenfield, bounded pilot with an explicit Path B fallback. The value proposition is the architecture, not the dependency — negotiate accordingly.
How can I help you explore Laravel packages today?