61dbb1abd29f7337e69a4a004dc7f74648698867
Implement the A8 upload screen against the existing /upload contract:
- UploadResponse type ({track_id, title, already_exists}) + mutation typed to it
- buildUploadFormData helper (single file under field `file`, per FastAPI)
- UploadPage: drag-and-drop + file picker, client-side queue with
concurrency cap (3), per-file status badges, retry on error,
already_exists -> "Already in library", deep-link to A7 metadata editor
- i18n upload.* section (en/ru) incl. "metadata pending" hint
Indeterminate spinner per file; percent progress is a follow-up
(needs an XHR baseQuery — fetchBaseQuery gives no upload progress).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rsbuild project
Setup
Install the dependencies:
npm install
Get started
Start the dev server, and the app will be available at http://localhost:3000.
npm run dev
Build the app for production:
npm run build
Preview the production build locally:
npm run preview
Learn more
To learn more about Rsbuild, check out the following resources:
- Rsbuild documentation - explore Rsbuild features and APIs.
- Rsbuild GitHub repository - your feedback and contributions are welcome!
Description
Languages
TypeScript
90.3%
CSS
6.1%
JavaScript
3.3%
Shell
0.3%