Scarriffle 83d8b7b99d 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>
2026-06-02 20:23:04 +02:00

Shelfless

Ein vollständiges alternatives Web-Frontend für Audiobookshelf (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

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.

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.

Description
No description provided
Readme 176 KiB
Languages
TypeScript 94.4%
JavaScript 2.8%
CSS 1.4%
Shell 1.2%
HTML 0.2%