## 1. Schema & Scaffold

- [x] 1.1 `db/schema.sql`: idempotent `ALTER TABLE users ADD COLUMN IF NOT EXISTS is_admin BOOLEAN NOT NULL DEFAULT FALSE;`; `make db-up`
- [x] 1.2 `admin/docker-compose.yml` (php:8.3-fpm + composer bootstrap, port 3030, volume mount admin/); bootstrap `laravel/laravel` via composer image; `admin/.env` → shared DB on .13:5434 (gitignored)

## 2. Laravel Core

- [x] 2.1 Eloquent models: User (is_admin), Tag, Scan, Product, Order with relationships (Tag belongsTo Product/Order; User hasMany Tag; Tag hasMany Scan)
- [x] 2.2 Filament install (v3) + admin panel provider; admin auth gate (is_admin); seed admin user (env email/password)

## 3. Filament Resources

- [x] 3.1 UserResource (list/search, view with tags+scans, suspend)
- [x] 3.2 TagResource (list/search, view scans, product/order assignment selects, suspend/unsuspend)
- [x] 3.3 ProductResource (CRUD sku/name/item_type)
- [x] 3.4 OrderResource (CRUD, status lifecycle)
- [x] 3.5 Dashboard widgets (tags by status, scans 24h, recent scans, lapsed orders)

## 4. Verification

- [x] 4.1 Admin login works (is_admin user); owner (non-admin) blocked
- [x] 4.2 CRUD smoke: create product, create order, assign product+order to a tag, suspend a tag, update order status
- [x] 4.3 GOAT frontend unaffected (suites 53/53 on shared DB)
- [x] 4.4 `openspec validate laravel-admin`; commit
