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>
45 lines
1.8 KiB
Markdown
45 lines
1.8 KiB
Markdown
# 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.
|