simonjenny / laravel-skeleton
A highly opinionated skeleton for Laravel projects.
Package info
github.com/simonjenny/laravel-skeleton
Type:project
pkg:composer/simonjenny/laravel-skeleton
Requires
- php: ^8.4
- calebporzio/sushi: ^2.5
- laravel-lang/common: ^6.7
- laravel/framework: ^12.0
Requires (Dev)
- fakerphp/faker: ^1.23
- kuvvu/envexample: ^1.0
- laravel-lang/lang: ^15.26
- laravel/boost: ^1.8
- laravel/pint: ^1.27
- laravel/tinker: ^2.9
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- soloterm/solo: ^0.5
README
A opinionated skeleton for Laravel projects based on my own preferences.
It includes the following:
- Standard
routes/directory (Laravel convention) - Health Check Route (
/up) — used by Docker healthcheck - FrankenPHP Dockerfile with Caddyfile
- Modified composer.json to install Node.js packages
- Modified .gitignore
Added Packages
Look at composer.json
Create a new Project with this Skeleton
composer create-project simonjenny/laravel-skeleton NAME
Note: During project creation,
laravel/boostautomatically installs Claude AI skills fromjeffallan/claude-skills(Laravel Specialist). This gives Claude Code context about Laravel best practices for this project. Remove theboost:add-skillline fromcomposer.jsonif you don't want this.
GitHub Actions (included as templates)
Every project gets these workflows out of the box:
| Workflow | Trigger | What it does |
|---|---|---|
ci.yml |
Pull Request | commitlint + Pest tests + Pint code style |
release.yml |
Push to main |
Creates a GitHub Release via semantic-release |
docker.yml |
GitHub Release published | Builds Docker image, Trivy scan, pushes to GHCR |
dependabot.yml |
Weekly (scheduled) | PRs for outdated Composer, npm & Action dependencies |
Commits follow the Conventional Commits format:
feat: add user profile picture upload → minor release (1.x.0)
fix: fix password reset link expiry → patch release (1.0.x)
chore: update tailwind to 4.2 → no release
Required GitHub secrets & variables:
GITHUB_TOKEN— built-in, no setup needed (for semantic-release)TOKEN— GitHub PAT withwrite:packagesscope (for pushing to GHCR)ENABLE_DOCKER_BUILD— Repository Variable (not secret), set totrueto activatedocker.yml→ Settings → Secrets and variables → Actions → Variables → New repository variable
Recommended branch protection for main:
- Require pull request before merging
- Require status checks:
commitlint,tests,pint
Deploy with Docker
Edit compose.yml and set:
container_name— your project nameimage— your full GHCR image path (e.g.ghcr.io/simonjenny/yourproject:latest)
Create Database and Run Migrations
php artisan migrate
Optionally: Install Filament Admin Panel
composer require filament/filament:"^5.0"
php artisan filament:install --panels
php artisan make:filament-user
Update Languages
php artisan lang:update
Install Laravel Boost
php artisan boost:install