Files
2026-06-09 18:40:21 +02:00

121 lines
6.3 KiB
Markdown

---
title: Obskurnee
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, books, book-club, social, votes, goodreads, dotnet, vue]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=books, https://github.com/zblesk/obskurnee]
---
# 📖 Obskurnee
> **Compagnon pour club de lecture** : proposez des livres, votez pour le suivant, notez et critiquez, avec intégration Goodreads. Pas pour self-host isolé, mais pour animer un groupe.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [obskurnee.zblesk.net](https://obskurnee.zblesk.net/) (démo) |
| **GitHub** | [zblesk/obskurnee](https://github.com/zblesk/obskurnee) |
| **License** | AGPL-3.0 |
| **Langage** | C# (.NET 8) backend, Vue 3 frontend |
| **Étoiles** | 27 ⭐ |
| **Dernière MAJ** | 2026-05 (active) |
| **Catégorie** | [[cat-books]] |
## Description
⚠️ **Note importante** : Obskurnee **n'est PAS un lecteur ni un gestionnaire de bibliothèque**. C'est un **compagnon pour club de lecture** — outil de gouvernance collective pour décider quel livre lire ensuite, partager les critiques, suivre les lectures du groupe. Le tag « Books » de selfh.st lui correspond bien dans la catégorie élargie, mais ne vous attendez pas à un Calibre-Web : ici pas d'EPUB, pas d'upload de fichiers, juste de l'organisation sociale autour de livres.
Le workflow est précisément défini : un **modérateur** ouvre un **« voting round »** quand le groupe est prêt pour un nouveau livre. Tous les membres proposent des titres. Une fois la phase de proposition fermée, un **sondage est auto-généré** et évalué après clôture. Le livre gagnant est **mis en avant sur la home page** comme « current book ». Variante : les **topic rounds** (deux étapes — d'abord voter sur un thème/genre, puis sur les livres correspondant au thème gagnant).
Fonctionnalités principales : **voting rounds** (votes directs OU thèmes), **book shelf** avec **rate & review**, **recommandations** (suggérer des livres hors round), **intégration Goodreads** (scraping d'URL pour auto-remplir, sync des « currently reading »), **Markdown** dans les textes longs (avec syntaxe `::ceci est un spoiler::`), **user profiles** avec historique de critiques, **modération** des utilisateurs, **home page** avec current book et ongoing activities.
**Limitation explicite des créateurs** : la feature set a été sciemment gardée petite. « On voulait implémenter le workflow qu'on utilise, pas couvrir tous les cas. »
**Points forts** : workflow club de lecture vraiment pensé, intégration Goodreads originale, UI propre (.NET + Vue), matrix room pour le support, démo en ligne accessible, licence AGPL-3.0.
**Points faibles** : **très niche** (clubs de lecture uniquement, pas de gestion de bibliothèque), **bus factor 1** (Ladislav Benc / zblesk), **27 étoiles** seulement, base installée extrêmement faible, pas de sync avec Calibre ou autre, pas d'upload de fichiers, **usage personnel uniquement** (non-commercial), projet jeune.
## Installation
### Via Docker (recommandé)
L'image `zblesk/obskurnee` est sur Docker Hub. ⚠️ Important : **Obskurnee n'a pas de HTTPS intégré** — il faut OBLIGATOIREMENT le mettre derrière un reverse-proxy (Nginx, Caddy, Traefik) avec gestion WebSocket (SignalR).
```yaml
# docker-compose.yml
services:
obskurnee:
image: zblesk/obskurnee:latest
container_name: obskurnee
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./data:/obskurnee/data
environment:
- SiteName=Mon Club de Lecture
- BaseUrl=https://obskurnee.mondomaine.fr
- DefaultCulture=fr
- SymmetricSecurityKey=CHANGE_ME_LONG_RANDOM_KEY_32_CHARS_MIN
- MailerType=mailgun
- Mailgun__EndpointUri=https://api.mailgun.net/v3/
- Mailgun__SenderEmail=Club <club@mondomaine.fr>
- Mailgun__SenderDomainName=mondomaine.fr
- Mailgun__ApiKey=key-mailgun
```
### Installation manuelle
Cloner, .NET 8 SDK, Node 18, `dotnet build` + `npm run build`, configurer `appsettings.json`, lancer.
## Configuration
1. Générer un `SymmetricSecurityKey` fort (32+ caractères aléatoires).
2. Configurer un service mail (Mailgun par défaut, SMTP possible) — les notifications de round sont envoyées par mail.
3. Lancer le conteneur, naviguer sur `/setup`, créer le **premier utilisateur** (qui devient automatiquement modérateur).
4. **Activer le HTTPS via reverse-proxy** (Nginx + certbot, ou [[app-caddy]]).
5. Configurer la **whitelist des domaines email** pour limiter qui peut s'inscrire.
6. Inviter les membres du club, ouvrir le premier voting round.
## Alternatives
### Open source
- [[app-bookwyrm]] — Réseau social lecteurs fédéré (ActivityPub), plus généraliste mais sans voting rounds
- **BookwormClub** — Petit projet similaire, encore moins étoilé
- **Bookture** — Outil de proposition/vote, plus mort que vivant
- **Letterboxd-clone apps** — Pour films, structure similaire
### Propriétaires
- **Goodreads** (Amazon) — Clubs de lecture Amazon, tracking publicitaire
- **Fable** — Réseau social lecteurs, clubs intégrés, freemium
- **The StoryGraph** — Moderne, plus privacy-friendly, pas de clubs natifs
- **Libib** — Gestionnaire de bibliothèque familiale, freemium
## Sécurité
- ⚠️ **Bus factor 1** : zblesk seul aux commandes
- ⚠️ **HTTPS obligatoire** : pas de TLS natif, reverse-proxy indispensable
- ⚠️ **WebSocket** (SignalR) : la conf Nginx doit gérer le `Upgrade` header
-**AGPL-3.0** : tout fork doit rester open source
- ⚠️ **Usage non-commercial uniquement** selon la license
- ⚠️ **27 étoiles** : projet jeune, ne pas miser une association dessus
- ⚠️ **Scraping Goodreads** : peut casser si Goodreads change son HTML
- ⚠️ Pas d'OAuth/OIDC natif : auth locale uniquement
## Ressources
- [GitHub zblesk/obskurnee](https://github.com/zblesk/obskurnee)
- [Démo en ligne](https://obskurnee.zblesk.net/)
- [Matrix room #obskurnee:zble.sk](https://matrix.to/#/#obskurnee:zble.sk)
- [selfh.st Books](https://selfh.st/apps/?tag=books)
## Pages Liées
- [[cat-books]] — Catégorie Books
- [[app-bookwyrm]] — Réseau social lecteurs plus généraliste, fédéré
- [[app-caddy]] — Reverse-proxy HTTPS + WebSocket
- [[app-traefik]] — Alternative reverse-proxy
- [[recettes-docker-compose]] — Templates Docker