Initial commit: WatchStack v0.1.0

- 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
This commit is contained in:
ki
2026-07-21 23:11:14 +02:00
commit 67f09363f3
16 changed files with 2320 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
# 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
```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