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

4.0 KiB
Raw Blame History

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