# Development Guide — L'Ami Fiduciaire > Generated: 2026-03-08 | Scan Level: Quick ## Prerequisites - **PHP** 8.2+ (recommended: 8.4) - **Composer** v2 - **Node.js** 22+ - **npm** - **Docker** (for Laravel Sail) ## Quick Start ### 1. Clone & Install ```bash composer install npm install ``` ### 2. Environment Setup ```bash cp .env.example .env php artisan key:generate ``` ### 3. Start Development Environment (Docker/Sail) ```bash vendor/bin/sail up -d vendor/bin/sail artisan migrate ``` ### 4. Run Development Servers ```bash # All-in-one: PHP server + Queue + Logs + Vite (hot reload) vendor/bin/sail composer run dev # Or with SSR: vendor/bin/sail composer run dev:ssr ``` This runs concurrently: - `php artisan serve` — Laravel application server - `php artisan queue:listen` — Queue worker - `php artisan pail` — Log viewer - `npm run dev` — Vite dev server (HMR) ## Docker Services | Service | Image | Ports | |---------|-------|-------| | laravel.test | sail-8.5/app | 80 (app), 5173 (Vite) | | mysql | mysql:8.4 | 3306 | | mailpit | axllent/mailpit | 1025 (SMTP), 8025 (UI) | | soketi | soketi:latest | 6001 (WS), 9601 (metrics) | All commands should be prefixed with `vendor/bin/sail` when running inside Docker. ## Build Commands ```bash # Development build with HMR npm run dev # Production build npm run build # Production build with SSR npm run build:ssr ``` ## Code Quality ### PHP Formatting (Laravel Pint) ```bash # Fix formatting (dirty files only) vendor/bin/sail bin pint --dirty --format agent # Run all formatting composer lint # Check without fixing composer test:lint ``` ### JavaScript/TypeScript Linting ```bash # ESLint (fix mode) npm run lint # Prettier (fix mode) npm run format # Prettier (check only) npm run format:check ``` ## Testing ### Running Tests ```bash # Run all tests vendor/bin/sail artisan test --compact # Run with filter vendor/bin/sail artisan test --compact --filter=testName # Run specific test file vendor/bin/sail artisan test --compact tests/Feature/Auth/AuthenticationTest.php # Full test suite (includes lint + tests) composer test ``` ### Test Structure - `tests/Feature/` — Feature/integration tests (13 files) - `Auth/` — Authentication tests (login, registration, 2FA, email verification, password) - `Settings/` — Settings tests (profile, password, 2FA) - `DashboardTest.php`, `UserGroupTest.php` - `tests/Unit/` — Unit tests ### Creating Tests ```bash # Feature test (default) vendor/bin/sail artisan make:test --pest MyFeatureTest # Unit test vendor/bin/sail artisan make:test --pest --unit MyUnitTest ``` ## Key Development Patterns ### Controllers - Render Inertia pages: `Inertia::render('PageName', ['prop' => $data])` - Use Form Request classes for validation (never inline validation) - Invokable controllers for single-action endpoints ### Route Functions (Wayfinder) - Import from `@/actions/` (controllers) or `@/routes/` (named routes) - Type-safe route generation for frontend ### Frontend Components - All pages in `resources/js/pages/` (mapped to routes by Inertia) - shadcn-vue components in `resources/js/components/ui/` - Composables in `resources/js/composables/` - Layouts in `resources/js/layouts/` ### Database - Use Eloquent models and relationships (avoid `DB::` facade) - Create Form Requests for all CRUD operations - Use factories for test data ## Artisan Commands ```bash # Create model with migration, factory, seeder vendor/bin/sail artisan make:model ModelName -mfs --no-interaction # Create controller vendor/bin/sail artisan make:controller ControllerName --no-interaction # Create form request vendor/bin/sail artisan make:request StoreEntityRequest --no-interaction # Run migrations vendor/bin/sail artisan migrate # Fresh migration with seeding vendor/bin/sail artisan migrate:fresh --seed ``` ## CI/CD GitHub Actions run on push/PR to `develop`, `main`, `master`, `workos`: 1. **Lint** (`lint.yml`): Pint → Prettier → ESLint 2. **Tests** (`tests.yml`): Full test suite on PHP 8.4 and 8.5 matrix