The PATCH /api/performance/:id/edit endpoint was passing raw removedScreenshotIds from the client to an = ANY() SQL clause. Empty strings or invalid values would crash the query. Added a filter to ensure only non-empty string IDs are used.
- Move web app into apps/web/ - Create packages/shared/ with shared types - Create plugins/decky-vault/ scaffold - Root package.json manages workspaces only