# 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**: 1–10 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 ```bash # 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