Thanks for forking this Laravel 12 + Inertia + Vue 3 starter—your batteries-included foundation for clean, repeatable projects.
Need the backstory? Check out the creator’s CV here: halfshellstudios.co.uk/cv.pdf
Portfolio & contact: halfshellstudios.co.uk
- Fully dockerised (Laravel Sail) with PHP 8.4 + Node 22.x available inside the container.
- Inertia SPA stack preconfigured (Vue 3, Ziggy, Tailwind, Vite).
- Testing story out of the box: Pest, Jest, Playwright, plus coverage support.
- Opinionated quality gate: PHPCS, PHPMD, PHPStan, Rector, Pint.
- CI ready: GitHub Actions runs the exact Composer scripts used locally.
- Developer UX extras: Telescope, Debugbar, custom scripts, seeded demo account.
- Ensure Docker Engine is installed and running.
- macOS / Windows: Download Docker Desktop and follow the installer prompts.
- Linux: install via your package manager or follow the Docker Engine setup guide.
- After installation, launch Docker Desktop (or start the Docker service) so containers can boot.
- Fork this repository (recommended) or clone it directly.
- Copy the environment file:
cp .env.example .env - Install PHP dependencies:
composer install - Build the Sail images:
docker-compose build - Boot the stack:
docker-compose up -d - Run database migrations and seeders:
docker-compose exec web php artisan migrate:fresh --seed - Install front-end packages:
docker-compose exec web npm install - Start the dev server (Vite + Laravel):
docker-compose exec web npm run dev - Visit the application at http://127.0.0.1:8008/
Default login: hello@halfshellstudios.co.uk / password
Helpful commands
- Clear routes (e.g. after tweaking Jetstream):
docker-compose exec web php artisan route:clear - Node.js is already available inside the
webcontainer (Node 22.x); no host installation is necessary.
Common tooling is bundled behind Composer scripts for quick access:
composer tests— run the full automated test suite.composer test:coverage— run the Pest suite with code coverage (XDEBUG_MODE=coveragerequired). Append-- --coverage-html=storage/logs/coverageto emit an HTML report.composer standards:check— executephpcs,phpmd,phpstan, and a Rector dry-run.composer standards:fix— apply automated code-style fixes viaphpcbfand Rector.- Individual checks are also exposed (
composer phpcs,composer phpstan,composer rector, etc.).
You can run these locally or inside the container, e.g. docker-compose exec web composer standards:check.
| Area | Tooling / Highlights |
|---|---|
| Core Framework | Laravel 12, Jetstream (Inertia + Vue) |
| Front-end | Vue 3, Vite 7, TailwindCSS 3, Ziggy, Axios |
| PHP Quality | Pest (100% coverage pre-configured), PHPStan, PHPMD, PHPCS, Rector, Pint, Telescope |
| JS Testing | Jest (unit), Playwright (E2E) |
| Monitoring | Sentry, Laravel Debugbar |
| Dev Experience | Sail (Docker), Telescope, Debugbar, seeded demo account |
- GitHub Actions workflow (
.github/workflows/ci.yml) mirrors the local Composer scripts. - Every push / PR runs:
composer tests(builds assets, provisions SQLite testing DB, executes Pest)composer standards:check(PHPCS, PHPMD, PHPStan, Rector dry-run)
- Node dependencies are installed via
npm ciinside the workflow to run the compiled assets required by the test suite. - Use the template as-is to keep your branches clean, or extend the pipeline for staging/prod deploys.
This template comes bundled with Laravel Pint. https://laravel.com/docs/12.x/pint
To run
docker-compose exec web ./vendor/bin/pint
To run against a specific folder
i.e for app/Models docker-compose exec web ./vendor/bin/pint app/Models
Jetstream is installed with the Inertia stack by default. https://jetstream.laravel.com/introduction.html
To regenerate the scaffolding, run:
docker-compose exec web php artisan jetstream:install inertia --dark
Connect with any SQL client (TablePlus, DataGrip, MySQL Workbench, psql, etc.) using the credentials defined in your .env file. By default the Sail stack exposes:
- Host:
127.0.0.1 - MySQL Port:
3306 - Database: value of
DB_DATABASE(defaultlaravel) - Username: value of
DB_USERNAME(defaultsail) - Password: value of
DB_PASSWORD(defaultpassword)
- Install the client (TablePlus is available at tableplus.com).
- Create a new MySQL connection.
- Enter the host, port, database, username, and password listed above (or customised values from
.env). - Save and connect to browse tables, manage data, and run queries.
docker-compose exec mysql mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE"
Swap mysql for psql if you enable the bundled PostgreSQL service.
- PHP feature/unit tests:
docker-compose exec web composer tests - PHP coverage (requires Xdebug):
docker-compose exec web composer test:coverage(alias:composer coverage) - Jest unit tests:
docker-compose exec web npm run test:unit - Playwright E2E:
docker-compose exec web npm run test:e2e - Playwright HTML report:
docker-compose exec web npm run test:e2e -- --project=chromium --reporter=html && npx playwright show-report - Playwright UI mode:
docker-compose exec web npm run test:e2e:ui
- Update
composer.json(name, description, namespaces if needed). - Update environment defaults and secrets (
.env,.env.example). - Tailor Jetstream scaffolding or Inertia pages to your product.
- Wire CI/CD secrets for Sentry, production DB, etc.
- Start building on a clean, consistent foundation.

