Files
watchlist/README.md
T
ki 67f09363f3 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
2026-07-21 23:11:14 +02:00

76 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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