Nicolas Cantu 065ab30828 Fix: favicon 404 error and NIP-95 upload 500 error
**Motivations:**
- Corriger l'erreur 404 pour favicon.ico demandé par les navigateurs
- Corriger l'erreur 500 de l'API NIP-95 upload empêchant les uploads de fichiers

**Root causes:**
- Fichier favicon.ico manquant dans public/ causant des erreurs 404 répétées
- Incompatibilité entre form-data (npm) et fetch() natif de Node.js dans l'API NIP-95

**Correctifs:**
- Ajout de favicon.svg et mise à jour des références dans les pages
- Remplacement de fetch() par https/http natifs de Node.js dans nip95-upload.ts
- Amélioration de la gestion des erreurs et nettoyage des fichiers temporaires

**Evolutions:**
- Documentation des problèmes et solutions dans fixKnowledge/

**Pages affectées:**
- components/HomeView.tsx
- pages/docs.tsx
- pages/presentation.tsx
- pages/api/nip95-upload.ts
- features/account-creation-buttons-separation.md
- fixKnowledge/favicon-404-error.md (nouveau)
- fixKnowledge/nip95-upload-500-error.md (nouveau)
- public/favicon.svg (nouveau)
2026-01-05 01:34:55 +01:00

72 lines
1.8 KiB
TypeScript

import Head from 'next/head'
import { DocsSidebar } from '@/components/DocsSidebar'
import { DocsContent } from '@/components/DocsContent'
import { PageHeader } from '@/components/PageHeader'
import { Footer } from '@/components/Footer'
import { useDocs } from '@/hooks/useDocs'
import { t } from '@/lib/i18n'
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',
},
]
export default function DocsPage() {
const { selectedDoc, docContent, loading, loadDoc } = useDocs(docs)
return (
<>
<Head>
<title>{t('nav.documentation')} - zapwall.fr</title>
<meta name="description" content="Documentation complète pour zapwall.fr" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
</Head>
<main className="min-h-screen bg-cyber-darker">
<PageHeader />
<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>
<Footer />
</main>
</>
)
}