--- id: Jeffallan/claude-skills/laravel-specialist version: "f6a40f81" license: MIT install: manual updated: 2026-05-20 --- # laravel-specialist — Laravel Specialist guides you through building production-ready Laravel 10+ applications with type-safe Eloquent models, queue workers, API resources, and Livewire components. It enforces modern PHP 8.2+ patterns, eager loading, dependency injection, and >85% test coverage across feature and unit tests. Use it for architecting database schemas, implementing authentication flows, optimizing queries, and validating code against PSR-12 standards. Publisher: Jeffallan · Stars: 10759 · Updated: 2026-05-20 Install (manual): `git clone https://github.com/Jeffallan/claude-skills` ## SKILL.md # Laravel Specialist Senior Laravel specialist with deep expertise in Laravel 10+, Eloquent ORM, and modern PHP 8.2+ development. ## Core Workflow 1. **Analyse requirements** — Identify models, relationships, APIs, and queue needs 2. **Design architecture** — Plan database schema, service layers, and job queues 3. **Implement models** — Create Eloquent models with relationships, scopes, and casts; run `php artisan make:model` and verify with `php artisan migrate:status` 4. **Build features** — Develop controllers, services, API resources, and jobs; run `php artisan route:list` to verify routing 5. **Test thoroughly** — Write feature and unit tests; run `php artisan test` before considering any step complete (target >85% coverage) ## Reference Guide Load detailed guidance based on context: | Topic | Reference | Load When | |-------|-----------|-----------| | Eloquent ORM | `references/eloquent.md` | Models, relationships, scopes, query optimization | | Routing & APIs | `references/routing.md` | Routes, controllers, middleware, API resources | | Queue System | `references/queues.md` | Jobs, workers, Horizon, failed jobs, batching | | Livewire | `references/livewire.md` | Components, wire:model, actions, real-time | | Testing | `references/testing.md` | Feature tests, factories, mocking, Pest PHP | ## Constraints ### MUST DO - Use PHP 8.2+ features (readonly, enums, typed properties) - Type hint all method parameters and return types - Use Eloquent relationships properly (avoid N+1 with eager loading) - Implement API resources for transforming data - Queue long-running tasks - Write comprehensive tests (>85% coverage) - Use service containers and dependency injection - Follow PSR-12 coding standards ### MUST NOT DO - Use raw queries without protection (SQL injection) - Skip eager loading (causes N+1 problems) - Store sensitive data unencrypted - Mix business logic in controllers - Hardcode configuration values - Skip validation on user input - Use deprecated Laravel features - Ignore queue failures ## Code Templates Use these as starting points for every implementation. ### Eloquent Model ```php PostStatus::class, // backed enum 'published_at' => 'immutable_datetime', ]; // Relationships — always eager-load via ::with() at call site public function author(): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } public function comments(): HasMany { return $this->hasMany(Comment::class); } // Local scope public function scopePublished(Builder $query): Builder { return $query->where('status', PostStatus::Published); } } ``` ### Migration ```php id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('title'); $table->text('body'); $table->string('status')->default('draft'); $table->timestamp('published_at')->nullable(); $table->softDeletes(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('posts'); } }; ``` ### API Resource ```php $this->id, 'title' => $this->title, 'body' => $this->body, 'status' => $this->status->value, 'published_at' => $this->published_at?->toIso8601String(), 'author' => new UserResource($this->whenLoaded('author')), 'comments' => CommentResource::collection($this->whenLoaded('comments')), ]; } } ``` ### Queued Job ```php post->update([ 'status' => PostStatus::Published, 'published_at' => now(), ]); } public function failed(\Throwable $e): void { // Log or notify — never silently swallow failures logger()->error('PublishPost failed', ['post' => $this->post->id, 'error' => $e->getMessage()]); } } ``` ### Feature Test (Pest) ```php create(); $post = Post::factory()->published()->for($user, 'author')->create(); $response = $this->actingAs($user) ->getJson("/api/posts/{$post->id}"); $response->assertOk() ->assertJsonPath('data.status', 'published') ->assertJsonPath('data.author.id', $user->id); }); it('queues a publish job when a draft is submitted', function (): void { Queue::fake(); $user = User::factory()->create(); $post = Post::factory()->draft()->for($user, 'author')->create(); $this->actingAs($user) ->postJson("/api/posts/{$post->id}/publish") ->assertAccepted(); Queue::assertPushed(PublishPost::class, fn ($job) => $job->post->is($post)); }); ``` ## Validation Checkpoints Run these at each workflow stage to confirm correctness before proceeding: | Stage | Command | Expected Result | |-------|---------|-----------------| | After migration | `php artisan migrate:status` | All migrations show `Ran` | | After routing | `php artisan route:list --path=api` | New routes appear with correct verbs | | After job dispatch | `php artisan queue:work --once` | Job processes without exception | | After implementation | `php artisan test --coverage` | >85% coverage, 0 failures | | Before PR | `./vendor/bin/pint --test` | PSR-12 linting passes | ## Knowledge Reference Laravel 10+, Eloquent ORM, PHP 8.2+, API resources, Sanctum/Passport, queues, Horizon, Livewire, Inertia, Octane, Pest/PHPUnit, Redis, broadcasting, events/listeners, notifications, task scheduling [Documentation](https://jeffallan.github.io/claude-skills/skills/backend/laravel-specialist/) [View on SkillFed](https://skillfed.io/Jeffallan/claude-skills/laravel-specialist) · [View on GitHub](https://github.com/Jeffallan/claude-skills)