nimuli/tests/Feature
boban ba67f67d60 fix(ui+seed): FOUC eliminated + persistent dev-user
Seed:
- DevUserSeeder: idempotent — creates workspace + WorkspaceMember + sets
  default_workspace_id. Auto-recreates everything on migrate:fresh --seed.
- DatabaseSeeder: PlanSeeder first (nexxo needs a plan), then DevUserSeeder
  always, DemoDataSeeder only in local/dev env.
- DevUserSeederTest: create + idempotent + in-DatabaseSeeder + order check.
- Removed WithoutModelEvents trait from DatabaseSeeder (was suppressing
  model observers needed for workspace creation).

UI (nimuli-app.blade.php):
- Inline JS theme-init before first paint: reads localStorage nimuli_theme,
  falls back to server-side user preference. Eliminates theme flash on reload.
- Critical CSS in <head>: CSS vars, body opacity 0 → 1 fade (120ms),
  skeleton sidebar + topbar visible during JS load.
- app-spinner shown until app-ready class added by markReady().
- Skeleton + spinner hidden via body.app-ready CSS selector.
- livewire:navigated event re-triggers markReady() for SPA navigation.
- x-cloak on mobile sidebar overlay to prevent pre-Alpine flash.

Bash aliases added to ~/.bashrc:
- seed-dev  → db:seed --class=DevUserSeeder
- migrate-fresh → migrate:fresh --seed
- reset-db  → migrate:fresh --seed (with confirmation message)

Tests: 109/109 passing. Smoke: all routes . DB sanity .

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 12:53:29 +02:00
..
Analytics feat(analytics): click recording job with IP hashing, device detection, Redis counters 2026-05-16 00:56:52 +02:00
Api/V1 fix(quality): PHPStan level 6 compliance, Pint formatting 2026-05-16 08:28:10 +02:00
Auth style: apply Pint formatting to modal files and tests 2026-05-16 12:42:16 +02:00
Billing fix(quality): PHPStan level 6 compliance, Pint formatting 2026-05-16 08:28:10 +02:00
Domain feat(domains): Domain model, DNS TXT verification action, pending verifier job 2026-05-16 08:14:33 +02:00
Livewire style: apply Pint formatting to modal files and tests 2026-05-16 12:42:16 +02:00
Redirect feat(redirect): hot-path redirect controller with Redis cache, 302/404/410 2026-05-16 00:52:16 +02:00
Security test(security): assert Permissions-Policy header 2026-05-16 07:52:20 +02:00
Seeders fix(ui+seed): FOUC eliminated + persistent dev-user 2026-05-16 12:53:29 +02:00
Settings feat(auth): TOTP 2FA enable/disable with recovery codes 2026-05-16 08:08:31 +02:00
Translation fix(i18n): remove stale redis del pattern, drop dead singleton 2026-05-16 01:29:45 +02:00
Webhook feat(webhooks): outgoing webhooks with HMAC signature, SSRF protection, retry 2026-05-16 07:46:57 +02:00
Workspace feat(workspace): create action, middleware, policies 2026-05-16 00:41:32 +02:00
ExampleTest.php feat: initial Nimuli scaffold with Laravel 12, Livewire 3, Octane, Reverb, Docker 2026-05-15 23:51:57 +02:00
ProfileTest.php fix: tests green + logout route + smoke test 2026-05-16 11:57:32 +02:00