story-research-zapwall/features/series-and-media-spec.md
2025-12-23 02:20:57 +01:00

70 lines
4.0 KiB
Markdown
Raw Permalink 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.

# 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 larticle)
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 quarticles) ; 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 darticles 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 dimplé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).