Install any skill in seconds. Free to start, no credit card required.
Get Started Free →fbarrento/saloon-laravel-integration
Integrate a third-party HTTP API into a Laravel app with SaloonPHP using a ports-and-adapters layout — Saloon connector/resources/DTOs as the adapter, a Contract + Service as the port, domain Data objects the rest of the app consumes. Covers multi-tenant credential storage, per-tenant rate limiting, domain-layer caching, webhooks/queues/events, and a human-in-the-loop (HITL) fixture-recording ritual where the agent asks the human to set up third-party state before recording.
Passed 17 of 22 test cases with the skill, and 9 of 22 without it.
and 10 more in the full report
9 fixed8 passed either way4 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 9 test cases the skill fixed. Same model, same prompt, with and without the skill.
We need a lightweight fake implementation of our ExchangeRateService interface for fast unit tests and local development in Laravel without hitting external APIs. Where should this class be located and how should it be named?
| Checked | Without skill | With skill |
|---|---|---|
| Names the fake implementation class with the InMemory prefix. | Missed | Passed |
| Places the InMemory implementation class flat inside app/Contracts/. | Missed | Passed |
The instructions your model reads when the skill loads.
Use this skill when integrating a third-party API into a Laravel app (in-app code, no separate composer package) with SaloonPHP, behind a domain Contract.
This skill layers on saloon-integration. That skill owns the
Saloon mechanics — connector, resources, requests, output/input DTOs,
fixture redaction, the recording workflow. Read it first; this skill
only adds the Laravel concerns: the ports-and-adapters boundary,
container wiring, multi-tenant credentials, resilience, the write/push
side, and the HITL recording ritual. For non-Saloon Pest conventions,
see pest-package-tests.
Assumes saloonphp/laravel-plugin is installed. If you can't add it,
fall back to the plugin-free MockClient patterns in saloon-integration.
app/Http/Integrations/FinnHub/ # ADAPTER (Saloon, vendor vocabulary)
FinnHubConnector.php FinnHubConnectorFactory.php
Data/ Requests/ Resources/ Enums/ Exceptions/
app/Contracts/ # PORT + implementations (flat)
SymbolQuoteService.php # the interface
FinnHubSymbolQuoteService.php # Saloon-backed adapter-impl
InMemorySymbolQuoteService.php # test/dev default
app/Data/ # DOMAIN Data (provider-agnostic)
SymbolQuote.php
The one rule that governs everything: dependency points
adapter → domain, never the reverse. Nothing in app/Contracts/ or
app/Data/ may import anything under app/Http/Integrations/. The
domain must not know a provider exists. Consumers (controllers, actions,
jobs, webhook handlers) depend on the Contract, never the connector.
Fixtures are recorded from the live API, never hand-crafted (one
test cases passed, vs 9 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.