PulseRoots is an interactive visualization of the evolution of electronic music. It presents the complex web of genres and subgenres as a hierarchical tree, allowing users to explore the history, characteristics, and sounds of electronic music through an intuitive interface.
Live Demo: https://mendiak.github.io/pulse.roots/
- Interactive Visualization: Choose between Tree and Radial layouts powered by D3.js.
- Deep Historical Context: Detailed descriptions and Wikipedia links for hundreds of genres.
- Curated Listening: Sample tracks via integrated Spotify embeds for every style.
- Search & Discover: Find specific genres or use the "Shuffle" feature for random discovery.
- Responsive Design: Fully optimized for both desktop (interactive map) and mobile (accordion navigation).
- SEO Optimized: Dynamic sitemap generation and JSON-LD structured data.
- Frontend: HTML5, CSS3, JavaScript (ES6+), D3.js (v6), Bootstrap Icons.
- Analytics & SEO: Google Tag Manager, Schema.org (JSON-LD), Node.js (for sitemap).
- Data & Tools: Python (for data enrichment), Spotify Web API.
-
Clone the repository:
git clone https://github.com/Mendiak/pulse.roots.git cd pulse.roots -
Run Locally: Simply open
index.htmlin a modern web browser, or use a local server likeLive Serverin VS Code for the best experience.
The project's heart is pulseroots.genres.json. It follows a recursive tree structure:
{
"style": "Genre Name",
"description": "Historical and sonic description...",
"example": "Artist - Track Name",
"spotify_track_id": "Spotify_ID",
"wikipedia_url": "https://en.wikipedia.org/...",
"key_artists": [
{ "name": "Artist Name", "url": "Spotify_Artist_URL" }
],
"substyles": [
/* Recursive substyle objects */
]
}Located in the root, these scripts help maintain the pulseroots.genres.json file.
populate_artists.py: Automatically fetches Spotify URLs for artists using the Spotify API.audit_artists.py: Checks for missing URLs or data inconsistencies in the JSON.
Setup:
- Copy
.env.exampleto.envand add your Spotify API credentials. - Install dependencies:
pip install python-dotenv requests. - Run:
python populate_artists.py.
generate-sitemap.js: Generates asitemap.xmlbased on the genre hierarchy to improve search engine indexing.- Usage:
node generate-sitemap.js
index.html: Main entry point and layout.script.js: Core logic for D3.js visualization, search, and interactions.styles.css: Custom styling and responsive design.pulseroots.genres.json: The database of genres.assets/: Images, icons, and branding assets.generate-sitemap.js: Sitemap generator (Node.js).populate_artists.py/audit_artists.py: Data maintenance scripts (Python).sitemap.xml/robots.txt: SEO files.thanks.html: Redirection page for the contact form.
Contributions are welcome! Whether it's correcting a genre description, adding new substyles, or improving the visualization logic:
- Fork the repo.
- Create your feature branch.
- Submit a Pull Request.
This project is open source and available under the MIT License.
PulseRoots - Explore the roots, discover the sound.