Qui a voté quoi. Le moteur de recherche citoyen, neutre et open-data des votes de l'Assemblée nationale (17e législature).
Site en production : mandat-fr.vercel.app
| Fonctionnalité | Description |
|---|---|
| Recherche instantanée | Filtres croisés par groupe politique, département, circonscription et nom |
| Détail des scrutins | Résultat nominatif complet de chaque vote, recalculé en temps réel |
| Zéro biais | Aucun score idéologique ni classement — uniquement les faits officiels |
| RGPD | Aucun cookie publicitaire, aucun tracker intrusif |
| PWA | Installable sur mobile/tablette comme une app native |
| Archive 16e législature | Accès historique aux votes 2022–2024 |
| Cartogramme hexagonal | Visualisation géographique interactive par département |
git clone https://github.com/Simonc44/mandat.git
cd mandatpnpm installCopier le fichier d'exemple et renseigner vos clés :
cp .env.example .env| Variable | Description |
|---|---|
TURSO_DATABASE_URL |
URL de votre base Turso (libsql://...) |
TURSO_AUTH_TOKEN |
Token d'authentification Turso |
CIVIX_API_KEY |
Clé API CIVIX (optionnel en dev) |
pnpm devL'application est disponible sur http://localhost:3000.
pnpm build
pnpm start# Linter ESLint
pnpm lint
# Vérification TypeScript
pnpm typecheck
# Formatage Prettier
pnpm formatmandat/
├── src/
│ ├── routes/ # Pages (TanStack Router — file-based routing)
│ │ ├── index.tsx # Page d'accueil
│ │ ├── deputes/ # Liste & fiches des député·es
│ │ ├── scrutins/ # Liste & détail des scrutins
│ │ └── groupes/ # Groupes politiques
│ ├── components/ # Composants UI réutilisables
│ ├── lib/ # Fonctions utilitaires & API
│ └── styles/ # CSS global (Tailwind v4)
├── scripts/
│ ├── update-database-17.mjs # Synchronisation données AN → Turso
│ └── generate-sitemap.mjs # Génération du sitemap
├── public/ # Assets statiques
└── .github/
└── workflows/
└── daily-update.yml # Cron job nightly (3h UTC)
Chaque nuit à 3h00 UTC, une GitHub Action :
- Déclenche un Deploy Hook Vercel
- Lance
scripts/update-database-17.mjspendant le build - Extrait les données des API officielles (AN Open Data, CLAIR, CIVIX)
- Met à jour la base Turso
- Reconstruit le sitemap avec
scripts/generate-sitemap.mjs
1. Photo officielle 17e législature
↓ (si absente)
2. Archive 16e législature (nosdeputes.fr)
↓ (si absente)
3. Silhouette SVG neutre
↓ (dernier recours)
4. Initiales sur fond coloré dynamique
Chaque hexagone = une circonscription réelle, colorée selon le groupe politique. Exportable en PNG via html-to-image.
| Couche | Technologie |
|---|---|
| Framework | TanStack Start + React 19 |
| Routing | TanStack Router (100 % typé) |
| Data fetching | TanStack Query |
| Styling | Tailwind CSS v4 |
| Base de données | Turso / LibSQL (SQLite edge) |
| Déploiement | Vercel |
| Paiement | Stripe |
| CI/CD | GitHub Actions |
Les contributions sont les bienvenues ! Consultez le guide CONTRIBUTING.md pour démarrer.
Pour signaler une vulnérabilité, consultez SECURITY.md. Ne créez pas d'issue publique pour les failles de sécurité.
Distribué sous la licence Mandat — voir LICENCE.
Mandat est une initiative citoyenne, bénévole et indépendante. Le projet n'est affilié à aucun parti politique, aucun député, ni à l'administration officielle de l'Assemblée nationale.
