# đŸ“€ Export de Notes Publiques - Guide Complet ## 🎯 Concept Les notes publiques sont **gĂ©nĂ©rĂ©es en fichiers HTML statiques** directement sur le serveur. Cela signifie que vous pouvez copier le dossier `public/` et le dĂ©ployer sur n'importe quel serveur web (Apache, Nginx, GitHub Pages, Netlify, etc.) **sans avoir besoin de Go**. ## 🔍 Lister les notes publiques Vous pouvez lister toutes les notes publiques avec la commande CLI intĂ©grĂ©e : ```bash ./server list-public ``` **Sortie** : ``` 📚 Notes publiques (4): ‱ Mon Guide Source: personal/guide.md Public: public/guide.html Date: 2025-11-13 20:06:21 ``` Cette commande lit le fichier `notes/.public.json` et affiche : - Le titre de chaque note - Son chemin source - Son chemin public - La date de publication ## 📁 Structure gĂ©nĂ©rĂ©e Quand vous publiez une note, le systĂšme gĂ©nĂšre automatiquement : ``` public/ ├── index.html # Liste de toutes les notes publiques ├── ma-note.html # Notes converties en HTML (structure plate) ├── autre.html └── static/ ├── theme.css # Styles CSS copiĂ©s └── themes.css ``` **Note** : La structure est plate - toutes les notes publiques sont directement dans `public/`, peu importe leur emplacement d'origine dans vos dossiers personnels. ## 🔄 GĂ©nĂ©ration automatique ### Quand une note est publiĂ©e 1. **L'utilisateur clique sur "🔒 PrivĂ©"** dans l'Ă©diteur 2. Le systĂšme : - Lit le fichier Markdown - Extrait le front matter (titre, tags, date) - Convertit le Markdown en HTML avec goldmark - GĂ©nĂšre un fichier HTML standalone complet - Copie les CSS nĂ©cessaires - RĂ©gĂ©nĂšre `index.html` avec la nouvelle note 3. **Le bouton devient "🌐 Public"** ### Quand une note est retirĂ©e 1. **L'utilisateur clique sur "🌐 Public"** 2. Le systĂšme : - Supprime le fichier HTML correspondant - RĂ©gĂ©nĂšre `index.html` sans cette note 3. **Le bouton redevient "🔒 PrivĂ©"** ## 📋 Emplacement des fichiers - **Source** : `notes/` (vos fichiers Markdown originaux) - **Export** : `public/` (fichiers HTML gĂ©nĂ©rĂ©s) - **Index** : `.public.json` (liste des notes publiques) ## 🚀 DĂ©ploiement ### Option 1 : Copie manuelle sur serveur web ```bash # Copier le dossier public/ sur votre serveur scp -r public/ user@server.com:/var/www/html/notes/ # Ou avec rsync rsync -av public/ user@server.com:/var/www/html/notes/ ``` **Configuration Nginx** : ```nginx server { listen 80; server_name notes.example.com; root /var/www/html/notes; index index.html; location / { try_files $uri $uri/ =404; } } ``` **Configuration Apache** : ```apache ServerName notes.example.com DocumentRoot /var/www/html/notes Options Indexes FollowSymLinks AllowOverride All Require all granted ``` ### Option 2 : GitHub Pages (gratuit) ```bash # 1. CrĂ©er un repo GitHub git init public/ cd public/ git add . git commit -m "Initial public notes" # 2. Pousser vers GitHub git remote add origin https://github.com/username/notes-public.git git push -u origin main # 3. Activer GitHub Pages # Settings → Pages → Source: main branch → Save ``` Vos notes seront disponibles Ă  : `https://username.github.io/notes-public/` ### Option 3 : Netlify Drop (ultra simple) 1. Allez sur https://app.netlify.com/drop 2. Glissez-dĂ©posez le dossier `public/` 3. Netlify gĂ©nĂšre automatiquement une URL ### Option 4 : Vercel ```bash cd public/ npx vercel ``` ## 🔄 Automatisation avec script CrĂ©ez un script pour synchroniser automatiquement : ```bash #!/bin/bash # sync-public.sh # Serveur de destination REMOTE_USER="user" REMOTE_HOST="server.com" REMOTE_PATH="/var/www/html/notes" # Synchroniser rsync -av --delete public/ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} echo "✅ Notes publiques synchronisĂ©es !" ``` Utilisation : ```bash chmod +x sync-public.sh ./sync-public.sh ``` ## 🔄 Automatisation avec Git Hook Synchroniser automatiquement aprĂšs chaque publication : ```bash # .git/hooks/post-commit #!/bin/bash # Si le dossier public/ a changĂ©, synchroniser if git diff --name-only HEAD~1 | grep -q "^public/"; then ./sync-public.sh fi ``` ## 📊 Avantages de cette approche ### ✅ Performance - HTML prĂ©-gĂ©nĂ©rĂ© = temps de chargement instantanĂ© - Pas de backend requis = moins de latence - Cacheable Ă  100% par CDN ### ✅ SĂ©curitĂ© - Fichiers statiques = surface d'attaque minimale - Pas de code serveur exĂ©cutĂ© cĂŽtĂ© public - Isolation complĂšte du systĂšme d'Ă©dition ### ✅ PortabilitĂ© - Fonctionne sur **n'importe quel serveur web** - HĂ©bergement gratuit possible (GitHub Pages, Netlify) - Peut ĂȘtre mis sur un CDN (Cloudflare, etc.) ### ✅ SimplicitĂ© - Pas besoin de Go sur le serveur de destination - Pas de base de donnĂ©es - Juste des fichiers HTML Ă  copier ### ✅ SEO - HTML prĂ©-rendu = indexation optimale par Google - Pas de JavaScript requis pour afficher le contenu - Meta tags facilement ajoutables ## 🎹 Personnalisation ### Modifier les styles Les fichiers CSS sont dans `public/static/`. Vous pouvez les modifier directement : ```bash # Éditer le CSS nano public/static/theme.css # Ou copier vos propres CSS cp my-custom.css public/static/custom.css ``` ### Ajouter des meta tags Modifiez `internal/api/public.go` dans la fonction `generateStandaloneHTML()` : ```go %s - PersoNotes ``` ### Ajouter Google Analytics Ajoutez dans `generateStandaloneHTML()` avant `` : ```html ``` ## 🐛 DĂ©pannage ### Les notes ne s'affichent pas **ProblĂšme** : `/public/` retourne 404 **Solutions** : 1. VĂ©rifier que le dossier `public/` existe : `ls -la public/` 2. Publier au moins une note pour gĂ©nĂ©rer le dossier 3. RedĂ©marrer le serveur Go ### Les styles ne s'appliquent pas **ProblĂšme** : La page s'affiche sans CSS **Solutions** : 1. VĂ©rifier que `public/static/theme.css` existe 2. Les chemins CSS sont relatifs : `../static/theme.css` 3. Si vous copiez ailleurs, ajustez les chemins ### Le HTML contient du Markdown brut **ProblĂšme** : Le Markdown n'est pas converti **Solutions** : 1. VĂ©rifier que goldmark est installĂ© : `go mod tidy` 2. Republier la note (toggle Private → Public) 3. VĂ©rifier les logs du serveur ## 📝 Workflow recommandĂ© ### Workflow quotidien 1. **Écrire** vos notes en Markdown dans l'Ă©diteur 2. **Publier** les notes que vous voulez partager (bouton Public) 3. **Synchroniser** le dossier `public/` vers votre serveur (manuel ou automatique) ### Workflow avec Git ```bash # 1. Publier des notes via l'interface web # 2. Commiter les changements git add public/ git commit -m "Publish new notes" git push # 3. Sur le serveur de production git pull # Les nouvelles notes sont disponibles ! ``` ## 🔐 SĂ©curitĂ© ### Routes publiques (pas d'auth) - ✅ `/public/*` - Fichiers HTML statiques accessibles Ă  tous ### Routes privĂ©es (nĂ©cessitent auth) - 🔒 `/` - Interface d'Ă©dition - 🔒 `/api/*` - APIs de modification - 🔒 `/api/public/toggle` - **ProtĂ©ger cet endpoint !** ### Protection recommandĂ©e Utilisez un reverse proxy avec authentification pour protĂ©ger l'Ă©dition : ```nginx # Nginx location /public { # Pas d'auth - accessible Ă  tous proxy_pass http://localhost:8080; } location / { # Auth requise pour Ă©dition auth_basic "Personotes Admin"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://localhost:8080; } ``` ## 📚 Ressources - **Goldmark** : https://github.com/yuin/goldmark - **GitHub Pages** : https://pages.github.com - **Netlify** : https://www.netlify.com - **Vercel** : https://vercel.com ## ❓ FAQ **Q: Puis-je personnaliser le design des pages publiques ?** R: Oui ! Modifiez `public/static/theme.css` ou Ă©ditez la fonction `generateStandaloneHTML()` dans `internal/api/public.go`. **Q: Les images dans mes notes fonctionnent-elles ?** R: Oui, si vous utilisez des URLs absolues ou si vous copiez les images dans `public/static/images/`. **Q: Puis-je exporter vers PDF ?** R: Les fichiers HTML peuvent ĂȘtre convertis en PDF avec wkhtmltopdf ou un navigateur (Imprimer → PDF). **Q: Comment supprimer toutes les notes publiques d'un coup ?** R: Supprimez le dossier `public/` et le fichier `.public.json`, puis relancez le serveur. **Q: Les modifications des notes sont-elles automatiquement republiĂ©es ?** R: Non. Si vous modifiez une note Markdown qui est dĂ©jĂ  publique, vous devez la republier (toggle Private puis Public) pour rĂ©gĂ©nĂ©rer le HTML.