Update documentation with new features and improved usability

Update several documentation files (.toml, .md) to reflect new features such as a QR code flyer page, share/PDF export buttons, and dependency updates, including version increments to v1.1.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 923ae0e3-a363-4db8-b04a-e8baca2a1330
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 88b9da52-be77-4c86-854b-f097a8c7ae86
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8af7d2ec-2cc3-4ece-8af3-9f071488d072/923ae0e3-a363-4db8-b04a-e8baca2a1330/Z3YUti7
Replit-Helium-Checkpoint-Created: true
This commit is contained in:
pironantoine
2026-04-04 10:27:58 +00:00
parent 7e9eb3c360
commit f72a64f23e
5 changed files with 188 additions and 23 deletions
+54 -5
View File
@@ -1,11 +1,20 @@
# Document d'Architecture Technique — La Voix du Peuple
**Version** : 1.0
**Version** : 1.1
**Date** : Avril 2026
**Statut** : En production (Replit), prêt pour auto-hébergement
---
## Historique des versions
| Version | Date | Modifications |
|---------|------|---------------|
| 1.0 | Avril 2026 | Version initiale |
| 1.1 | Avril 2026 | Ajout page Flyer QR, boutons Partager / PDF, `qrcode.react` |
---
## 1. Présentation générale
**La Voix du Peuple** est une plateforme civique permettant à des citoyens de soumettre des propositions politiques. Ces contributions sont :
@@ -13,6 +22,7 @@
1. Filtrées par un agent IA selon le droit international des droits humains
2. Synthétisées automatiquement en un résumé clair par thème
3. Affichées en temps réel à destination d'élus ou de décideurs
4. Exportables (PDF, partage natif) et diffusables via un flyer imprimable avec QR code
---
@@ -63,14 +73,31 @@
| Routing | Wouter |
| État serveur | TanStack Query |
| Client API | `@workspace/api-client-react` (généré depuis OpenAPI) |
| QR code | `qrcode.react` (page Flyer) |
| Police | Bahnschrift (titres), Inter (corps) |
**Pages** :
- `/` — Page principale (formulaire + fil + synthèse)
- `/about` — À propos et fondements juridiques
- `/transparence` — Fonctionnement technique et données collectées
**Variables d'environnement** :
| URL | Description |
|-----|-------------|
| `/` | Page principale : formulaire de soumission, fil des contributions, colonne de synthèse |
| `/about` | À propos et fondements juridiques |
| `/transparence` | Fonctionnement de l'IA, données collectées, limites |
| `/flyer` | Flyer imprimable avec QR code configurable pour diffusion physique |
**Fonctionnalités de la colonne de synthèse** :
- Bouton **Partager / Copier** : compose un texte horodaté (texte + nombre de contributions + date) et l'envoie via l'API Web Share (mobile) ou le presse-papier (bureau) ; un toast confirme la copie
- Bouton **PDF** : ouvre une fenêtre dédiée avec un rendu mise en page (tricolore, titre, métadonnées, texte, pied de page `lavoixdupeuple.fr`) et déclenche l'impression navigateur
**Page Flyer (`/flyer`)** :
- QR code SVG haute résolution (niveau de correction H) pointant vers l'URL de destination
- URL modifiable en temps réel via un champ texte, sans rechargement
- URL par défaut définie par la constante `DEFAULT_QR_URL` en ligne 10 de `src/pages/flyer.tsx`
- Passage d'une URL via paramètre GET : `/flyer?url=https://monsite.fr`
- Barre de contrôle masquée à l'impression (`@media print`) — seul le flyer A4 est imprimé
- Bouton "Imprimer / Exporter PDF" sur la page
**Variables d'environnement frontend** :
- `BASE_URL` — Préfixe de chemin (injecté par Vite)
- `PORT` — Port du serveur de développement (assigné par Replit)
@@ -194,6 +221,7 @@ Internet ──▶ HAProxy (TLS, load balancing)
| SQL injection | Requêtes paramétrées (psycopg2) |
| Secrets | Variables d'environnement uniquement, jamais dans le code |
| Données personnelles | Aucune IP stockée, pseudonyme facultatif |
| Export PDF | Généré côté client uniquement, aucune donnée transmise au serveur |
---
@@ -215,3 +243,24 @@ POST /api/ideas
└─ Réponse JSON 201
```
## 8. Flux d'export / partage (côté client)
```
Clic "Partager / Copier"
├─ Composition du texte horodaté (date locale, nb contributions, texte synthèse)
├─ navigator.share disponible ? → Partage natif (mobile)
└─ Sinon → navigator.clipboard.writeText → toast de confirmation
Clic "PDF"
├─ Génération HTML en mémoire (tricolore, titre, méta, texte, pied de page)
├─ window.open("", "_blank") → document.write(html)
└─ window.print() → dialogue d'impression / export PDF navigateur
Page /flyer — Clic "Imprimer / Exporter PDF"
├─ CSS @media print masque .no-print (barre de contrôle, navbar)
└─ window.print() → impression du flyer A4 seul
```