Ce projet est un wiki moderne basé sur des fichiers Markdown, construit avec React, TypeScript, Vite et Tailwind CSS. Il ne nécessite aucune base de données - tout le contenu est stocké dans des fichiers .md simples.
- 📁 Contenu basé sur fichiers - Pas de base de données, édition avec n'importe quel éditeur de texte
- 🔗 Liens wiki style Obsidian - Syntaxe
[[Article]]pour les liens internes - 📖 Navigation automatique - La structure des dossiers génère le menu latéral
- 🔍 Recherche instantanée - Recherche côté client dans tous les articles
- 🌙 Mode sombre/clair - Thème adaptatif intégré
- 📊 Infobox - Panneaux d'information style Wikipedia
- ⏱️ Temps de lecture - Estimation automatique pour chaque article
- 🔙 Backlinks - Affichage des articles qui référencent la page courante
- ✨ Animations - Effets de scroll reveal et transitions fluides
- 📱 Responsive - Optimisé pour mobile et desktop
# Cloner le projet
git clone
cd
# Installer les dépendances
npm install
# Lancer le serveur de développement
npm run dev├── content/ # 📄 Votre contenu wiki (fichiers Markdown)
│ ├── characters/ # Catégorie "Characters"
│ │ └── aurora-lightbringer.md
│ ├── locations/ # Catégorie "Locations"
│ │ ├── citadel-of-dawn.md
│ │ └── silverdale.md
│ ├── lore/ # Catégorie "Lore"
│ │ ├── dawn-crystal.md
│ │ ├── order-of-light.md
│ │ └── shadow-war.md
│ ├── getting-started.md # Article à la racine
│ └── index.md # Page d'accueil
├── src/
│ ├── components/wiki/ # Composants du wiki
│ ├── lib/content-loader.ts # Chargeur de contenu
│ ├── pages/ # Pages de l'application
│ └── types/wiki.ts # Types TypeScript
└── ...
Chaque article est un fichier .md avec un frontmatter YAML en en-tête :
---
title: Titre de l'article
description: Description courte pour la recherche et les aperçus
category: NomCategorie
tags:
- tag1
- tag2
- tag3
featured: true
created: 2024-01-15
updated: 2024-03-20
infobox:
title: Titre de l'infobox
image: https://example.com/image.jpg
data:
- label: Propriété 1
value: Valeur 1
- label: Propriété 2
value: Valeur 2
---
# Contenu de l'article
Votre contenu Markdown ici...| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
title |
string | ✅ | Titre affiché de l'article |
description |
string | ❌ | Description pour les aperçus et la recherche |
category |
string | ❌ | Catégorie d'affichage |
tags |
array | ❌ | Liste de tags pour la recherche |
featured |
boolean | ❌ | Article mis en avant sur la page d'accueil |
created |
string | ❌ | Date de création (YYYY-MM-DD) |
updated |
string | ❌ | Date de dernière mise à jour |
infobox |
object | ❌ | Panneau d'information latéral |
L'infobox crée un panneau style Wikipedia sur le côté :
infobox:
title: Aurora Lightbringer
image: https://exemple.com/avatar.jpg
data:
- label: Titre
value: Gardienne de l'Aube
- label: Espèce
value: Humain
- label: Statut
value: ActifUtilisez la syntaxe double crochets style Obsidian :
# Lien simple (utilise le nom du fichier comme texte)
[[aurora-lightbringer]]
# Lien avec texte personnalisé
[[characters/aurora-lightbringer|Aurora, la héroïne]]
# Lien vers une catégorie
[[locations/silverdale|Le village de Silverdale]][[nom-article]]→ Lien vers/wiki/article/nom-article[[dossier/article|Texte affiché]]→ Lien avec texte personnalisé
Créez simplement un dossier dans /content/ :
/content
/ma-nouvelle-categorie/ ← Nouvelle catégorie !
article-1.md
article-2.md
La catégorie apparaîtra automatiquement dans la navigation latérale.
- Utilisez des kebab-case pour les noms de fichiers :
mon-article.md - Le slug devient automatiquement :
mon-article - L'URL sera :
/wiki/ma-categorie/mon-article
Modifiez les couleurs dans src/index.css :
:root {
--primary: 45 100% 51%; /* Couleur principale */
--secondary: 220 14% 96%;
--accent: 45 100% 51%;
--background: 0 0% 100%;
--foreground: 222 47% 11%;
/* ... */
}
.dark {
--background: 222 47% 5%;
--foreground: 210 40% 98%;
/* ... */
}Par défaut, le temps de lecture est calculé sur 200 mots/minute. Modifiez dans src/lib/content-loader.ts :
export function calculateReadingTime(content: string): number {
// ...
const wordsPerMinute = 200; // ← Ajustez cette valeur
return Math.max(1, Math.ceil(wordCount / wordsPerMinute));
}Les animations sont définies dans src/index.css et tailwind.config.ts. Désactivez-les pour les utilisateurs qui préfèrent les mouvements réduits :
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}La recherche fonctionne côté client et indexe :
- Titres (score: 10 points)
- Descriptions (score: 5 points)
- Tags (score: 4 points)
- Contenu (score: 3 points)
Les résultats sont triés par pertinence.
# Supprimer les articles d'exemple
rm -rf content/characters content/locations content/lore
rm content/getting-started.md
# Garder uniquement index.md et le modifiermkdir content/guides
mkdir content/reference
mkdir content/tutorialsÉditez content/index.md :
---
title: Mon Wiki
description: Documentation de mon projet
featured: true
---
# Bienvenue sur Mon Wiki
Description de votre projet...Éditez src/components/wiki/WikiHeader.tsx pour changer le logo et le titre.
Le code est modulaire et facile à étendre :
src/lib/content-loader.ts- Logique de chargement du contenusrc/components/wiki/- Composants réutilisablessrc/pages/- Pages principales
/content
/characters
/locations
/items
/quests
/lore
/content
/getting-started
/api-reference
/tutorials
/guides
/changelog
/content
/onboarding
/processes
/tools
/policies
/faq
npm run buildLes fichiers sont générés dans /dist.
Compatible avec :
- Netlify - Déployez depuis Git
- Vercel - Import automatique
- GitHub Pages - Via GitHub Actions
- Cloudflare Pages - Build automatique
- Lovable - Cliquez sur "Publish"
---
title: Mon Nouvel Article
description: Description courte
tags:
- tag1
---
# Mon Nouvel Article
Contenu ici...
## Voir aussi
- [[autre-article|Lien vers un autre article]]- Gras :
**texte** - Italique :
*texte* Code inline:`code`- Blocs de code :
```language ... ``` - Listes :
- itemou1. item - Tableaux :
| Col1 | Col2 | - Images :
 - Liens :
[texte](url)ou[[wiki-link]]
- Fork le projet
- Créez votre branche (
git checkout -b feature/nouvelle-fonctionnalite) - Committez vos changements (
git commit -m 'Ajout nouvelle fonctionnalité') - Push sur la branche (
git push origin feature/nouvelle-fonctionnalite) - Ouvrez une Pull Request
MIT - Utilisez ce template librement pour vos projets !