Nicolas Cantu a099f3c24a docs: Fusion et simplification documentation features/
- Fusion tous documents implémentations en features.md
- Suppression documents redondants/obsolètes :
  - final-cleanup-summary.md, storage-encryption.md
  - storage-improvement-implementation.md, notifications-scope.md
  - user-profile-implementation.md, filtering-search-implementation.md
  - article-edit-delete.md, priority1-implementation.md
  - alby-integration.md, nostr-paywall-implementation.md
  - technical-doc.md (redondant avec docs/technical.md)
  - rizful-integration.md (obsolète, remplacé par Alby)
- Documentation fidèle au code actuel
- Garde zapwall4science-refactoring.md (spécifications)
- Garde series-and-media-spec.md (spécifications)
- Garde notifications-implementation.md (détails techniques)
2025-12-27 21:31:20 +01:00

3.7 KiB

Fonctionnalités implémentées

Auteur : Équipe 4NK

Architecture de base

Nostr Paywall → zapwall4Science

  • Publication d'articles avec aperçus gratuits et contenu payant
  • Paiement Lightning via Alby/WebLN (remplacement de Rizful)
  • Connexion via NostrConnect (use.nsec.app)
  • Interface TypeScript/Next.js

Services principaux

  • Nostr : Pool de connexions, publication/récupération d'événements, profils
  • Paiements : Invoices Lightning, vérification zap receipts (NIP-57), envoi automatique contenu privé
  • Stockage : IndexedDB avec chiffrement AES-GCM pour contenu privé
  • Notifications : Surveillance des paiements en temps réel (zap receipts)

Fonctionnalités utilisateur

Profil et articles

  • Page profil (/profile) avec informations utilisateur
  • Liste des articles publiés par l'utilisateur
  • Recherche et filtres (auteur, prix, texte)
  • Tri (date, prix)

Édition et suppression

  • Édition d'articles via événements Nostr (kind 1 avec tag replace)
  • Suppression d'articles via événements Nostr (kind 5)
  • Confirmation avant suppression
  • Ré-encryptage du contenu privé lors de l'édition

Notifications

  • Surveillance automatique des zap receipts (kind:9735) destinés à l'utilisateur
  • Badge avec nombre de notifications non lues dans le header
  • Centre de notifications (panneau latéral) avec liste des paiements
  • Formatage du temps relatif (il y a X minutes/heures/jours)
  • Marquer comme lu / marquer tout comme lu
  • Tri par date (plus récentes en premier)

Scope : Uniquement notifications de paiements. Pas de mentions, reposts, likes. Si commentaires demandés plus tard, approbation explicite requise.

Stockage

IndexedDB avec chiffrement

  • Remplacement de localStorage par IndexedDB
  • Chiffrement AES-GCM du contenu privé
  • Clé maître générée une fois et stockée en localStorage
  • Secret par article : <masterKey>:<articleId>
  • Expiration automatique (30 jours)
  • Pas de fallback : échec si IndexedDB ou Web Crypto indisponible

Fichiers

  • lib/storage/indexedDB.ts : Service IndexedDB
  • lib/storage/cryptoHelpers.ts : Helpers AES-GCM
  • lib/articleStorage.ts : Gestion du stockage avec chiffrement

Séries et médias (NIP-95)

Séries

  • Événements kind 1 avec tag kind_type: series
  • Tags : site, category, author, series (self id), title, description, cover, preview
  • Agrégation du sponsoring et des paiements par série

Médias

  • Upload d'images (≤5Mo) et vidéos (≤45Mo) via NIP-95
  • Tags banner et media dans les événements
  • Validations de taille et type
  • Support dans les articles et séries

Avis (reviews)

  • Événements kind 1 avec tag kind_type: review
  • Tags : site, category, author, series, article, reviewer, title
  • Rémunération possible avec tags rewarded et reward_amount

Optimisations et nettoyage

Refactoring

  • Division des fichiers > 250 lignes
  • Extraction des fonctions > 40 lignes
  • Modules dédiés : parsing, messages privés, vérification zap, subscriptions, polling, résolution invoices, stockage, handlers

Code quality

  • Respect strict exactOptionalPropertyTypes
  • Fonctions < 40 lignes, fichiers < 250 lignes
  • Pas de fallback implicite
  • Logs structurés
  • Pas d'analytics

Intégrations

Alby/WebLN

  • Remplacement de Rizful par Alby/WebLN
  • Standard WebLN compatible avec tous les portefeuilles
  • Pas d'API backend nécessaire
  • Service AlbyService pour enable, makeInvoice, sendPayment

Priorité 1 (implémenté)

  • Génération d'invoice côté auteur lors de la publication
  • Invoice stockée dans tags Nostr et localStorage
  • Vérification de l'invoice avant création d'une nouvelle
  • Signature distante (NIP-46) préparée