---
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
