How Waveline works
A live signal, from source to screen
Waveline is a small production system, not a demo. Here's what actually runs behind every search.
Data sources
Last.fm supplies listener counts, scrobbles, tags and similar-artist relationships. Spotify supplies genres and popularity via the Client Credentials flow. Deezer supplies artist artwork, fan counts, 30-second track previews and the trending-albums strip — no API key required.
Automated Python pipeline
A single pipeline module fetches, cleans and merges the three sources for a searched artist, then hands the result to Claude for analysis before writing it to the database.
PostgreSQL storage
Searches, insights, users, posts, follows, likes, comments and notifications are stored in Postgres via raw parameterised SQL — no ORM — so every search builds a durable, queryable history.
Claude-generated insights
Anthropic's Claude reads the merged listening data and writes the plain-language artist insight, comparison verdicts and taste profiles you see on Waveline — always labelled as AI-generated.
Flask application
The product itself is a server-rendered Flask app: Jinja templates, a shared design system, and thin blueprints per feature (discovery, artist profiles, compare, news, taste, community).
Railway deployment
Waveline runs on Railway behind Gunicorn, with the same Postgres instance backing both the web app and the data pipeline.
Community system
Accounts, follows, posts, likes, comments and notifications are built on the same database and Flask-Login session model as the rest of the app — no separate service.
Interested in the project?
Waveline is built and maintained by Dimos Papageorgiou. Take a look at the code, or get in touch.