Modern minimalist split-layout login (left brand panel, right form) at /login. Sign-in posts to /api/v1/auth/login, stores the bearer token in localStorage, redirects to /dashboard. Demo-account expander auto-fills the form. Placeholder dashboard fetches /me, shows top nav + stat cards (values pending), and supports sign-out. AdminUserSeeder now seeds 4 demo admins (admin/ops/audit/demo @verde.local, all "password"). Tailwind config gets a Verde green palette + Inter font; component classes for buttons + form inputs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
60 lines
1.7 KiB
PHP
60 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class AdminUserSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
$admins = [
|
|
[
|
|
'email' => 'admin@verde.local',
|
|
'phone' => '+639000000001',
|
|
'first_name' => 'Verde',
|
|
'last_name' => 'Admin',
|
|
],
|
|
[
|
|
'email' => 'ops@verde.local',
|
|
'phone' => '+639000000002',
|
|
'first_name' => 'Olivia',
|
|
'last_name' => 'Operations',
|
|
],
|
|
[
|
|
'email' => 'audit@verde.local',
|
|
'phone' => '+639000000003',
|
|
'first_name' => 'Andres',
|
|
'last_name' => 'Audit',
|
|
],
|
|
[
|
|
'email' => 'demo@verde.local',
|
|
'phone' => '+639000000004',
|
|
'first_name' => 'Demo',
|
|
'last_name' => 'Admin',
|
|
],
|
|
];
|
|
|
|
foreach ($admins as $a) {
|
|
$user = User::firstOrCreate(
|
|
['email' => $a['email']],
|
|
[
|
|
'phone' => $a['phone'],
|
|
'password' => Hash::make('password'),
|
|
'first_name' => $a['first_name'],
|
|
'last_name' => $a['last_name'],
|
|
'role' => User::ROLE_ADMIN,
|
|
'status' => User::STATUS_ACTIVE,
|
|
'email_verified_at' => now(),
|
|
'phone_verified_at' => now(),
|
|
'preferred_language' => 'en',
|
|
],
|
|
);
|
|
|
|
$user->syncRoles([User::ROLE_ADMIN]);
|
|
}
|
|
}
|
|
}
|