laravel:ports-and-adapters
SkillDev toolsUse hexagonal architecture for external systems; define ports (interfaces) and per-provider adapters; select adapter at composition edge
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the laravel:ports-and-adapters skill
What this skill tells your AI
The instructions your AI receives, as published by jpcaparas/superpowers-laravel in skills/ports-and-adapters/SKILL.md and read by ahel’s review.
Abstract integrations behind stable interfaces. Keep vendor SDKs out of your domain code.
Shape
- Port: PHP interface that expresses only what the app needs
- Adapters: one per provider, wrapping SDK quirks
- Selection: choose adapter via config/env/service provider
Example (email)
// Port
interface MailPort {
public function send(string $to, string $subject, string $html): void;
}
// Adapter
final class SesMailAdapter implements MailPort {
public function __construct(private \Aws\Ses\SesClient $ses) {}
public function send(string $to, string $subject, string $html): void {
// wrap SES specifics here
}
}
// Composition (AppServiceProvider)
$this->app->singleton(MailPort::class, function () {
return match (config('mail.driver')) {
'ses' => new SesMailAdapter(app('aws.ses')),
default => new SmtpMailAdapter(/* ... */),
};
});
Tips
- Normalize SDK data into your own types/DTOs
- Expose only portable capabilities via the port
- Keep adapters thin and well-tested
Signals
- GitHub stars
- 153
- Forks
- 2
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
laravel-ports-and-adapters- Source
- github.com/jpcaparas/superpowers-laravel