Nicolas Cantu 90ff8282f1 feat: Implémentation système de commissions systématique et incontournable
- Création lib/platformCommissions.ts : configuration centralisée des commissions
  - Articles : 800 sats (700 auteur, 100 plateforme)
  - Avis : 70 sats (49 lecteur, 21 plateforme)
  - Sponsoring : 0.046 BTC (0.042 auteur, 0.004 plateforme)

- Validation des montants à chaque étape :
  - Publication : vérification du montant avant publication
  - Paiement : vérification du montant avant acceptation
  - Erreurs explicites si montant incorrect

- Tracking des commissions sur Nostr :
  - Tags author_amount et platform_commission dans événements
  - Interface ContentDeliveryTracking étendue
  - Traçabilité complète pour audit

- Logs structurés avec informations de commission
- Documentation complète du système

Les commissions sont maintenant systématiques, validées et traçables.
2025-12-27 21:11:09 +01:00

90 lines
2.3 KiB
TypeScript

import Head from 'next/head'
import Link from 'next/link'
import { ConnectButton } from '@/components/ConnectButton'
import { DocsSidebar } from '@/components/DocsSidebar'
import { DocsContent } from '@/components/DocsContent'
import { useDocs } from '@/hooks/useDocs'
type DocSection = 'user-guide' | 'faq' | 'publishing' | 'payment'
interface DocLink {
id: DocSection
title: string
file: string
}
const docs: DocLink[] = [
{
id: 'user-guide',
title: 'Guide d\'utilisation',
file: 'user-guide.md',
},
{
id: 'faq',
title: 'FAQ',
file: 'faq.md',
},
{
id: 'publishing',
title: 'Guide de publication',
file: 'publishing-guide.md',
},
{
id: 'payment',
title: 'Guide de paiement',
file: 'payment-guide.md',
},
]
function DocsHeader() {
return (
<header className="bg-white shadow-sm">
<div className="max-w-7xl mx-auto px-4 py-4 flex justify-between items-center">
<Link href="/" className="text-2xl font-bold text-gray-900 hover:text-gray-700">
zapwall.fr
</Link>
<div className="flex items-center gap-4">
<Link
href="/"
className="px-4 py-2 text-gray-600 hover:text-gray-800 text-sm font-medium"
>
Articles
</Link>
<ConnectButton />
</div>
</div>
</header>
)
}
export default function DocsPage() {
const { selectedDoc, docContent, loading, loadDoc } = useDocs(docs)
return (
<>
<Head>
<title>Documentation - zapwall.fr</title>
<meta name="description" content="Documentation complète pour zapwall.fr" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</Head>
<main className="min-h-screen bg-gray-50">
<DocsHeader />
<div className="max-w-7xl mx-auto px-4 py-8">
<div className="flex flex-col lg:flex-row gap-8">
<DocsSidebar
docs={docs}
selectedDoc={selectedDoc}
onSelectDoc={(slug) => {
void loadDoc(slug)
}}
/>
<div className="flex-1">
<DocsContent content={docContent} loading={loading} />
</div>
</div>
</div>
</main>
</>
)
}