recodex-id / rewire
A reusable Laravel starter kit for internal and client projects -- authentication, roles, a blog, and a back office ready to go.
Requires
- php: ^8.4
- laravel/chisel: ^0.1.0
- laravel/fortify: ^1.37.2
- laravel/framework: ^13.17
- laravel/tinker: ^3.0
- livewire/blaze: ^1.0
- livewire/flux: ^2.13.1
- livewire/livewire: ^4.1
- spatie/laravel-activitylog: ^5.0
- spatie/laravel-medialibrary: ^11.23
- spatie/laravel-permission: ^8.3
- spatie/laravel-sitemap: ^8.2
- spatie/laravel-sluggable: ^4.0
Requires (Dev)
- fakerphp/faker: ^1.24
- larastan/larastan: ^3.9
- laravel/boost: ^2.4
- laravel/pail: ^1.2.5
- laravel/pao: ^1.0.6
- laravel/pint: ^1.27
- laravel/sail: ^1.53
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.9.3
- pestphp/pest: ^4.7
- pestphp/pest-plugin-laravel: ^4.1
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
A reusable Laravel starter kit for internal and client projects — authentication, roles, a blog, and a back office ready to go, so every new engagement starts from a working foundation instead of a blank repo.
Stack
| PHP | 8.4 |
| Laravel | 13 |
| Auth | Fortify (login, registration, password reset — no 2FA/passkeys) |
| Frontend | Livewire 4 + Flux UI |
| Styling | Tailwind CSS v4 |
| Roles | Spatie Permission |
| Media | Spatie Media Library |
| Quality | Pest 4, Pint, Larastan |
Features
- Authentication — login, registration, password reset out of the box; logging out always lands back on the login page.
- Roles & permissions — every new user gets
staffautomatically;adminandsuper-adminunlock more of the back office. Built onspatie/laravel-permission; new roles/permissions are created via tinker or a seeder, there's no in-app UI for it. - Blog — the one piece of public content that's editable without a redeploy: title, excerpt, body, featured image, publish toggle, auto-generated slugs that never change on edit. The featured image runs on Spatie Media Library, with
thumb/card/heroconversions generated automatically and a reusable<x-media-upload>component ready for other models. - System panel (
admin/super-admin) — user management (list, create, change role, delete), a sitemap viewer, a media library (browse and delete any uploaded file across models), and site settings (SEO description, Google Analytics, social links, contact info). Super admins alone additionally get the audit trail of admin actions. - Per-role dashboard — a thin dashboard shell dispatches to a self-contained Livewire component per role (super-admin, admin, staff), each showing the stats relevant to that role.
- Branded system pages — error pages (404, 500, ...) and transactional emails match the app's look, not the framework defaults.
- In-app docs — a docs page inside the app with project-specific setup and architecture notes.
- Tests from day one — Pest feature tests, Pint formatting, and Larastan static analysis wired into CI.
Getting started
Uses SQLite by default — no separate database server to set up first.
Starting a brand new project, via the Laravel installer:
laravel new my-app --using=recodex-id/rewire
Or clone it directly:
git clone https://github.com/Recodex-ID/rewire.git
cd rewire
composer install
npm install
cp .env.example .env
touch database/database.sqlite
php artisan key:generate
php artisan storage:link
php artisan migrate --seed
composer run dev
Visit http://localhost:8000. composer run dev runs the app server, queue listener, and Vite together.
Default accounts
Seeded by database/seeders/DatabaseSeeder.php, password password for all three:
| Role | |
|---|---|
super-admin@mail.test |
super-admin |
admin@mail.test |
admin |
staff@mail.test |
staff |
Quality checks
php artisan test --compact
vendor/bin/pint --dirty
vendor/bin/phpstan analyse
Or composer test, which runs formatting, static analysis, and the full suite together — the same thing CI runs on every push.
Reusing this for a new project
- Update
APP_NAMEand other.envvalues for the new project. - Swap the brand palette in
resources/css/app.css(--color-brand-*) and the logo mark inpublic/images/logo.png. - Replace the seeded accounts (
database/seeders/UserSeeder.php) and the landing page copy, which is hardcoded directly inresources/views/components/landing/*. - Update
composer.json'sname/descriptionif the repo is being renamed too.
More detail — architecture notes, where each feature lives, how to extend the landing page — is in the in-app docs at /docs once you're logged in.
Contributing
Commits to main must follow Conventional Commits (feat:, fix:, chore:, ...) — release-please reads them to version and publish GitHub Releases automatically, so every merge shows up in a changelog users can actually read. feat: bumps a minor version, fix: a patch, and feat!:/a BREAKING CHANGE: footer bumps major.
License
MIT.