ki 56a8d5d302 fix(crud): set end_date for books too when progress hits total
Previously only series received an end_date when progress reached
max. Books now behave consistently.
2026-07-21 23:17:50 +02:00
2026-07-21 23:11:14 +02:00
2026-07-21 23:11:14 +02:00
2026-07-21 23:11:14 +02:00
2026-07-21 23:12:33 +02:00

WatchStack

Eine Watchlist für Bücher, Serien & mehr — inspiriert von MyAnimeList, aber mit eigenem Konzept.

Features

  • 📚 Bücher: Titel, Autor, Bände, Kapitel, Seiten, ISBN-Cover von Open Library, Status, Bewertung, Notizen, Genre, Tags
  • 📺 Serien: Titel, Staffeln, Episoden, Sendezeitraum, Sender/Streaming, Status, Bewertung, Notizen, Genre, Tags
  • 🔎 Suche & Filter: Volltext, Status, Genre, Tag, Bewertung, Sortierung
  • 📊 Dashboard: Statistik pro Medium (Anzahl, verteilte Status, Durchschnittsbewertung)
  • Bewertungen: 110 Skala
  • 🏷️ Genres & Tags: frei verwaltbar, vielen Einträgen zuweisbar
  • 🌙 Dark Theme als Default
  • 💾 Lokal: SQLite, single-user, kein Login nötig
  • 🐳 Optional: Docker

Tech-Stack

  • Backend: Python 3.11+, FastAPI, SQLAlchemy 2.x, SQLite
  • Frontend: Vanilla HTML + CSS + JavaScript (kein Build-Step), HTMX-light Pattern
  • Cover: Open Library API (Bücher), URL (Serien)

Quickstart

# 1) Backend-Env
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 2) Starten (legt data/watchstack.db automatisch an + seedet Beispieldaten)
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

# 3) Browser öffnen
xdg-open http://127.0.0.1:8000  # oder einfach manuell

Projektstruktur

watchlist/
├── app/
│   ├── main.py            # FastAPI-App + Routes
│   ├── database.py        # Engine + Session
│   ├── models.py          # SQLAlchemy-Modelle
│   ├── schemas.py         # Pydantic-Schemas
│   ├── crud.py            # DB-Logik
│   ├── seed.py            # Beispieldaten
│   ├── external.py        # Open-Library-API
│   └── static/
│       ├── css/style.css
│       ├── js/app.js
│       └── img/
├── data/                  # SQLite-DB (gitignored)
├── tests/
├── requirements.txt
└── README.md

API-Übersicht (Auszug)

Methode Pfad Zweck
GET /api/media?type=book|series Liste mit Filter & Suche
POST /api/media Neuen Eintrag anlegen
GET /api/media/{id} Detail
PATCH /api/media/{id} Ändern (Status, Bewertung …)
DELETE /api/media/{id} Löschen
GET /api/stats Aggregierte Stats
GET /api/lookup/book?isbn=… Cover per Open Library
GET / Web-UI

Lizenz

MIT

S
Description
WatchStack – Watchlist für Bücher, Serien & mehr. FastAPI + SQLite + Vanilla JS.
Readme Apache-2.0
148 KiB
Languages
Python 37.9%
JavaScript 24.7%
CSS 19.5%
HTML 10.9%
Shell 4%
Other 3%