67f09363f3b7a691c6c0f7a44011fda43bc8d841
- FastAPI + SQLite backend with REST API - Polymorphic Media model (book + series) - Cover lookup via Open Library - Vanilla HTML/CSS/JS frontend (MAL-inspired) - Dark theme, status tabs, drawer detail, stats modal - 8 seed demo entries
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
# 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
Description
WatchStack – Watchlist für Bücher, Serien & mehr. FastAPI + SQLite + Vanilla JS.
148 KiB
Languages
Python
37.9%
JavaScript
24.7%
CSS
19.5%
HTML
10.9%
Shell
4%
Other
3%