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

104 lines
3.7 KiB
Markdown

# 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