Artist Management Platform
Bookings, royalties, and contracts in one system of record
5 months to first production release
- Tenant isolation
- Query-layer enforced
- Royalty calc
- Rules-engine driven
- Roles supported
- Admin / Agent / Artist
Overview
Music labels and artist managers were tracking bookings, royalty splits, and contracts across spreadsheets and email — a setup that produced missed payments and double-booked dates. Built a multi-tenant platform to replace it.
The Problem
Labels managed artist rosters, bookings, and royalty payments across disconnected spreadsheets and email threads, leading to booking conflicts and inconsistent, error-prone royalty calculations across different contract types.
Architecture
A Next.js frontend and NestJS API back a multi-tenant PostgreSQL database with tenant isolation enforced at the query layer, not just in application code. Royalty computation runs through a configurable rules engine so different contract structures don't require code changes. Redis handles session and caching for role-based views across label admins, agents, and artists.
Challenges and solutions
Challenges
- Guaranteeing tenant data isolation in a shared multi-tenant database
- Modeling royalty rules that vary meaningfully by contract, artist, and deal structure
- Supporting three distinct user roles with different visibility into the same underlying data
Solutions
- Enforced tenant scoping at the database query layer (not just application middleware), removing an entire class of cross-tenant data leak
- Built a rules engine for royalty computation so new contract structures are configuration, not new code
- Row-level, role-aware access patterns so admins, agents, and artists see the same data through different lenses
Performance Improvements
- Consolidated scattered spreadsheet-based tracking into a single system of record
- Reduced manual reconciliation of bookings and royalty statements
Business Impact
Replaced spreadsheet-and-email operations with a system that eliminated booking conflicts and made royalty statements auditable and consistent across contract types.
Lessons Learned
Multi-tenancy has to be enforced where the data is read, not just where the request comes in — application-layer checks alone are one bug away from a cross-tenant leak.
Stack
- Next.js
- NestJS
- PostgreSQL
- Redis
- AWS