Livewire AJAX requests go to /livewire/update — ResolveWorkspace
middleware never runs, CurrentWorkspace is null, require_workspace()
throws RuntimeException.
- Members: add mount() to store workspaceId, use it in render()
- QrCodes/Create save(): use Workspace::where('ulid', $workspaceUlid)
- Modal components (CreateBioPage, CreateWebhook, InviteMember, AddDomain):
replace `?: require_workspace()` fallback with abort_if($id === 0, 404)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- All create modals now validate→create→dispatch(kebab-case event)→toast→close
- All edit/delete modals dispatch kebab-case events to Index classes
- Index components listen via #[On] and call resetPage() to refresh
- QR Code save() validates url field conditionally per type
- Tests updated to assert kebab-case event names
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add Links Livewire page (Index component + blade view) with live search,
status filter, paginated table, and delete action using DeleteLink for
cache invalidation. Register workspace-scoped route group under
w/{workspace} with ResolveWorkspace middleware. Add stub Livewire pages
for QrCodes, Bio, Analytics, Domains, Settings, and Billing with a shared
coming-soon view.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>