Skill

Stack: TALL (Laravel + DDEV)

Install
1
Install the plugin
$
npx claudepluginhub syntek-dev/syntek-dev-suite --plugin syntek-dev-suite

Want just this skill?

Add to a custom plugin, then install with one command.

Description

**Last Updated**: 29/12/2025

Tool Access

This skill uses the workspace's default tool permissions.

Skill Content

Stack: TALL (Laravel + DDEV)

Last Updated: 29/12/2025 Version: 1.3.1 Maintained By: Development Team Language: British English (en_GB) Timezone: Europe/London


Table of Contents


Architecture

LayerTechnology
PlatformDDEV (Docker abstraction)
BackendLaravel 11.x, Livewire 3
FrontendTailwindCSS, Alpine.js, Vite
TestingPest PHP

Commands

CRITICAL: Never use raw docker commands. Always use DDEV wrappers.

TaskCommand
Start environmentddev start
Stop environmentddev stop
Artisan commandsddev artisan <command>
Composerddev composer <command>
NPMddev exec npm <command>
Run testsddev exec php artisan test
Run specific testddev exec php artisan test --filter=TestName
Database importddev import-db < dump.sql
Database exportddev export-db > dump.sql
Migrationsddev artisan migrate
Fresh migrateddev artisan migrate:fresh --seed
Tinkerddev artisan tinker

Coding Standards

Livewire

  • Use wire:navigate for SPA-like navigation
  • Use #[Rule] attributes for validation
  • Keep components focused (single responsibility)
  • Use #[Computed] for derived data

Blade Templates

  • Use <x-components> exclusively
  • Never use @include - extract to components instead
  • Use slots for flexible component content
  • Follow component naming: <x-module.component-name>

Alpine.js

  • Use x-data in separate JS files for complex logic
  • Keep inline x-data for simple toggle states only
  • Use $wire for Livewire integration
  • Prefer x-cloak to prevent flash of unstyled content

Testing (Pest)

it('can create a user', function () {
    // Arrange
    $data = ['name' => 'Test User', 'email' => 'test@example.com'];

    // Act
    $response = post('/users', $data);

    // Assert
    $response->assertStatus(201);
    expect(User::count())->toBe(1);
});

File Structure

app/
├── Livewire/           # Livewire components
├── Models/             # Eloquent models
├── Services/           # Business logic
├── Actions/            # Single-purpose actions
└── Http/
    ├── Controllers/    # Minimal, delegate to services
    └── Requests/       # Form validation

resources/
├── views/
│   ├── components/     # Blade components
│   ├── livewire/       # Livewire views
│   └── layouts/        # Layout templates
└── js/
    └── alpine/         # Complex Alpine components

tests/
├── Feature/            # Integration tests
└── Unit/               # Unit tests

docs/
└── METRICS/            # Self-learning system (see global-workflow skill)
    ├── README.md
    ├── config.json
    ├── runs/
    ├── feedback/
    └── optimisations/
Stats
Stars0
Forks0
Last CommitDec 29, 2025
Actions

Similar Skills