How We Test + Curate

BeatsVine isn't a review site, so this isn't about how we test headphones. It's how we resolve a song across every streaming platform, how chart data gets sourced, how discovery walls are picked, and how we keep the catalogue fresh. Honest methodology. No trade secrets.

How we resolve a song across platforms

Every BeatsVine track / album / artist page is the result of a waterfall resolver. When you paste a streaming URL — or a song title — we try sources in this priority order:

  1. MusicBrainz — canonical recording IDs + ISRCs. Highest-trust because the data is community-curated and explicitly normalised.
  2. Songlink/Odesli— cross-platform link resolution. Useful when MusicBrainz hasn't catalogued the release yet (common for very new music).
  3. Per-platform search — Spotify Web API, Apple Music, Deezer, YouTube Music search endpoints scoped by artist + title + (where available) ISRC.

ISRC matches are always preferred over title matches because ISRCs are unambiguous. A song called “Heartbeat” by an artist called “XYZ” has dozens of possible true matches; the ISRC has exactly one. When the resolver finds an ISRC, it locks the release. Where the resolver can't find a match on a given platform, the page simply omits that platform link rather than showing a broken one.

How chart walls source their data

Discovery walls fall into three categories by source:

  • Chart-sourced (auto) — Last.fm scrobbles, ListenBrainz community charts, Deezer editorial, MusicBrainz release radar, Apple/Beatport/Bandcamp public feeds. Refreshed on a per-source cadence (weekly, daily, or hourly depending on the source).
  • Editorial playlists— a curator points BeatsVine at a public playlist URL (Spotify, Deezer, YouTube Music). The wall mirrors that playlist's current state at refresh time. Provenance + curator attribution show on the wall.
  • BV-internal— computed from BeatsVine's own data: Recently Pressed (newest pages on the platform), Trending (highest view-count delta in the last 7 days), Anniversary Picks (albums hitting round-number anniversaries this week).

Historical archives (Phase 2) source from the MIT-licensed utdata/rwd-billboard-data GitHub repository. Year-end charts (Phase 3a) source from Wikipedia under CC BY-SA 4.0. Every wall stores its source identifier + URL + license metadata in walls.sourceConfig; the wall page surfaces this above the title for any wall whose source needs explicit attribution.

How walls stay fresh

Live walls refresh on a per-source schedule via cron jobs. The cadence is stored in walls.refreshSchedule— weekly walls run on Sunday 23:00 UTC, daily walls every morning, monthly walls on the 1st. The full schedule is public per-wall via the wall's JSON endpoint.

Archive walls (snapshots) are immutable by design — they're permanent dated records of what a chart looked like in a specific week. They never refresh. They never change. That's the point.

Smart-link pages (the cross-platform track / album / artist pages) lazy-re-resolve every 7 days, plus immediately if the link signature has changed (a streaming platform updates their URL pattern, etc.). Page covers are probed weekly for availability; broken covers are healed automatically by The Hive — BeatsVine's background quality-maintenance system.

How we hydrate archive entries

Archive walls — Phase 2 (Billboard weekly historic) and Phase 3a (Wikipedia year-end) — represent thousands of entries that may never get clicked. Eagerly resolving every one through Songlink would burn through API quota for nothing. Instead:

  • On first visit by a human (UA filter; bots see text-only fallback rows), the page fires a fire-and-forget POST to /api/walls/[slug]/hydrate.
  • That endpoint resolves the top-N NULL-FK entries via the same waterfall described above, mints page rows for the matches, and updates the wall_entries to point at them.
  • The endpoint is rate-limited (10 calls per IP per 15 min) and circuit-broken (5 consecutive errors → 503 for 60s).

Net effect: an archive page visited 100 times will have its most-visible covers fully resolved within a handful of visits, while archives that nobody clicks stay as text-only rows. No wasted API calls. No background fan-out.

What we don't curate

Chart positions are factual data points sourced verbatim from upstream charts. We don't insert, remove, or reorder entries based on commercial relationships. We don't hide tracks because of their content. We don't favour artists who pay us (we have no mechanism for that). The order of tracks on a chart wall reflects the source's published ranking exactly. The order of streaming platforms on a track page reflects the visitor's preference (set in their account, or defaulted by region) — never a paid placement.

Read more