Backend (Django 6.1 + DRF): - Token auth with a custom User model (register/login/logout/me) - Library models (MediaItem, MediaLocation) and REST endpoints - File list/detail with search, rating filter, sorting, pagination - Multipart upload with optional rating/tags/notes - Range-aware media serving (video seeking) and ffmpeg thumbnails - scan_files management command for the watched folder Frontend (React 19 + Vite + TypeScript): - Catppuccin Mocha design tokens from the design docs - App shell, token persistence, protected routes - Library grid with filters, file detail with custom data editor - Upload page with per-file progress via XHR - Dev proxy to the Django API
39 lines
857 B
Markdown
39 lines
857 B
Markdown
# J621
|
|
|
|
Self-hosted media library and e621 archive manager, rebuilt as a **React SPA + Django REST API**.
|
|
|
|
## Structure
|
|
|
|
```
|
|
backend/ Django 6 + DRF API (SQLite in dev, MariaDB in production)
|
|
frontend/ Vite + React + TypeScript SPA
|
|
```
|
|
|
|
## Development
|
|
|
|
### Backend
|
|
|
|
```bash
|
|
cd backend
|
|
source venv/bin/activate
|
|
python manage.py migrate
|
|
python manage.py scan_files # index the watched folder
|
|
python manage.py runserver
|
|
```
|
|
|
|
Copy `.env.example` to `.env` and set `WATCHED_FOLDER` before scanning.
|
|
|
|
### Frontend
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev # http://localhost:5173, proxies /api to :8000
|
|
```
|
|
|
|
### Production
|
|
|
|
Not wired up yet — planned: Nginx serving the SPA build, `/media` and `/library` media
|
|
directly, and proxying `/api` to Waitress/Django. See `frontend/` design docs for the UI
|
|
specification.
|