simonecerruti / containerized-starter-kit
Containerized starter kit.
Package info
github.com/SimoneCerruti/laravel-containerized-starter-kit
Type:project
pkg:composer/simonecerruti/containerized-starter-kit
Requires
- php: ^8.5
- bepsvpt/secure-headers: ^9.1
- laravel/framework: ^13.17
- laravel/tinker: ^3.0
- lorisleiva/laravel-actions: ^2.13
- overtrue/laravel-query-logger: ^6.0
- spatie/laravel-activitylog: ^5.1
- spatie/laravel-data: ^4.23
- staudenmeir/belongs-to-through: ^2.18
- staudenmeir/eloquent-has-many-deep: ^1.22
- thecodingmachine/safe: ^3.4
Requires (Dev)
- driftingly/rector-laravel: ^2.6
- fakerphp/faker: ^1.23
- larastan/larastan: ^3.13
- laravel/boost: ^2.2
- laravel/pail: ^1.2.5
- laravel/pao: ^1.0.6
- laravel/pint: ^1.27
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.6
- pestphp/pest: ^5.3
- pestphp/pest-plugin-agent: ^5.0
- pestphp/pest-plugin-browser: ^5.1
- pestphp/pest-plugin-faker: ^5.0
- pestphp/pest-plugin-laravel: ^5.0
- pestphp/pest-plugin-mutate: ^5.0
- pestphp/pest-plugin-phpstan: ^5.2
- pestphp/pest-plugin-rector: ^5.0
- pestphp/pest-plugin-type-coverage: ^5.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- rector/rector: ^2.7
- thecodingmachine/phpstan-safe-rule: ^1.4
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-30 01:47:37 UTC
README
A containerized, modular starter kit for Laravel. It starts from a clean Laravel install and, during setup, asks a few questions to decide which dependencies to install and which files to add or modify.
How it works
-
Create the project from this kit, with the Laravel installer:
laravel new my-app --using=simonecerruti/containerized-starter-kit --phpunit cd my-appThe kit already ships Pest. Despite the name,
--phpunitonly makes the Laravel installer skip its own Pest step, which would otherwise reinstall Pest and rewritetests/. The installer runsphp artisan starter-kit:installright after creating the project (theextra.laravel.installer.post-create-projecthook incomposer.json, which the kit removes when it is done), so with the installer step 2 is not needed.or with Composer:
composer create-project simonecerruti/containerized-starter-kit my-app --no-install --no-scripts cd my-app -
With Composer,
composer setupinstalls the dependencies, creates the env file and the app key, then runsphp artisan starter-kit:install, migrates and builds the assets. -
The command asks for the name, slug, vendor, license, port, timezone, the GitHub repository and the author (both optional), then the application type and the optional features.
-
Based on the answers it:
- installs the required Composer packages (
requireandrequire-dev); - copies the files of the selected modules;
- injects code fragments into the shared files (e.g.
User,AppServiceProvider); - replaces the
__KIT_*__placeholders; - writes the
LICENSEfile for the chosen license and sets the license, repository links and author incomposer.jsonandpackage.json; - updates
.env,.env.example,composer.jsonandpackage.json.
- installs the required Composer packages (
-
When the installation is done the kit removes itself, and this README is replaced by one that contains only the project name.
Structure
Each module lives in .starterkit/<module>/ and contains:
files/: files copied to the project root, keeping the same path (placeholders are replaced in file names too);SETUP.md(optional, plusSETUP.<variant>.md): the steps to do outside the app (accounts, tokens, DNS, server). If the user accepts the last install question they are composed intoSETUP.mdin the project root, which outlives the kit;module.php: the manifest. Keys:require,require-dev,fragments(file => marker => code, or a path to a file in the module),replace,env,env_local(.envonly, for secrets),artisan,json,variants(e.g. thefilamentplugin packages or the Socialite providers) andwhen_disabled(files and packages to remove when the module is not selected). Prefer adding things from the module (files, fragments on a@kit:marker, e.g.# @kit:gitignore) over shipping them in the base and removing them withwhen_disabled;replaceis for edits of existing text. The base files carry only the markers: a module adds its own lines there, including the entries of shared JSON files (json.files:file => dotted.path => value, a list is appended to the list already there).
core is always installed. The others (Filament, 2FA, multilingual, roles and permissions, money, media library, Cloudflare, ...) depend on the answers.
The shared files contain @kit:<name> markers (e.g. // @kit:user-traits): that is where the modules inject their code. Unused markers are removed at the end of the installation.
Placeholders
| Placeholder | Meaning |
|---|---|
__KIT_APP_NAME__ |
Application name |
__KIT_APP_SLUG__ |
Slug (Docker images, database, network) |
__KIT_VENDOR__ |
Vendor (Docker image) |
__KIT_APP_LICENSE__ |
License |
__KIT_APP_PORT__ |
Local port |
__KIT_APP_ACTUAL_TIMEZONE__ |
The users' real timezone |
__KIT_GH_REPOSITORY__ |
GitHub repository (owner/repo); also sets homepage, support and the npm repository |
__KIT_YEAR__, __KIT_LICENSE_HOLDER__ |
Install year and copyright holder (author name, or the vendor) used in the generated LICENSE |
__KIT_GH_TOKEN__, __KIT_CONTEXT7_API_KEY__ |
Tokens for the AI tooling, in .env only |
__KIT_PANEL_ID__, __KIT_PANEL_CLASS__ |
Id and class prefix of the Filament panel |
__KIT_DEFAULT_LOCALE__, __KIT_LOCALE_CASES__ |
Default language and the Locale enum cases |
__KIT_ALLOWED_EMAIL_DOMAINS__, __KIT_MFA_REQUIRED__ |
Panel email domains and whether 2FA is mandatory |
composer.json and package.json contain no placeholders, because the kit must stay publishable: they are edited with composer config and npm pkg during the installation.
What it includes
- Docker environment for development and production (nginx, php-fpm, supervisor, cron) and a devcontainer.
- GitHub workflows for tests, code style, dependency audit, secret scan and image scan, plus a weekly (non-blocking) mutation testing run. Pull requests only re-run the tests affected by their changes (Pest TIA), using a baseline graph recorded on
mainbytia-baseline.yml. - Optional
deploymodule: release flow (changelog, versioning, hotfixes), image build to Docker Hub and zero-downtime deploys to a shared VPS behind Traefik, through GitHub Actions and a single SSH gateway script on the server. The generated project documents the design, the decisions and the server and GitHub setup indeploy/README.md. - Quality tooling: Pest (arch, mutation, type coverage), PHPStan/Larastan, Rector, Pint.
- Application base: actions, activity log, security headers, query logger, model concerns (
HasBlameable,LogsAllDirtyChanges) and macros.
Developing the kit
The kit's own tests run inside the container:
composer test