- Rails Nouveautés séparés : 🆕 animés (tri date Kitsu) et 🆕 séries & films
(French-Stream) — chaque type garde son rail, plus d'écrasement mutuel
- Section 🎭 Explorer : chips type × genre — animés via catégories Kitsu,
séries (/<genre>-series-/) et films (/films/<genre>/) via French-Stream ;
état dans l'URL (/discover?t=serie&g=medical), partageable
- Scraper : browse(media_type, genre) + catalogue YAML surchargeable ;
parsing div.short mutualisé avec les nouveautés
- Films réels retirés du mode « Animés » (ils suivent le rail séries)
- Endpoints /api/discover (latest_anime/latest_serie), /api/discover/genres,
/api/discover/browse — parcours filtré par la préférence du compte
- Warmup démarrage : latest_by_type()
- Colonne users.content_preference (anime|serie|both, défaut both) avec
migration automatique des bases existantes.
- GET /auth/me expose la préférence ; PUT /auth/preferences la met à
jour (422 si valeur invalide).
- /api/search : filtre les résultats par media_type ET ignore les
sources hors périmètre (une source anime-only n'est pas interrogée
en mode séries). Les films restent associés aux animés.
- /api/discover : nouveautés filtrées selon la même règle.
- Sélecteur compact dans la topbar (⛩/📺/✨), persisté serveur.
- 7 tests dédiés (roundtrip, rejet invalide, filtrage search/discover,
skip de sources) — 114 au total, ruff clean.
Prête pour la première source de séries : il ne reste qu'un module
SourceScraper avec media_types=("serie",) à écrire.