70 lines
4.0 KiB
Markdown
70 lines
4.0 KiB
Markdown
# Séries, média NIP-95 et événements Nostr (spec v1, Jan 2026)
|
||
|
||
## 1) Événements et tags (rien en local)
|
||
|
||
Namespace tag communs (tous les events) :
|
||
- `site`: `zapwall4science`
|
||
- `category`: `science-fiction` | `scientific-research`
|
||
- `author`: pubkey auteur
|
||
- `series`: id série (event id de la série)
|
||
- `article`: id article (event id de l’article)
|
||
|
||
Kinds proposés (réutilisation kind 1 pour compat) :
|
||
- Série : kind `1` avec tag `kind_type: series`
|
||
- tags : `site`, `category`, `author`, `series` (self id), `title`, `description`, `cover` (URL NIP-95), `preview`
|
||
- Article : kind `1` avec tag `kind_type: article`
|
||
- tags : `site`, `category`, `author`, `series`, `article` (self id), `title`, `preview`, `banner` (URL NIP-95), `media` (0..n URLs NIP-95)
|
||
- contenu markdown public (preview) ; privé chiffré inchangé côté storage
|
||
- Avis (critique) : kind `1` avec tag `kind_type: review`
|
||
- tags : `site`, `category`, `author`, `series`, `article`, `reviewer` (pubkey), `title`, `created_at`
|
||
- contenu = avis en clair
|
||
- Achat article (zap receipt) : kind `9735` (zap) avec tags standard `p`, `e`, plus `site`, `category`, `author`, `series`, `article`, `kind_type: purchase`
|
||
- amount = millisats, hors frais site gérés off-chain
|
||
- Paiement remerciement avis : kind `9735` zap avec `kind_type: review_tip`, tags `site`, `category`, `author`, `series`, `article`, `reviewer`, `review_id`
|
||
- Paiement sponsoring : kind `9735` zap avec `kind_type: sponsoring`, tags `site`, `category`, `author`, `series` (optionnel), `article` (présentation si ciblé)
|
||
|
||
Notes :
|
||
- Tous les cumuls (sponsoring, paiements article, remerciements avis) calculés via zap receipts filtrés par `kind_type`.
|
||
- Séries sans sponsoring autorisées (0).
|
||
|
||
## 2) Média NIP-95 (images/vidéos)
|
||
|
||
- Upload via NIP-95 (encrypted file events). Contraintes :
|
||
- Images/photos : max 5 Mo, png/jpg/jpeg/webp.
|
||
- Vidéos : max 45 Mo.
|
||
- Stockage chiffré (même logique qu’articles) ; URL NIP-95 insérée dans markdown et bannière.
|
||
- Validation côté client : type MIME, taille, échec → erreur surfacée (pas de fallback).
|
||
|
||
## 3) Pages / navigation
|
||
|
||
Hiérarchie : site → catégorie (SF/Recherche) → auteurs → auteur → série → articles → article.
|
||
|
||
- Page auteur : liste des séries (cover type “livre”, titre, desc, preview, cumul sponsoring/paiements agrégés via zap receipts). Profil Nostr affiché.
|
||
- Page série : détails série (cover, desc, preview), cumul sponsoring série + paiements articles de la série, liste d’articles de la série.
|
||
- Article : preview public, contenu privé chiffré inchangé, bannière NIP-95, média insérés dans markdown.
|
||
- Rédaction : éditeur markdown + preview live, upload/paste NIP-95 pour images/vidéos, champs bannière (URL NIP-95), sélection série.
|
||
|
||
## 4) Agrégations financières (hors frais/site)
|
||
|
||
- Sponsoring : zap receipts `kind_type: sponsoring`, filtres `site`, `author`, option `series`.
|
||
- Paiements articles : zap receipts `kind_type: purchase`.
|
||
- Remerciements avis : zap receipts `kind_type: review_tip`.
|
||
- Cumuls par auteur et par série ; pas de détail de lecteurs (sauf auteur du zap pour avis si nécessaire au wording minimal).
|
||
|
||
## 5) Wording “critiques”
|
||
|
||
- Affichage des avis en tant que “critiques”.
|
||
- Liste des critiques : afficher contenu + auteur (pubkey→profil) ; pas de liste distincte “critiques” séparée des avis (juste les avis).
|
||
|
||
## 6) TODO d’implémentation (proposé)
|
||
|
||
- Types : étendre `types/nostr.ts` avec Series, Review, media refs; enum `KindType`.
|
||
- Upload NIP-95 : service dédié (validation taille/type, retour URL).
|
||
- Publisher : ajouter création série (event), article avec tags série/media/banner.
|
||
- Parsing : `nostrEventParsing` pour séries/articles/avis avec tags `kind_type`.
|
||
- Aggregation : service zap pour cumuls (sponsoring/purchase/review_tip) par auteur/série.
|
||
- UI :
|
||
- Form auteur/série/article (cover/banner, sélection série, markdown+preview, upload media).
|
||
- Pages auteur/série avec stats cumulées.
|
||
- Pas de stockage local pour méta (tout via events).
|