All notable changes to this project will be documented in this file.
- Refreshed backend dependencies within their existing constraints to clear all reported advisories (
laravel/framework,symfony/*,guzzlehttp/*).composer auditnow reports no vulnerabilities. - Refreshed frontend dependencies (
npm audit fix) to clear all reported advisories, including the high-severityaxiosissues.npm auditnow reports no vulnerabilities. - Restricted the file manager
showendpoint to an explicit safe field subset so internal columns (storage path, owner id) are never exposed to the client.
- Static analysis via Larastan / PHPStan (level 5), wired into
composer analyseand the CI pipeline. pint.json(Laravel preset) pluscomposer lint/composer lint:test, with Pint style checking enforced in CI.- Pull request template.
- Feature tests for the granular permission gates and the hardened file manager
showresponse.
- Admin routes are now gated with granular Spatie permissions (
role_or_permission:superadmin|<permission>) instead of only the coarsesuperadminrole, so non-superadmin roles can be granted specific capabilities. Existing superadmin behaviour is unchanged. - Adopted route-model binding for user, activity-log, and file routes; the
{file}binding is scoped to the authenticated user so foreign files resolve to a 404. - Form Requests for settings, notifications, and role management now enforce authorization instead of returning
true.
- Resolved all PHPStan level 5 findings (reflection type guard, model factory return types, and
list<string>property annotations).
- Updated Laravel 13 dependencies within the current major release line.
- Added
laravel/pailand wired it into the combinedcomposer run devworkflow. - Updated frontend tooling within the current major release line and added
concurrentlyas an explicit dev dependency.
- Extracted file manager folder normalization and file type filtering into reusable support classes.
- Extracted default settings into a shared source used by both the seeder and settings reset flow.
- Moved profile, settings, notification, file manager, and role access validation into Form Request classes.
- Modernized application Blade views from Bootstrap 4 modal/alert/form helper attributes to Bootstrap 5 conventions.
- Added focused unit tests for reusable support classes and Form Request rule contracts.
- Documented the local SQLite PHP extensions required by the default test suite.
- Bumped
laravel/frameworkfrom^12.0to^13.0 - Bumped minimum PHP requirement from
8.2to8.3 - Bumped
laravel/tinkerfrom^2.10to^3.0 - Bumped
phpunit/phpunitfrom^11.5to^12.0 - Updated
branch-aliasfrom12.x-devto13.x-dev - Added JSON schema, new convenience scripts (
setup,dev,test), andpre-package-uninstallhook tocomposer.json
- Modernized base
Controller.phpto Laravel 13 style (removed explicit trait imports and base class extension) - Added
: voidreturn types to middleware and exception closures inbootstrap/app.php - Updated
config/cache.phpβ new hyphenated prefix format,serializable_classessecurity hardening,failoverstore,lock_tableoption - Updated
config/session.phpβ newserializationoption, hyphenated cookie format,(int)cast on lifetime - Updated
config/app.phpβ(string)cast onAPP_PREVIOUS_KEYS - Updated
phpunit.xmlβ addedBROADCAST_CONNECTION,DB_URL,NIGHTWATCH_ENABLEDenv vars - Updated CI pipeline to PHP 8.4 (latest stable)
- Updated
.env.exampleapp name to "Laravel 13 Stisla"
- Updated
README.MDβ title, badges, tech stack, prerequisites, CI table, and clone URL all reflect Laravel 13 - Updated
CHANGELOG.mdtitle to "Laravel 13 Stisla Template" - Updated
LEARNING.mdtitle and docs link to Laravel 13
composer validatepasses- All version references updated consistently across the codebase
- Config files aligned with official
laravel/laravel13.x skeleton - No breaking changes to application-level code β existing controllers, models, middleware, and views are fully compatible
- Added Livewire v3 integration and registered Livewire assets in the main layout
- Added Spatie Laravel Permission package with published config (
config/permission.php) - Added role/permission schema migration (
create_permission_tables) - Added role migration path from legacy
users.roleinto Spatie pivot tables - Added
RolePermissionSeederwith default roles (superadmin,user) and starter permissions - Added dark mode infrastructure:
- Theme toggle in navbar (persisted in
localStorage) public/css/dark-mode.cssoverrides for Stisla components- Early theme bootstrap script to avoid flash of wrong theme
- Theme toggle in navbar (persisted in
- Added Livewire
NotificationBadgecomponent (polling unread count)
- Migrated authorization checks from
Auth::user()->roleto Spatie role APIs (hasRole, Blade@role) - Updated
Usermodel to useHasRolestrait and removedrolefrom$fillable - Updated
HakaksesControllerand role access views to usesyncRoles()and role collections - Updated registration flow to assign default
userrole on account creation - Updated middleware aliases in
bootstrap/app.phpto includerole,permission, androle_or_permission - Updated base controller to extend Laravel routing controller so auth controllers can use
$this->middleware() - Updated Vite + Blade entry consistency (
resources/sass/app.scss) to fix manifest lookup issues - Updated Vite Sass config to silence dependency deprecation noise during build
- Legacy
users.rolecolumn is now deprecated and dropped by migration path - Access control now depends on Spatie role tables (
roles,model_has_roles, etc.) - Existing deployments must run new migrations and seeders before using admin role features
php artisan testβ all tests passnpm run buildβ production assets build successfully- Dark mode text contrast and override order validated in the main layout pages
- Updated base
Controllerto Laravel 12 abstract class style (removed legacy traits) - Added return type hints to all controller methods (
View,RedirectResponse,JsonResponse,StreamedResponse) - Added typed parameters (
int $id,string $id) to all controller action methods - Added class-level PHPDoc blocks to all controllers, models, and notification classes
- Converted
$castsproperty tocasts()method inActivityLogandFilemodels (L12 convention) - Added relationship return types (
BelongsTo,MorphTo) to all model relationships - Modernized
GeneralNotificationwith constructor promotion andreadonlyproperties - Removed unused
ShouldQueueimport fromGeneralNotification - Renamed
ProfileController::changepassword()βchangePassword()for camelCase consistency - Updated route definition to match renamed method
- Translated middleware abort message from Indonesian to English
- Cleaned up
bootstrap/app.phpformatting
- Fixed
composer.jsonbranch-alias from11.x-devβ12.x-dev - Bumped CI PHP version to 8.3, Node.js to 22 LTS
- Added Composer caching to CI pipeline
- Added missing environment variables to CI test step
- Rewrote
README.MDwith professional formatting, version badges, and tables - Added "Why This Template?" comparison section
- Added "Security" section documenting protection measures
- Updated project structure to reflect current codebase
- Updated tech stack table with current versions
- All PHP files pass syntax check
php artisan route:listβ all routes resolve correctlyphp artisan testβ all tests passnpm run buildβ frontend builds successfully
- Fixed
HakaksesController.destroy()β broken model binding, no redirect after delete - Fixed
HakaksesController.update()β unused parameter, no validation, no success message - Fixed
HakaksesController.index()β search byid LIKEreplaced with name/email search - Fixed
ProfileController.update()β added validation (name required, email unique) - Fixed
SettingController.update()β boolean checkboxes now properly save unchecked state - Fixed
SettingControllerβ removed deaddestroy()method with no route - Fixed
Usermodel β addedroleto$fillablefor mass assignment - Fixed
PasswordResetFlowTestβ test helper now usesconfig()instead ofputenv()
- Removed
Hakaksesmodel β redundant proxy touserstable, replaced withUsermodel - Removed
ActivityLoggerhelper β duplicatedActivityLog::log(), moved convenience methods toActivityLogmodel - Removed redundant constructor
middleware('auth')fromHomeControllerandExampleController - Replaced
env()withconfig()inForgotPasswordControllerandResetPasswordController - Added
password_reset_method,password_reset_otp_expire,password_reset_otp_max_attemptstoconfig/auth.php - Used
$request->only()instead of$request->all()inSettingController.store()for security - Standardized all flash message keys to
'success'(was mixed:status,message,success) - Replaced free-text role input with
<select>dropdown in hakakses edit view - Added PHPDoc comments to all controllers and models
- Translated all Indonesian UI text to English for community use:
- Sidebar: "Hak Akses" β "Role Access", "Ganti Password" β "Change Password"
- Header: "Hai" β "Hi", "Selamat Datang" β "Welcome"
- Change Password form: all labels translated
- Hakakses views: complete English rewrite with proper breadcrumbs
php artisan route:listβ 60 routes, no errorsphp artisan testβ 7 tests, 18 assertions, all passednpm run buildβ built successfully
- Comprehensive documentation with detailed README.md
- CONTRIBUTING.md guide for contributors
- LEARNING.md step-by-step learning path for beginners
- PHPDoc comments throughout codebase
- Inline code comments explaining Laravel concepts
- Route documentation with clear sections
- Improved code examples in controllers
laravel/framework: ^12.0 (v12.0.1 β v12.46.0 - Latest stable with 46 improvements!)laravel/ui: ^4.6 (stable release)laravel/tinker: v2.10.1 β v2.11.0laravel/pint: v1.21.0 β v1.27.0 (Latest code style fixer)laravel/sail: v1.41.0 β v1.52.0 (Docker improvements)fakerphp/faker: Latest version for testingphpunit/phpunit: v11.5.10 β v11.5.46spatie/laravel-ignition: Latest error pagesymfony/*: v7.2.x β v7.4.x (All Symfony components updated)- Plus 70+ other package updates!
@popperjs/core: ^2.11.6 β ^2.11.8axios: ^1.6.4 β ^1.7.9 (security updates)bootstrap: ^5.2.3 β ^5.3.3 (latest Bootstrap 5)laravel-vite-plugin: ^1.0 β ^1.1.1sass: ^1.56.1 β ^1.83.0 (latest features)vite: ^5.0 β ^6.0.5 (Vite 6 with performance improvements)
- Fixed syntax error in ProfileController password method (extra curly brace)
- Improved validation in ProfileController with proper email uniqueness check
- Enhanced error handling throughout the application
- Added comprehensive README with badges and emojis
- Created learning path for beginners
- Added code examples with explanations
- Included troubleshooting section
- Added contribution guidelines
- Better code organization with clear sections
- Enhanced route documentation
- Improved controller method documentation
- Added model documentation with trait explanations
- Better notification class documentation
- Basic Laravel 12 installation
- Stisla Bootstrap template integration
- Basic authentication system
- User profile management
- Access rights management (hakakses)
- Example pages for Stisla components
If you're updating from a previous version:
-
Backup your database and .env file
cp .env .env.backup mysqldump -u root -p your_database > backup.sql -
Update dependencies
composer update npm install
-
Clear caches
php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear
-
Rebuild assets
npm run build
-
Review updated files
- Check
ProfileController.phpfor validation improvements - Review
routes/web.phpfor better organization - Read new documentation files
- Check
- None in this update (fully backward compatible)
- None
- API authentication with Laravel Sanctum
- Advanced role and permission system
- Email verification
- Two-factor authentication
- User activity logging
- Advanced dashboard with widgets
- File upload management
- Notification center
- Dark mode support
- Multi-language support (i18n)
For questions or issues related to this update:
- Open an issue on GitHub
- Check the LEARNING.md guide
- Review the updated README.md
Update Date: January 9, 2026
Maintainer: Vicky Maulana