A ready-to-run Laravel 13 / PHP 8.5 app on Livewire 4 and Flux with a sample invoices feature (attribute-first UUIDv7 models, actions, a DTO, a form request, a policy and a versioned API resource), the appendix configs and Composer scripts, Pest unit, feature and arch tests, and a CI workflow.
- 1
Download
Pick a PascalCase name; the app name, database name and README title are renamed for you.
- 2
Install
Run composer setup to install dependencies, create .env and the SQLite database, migrate with demo data and build assets.
- 3
Run
Start the app with composer dev, log in as test@example.com, then check with composer lint and composer test.
What you get
project/ ├── .github/ │ └── workflows/ │ └── ci.yml ├── app/ │ ├── Actions/ │ │ └── Invoices/ │ │ ├── CreateInvoice.php │ │ └── MarkInvoicePaid.php │ ├── Data/ │ │ └── CreateInvoiceData.php │ ├── Enums/ │ │ └── InvoiceStatus.php │ ├── Exceptions/ │ │ └── InvoiceAlreadyPaid.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Api/ │ │ │ │ └── V1/ │ │ │ │ └── InvoiceController.php │ │ │ └── Auth/ │ │ │ └── LogoutController.php │ │ ├── Middleware/ │ │ │ └── SetSecurityHeaders.php │ │ ├── Requests/ │ │ │ └── StoreInvoiceRequest.php │ │ └── Resources/ │ │ └── InvoiceResource.php │ ├── Livewire/ │ │ └── Forms/ │ │ └── InvoiceForm.php │ ├── Models/ │ │ ├── Invoice.php │ │ └── User.php │ ├── Observers/ │ │ └── InvoiceObserver.php │ ├── Policies/ │ │ └── InvoicePolicy.php │ └── Providers/ │ └── AppServiceProvider.php ├── bootstrap/ │ ├── cache/ │ │ └── .gitignore │ ├── app.php │ └── providers.php ├── config/ │ └── invoices.php ├── database/ │ ├── factories/ │ │ ├── InvoiceFactory.php │ │ └── UserFactory.php │ ├── migrations/ │ │ ├── 0001_01_01_000000_create_users_table.php │ │ ├── 0001_01_01_000001_create_cache_table.php │ │ ├── 0001_01_01_000002_create_jobs_table.php │ │ ├── 0001_01_01_000003_create_personal_access_tokens_table.php │ │ └── 2026_01_01_000000_create_invoices_table.php │ ├── seeders/ │ │ └── DatabaseSeeder.php │ └── .gitignore ├── public/ │ ├── .htaccess │ └── index.php ├── resources/ │ ├── css/ │ │ └── app.css │ └── views/ │ ├── components/ │ │ └── invoices/ │ │ └── status-badge.blade.php │ ├── layouts/ │ │ └── app.blade.php │ ├── pages/ │ │ ├── auth/ │ │ │ └── ⚡login.blade.php │ │ └── invoices/ │ │ └── ⚡index.blade.php │ └── welcome.blade.php ├── routes/ │ ├── api.php │ ├── console.php │ └── web.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── framework/ │ │ ├── views/ │ │ │ └── .gitignore │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tests/ │ ├── Feature/ │ │ ├── Http/ │ │ │ └── Controllers/ │ │ │ └── Api/ │ │ │ └── V1/ │ │ │ └── InvoiceControllerTest.php │ │ ├── Livewire/ │ │ │ └── Pages/ │ │ │ ├── InvoicesIndexTest.php │ │ │ └── LoginTest.php │ │ └── Policies/ │ │ └── InvoicePolicyTest.php │ ├── Unit/ │ │ ├── Actions/ │ │ │ └── Invoices/ │ │ │ ├── CreateInvoiceTest.php │ │ │ └── MarkInvoicePaidTest.php │ │ ├── Data/ │ │ │ └── CreateInvoiceDataTest.php │ │ └── ArchTest.php │ ├── Pest.php │ └── TestCase.php ├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .npmrc ├── artisan ├── composer.json ├── composer.lock ├── package.json ├── phpstan-baseline.neon ├── phpstan.neon ├── phpunit.xml ├── pint.json ├── README.md ├── rector.php └── vite.config.js