Markdown / PRD.md
GauthierDemonchy
Premier commit propre
898ed62
|
Raw
History Blame Contribute Delete
8.24 kB
# PRD β€” MarkitDown Local WebApp
**Version** : 1.0
**Date** : 11 mai 2026
**Statut** : FinalisΓ©
---
## 1. Contexte & Objectif
### Problème
Convertir des fichiers (PDF, Word, Excel, PowerPoint, images, HTML…) en Markdown est une tΓ’che frΓ©quente mais fastidieuse en ligne de commande. La librairie [MarkItDown](https://github.com/microsoft/markitdown) de Microsoft rΓ©sout la conversion, mais elle reste inaccessible sans interface.
### Objectif
CrΓ©er une **application web locale** minimaliste, lancΓ©e en **un double-clic** sur un fichier `.bat` (Windows) ou `.sh` (Mac/Linux), qui expose MarkItDown dans un navigateur sans aucune Γ©tape de build prΓ©alable.
---
## 2. Utilisateurs cibles
- DΓ©veloppeurs, tech writers, data analysts souhaitant convertir rapidement des fichiers locaux
- Utilisateurs non-techniques voulant un outil simple sans setup complexe
- Profil principal : utilisateur unique en local (pas de multi-tenant)
---
## 3. Périmètre fonctionnel
### 3.1 FonctionnalitΓ©s β€” Must Have πŸ”΄
| ID | FonctionnalitΓ© | Description |
|----|---------------|-------------|
| F1 | Upload de fichier | Drag & drop + bouton "Parcourir". Un ou plusieurs fichiers Γ  la fois |
| F2 | Conversion Markdown | Via MarkItDown β€” tous les formats supportΓ©s (PDF, DOCX, PPTX, XLSX, images, HTML, CSV, JSON, ZIP…) |
| F3 | PrΓ©visualisation | Affichage du Markdown rendu (HTML) et du Markdown brut (code) en onglets |
| F4 | Téléchargement `.md` | Bouton "Télécharger" → génère un fichier `.md` nommé d'après le fichier source |
| F5 | Copie presse-papier | Bouton "Copier" β†’ copie le Markdown brut dans le clipboard |
| F6 | Lancement 1 clic | Fichier `start.bat` (Windows) et `start.sh` (Mac/Linux) qui installent les dΓ©pendances si absent et lancent l'app |
### 3.2 FonctionnalitΓ©s β€” Should Have 🟠
| ID | FonctionnalitΓ© | Description |
|----|---------------|-------------|
| F7 | Historique local | Liste des dernières conversions (nom fichier, date, taille MD) persistée dans un fichier JSON local |
| F8 | Re-tΓ©lΓ©chargement | Depuis l'historique, re-tΓ©lΓ©charger ou re-copier un rΓ©sultat prΓ©cΓ©dent |
| F9 | Batch conversion | Convertir plusieurs fichiers en une fois, tΓ©lΓ©charger un `.zip` des `.md` rΓ©sultants |
### 3.3 FonctionnalitΓ©s β€” Nice to Have 🟑
| ID | FonctionnalitΓ© | Description |
|----|---------------|-------------|
| F10 | Conversion URL | Saisir une URL Γ  la place d'un fichier β€” MarkItDown supporte le scraping HTML |
| F11 | Effacer historique | Bouton pour vider l'historique |
---
## 4. Architecture technique
### Stack
- **Backend** : Python + **Flask** (lΓ©ger, zΓ©ro config, idΓ©al pour usage local)
- **Frontend** : HTML/CSS/JS vanilla β€” pas de framework, pas de build step
- **Conversion** : `markitdown` (pip)
- **Persistance** : fichier `history.json` local dans le dossier de l'app
### Structure du projet
```
markitdown-app/
β”œβ”€β”€ start.bat ← Lancement Windows (double-clic)
β”œβ”€β”€ start.sh ← Lancement Mac/Linux
β”œβ”€β”€ app.py ← Serveur Flask
β”œβ”€β”€ requirements.txt ← markitdown, flask
β”œβ”€β”€ history.json ← Historique (créé auto au premier lancement)
β”œβ”€β”€ static/
β”‚ β”œβ”€β”€ style.css
β”‚ └── script.js
└── templates/
└── index.html
```
### Logique du launcher (`start.bat`)
```
1. VΓ©rifie si Python est installΓ© β†’ sinon, message d'erreur clair
2. VΓ©rifie si le venv existe β†’ sinon, le crΓ©e et installe requirements.txt
3. Active le venv
4. Lance app.py (Flask sur http://localhost:5000)
5. Ouvre automatiquement le navigateur sur http://localhost:5000
```
---
## 5. Interface utilisateur
### Principes
- Simple, minimaliste, sobre β€” aucun framework CSS externe
- Palette monochrome (blanc/gris) + une couleur d'accent (violet ou indigo)
- Responsive (fonctionne de 800px Γ  1400px)
- Pas de dark mode (hors scope v1)
### Layout
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ MarkitDown [historique] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Glissez un fichier ici β”‚ β”‚
β”‚ β”‚ ou cliquez pour parcourir β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Rendu] [Markdown brut] β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ (prΓ©visualisation du rΓ©sultat) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [⬇ TΓ©lΓ©charger .md] [⎘ Copier] β”‚
β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Historique nom_fichier.pdf 12/05 [↓] [⎘] β”‚
β”‚ autre_fichier.docx 11/05 [↓] [⎘] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## 6. Formats supportΓ©s
Tous les formats pris en charge par MarkItDown :
| CatΓ©gorie | Formats |
|-----------|---------|
| Documents Office | `.docx`, `.pptx`, `.xlsx` |
| PDF | `.pdf` |
| Images | `.jpg`, `.jpeg`, `.png`, `.gif`, `.webp`, `.bmp` |
| Web | `.html`, `.htm` |
| DonnΓ©es | `.csv`, `.json`, `.xml` |
| Archives | `.zip` (extrait et convertit le contenu) |
| Texte | `.txt`, `.md`, `.rst` |
| Code | tous types de fichiers texte |
| Audio | `.mp3`, `.wav` (transcription via MarkItDown si ffmpeg disponible) |
---
## 7. Gestion des erreurs
| Cas | Comportement attendu |
|-----|---------------------|
| Format non supportΓ© | Message d'erreur inline dans l'UI : "Format non supportΓ© par MarkItDown" |
| Fichier corrompu | Message d'erreur avec dΓ©tail de l'exception Python |
| Python non installΓ© | Le `.bat` affiche une fenΓͺtre CMD avec instruction d'installation |
| Port 5000 occupΓ© | Flask essaie le port 5001, puis 5002 β€” affiche le port utilisΓ© |
| Fichier trop lourd (>50 Mo) | Warning dans l'UI, conversion lancΓ©e quand mΓͺme |
---
## 8. Contraintes & non-objectifs
- ❌ Pas de déploiement cloud (100% local)
- ❌ Pas d'authentification (usage solo)
- ❌ Pas de dark mode en v1
- ❌ Pas d'installeur `.exe` (le `.bat` suffit)
- βœ… Fonctionne offline (zΓ©ro appel rΓ©seau une fois les dΓ©pendances installΓ©es)
- βœ… Python 3.9+ requis (documentΓ© dans le README)
---
## 9. Livrables
| Livrable | Description |
|----------|-------------|
| `start.bat` + `start.sh` | Launchers prΓͺts Γ  l'emploi |
| `app.py` | Backend Flask complet |
| `index.html` + `style.css` + `script.js` | Frontend complet |
| `requirements.txt` | `flask`, `markitdown` |
| `README.md` | Instructions : prΓ©requis Python, comment lancer, formats supportΓ©s |
---
## 10. Critères d'acceptation
- [ ] Double-clic sur `start.bat` β†’ navigateur s'ouvre sur l'app en moins de 15 secondes (premier lancement)
- [ ] Double-clic sur `start.bat` β†’ app lance en moins de 3 secondes (lancements suivants)
- [ ] Upload d'un PDF β†’ Markdown correct affichΓ© en moins de 10 secondes
- [ ] Bouton "TΓ©lΓ©charger" β†’ fichier `.md` tΓ©lΓ©chargΓ© avec le bon nom
- [ ] Bouton "Copier" β†’ contenu dans le clipboard
- [ ] La conversion est visible dans l'historique après chaque succès
- [ ] L'historique persiste après fermeture et réouverture de l'app