Inertia Start

v1.6.0

v1.6.0

This release adds email notifications to administrators when users are created or deleted, erases profile photos together with the rest of a deleted user's personal data, and enables HTTPS for Octane by default.

Added

  • Added admin email notifications for user creation and deletion, sent by the new App\Notifications\AdminUsersChanged notification to the comma-separated addresses in I_S_ADMIN_NOTIFICATIONS_RECIPIENTS. Notifications are disabled when no recipients are set.
  • Added I_S_ADMIN_NOTIFICATIONS_DELIVERY to choose how notifications are delivered:
    • immediate: sent synchronously during the request.
    • queued (default): sent by a queue worker.
    • digest: changes are grouped and sent in a single "User activity digest" email every day at 18:00 by the new scheduled App\Jobs\SendAdminDigest job. Pending changes are stored in the new admin_notification_digests table.
  • Added I_S_ADMIN_NOTIFICATIONS_QUEUE to send queued notifications and the digest job on a specific queue. Leave it empty to use the default queue.
  • Added the admin_notifications section to config/inertia-start.php, and the App\Services\AdminNotificationService that builds and dispatches the notifications.

Changed

  • OCTANE_HTTPS now defaults to true in config/octane.php and .env.example.
  • The profile photo of a deleted user is now removed by User::nullify(), together with the rest of their personal data, instead of by UserObserver::deleted(). The file is deleted only once the database transaction commits, since file deletion cannot be rolled back.
  • HasAvatar::deleteAvatar() now clears the whole avatar media collection, removing any leftover avatars and resetting the loaded media relation. It no longer calls save() on the model, avoiding a useless extra query.
  • Inertia Table header render functions now receive the TanStack header context (column, header, table) as props, matching how cell render functions already work.
  • To address vulnerabilities that have been discovered in certain npm dependencies, ESLint now uses typescript-eslint and vue-eslint-parser directly, with type-aware linting through projectService, instead of @vue/eslint-config-typescript. <script> blocks in Vue components must use lang="ts".

Fixed

  • The "magic link sent" toast no longer reappears after logging in with a magic link.

Removed

  • Removed the unused resources/views/mail/admin/user_added.blade.php mail template, replaced by resources/views/mail/admin/users_changed.blade.php.
  • Removed the unused is_admin property from the frontend User type in resources/js/types/auth.ts.

Dependencies

  • Updated minor and patch Composer and npm dependencies.

Upgrade Guide

  1. Run composer install.
  2. Run npm install.
  3. Run php artisan migrate to create the admin_notification_digests table.
  4. Rebuild frontend assets with npm run build or your normal frontend workflow.
  5. To receive admin notifications, set I_S_ADMIN_NOTIFICATIONS_RECIPIENTS to a comma-separated list of email addresses, and optionally I_S_ADMIN_NOTIFICATIONS_DELIVERY and I_S_ADMIN_NOTIFICATIONS_QUEUE. The default queued delivery requires a running queue worker, and digest delivery requires the scheduler and a queue worker.
  6. If you serve the application with Octane without HTTPS and OCTANE_HTTPS is not set in your .env file, set OCTANE_HTTPS=false.
  7. If your code relied on deleteAvatar() saving the model, call save() explicitly after it.
  8. If your code used is_admin from the frontend User type, or the mail.admin.user_added view, add them back in your application or migrate to the new notification.