Bell Partners · 2025 – 2026

ArtistServe

Multi-tenant music-rights management platform enabling record labels and imprints to manage rights, track analytics, and handle payouts.

DynamoDB
dual-write
PostgreSQL star schema
Node.js·Express·PostgreSQL·DynamoDB·RBAC

Problem

A multi-tenant music platform ran on AWS AppSync/GraphQL over deeply nested DynamoDB JSON documents. Analytical reporting across tenant imprints was slow and complex, and system cutover required zero downtime.

Approach

Normalized the domain into PostgreSQL star-schema tables. Built a dual-write synchronization layer to mirror mutations between DynamoDB and PostgreSQL during the incremental REST API migration.

Replaced AppSync GraphQL resolvers with modular Node.js/Express REST endpoints. Built a streaming CSV ingestion pipeline using busboy and csv-parser processing 20,000-row transactional database chunks.

Implemented a database-backed worker queue handling bulk email invitations (100 jobs/tick across 20 concurrent outbound connections). Enforced a 54-node Role-Based Access Control matrix across 18 modules, and encrypted Tipalti payment widget keys using AES-256-CBC and HMAC-SHA256.

Technical Decisions

  1. Dual-write synchronization layer for cutover

    Maintained simultaneous writes to DynamoDB and PostgreSQL during migration, enabling zero-downtime cutover with instantaneous rollback capability.

  2. Node.js stream processing for large CSV ingestion

    Streamed CSV records in 20,000-row transactional chunks instead of buffering entire files in memory, preventing Node.js process heap exhaustion.

  3. PostgreSQL-backed email queue with linear backoff

    Built an in-database queue for outbound invitation emails, avoiding additional infrastructure complexity while respecting SMTP rate limits.

  4. Keyset (cursor-based) pagination migration

    Replaced offset pagination across major data tables with cursor-based keyset pagination, maintaining query response times under high offset depths.

Key Achievements

  • Migrated legacy AWS AppSync/GraphQL backend to Node.js/Express REST API without downtime.
  • Transformed nested DynamoDB JSON data into a normalized PostgreSQL star schema via dual-write synchronization.
  • Built stream-based CSV ingestion pipeline processing 20,000-row transactional database batches under flat memory usage.
  • Implemented 54-node Role-Based Access Control (RBAC) across 18 application modules.
  • Architected database-backed worker queue processing bulk email campaigns (100 jobs/tick across 20 connections).

Outcome

The platform operates on a normalized PostgreSQL database behind an Express REST API, ingests large analytics CSV files without memory bloat, enforces tenant RBAC, and executed cutover with zero downtime.