Platform · Community + marketplace · 2026
VHQ: a social platform and marketplace for vinyl collectors
Scan a barcode, import from Discogs or MusicBrainz, show your collection, sell what you don't play. One API behind the feed, the marketplace and the subscriptions.
- Client
- Confidential (music platform)
- Industry
- Music and collectibles
- My role
- Backend engineer
- Year
- 2026
Overview
The API for a vinyl-record community: an album catalog that imports from Discogs and MusicBrainz or a barcode scan, a social feed with posts, likes, comments and follows, personal collections with tier limits, wishlists, a marketplace with listings, saves and sold states, direct messaging, merch and a stores directory, and Stripe subscriptions that unlock the higher tiers.
The problem
Three products that usually live apart (a catalog, a social network and a marketplace) had to share one identity, one set of permissions and one subscription state, without the feed slowing down when the catalog grew or a listing appearing under the wrong account.
What I built
- Album catalog with external import: search Discogs and MusicBrainz, import a release, or look a record up by barcode from the scanner.
- Feed with algorithmic and chronological modes, posts with up to four images, comments and replies, reports, and a follow graph.
- Collections with tier enforcement, wishlists, and a marketplace with listings (up to eight images), featured items, saved items and mark-as-sold.
- Messaging over Socket.IO with an HTTP fallback, unread counts and read receipts; merch and a curated stores directory for admins.
- Stripe subscriptions and a web-subscription flow with webhooks; admin endpoints for moderation, upgrades and deactivation.
Outcome
3
Products on one API: catalog, community, marketplace
2
External catalogs: Discogs, MusicBrainz
Stripe
Subscription tiers with webhooks
Engineering decisions
- One permission model across catalog, social and marketplace
- External catalog import behind a local canonical album
- Tier limits enforced in the service layer, not the UI