Summary
Add a project-level Asset Management tab that lets users browse all videos and assets in a file-explorer-style view, with the ability to preview, filter, and delete items without opening each video individually.
Current behavior
- Videos are listed on the project page as cards; each must be opened to manage it.
- Assets are scoped to a single video in the per-video Assets pane (
components/video-page/assets-pane.tsx).
- Deleting an asset requires navigating to that video's page and deleting from the asset list.
- There is no unified view of all media across a project.
Expected behavior
- New tab or section on the project page (e.g. Assets or Media) alongside the existing video grid.
- File-explorer-style layout:
- Folder/tree or grouped list by video (and optionally by type: video versions, images, audio, YouTube links, Bunny uploads).
- Columns or list rows showing name, type, size/duration where available, upload date, and uploader.
- Search and filters (by type, video, date, name).
- Actions per item and in bulk:
- Delete individual assets or videos.
- Multi-select + bulk delete.
- Download where already supported.
- Inline preview where practical (thumbnail for images, basic info for other types).
- Clear empty states and permission gating (same rules as today: owners/admins manage; viewers read-only).
Technical notes
- Asset APIs exist per video:
GET/DELETE /api/videos/[videoId]/assets/[assetId].
- Video delete API:
DELETE /api/projects/[projectId]/videos/[videoId].
- May need a new project-scoped listing endpoint (e.g. aggregate assets across videos in a project) for efficient pagination rather than N+1 fetches per video.
- Reuse existing cleanup paths for Bunny stream and R2 on delete.
Acceptance criteria
Summary
Add a project-level Asset Management tab that lets users browse all videos and assets in a file-explorer-style view, with the ability to preview, filter, and delete items without opening each video individually.
Current behavior
components/video-page/assets-pane.tsx).Expected behavior
Technical notes
GET/DELETE /api/videos/[videoId]/assets/[assetId].DELETE /api/projects/[projectId]/videos/[videoId].Acceptance criteria