- Inscrit
- 2026-10-01
- Premier commit
- 2026-10-01
on-record
App · vie publique · en ligne
Ce que font vraiment les députés, pièces à l’appui, pas ce qu’ils disent.
Comment votent vraiment les députés, scrutin par scrutin. Chaque vote public de l’Assemblée nationale, expliqué en clair pour qui n’a jamais suivi une séance, chaque chiffre ramené au compte rendu officiel.
- TypeScript
- React
- Zod
- GitHub Actions
- Cloudflare Pages
- Vitest
- Inscrit
- 2026-10-01En ligne
- Premier commit
- 2026-10-01Project docs and build plan
- Commits
- 28sur main, lus le 2026-10-02
- Couverture
- 28 %lignes exécutées par les tests de l’ingestion, du site et du protocole, lues le 2026-10-02
- Paquets maison
- 11 sur 11installés depuis npm
Ce qui est livré
- Chaque scrutin public de chaque député, avec le groupe où il siégeait le jour du vote. Ni classement ni note : chaque chiffre renvoie aux votes qu’il compte, et chaque page cite sa source officielle.
- Ni serveur ni base de données : chaque nuit, un job GitHub Actions demande à l’open data de l’Assemblée si quelque chose a changé, ne reconstruit que ce qui a bougé et déploie. Une nuit sans nouveau vote ne télécharge rien et ne déploie rien.
- L’hébergeur publie 20 000 fichiers par déploiement, et il y a plus de 8 000 scrutins : ils partent en blocs, un fichier par député, de petits index pour les listes et la recherche, et le build vérifie toute sa sortie contre un budget.
- Environ 750 pages prérendues par les loaders mêmes que le navigateur exécute, un faux fetch leur servant les données pendant le build, chacune avec ses propres balises head et sa place dans le sitemap.
- Trouver son député depuis sa commune ou son adresse, en français, en clair comme en sombre.
Comment ça marche
pas de serveur, un job de nuit demande ce qui a changé
Tel que le compilateur le lit
Mis en page comme dans un éditeur : une ligne ondulée est un build qui refuse, une ligne violette est ce que le compilateur déduit tout seul.
export const isNewerVersion = ({ cached, downloaded }: { cached: SourceValidators | null downloaded: SourceValidators }): boolean => { if (cached?.lastModified == null || downloaded.lastModified === null) { return true } return ( Date.parse(downloaded.lastModified) > Date.parse(cached.lastModified) ) }
Historique
Tiré du git log, abrégé, et laissé dans sa langue : 7 commits sur 28, du plus récent au plus ancien.
- Link scrutins to their legislative file from the files dataset
- Show who votes with whom on the compare page
- Find my deputy from a commune or an address
- Prerender pages with their head, sitemap and share card
- Nightly refresh and deploy workflow
- Ingest Assembly votes into datasets
- Project docs and build planPremier commit
Installe
11 des 11 paquets maison, depuis npm, jusqu’aux réglages du compilateur et du linter.
- @adrienlcp/react-routerLe fournisseur de routeur que prend chaque app.0.1.1
- @adrienlcp/i18nTraduit, et sait dès la compilation ce que chaque message attend.0.3.0
- @adrienlcp/theme-preferenceGarde le thème choisi sans flash, jusqu’à la barre du téléphone.0.3.0
- @adrienlcp/browserCopie dans le presse-papiers même en HTTP simple, où l’API Clipboard n’existe pas.0.1.1
- @adrienlcp/reactLes utilitaires de contexte dont part chaque app React.0.3.0
- @adrienlcp/react-ariaL’anneau de focus et la composition de classes sur react-aria-components.0.1.0
- @adrienlcp/stylesLe reset et les styles partagés dont part chaque projet.0.5.0
- @adrienlcp/resultDit si quelque chose a marché, sans exception et sans null.0.1.0
- @adrienlcp/safe-storageÔte les exceptions de localStorage et renvoie un Result à la place.0.1.0
- @adrienlcp/tsconfigLes réglages du compilateur qu’étend chaque projet.0.1.0
- @adrienlcp/biome-configLes réglages du linter et du formateur qu’étend chaque projet.0.1.0