Skip to content

Development Workflow

Terminal window
# Start backend containers
cd backend
./vendor/bin/sail up -d
# Start frontend dev server
cd frontend
pnpm dev
# Start documentation (optional)
cd docs
pnpm dev
ServiceURLPurpose
Backend APIhttp://localhostLaravel API
Admin Panelhttp://localhost/adminFilamentPHP backoffice
Telescopehttp://localhost/telescopeDebug dashboard
Swaggerhttp://localhost/api/documentationAPI docs
Frontendhttp://localhost:4321Astro website
Documentationhttp://localhost:4322This site
Mailpithttp://localhost:8025Email testing
{issue-number}-{short-description}

Examples:

  • 123-add-payment-gateway
  • 456-booking-validation-error

Format: #{issue-number} type(scope): description

Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert Scopes: frontend, backend (required, can use both: backend,frontend)

Terminal window
# Good
git commit -m "#123 feat(backend): add user dashboard with profile management"
git commit -m "#456 fix(backend): booking validation for empty dates"
# Bad
git commit -m "fix stuff"
git commit -m "WIP"

Use Claude Code slash commands for common operations:

Terminal window
# Create a commit
/commit "Add payment processing service"
# Create a pull request
/pr-create
# Run PHPStan and fix errors
/fix-phpstan
# Rebase onto master
/rebase-master

All PHP code must pass PHPStan Level 6 analysis:

Terminal window
# Run PHPStan
./vendor/bin/sail exec laravel.test ./vendor/bin/phpstan analyse
# Auto-fix with slash command
/fix-phpstan

Format code with Laravel Pint:

Terminal window
./vendor/bin/sail pint

Run tests with Pest:

Terminal window
# All tests
./vendor/bin/sail artisan test
# Specific test
./vendor/bin/sail artisan test --filter=BookingTest
# With coverage
./vendor/bin/sail artisan test --coverage

Claude Code includes specialized agents for different tasks:

AgentUse For
@laravel-core-agentModels, migrations, controllers, services
@filament-admin-agentAdmin resources, forms, tables, widgets
@laravel-testing-agentPest tests, Pint formatting, coverage
@laravel-debug-agentErrors, logs, performance analysis

For a feature spanning multiple domains, invoke agents in parallel:

User: Create a Booking feature with admin panel and tests
├─ @laravel-core-agent: Model, migration, service
├─ @filament-admin-agent: BookingResource
└─ @laravel-testing-agent: Test suite
Terminal window
# Create migration
./vendor/bin/sail artisan make:migration create_bookings_table
# Run migrations
./vendor/bin/sail artisan migrate
# Rollback
./vendor/bin/sail artisan migrate:rollback
# Fresh with seeders
./vendor/bin/sail artisan migrate:fresh --seed
Terminal window
# Create seeder
./vendor/bin/sail artisan make:seeder BookingSeeder
# Run seeders
./vendor/bin/sail artisan db:seed
# Specific seeder
./vendor/bin/sail artisan db:seed --class=BookingSeeder

After running seeders (db:seed), populate your local environment with test data. Run in this order:

Terminal window
# 1. Seed base data (suppliers, airports, markets)
./vendor/bin/sail artisan db:seed
# 2. Generate hotels
./vendor/bin/sail artisan suppliers:hotels:generate --hotels-per-city=2
# 3. Generate activities
./vendor/bin/sail artisan suppliers:activities:generate --activities-per-city=2
# 4. Generate services linked to hotels and activities
./vendor/bin/sail artisan suppliers:services:generate --type=hotel --count=10
./vendor/bin/sail artisan suppliers:services:generate --type=activity --count=10
# 5. Generate products with flight configs
./vendor/bin/sail artisan products:generate --templates=5 --per-market=1

All commands are interactive when options are omitted, and blocked from running in production.

For detailed options of each command, see Suppliers — Test Data Generation and Products — Test Data Generation.

Interactive PHP shell for debugging:

Terminal window
./vendor/bin/sail artisan tinker
# Example queries
>>> User::count()
>>> Booking::with('user')->first()
>>> Product::where('active', true)->get()
Terminal window
# Process jobs
./vendor/bin/sail artisan queue:work
# List failed jobs
./vendor/bin/sail artisan queue:failed
# Retry failed job
./vendor/bin/sail artisan queue:retry {id}
# Clear failed jobs
./vendor/bin/sail artisan queue:flush

Access at http://localhost/telescope for:

  • Request/response inspection
  • Database queries
  • Queue jobs
  • Exceptions
  • Logs

Use the Laravel Boost MCP tools:

Terminal window
# Get last error
mcp__laravel-boost__last-error
# Query database
mcp__laravel-boost__database-query "SELECT * FROM users LIMIT 5"
# Execute tinker code
mcp__laravel-boost__tinker "User::count()"
# Search docs
mcp__laravel-boost__search-docs ["queue jobs", "redis"]
  1. Run tests: ./vendor/bin/sail artisan test
  2. Run PHPStan: /fix-phpstan
  3. Format code: ./vendor/bin/sail pint
  4. Update documentation if needed

Use the slash command:

Terminal window
/pr-create

This will:

  1. Check for uncommitted changes
  2. Run PHPStan if PHP files changed
  3. Push branch to remote
  4. Create PR with template

PRs require:

  • Passing CI checks (tests, PHPStan)
  • Code review approval
  • Updated documentation (if applicable)