Animated visualization of French media trends on Bluesky in 2025.
Live demo: 2025.revue-de-presse.org
This project provides an interactive "bar chart race" visualization showing the most shared French press articles on Bluesky throughout 2025. Topics are extracted dynamically using NLP (BERTopic) and engagement is calculated from likes and reposts.
- Animated bar chart race of media themes with daily/cumulative modes
- Semainier: weekly navigation grouped by meteorological seasons
- Word cloud popups for theme exploration
- Sentiment filtering by week
- Accessibility: colorblind patterns, keyboard navigation, ARIA attributes
- Dark mode: auto-detection + manual toggle
- PWA: Progressive Web App with offline support
- Custom D3.js bundle: 52KB minified
# Clone the repository
git clone https://github.com/revue-de-presse/revue-de-presse.github.io.git
cd revue-de-presse.github.io/visualization
# Install dependencies
npm install
# Build the visualization
make build
# Start local server
make serve
# Open http://localhost:8090- Node.js v18.x LTS or higher (recommended: v20.x LTS)
- npm v9.x or higher
| Command | Description |
|---|---|
make build |
Build visualization (index.html, data files, service worker) |
make serve |
Start local development server on port 8090 |
make clean |
Remove generated files |
make build-full |
Full build with URL cache cleanup and unfurling |
visualization/
├── build-static.js # Main build script
├── build-d3-bundle.js # Custom D3 bundle generator
├── course-des-themes.html # HTML template
├── d3.custom.min.js # Minified D3 bundle (52KB)
├── index.html # Generated output
├── data-*.json # Monthly data chunks (lazy loading)
├── sentiment.json # Sentiment analysis data
├── topics.json # NLP topic classifications
├── sw.js # Service worker (generated)
├── fonts/ # Self-hosted web fonts
└── Makefile # Build automation
- Articles: ~3000 articles from 22 French media accounts on Bluesky
- Period: March - December 2025
- Engagement formula:
likes + (reposts × 2) - Topic extraction: BERTopic with French sentence transformers
- Sentiment analysis: French lexicon (~27,000 words with NRC)
See CONTRIBUTING.md for guidelines on how to contribute.
This project adheres to the Contributor Covenant Code of Conduct.
This project is licensed under the GNU General Public License v3.0 - see the COPYING file for details.
- You can use, modify, and distribute this software
- Derivative works must also be licensed under GPL-3.0
- Source code must be made available when distributing
| Library | License | Description |
|---|---|---|
| D3.js v7 | ISC | Data visualization |
| esbuild | MIT | JavaScript bundler |
| terser | BSD-2-Clause | JavaScript minifier |
| clean-css | MIT | CSS optimizer |
| Library | License | Description |
|---|---|---|
| BERTopic | MIT | Topic modeling |
| sentence-transformers | Apache 2.0 | Sentence embeddings |
| UMAP | BSD-3 | Dimensionality reduction |
| HDBSCAN | BSD-3 | Clustering |
| scikit-learn | BSD-3 | Machine learning |
| Font | License | Source |
|---|---|---|
| Source Serif 4 | OFL 1.1 | Google Fonts |
| Roboto | Apache 2.0 | Google Fonts |
| Standard | Description |
|---|---|
| Bluesky AT Protocol | Decentralized social protocol |
| Contributor Covenant v2.0 | Code of Conduct |
| Conventional Commits | Commit message format |
| Semantic Versioning | Version numbering |
- Website: revue-de-presse.org
- Security issues: contact+security@revue-de-presse.org