Initial commit: Shelfless – alternative Audiobookshelf frontend

React + Vite + TypeScript SPA covering the full ABS feature set (library
browsing, item detail, metadata/cover editing, podcasts, player with session
sync, admin: users/libraries/scanner/server settings). Dev uses a dynamic
CORS proxy; production is served by server/index.mjs (static + reverse proxy
to ABS_URL). Includes systemd unit and installer under deploy/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-06-02 20:23:04 +02:00
commit 83d8b7b99d
93 changed files with 9790 additions and 0 deletions

44
README.md Normal file
View File

@@ -0,0 +1,44 @@
# Shelfless
Ein vollständiges alternatives Web-Frontend für [Audiobookshelf](https://www.audiobookshelf.org/)
(ABS). ABS läuft weiter als Backend; Shelfless ersetzt dessen Oberfläche Wiedergabe,
Bibliotheken, Metadaten, Cover, Podcasts, User-Admin, Scanner und Server-Einstellungen.
## Stack
React 18 · Vite · TypeScript · Tailwind (+ CSS-Variablen) · Zustand · React Router ·
Axios · HTML5-Audio · Lucide. Kein UI-Framework.
## Entwicklung
```bash
npm install
npm run dev # http://localhost:5173
npm run build # Typecheck + Production-Build
npm run preview # gebautes Bundle lokal servieren
```
Beim ersten Start öffnet sich der Setup-Screen: ABS-Server-URL (`http://host:13378`),
Benutzername, Passwort. Der Token wird in `localStorage` gespeichert und beim Start via
`POST /api/authorize` validiert.
## Design
Dark-Theme, ein Akzent (Amber, in den Einstellungen umstellbar), Fraunces (Headings) +
Hanken Grotesk (Body). Die verbindliche Design-Referenz liegt unter
[`design-system/MASTER.md`](design-system/MASTER.md).
## Struktur
```
src/
api/ ABS-API nach Domäne (auth, libraries, items, progress, sessions, …)
components/ MediaCard/Row/Grid, player/, detail/, admin/, ui/ (Primitives)
hooks/ useDebounce, useClickOutside
lib/ media (cover/stream-URLs), format, html (sicheres htmlToText), url
pages/ Home, Library, ItemDetail, Settings, Setup, admin/*
routes/ RequireAuth, RequireAdmin
store/ auth, libraries, progress, player, settings, toast (Zustand)
types/ abs.ts (ABS-API-Typen)
```
## Hinweise zur ABS-API
Einige Pfade weichen vom ursprünglichen Briefing ab und folgen der echten ABS-API:
Login `POST /login`, Authorize `POST /api/authorize`, Wiedergabe `POST /api/items/:id/play`.
Server-Settings/Backups-Pfade ggf. je nach ABS-Version verifizieren.