Boban Blaskovic
6de4131389
feat(license): EnsureActiveLicense full implementation + license/dashboard routes
...
- EnsureActiveLicense: full child-role check via licenseAssignments().isActive()
- License model: add isActive() method, fix fillable order, expires_at cast to date
- LicenseFactory: active/expired/inactive states
- routes/web.php: /dashboard with auth+license middleware, /lizenz-abgelaufen
- tests: EnsureActiveLicenseTest (3 tests — block/allow/teacher bypass)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 05:16:06 +02:00
Boban Blaskovic
ac945ad4f0
fix(auth): register ParentChildPolicy via Gate::define (Pivot models not model-bound)
2026-05-22 01:46:14 +02:00
Boban Blaskovic
58400d3dc3
feat(auth): UserPolicy + LicensePolicy + TenantPolicy + ParentChildPolicy + EnsureActiveLicense placeholder
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 01:42:00 +02:00
Boban Blaskovic
a099f2a4dc
feat(auth): HasRole middleware with OR-semantics
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 01:41:10 +02:00
Boban Blaskovic
986f2afcff
fix(tenant): forceDelete guard, hasRole eager-load, write-path test, migration timestamps
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 01:07:26 +02:00
Boban Blaskovic
1709f0f171
feat(models): Tenant, User, Role, ParentChild pivot + factories with withRole/withLicense
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:54:07 +02:00
Boban Blaskovic
a198cd1fbe
feat(db): 7 MVP-1 migrations — UUID, tenant_id, role_user UNIQUE(user_id), parent_child no-tenant
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:53:22 +02:00
Boban Blaskovic
af49f091f5
feat(tenant): HasUuid + TenantScope (null-user default-deny) + BelongsToTenant
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:53:10 +02:00
Boban Blaskovic
4e428cc58e
fix(config): untrack phpunit.xml + add Vite watch exclusion for Blade cache
2026-05-22 00:46:45 +02:00
Boban Blaskovic
7595d28613
feat(ui): Livewire v4 + blade-icons + de locale + timezone Vienna
...
Installed livewire/livewire v4.3 and blade-ui-kit/blade-icons v1.10, published
their configs. Updated config/app.php: locale default='de', timezone='Europe/Vienna'.
Created lang/de.json with core German translation strings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:38:36 +02:00
Boban Blaskovic
318a6f1f6b
feat(frontend): Tailwind v4 @theme + vite-plugin-pwa + local fonts
...
Replaced vite.config.js with laravel+tailwind v4+VitePWA config, added auth.js and
touch.js entry points. Rewrote app.css with Tailwind v4 @theme custom tokens and local
@font-face declarations for Plus Jakarta Sans (variable) and JetBrains Mono. Downloaded
both woff2 font files locally to public/fonts/ — no CDN links. Vite build: exit 0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:37:27 +02:00
Boban Blaskovic
fe3b8d904f
feat(testing): Pest v3 + Dusk + phpunit.xml.dist SESSION overrides + laravel/reverb
...
Installed pestphp/pest v4.7, pestphp/pest-plugin-laravel v4.1, laravel/dusk v8.6,
and laravel/reverb v1.10. Added phpunit.xml.dist and updated phpunit.xml with required
SESSION_SECURE_COOKIE=false, SESSION_DOMAIN=null, DB_CONNECTION=mysql overrides.
Created Browser/Smoke/AppReachableTest.php Dusk smoke test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:32:10 +02:00
Boban Blaskovic
2fcd7c985e
fix(docker): add .dockerignore, fix Dockerfile apt cleanup, simplify mysql healthcheck
2026-05-22 00:28:03 +02:00
Boban Blaskovic
8eb1759d7e
feat(scaffold): Laravel 12 scaffold + .env.example
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:19:49 +02:00
Boban Blaskovic
57d14dc152
feat(docker): add Dockerfiles + docker-compose.yml with healthchecks
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:19:01 +02:00