Mélange
Mélange is a talent pool connecting musical, digital and visual artists across continents and skill sets. I built the backend and the real-time layer, and owned deployment. The product's value is entirely in who can find and reach whom, which makes discovery and messaging the system rather than features on top of it.
- Year
- 2024
- Role
- Backend, API integration, deployment
- Context
- Client product
- Category
- Product

The network homepage.
A network spanning continents and disciplines has no useful default ordering. A producer in one timezone needs to find a vocalist in another, start a conversation, and have it survive both of them being offline. Messaging that only works while two people are simultaneously connected is not messaging.
Express.js services back artist profiles, discovery and conversations, with MongoDB holding the profile documents whose shape differs by discipline. Socket.IO carries live messaging and notifications, with messages persisted first so delivery is a read against durable state rather than a hope that a socket was open. Agenda handles the email queue for digests and off-platform notifications, and RTK Query keeps the Next.js client's repeated profile views cheap.
How the pieces fit.
API
Express.js services for artist profiles, discovery and conversations.
Data
MongoDB - profile documents vary by discipline, which suits a document model.
Realtime
Socket.IO for messaging and notifications, persisted before delivery.
Queue
Agenda for the email notification pipeline.
Client data
RTK Query for cached profile and listing fetches.
Edge
Nginx reverse proxy on DigitalOcean.
Deployment
- Hosted on DigitalOcean
- Domain registered with Namecheap and connected via DNS
- Nginx as reverse proxy, TMUX for session management
- Artist profiles across musical, digital and visual disciplines
- Real-time messaging and notifications over Socket.IO
- Agenda-backed email queue for off-platform notifications
- Cache-aware client data fetching with RTK Query
The parts that were not obvious at the start.
- 01
Messaging across timezones
Persisting the message before emitting it turns delivery into a query against durable state. A user who was offline when a message was sent reads it on reconnect, from the same source of truth the live listener used.
- 02
One schema, many disciplines
A vocalist, a 3D artist and a photographer do not share a profile shape. A document model let each discipline carry its own fields without a migration for every new category.
- Live at melangerecords.online
- Artists across disciplines and continents discoverable in one network
- Persist, then emit. A socket is a transport, never a store.
- Model the variation your domain actually has rather than flattening it into a schema that fits none of it.