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:
+54
-5
@@ -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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user