uogsoe / laravel-init
Bootstraps Laravel projects with Flux UI, Keycloak SSO, and common packages
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/uogsoe/laravel-init
Requires
- php: ^8.2
- illuminate/console: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
README
A Composer package that bootstraps Laravel projects with Flux UI, Keycloak SSO, Docker/Lando setup, and common packages via a single Artisan command.
What It Does
- Installs and activates Flux UI with Tailwind CSS v4
- Configures Keycloak SSO via Laravel Socialite
- Installs Horizon and Sanctum
- Installs Docker/Lando scaffolding used for local/dev/CI workflows
- Copies template files (routes, providers, views, etc.) with diff preview
- Injects config into
routes/web.phpandconfig/services.php - Registers
SSOServiceProviderinbootstrap/providers.php - Sets up environment variables
Requirements
- A fresh Laravel 11+ project with a clean git working tree
- Flux UI licence
- Node.js and Composer
Installation
Install as a dev dependency:
composer require --dev uogsoe/laravel-init
Usage
export FLUX_USERNAME="your-flux-username" export FLUX_LICENSE_KEY="your-flux-license-key" php artisan project:init
Options
| Option | Description |
|---|---|
--skip-npm |
Skip npm package installation |
--skip-composer |
Skip composer package installation |
--skip-flux |
Skip Flux activation |
--skip-docker |
Skip Docker/Lando/CI template files |
--dry-run |
Show what would change without writing files |
--force |
Overwrite all files without prompting |
File Diff Preview
When copying template files that already exist in your project, the command prompts with y/n/d(iff). Pressing d shows a unified diff between your existing file and the template, so you can make an informed decision before overwriting.
At the end of execution, project:init prints a summary of copied/skipped files and command execution status.
Docker/Lando Setup
project:init installs Docker/Lando files from stubs/, including:
docker/scripts/config.lando.ymldocker-compose.yml,prod-stack.yml,qa-stack.yml- CI files (
.github/,.gitlab-ci.yml,phpunit*.xml,phpunit*.Dockerfile) Dockerfile,.dockerignore, and related support files
Environment handling is applied in this order:
- If
.envis missing, it is created from the project's.env.example stubs/.env.landovalues are merged into.envAPP_NAMEis set from the project folder name (title-cased)APP_URLis set tohttps://<project-folder>.lndo.site/.lando.ymlname:is set to<project-folder>(slug form).env.exampleis updated to match the final.envAPP_KEYin.env.exampleis refreshed usingphp artisan key:generate --show
It also adds required Docker/Lando ignore entries to your project .gitignore and ensures:
storage/minio_dev/bucket/.gitkeepstorage/meilisearch/.gitkeep
Packages Installed
Composer:
livewire/livewirelivewire/fluxlaravel/socialitesocialiteproviders/keycloaklaravel/horizonlaravel/sanctum
NPM:
vitetailwindcss@tailwindcss/vitelaravel-vite-plugin
Customisation
Fork this repo and modify the properties in src/Commands/ProjectInitCommand.php:
| Property | Purpose |
|---|---|
$autoCopyPatterns |
Patterns that overwrite without prompting |
$internalStubFiles |
Stub files used internally (not copied directly) |
$gitignoreEntries |
Entries appended to .gitignore |
$boostPromptUrl |
URL for team conventions file |
Template Files
Template files live in the stubs/ directory. The command copies stubs into the target project, except internal helper files such as stubs/.env.lando. Existing files prompt before overwriting (unless matched by $autoCopyPatterns or --force is used).
laravel-init/
├── composer.json
├── src/
│ ├── LaravelInitServiceProvider.php
│ └── Commands/
│ └── ProjectInitCommand.php
└── stubs/
├── app/
│ └── Providers/
│ └── SSOServiceProvider.php
├── routes/
│ └── sso-auth.php
├── resources/
│ └── views/
│ └── ...
└── config/
└── ...
Environment Variables
Project-specific environment values are defined in stubs/.env.lando and merged into .env, then copied to .env.example. This includes keys such as:
KEYCLOAK_BASE_URL=https:// KEYCLOAK_REALM= KEYCLOAK_CLIENT_ID=name-in-keycloak KEYCLOAK_CLIENT_SECRET=secret-in-keycloak KEYCLOAK_REDIRECT_URI=http://your-app/auth/callback SSO_ENABLED=false SSO_AUTOCREATE_NEW_USERS=false SSO_ALLOW_STUDENTS=false SSO_ADMINS_ONLY=false
Licence
MIT