[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70GD5JD340M6Q6AS1GNN78R":3,"skill-same:01M70GD5JD340M6Q6AS1GNN78R":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M70GD5JD340M6Q6AS1GNN78R","laravel-patterns",null,"Laravel architecture patterns, routing\u002Fcontrollers, Eloquent ORM, service layers, queues, events, caching, and API resources for production apps. Use when building or reviewing Laravel apps — controllers, Eloquent, service layers, queues, or API resources.","mdnaimul22\u002Fhuman-skills","mdnaimul22","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F64520358?v=4","01M70FH95MH2H796Q01TYSFZ03","Naimul","01M70FH96798CQR4YHA13F17GA",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Flaravel-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"laravel patterns","laravel","patterns","caching","eloquent","when","queues","for","layers","laravel architecture","resources","events","apps","architecture","use","orm","api","architecture patterns","production apps","routing","2026-11-10 10:12:30",false,"---\nname: laravel-patterns\ndescription: Laravel architecture patterns, routing\u002Fcontrollers, Eloquent ORM, service layers, queues, events, caching, and API resources for production apps. Use when building or reviewing Laravel apps — controllers, Eloquent, service layers, queues, or API resources.\nmetadata:\n  origin: ECC\n---\n\n# Laravel Development Patterns\n\nProduction-grade Laravel architecture patterns for scalable, maintainable applications.\n\n## When to Use\n\n- Building Laravel web applications or APIs\n- Structuring controllers, services, and domain logic\n- Working with Eloquent models and relationships\n- Designing APIs with resources and pagination\n- Adding queues, events, caching, and background jobs\n\n## How It Works\n\n- Structure the app around clear boundaries (controllers -> services\u002Factions -> models).\n- Use explicit bindings and scoped bindings to keep routing predictable; still enforce authorization for access control.\n- Favor typed models, casts, and scopes to keep domain logic consistent.\n- Keep IO-heavy work in queues and cache expensive reads.\n- Centralize config in `config\u002F*` and keep environments explicit.\n\n## Examples\n\n### Project Structure\n\nUse a conventional Laravel layout with clear layer boundaries (HTTP, services\u002Factions, models).\n\n### Recommended Layout\n\n```\napp\u002F\n├── Actions\u002F            # Single-purpose use cases\n├── Console\u002F\n├── Events\u002F\n├── Exceptions\u002F\n├── Http\u002F\n│   ├── Controllers\u002F\n│   ├── Middleware\u002F\n│   ├── Requests\u002F       # Form request validation\n│   └── Resources\u002F      # API resources\n├── Jobs\u002F\n├── Models\u002F\n├── Policies\u002F\n├── Providers\u002F\n├── Services\u002F           # Coordinating domain services\n└── Support\u002F\nconfig\u002F\ndatabase\u002F\n├── factories\u002F\n├── migrations\u002F\n└── seeders\u002F\nresources\u002F\n├── views\u002F\n└── lang\u002F\nroutes\u002F\n├── api.php\n├── web.php\n└── console.php\n```\n\n### Controllers -> Services -> Actions\n\nKeep controllers thin. Put orchestration in services and single-purpose logic in actions.\n\n```php\nfinal class CreateOrderAction\n{\n    public function __construct(private OrderRepository $orders) {}\n\n    public function handle(CreateOrderData $data): Order\n    {\n        return $this->orders->create($data);\n    }\n}\n\nfinal class OrdersController extends Controller\n{\n    public function __construct(private CreateOrderAction $createOrder) {}\n\n    public function store(StoreOrderRequest $request): JsonResponse\n    {\n        $order = $this->createOrder->handle($request->toDto());\n\n        return response()->json([\n            'success' => true,\n            'data' => OrderResource::make($order),\n            'error' => null,\n            'meta' => null,\n        ], 201);\n    }\n}\n```\n\n### Routing and Controllers\n\nPrefer route-model binding and resource controllers for clarity.\n\n```php\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::middleware('auth:sanctum')->group(function () {\n    Route::apiResource('projects', ProjectController::class);\n});\n```\n\n### Route Model Binding (Scoped)\n\nUse scoped bindings to prevent cross-tenant access.\n\n```php\nRoute::scopeBindings()->group(function () {\n    Route::get('\u002Faccounts\u002F{account}\u002Fprojects\u002F{project}', [ProjectController::class, 'show']);\n});\n```\n\n### Nested Routes and Binding Names\n\n- Keep prefixes and paths consistent to avoid double nesting (e.g., `conversation` vs `conversations`).\n- Use a single parameter name that matches the bound model (e.g., `{conversation}` for `Conversation`).\n- Prefer scoped bindings when nesting to enforce parent-child relationships.\n\n```php\nuse App\\Http\\Controllers\\Api\\ConversationController;\nuse App\\Http\\Controllers\\Api\\MessageController;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::middleware('auth:sanctum')->prefix('conversations')->group(function () {\n    Route::post('\u002F', [ConversationController::class, 'store'])->name('conversations.store');\n\n    Route::scopeBindings()->group(function () {\n        Route::get('\u002F{conversation}', [ConversationController::class, 'show'])\n            ->name('conversations.show');\n\n        Route::post('\u002F{conversation}\u002Fmessages', [MessageController::class, 'store'])\n            ->name('conversation-messages.store');\n\n        Route::get('\u002F{conversation}\u002Fmessages\u002F{message}', [MessageController::class, 'show'])\n            ->name('conversation-messages.show');\n    });\n});\n```\n\nIf you want a parameter to resolve to a different model class, define explicit binding. For custom binding logic, use `Route::bind()` or implement `resolveRouteBinding()` on the model.\n\n```php\nuse App\\Models\\AiConversation;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::model('conversation', AiConversation::class);\n```\n\n### Service Container Bindings\n\nBind interfaces to implementations in a service provider for clear dependency wiring.\n\n```php\nuse App\\Repositories\\EloquentOrderRepository;\nuse App\\Repositories\\OrderRepository;\nuse Illuminate\\Support\\ServiceProvider;\n\nfinal class AppServiceProvider extends ServiceProvider\n{\n    public function register(): void\n    {\n        $this->app->bind(OrderRepository::class, EloquentOrderRepository::class);\n    }\n}\n```\n\n### Eloquent Model Patterns\n\n### Model Configuration\n\n```php\nfinal class Project extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['name', 'owner_id', 'status'];\n\n    protected $casts = [\n        'status' => ProjectStatus::class,\n        'archived_at' => 'datetime',\n    ];\n\n    public function owner(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'owner_id');\n    }\n\n    public function scopeActive(Builder $query): Builder\n    {\n        return $query->whereNull('archived_at');\n    }\n}\n```\n\n### Custom Casts and Value Objects\n\nUse enums or value objects for strict typing.\n\n```php\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\n\nprotected $casts = [\n    'status' => ProjectStatus::class,\n];\n```\n\n```php\nprotected function budgetCents(): Attribute\n{\n    return Attribute::make(\n        get: fn (int $value) => Money::fromCents($value),\n        set: fn (Money $money) => $money->toCents(),\n    );\n}\n```\n\n### Eager Loading to Avoid N+1\n\n```php\n$orders = Order::query()\n    ->with(['customer', 'items.product'])\n    ->latest()\n    ->paginate(25);\n```\n\n### Query Objects for Complex Filters\n\n```php\nfinal class ProjectQuery\n{\n    public function __construct(private Builder $query) {}\n\n    public function ownedBy(int $userId): self\n    {\n        $query = clone $this->query;\n\n        return new self($query->where('owner_id', $userId));\n    }\n\n    public function active(): self\n    {\n        $query = clone $this->query;\n\n        return new self($query->whereNull('archived_at'));\n    }\n\n    public function builder(): Builder\n    {\n        return $this->query;\n    }\n}\n```\n\n### Global Scopes and Soft Deletes\n\nUse global scopes for default filtering and `SoftDeletes` for recoverable records.\nUse either a global scope or a named scope for the same filter, not both, unless you intend layered behavior.\n\n```php\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nfinal class Project extends Model\n{\n    use SoftDeletes;\n\n    protected static function booted(): void\n    {\n        static::addGlobalScope('active', function (Builder $builder): void {\n            $builder->whereNull('archived_at');\n        });\n    }\n}\n```\n\n### Query Scopes for Reusable Filters\n\n```php\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nfinal class Project extends Model\n{\n    public function scopeOwnedBy(Builder $query, int $userId): Builder\n    {\n        return $query->where('owner_id', $userId);\n    }\n}\n\n\u002F\u002F In service, repository etc.\n$projects = Project::ownedBy($user->id)->get();\n```\n\n### Transactions for Multi-Step Updates\n\n```php\nuse Illuminate\\Support\\Facades\\DB;\n\nDB::transaction(function (): void {\n    $order->update(['status' => 'paid']);\n    $order->items()->update(['paid_at' => now()]);\n});\n```\n\n### Migrations\n\n### Naming Convention\n\n- File names use timestamps: `YYYY_MM_DD_HHMMSS_create_users_table.php`\n- Migrations use anonymous classes (no named class); the filename communicates intent\n- Table names are `snake_case` and plural by default\n\n### Example Migration\n\n```php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('orders', function (Blueprint $table): void {\n            $table->id();\n            $table->foreignId('customer_id')->constrained()->cascadeOnDelete();\n            $table->string('status', 32)->index();\n            $table->unsignedInteger('total_cents');\n            $table->timestamps();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('orders');\n    }\n};\n```\n\n### Form Requests and Validation\n\nKeep validation in form requests and transform inputs to DTOs.\n\n```php\nuse App\\Models\\Order;\n\nfinal class StoreOrderRequest extends FormRequest\n{\n    public function authorize(): bool\n    {\n        return $this->user()?->can('create', Order::class) ?? false;\n    }\n\n    public function rules(): array\n    {\n        return [\n            'customer_id' => ['required', 'integer', 'exists:customers,id'],\n            'items' => ['required', 'array', 'min:1'],\n            'items.*.sku' => ['required', 'string'],\n            'items.*.quantity' => ['required', 'integer', 'min:1'],\n        ];\n    }\n\n    public function toDto(): CreateOrderData\n    {\n        return new CreateOrderData(\n            customerId: (int) $this->validated('customer_id'),\n            items: $this->validated('items'),\n        );\n    }\n}\n```\n\n### API Resources\n\nKeep API responses consistent with resources and pagination.\n\n```php\n$projects = Project::query()->active()->paginate(25);\n\nreturn response()->json([\n    'success' => true,\n    'data' => ProjectResource::collection($projects->items()),\n    'error' => null,\n    'meta' => [\n        'page' => $projects->currentPage(),\n        'per_page' => $projects->perPage(),\n        'total' => $projects->total(),\n    ],\n]);\n```\n\n### Events, Jobs, and Queues\n\n- Emit domain events for side effects (emails, analytics)\n- Use queued jobs for slow work (reports, exports, webhooks)\n- Prefer idempotent handlers with retries and backoff\n\n### Caching\n\n- Cache read-heavy endpoints and expensive queries\n- Invalidate caches on model events (created\u002Fupdated\u002Fdeleted)\n- Use tags when caching related data for easy invalidation\n\n### Configuration and Environments\n\n- Keep secrets in `.env` and config in `config\u002F*.php`\n- Use per-environment config overrides and `config:cache` in production\n","# Laravel Development Patterns\n\nProduction-grade Laravel architecture patterns for scalable, maintainable applications.\n\n## When to Use\n\n- Building Laravel web applications or APIs\n- Structuring controllers, services, and domain logic\n- Working with Eloquent models and relationships\n- Designing APIs with resources and pagination\n- Adding queues, events, caching, and background jobs\n\n## How It Works\n\n- Structure the app around clear boundaries (controllers -> services\u002Factions -> models).\n- Use explicit bindings and scoped bindings to keep routing predictable; still enforce authorization for access control.\n- Favor typed models, casts, and scopes to keep domain logic consistent.\n- Keep IO-heavy work in queues and cache expensive reads.\n- Centralize config in `config\u002F*` and keep environments explicit.\n\n## Examples\n\n### Project Structure\n\nUse a conventional Laravel layout with clear layer boundaries (HTTP, services\u002Factions, models).\n\n### Recommended Layout\n\n```\napp\u002F\n├── Actions\u002F            # Single-purpose use cases\n├── Console\u002F\n├── Events\u002F\n├── Exceptions\u002F\n├── Http\u002F\n│   ├── Controllers\u002F\n│   ├── Middleware\u002F\n│   ├── Requests\u002F       # Form request validation\n│   └── Resources\u002F      # API resources\n├── Jobs\u002F\n├── Models\u002F\n├── Policies\u002F\n├── Providers\u002F\n├── Services\u002F           # Coordinating domain services\n└── Support\u002F\nconfig\u002F\ndatabase\u002F\n├── factories\u002F\n├── migrations\u002F\n└── seeders\u002F\nresources\u002F\n├── views\u002F\n└── lang\u002F\nroutes\u002F\n├── api.php\n├── web.php\n└── console.php\n```\n\n### Controllers -> Services -> Actions\n\nKeep controllers thin. Put orchestration in services and single-purpose logic in actions.\n\n```php\nfinal class CreateOrderAction\n{\n    public function __construct(private OrderRepository $orders) {}\n\n    public function handle(CreateOrderData $data): Order\n    {\n        return $this->orders->create($data);\n    }\n}\n\nfinal class OrdersController extends Controller\n{\n    public function __construct(private CreateOrderAction $createOrder) {}\n\n    public function store(StoreOrderRequest $request): JsonResponse\n    {\n        $order = $this->createOrder->handle($request->toDto());\n\n        return response()->json([\n            'success' => true,\n            'data' => OrderResource::make($order),\n            'error' => null,\n            'meta' => null,\n        ], 201);\n    }\n}\n```\n\n### Routing and Controllers\n\nPrefer route-model binding and resource controllers for clarity.\n\n```php\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::middleware('auth:sanctum')->group(function () {\n    Route::apiResource('projects', ProjectController::class);\n});\n```\n\n### Route Model Binding (Scoped)\n\nUse scoped bindings to prevent cross-tenant access.\n\n```php\nRoute::scopeBindings()->group(function () {\n    Route::get('\u002Faccounts\u002F{account}\u002Fprojects\u002F{project}', [ProjectController::class, 'show']);\n});\n```\n\n### Nested Routes and Binding Names\n\n- Keep prefixes and paths consistent to avoid double nesting (e.g., `conversation` vs `conversations`).\n- Use a single parameter name that matches the bound model (e.g., `{conversation}` for `Conversation`).\n- Prefer scoped bindings when nesting to enforce parent-child relationships.\n\n```php\nuse App\\Http\\Controllers\\Api\\ConversationController;\nuse App\\Http\\Controllers\\Api\\MessageController;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::middleware('auth:sanctum')->prefix('conversations')->group(function () {\n    Route::post('\u002F', [ConversationController::class, 'store'])->name('conversations.store');\n\n    Route::scopeBindings()->group(function () {\n        Route::get('\u002F{conversation}', [ConversationController::class, 'show'])\n            ->name('conversations.show');\n\n        Route::post('\u002F{conversation}\u002Fmessages', [MessageController::class, 'store'])\n            ->name('conversation-messages.store');\n\n        Route::get('\u002F{conversation}\u002Fmessages\u002F{message}', [MessageController::class, 'show'])\n            ->name('conversation-messages.show');\n    });\n});\n```\n\nIf you want a parameter to resolve to a different model class, define explicit binding. For custom binding logic, use `Route::bind()` or implement `resolveRouteBinding()` on the model.\n\n```php\nuse App\\Models\\AiConversation;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::model('conversation', AiConversation::class);\n```\n\n### Service Container Bindings\n\nBind interfaces to implementations in a service provider for clear dependency wiring.\n\n```php\nuse App\\Repositories\\EloquentOrderRepository;\nuse App\\Repositories\\OrderRepository;\nuse Illuminate\\Support\\ServiceProvider;\n\nfinal class AppServiceProvider extends ServiceProvider\n{\n    public function register(): void\n    {\n        $this->app->bind(OrderRepository::class, EloquentOrderRepository::class);\n    }\n}\n```\n\n### Eloquent Model Patterns\n\n### Model Configuration\n\n```php\nfinal class Project extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['name', 'owner_id', 'status'];\n\n    protected $casts = [\n        'status' => ProjectStatus::class,\n        'archived_at' => 'datetime',\n    ];\n\n    public function owner(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'owner_id');\n    }\n\n    public function scopeActive(Builder $query): Builder\n    {\n        return $query->whereNull('archived_at');\n    }\n}\n```\n\n### Custom Casts and Value Objects\n\nUse enums or value objects for strict typing.\n\n```php\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\n\nprotected $casts = [\n    'status' => ProjectStatus::class,\n];\n```\n\n```php\nprotected function budgetCents(): Attribute\n{\n    return Attribute::make(\n        get: fn (int $value) => Money::fromCents($value),\n        set: fn (Money $money) => $money->toCents(),\n    );\n}\n```\n\n### Eager Loading to Avoid N+1\n\n```php\n$orders = Order::query()\n    ->with(['customer', 'items.product'])\n    ->latest()\n    ->paginate(25);\n```\n\n### Query Objects for Complex Filters\n\n```php\nfinal class ProjectQuery\n{\n    public function __construct(private Builder $query) {}\n\n    public function ownedBy(int $userId): self\n    {\n        $query = clone $this->query;\n\n        return new self($query->where('owner_id', $userId));\n    }\n\n    public function active(): self\n    {\n        $query = clone $this->query;\n\n        return new self($query->whereNull('archived_at'));\n    }\n\n    public function builder(): Builder\n    {\n        return $this->query;\n    }\n}\n```\n\n### Global Scopes and Soft Deletes\n\nUse global scopes for default filtering and `SoftDeletes` for recoverable records.\nUse either a global scope or a named scope for the same filter, not both, unless you intend layered behavior.\n\n```php\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nfinal class Project extends Model\n{\n    use SoftDeletes;\n\n    protected static function booted(): void\n    {\n        static::addGlobalScope('active', function (Builder $builder): void {\n            $builder->whereNull('archived_at');\n        });\n    }\n}\n```\n\n### Query Scopes for Reusable Filters\n\n```php\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nfinal class Project extends Model\n{\n    public function scopeOwnedBy(Builder $query, int $userId): Builder\n    {\n        return $query->where('owner_id', $userId);\n    }\n}\n\n\u002F\u002F In service, repository etc.\n$projects = Project::ownedBy($user->id)->get();\n```\n\n### Transactions for Multi-Step Updates\n\n```php\nuse Illuminate\\Support\\Facades\\DB;\n\nDB::transaction(function (): void {\n    $order->update(['status' => 'paid']);\n    $order->items()->update(['paid_at' => now()]);\n});\n```\n\n### Migrations\n\n### Naming Convention\n\n- File names use timestamps: `YYYY_MM_DD_HHMMSS_create_users_table.php`\n- Migrations use anonymous classes (no named class); the filename communicates intent\n- Table names are `snake_case` and plural by default\n\n### Example Migration\n\n```php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('orders', function (Blueprint $table): void {\n            $table->id();\n            $table->foreignId('customer_id')->constrained()->cascadeOnDelete();\n            $table->string('status', 32)->index();\n            $table->unsignedInteger('total_cents');\n            $table->timestamps();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('orders');\n    }\n};\n```\n\n### Form Requests and Validation\n\nKeep validation in form requests and transform inputs to DTOs.\n\n```php\nuse App\\Models\\Order;\n\nfinal class StoreOrderRequest extends FormRequest\n{\n    public function authorize(): bool\n    {\n        return $this->user()?->can('create', Order::class) ?? false;\n    }\n\n    public function rules(): array\n    {\n        return [\n            'customer_id' => ['required', 'integer', 'exists:customers,id'],\n            'items' => ['required', 'array', 'min:1'],\n            'items.*.sku' => ['required', 'string'],\n            'items.*.quantity' => ['required', 'integer', 'min:1'],\n        ];\n    }\n\n    public function toDto(): CreateOrderData\n    {\n        return new CreateOrderData(\n            customerId: (int) $this->validated('customer_id'),\n            items: $this->validated('items'),\n        );\n    }\n}\n```\n\n### API Resources\n\nKeep API responses consistent with resources and pagination.\n\n```php\n$projects = Project::query()->active()->paginate(25);\n\nreturn response()->json([\n    'success' => true,\n    'data' => ProjectResource::collection($projects->items()),\n    'error' => null,\n    'meta' => [\n        'page' => $projects->currentPage(),\n        'per_page' => $projects->perPage(),\n        'total' => $projects->total(),\n    ],\n]);\n```\n\n### Events, Jobs, and Queues\n\n- Emit domain events for side effects (emails, analytics)\n- Use queued jobs for slow work (reports, exports, webhooks)\n- Prefer idempotent handlers with retries and backoff\n\n### Caching\n\n- Cache read-heavy endpoints and expensive queries\n- Invalidate caches on model events (created\u002Fupdated\u002Fdeleted)\n- Use tags when caching related data for easy invalidation\n\n### Configuration and Environments\n\n- Keep secrets in `.env` and config in `config\u002F*.php`\n- Use per-environment config overrides and `config:cache` in production\n",{"name":5,"metadata":49,"description":7},{"origin":50},"ECC","main","74715deacdc69119d739f38916f8ee4f0f979ebf","skills\u002Fstorage\u002Faffaan-m_ECC\u002Flaravel-patterns",0,"https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills","https:\u002F\u002Fgithub.com\u002Fmdnaimul22","AI Agents Workflows Automation | Specializing in Python, FastAPI, MCP Agents & Custom ERP.","2026-11-11 21:16:57",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add mdnaimul22\u002Fhuman-skills --skill laravel-patterns",{"tool":65,"command":66},"bunx","bunx skills add mdnaimul22\u002Fhuman-skills --skill laravel-patterns",{"tool":68,"command":69},"pnpm","pnpm dlx skills add mdnaimul22\u002Fhuman-skills --skill laravel-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Flaravel-patterns\u002FSKILL.md",true,[],[74,82,110,129,148,163],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":81},"01M72JT3YP1SQHD0MANGDXQ4RT","higgsfield-websites","Build, edit, and deploy full-stack websites, apps and games via the Higgsfield CLI (`higgsfield website …`). Each is a React 19 + TanStack Start SSR app in one Cloudflare Worker (D1\u002FR2\u002FKV\u002FDO\u002FContainers). THREE product types, picked via `--type` on create: `website` (standalone, no Higgsfield integration — references\u002Fwebsite-flow.md), `app` (Sign in with Higgsfield + fnf SDK, Quanta — references\u002Fapp-flow.md), `game` (realtime multiplayer rooms — references\u002Fgame-flow.md). Routes to the right flow; each carries its own rules and deploy\u002Fpublish gates.\nUse when: \"build me a website\", \"make a landing page\", \"create a web app\", \"build a SaaS dashboard \u002F portfolio\", \"make me a game\", \"deploy this site\", \"publish\". Also owns GAME ART: \"make a spritesheet\", \"tileable texture\", \"animate a 3D character\", game music\u002FSFX — see the game-* references.\nNOT for: single image\u002Fvideo\u002Faudio generation (higgsfield-generate), product photos (higgsfield-product-photoshoot), marketplace cards (higgsfield-marketplace-cards).","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fhiggsfield-ai_skills\u002Fhiggsfield-websites\u002FSKILL.md",[],[],"2026-11-10 22:39:42",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":102,"publishedAt":44},"01M70JPK8HAXXA85P7Q8NKZZYG","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-skills\u002FSKILL.md",[88,93,96,99],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",{"categoryNo":97,"categoryName":98,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":100,"categoryName":101,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量",[103,104,105,106,38,107,108,29,109],"writing","writing skills","editing","deployment","Existing","new","work",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":119,"publishedAt":44},"01M70JP4PHBH1CQVVDWZ94W159","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-plans\u002FSKILL.md",[116,117,118],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[103,120,121,122,29,123,31,38,124,125,126,127,128],"writing plans","plans","you","code","requirements","task","multi","spec","multi-step task",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":44},"01M70JNTYVGXFZT8PASZ844TH8","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fverification-before-completion\u002FSKILL.md",[],[136,137,138,139,140,141,38,142,143,144,29,145,109,146,147],"verification","verification before completion","complete","about","output","assertions","prs","evidence","claim","claims","commands","running",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":44},"01M70JNGVSQDESWN0Q5BPJ875V","using-superpowers","Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-superpowers\u002FSKILL.md",[154],{"categoryNo":97,"categoryName":98,"taxonomyType":91,"taxonomyTypeDesc":92},[156,157,158,159,38,29,160,161,162],"using superpowers","superpowers","conversation","how to","how","find","questions",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":44},"01M70JN57CE588NPYPYTWH1DWG","using-git-worktrees","Use when starting feature work that needs isolation from current workspace or before executing implementation plans - ensures an isolated workspace exists via native tools or git worktree fallback","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-git-worktrees\u002FSKILL.md",[],[170,171,172,173,174,175,29,109,176,177,178,179,180,181,182,121,38,183,184],"using git worktrees","Using git","git","worktrees","git worktrees","implementation","git worktree","worktree","native","Tools","isolation","fallback","feature","via","workspace"]