Skip to content

CTRL Audio API - Backend Analysis

NestJS Backend for CTRL Audio Music Collaboration Platform

This document analyzes the ctrl-audio-back repository, comparing the master and dev branches to understand available features and pending merges.


📊 Branch Status Summary

BranchStatusDescription
masterProductionCurrent stable version
devDevelopment56 files changed, significant new features
emran/searchFeatureMerged into dev - search functionality

Commits Ahead on dev

The dev branch is significantly ahead of master with these major features:

  • ✅ Global search functionality
  • ✅ Trash/Recycle bin with 30-day auto-delete
  • ✅ Subscription tier enforcement
  • ✅ Onboarding flow
  • ✅ Track notes field
  • ✅ Free plan limitations
  • ✅ Soft delete recovery

🏗️ Tech Stack

ComponentTechnology
FrameworkNestJS 9.x
LanguageTypeScript
DatabaseMongoDB (Mongoose)
AuthJWT + Passport
StorageAWS S3
PaymentsStripe
EmailPostmark
Scheduling@nestjs/schedule (Cron jobs)

📁 Module Structure

src/modules/
├── artistSpace/       # Artist workspace management
├── aws/               # S3 file storage
├── collaboration/     # Team invitations & permissions
├── comment/           # Track comments/markers
├── db/                # Database connection
├── email/             # Email notifications (Postmark)
├── file/              # File management
├── jwt/               # JWT authentication
├── link/              # Shareable links
├── notification/      # In-app notifications
├── project/           # Project/album management
├── search/            # 🆕 Global search (dev only)
├── subscription/      # Stripe subscriptions & plans
├── track/             # Core track management
├── trashSpace/        # 🆕 Trash/recycle bin (dev only)
└── user/              # User management

🆕 New Features on dev Branch

1. Search Module

Location: src/modules/search/

Global search across all resources:

typescript
// Searches across:
// - Artist Spaces (by name)
// - Projects (by name)
// - Tracks (by name)

async search(userId: string, query: string) {
  const artistSpaces = await this.artistService.findByQuery(userId, query);
  const projects = await this.projectService.findByQuery(userId, query);
  const tracks = await this.trackService.findByQuery(userId, query);
  // Returns unified SearchItem[] array
}

2. Trash Space Module

Location: src/modules/trashSpace/

Soft delete with 30-day recovery:

typescript
// Features:
// - Soft delete for all resources
// - List all trashed items
// - Restore items
// - Auto-delete after 30 days (Cron job)

@Cron(cronScheduleTime)
async deleteOldItems() {
  // Permanently deletes items older than 30 days
}

3. Subscription Tiers & Limits

Location: src/modules/subscription/models/subscription.data.ts

PlanStorageSeatsTracksVersions/Track
Free50 GB1152
Explorer200 GB3--
Pro1 TB4UnlimitedUnlimited
Diamond4 TBUnlimited--

4. Track Enhancements

New fields added to Track schema:

typescript
// New fields on dev:
notes?: string;              // Track notes
label?: string;              // Record label
genre?: string;              // Music genre
releaseDate?: Date;          // Release date
releaseStatus?: ReleaseStatus;  // Publishing status
ISRC?: string;               // International Standard Recording Code
isFinalName: boolean;        // Name finalized
finalNameUpdatedAt: Date;    // When name was finalized

Release status types:

typescript
enum TrackReleaseStatus {
  NOT_APPROVED = 'Not approved',
  UNDER_REVIEW = 'Under review', 
  NO_STATUS = 'No status',
}

5. User Enhancements

New user fields:

typescript
// New fields on dev:
recentAccess: string[];      // Recently accessed resources
recentSearches: string[];    // Search history
subscription: SubscriptionPlanTemplate;  // User's plan

6. Onboarding Flow

New endpoints for user onboarding:

  • GET /track/onboarding - Get onboarding track
  • POST /track/onboarding - Create first track during onboarding

7. Enhanced Collaboration Roles

typescript
enum Role {
  Owner = 'owner',
  Admin = 'admin',
  Editor = 'editor',
  Viewer = 'viewer',
}

🔌 API Endpoints Summary

Existing Endpoints (master)

ModuleMethodEndpointDescription
UserPOST/user/registerRegister user
UserPOST/user/loginLogin
UserPOST/user/auth/googleGoogle OAuth
ArtistSpaceGET/artist-spaceList spaces
ArtistSpacePOST/artist-spaceCreate space
ProjectGET/projectList projects
ProjectGET/project/space/:idProjects by space
TrackGET/trackUser's tracks
TrackGET/track/project/:idTracks by project
TrackPOST/trackUpload track
CollaborationPOST/collaboration/invite/*Send invitations

New Endpoints (dev only)

ModuleMethodEndpointDescription
SearchGET/search?query=Global search
TrackGET/track/all-tracksAll tracks by user
TrackGET/track/countCount tracks
TrackGET/track/onboardingOnboarding track
TrackPOST/track/onboardingCreate onboarding track
TrashGET/trashList trashed items
TrashPOST/trash/restore/:idRestore item
TrashDELETE/trash/:idPermanent delete

🔐 Environment Variables

bash
# Database
MONGODB_URI=mongodb://...

# Auth
JWT_SECRET=
ORIGIN=http://localhost:3000

# Google OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=

# Email (Postmark)
POSTMARK_TOKEN=
SPACE_INVITATION_TEMPLATE_ID=
PROJECT_INVITATION_TEMPLATE_ID=
TRACK_INVITATION_TEMPLATE_ID=
SENDER_EMAIL=
RESET_TEMPLATE_ID=
WELCOME_TEMPLATE_ID=

# AWS S3
AWS_REGION=
BUCKET_NAME=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=

# Stripe
STRIPE_API_KEY=
STRIPE_WEBHOOK_SECRET=
PRO_MONTHLY_PRICE_ID=    # New on dev
PRO_YEARLY_PRICE_ID=     # New on dev

📋 Merge Recommendation

Priority: HIGH - Merge devmaster

Reason: The dev branch contains production-ready features that significantly enhance the platform:

  1. Search - Critical UX improvement for finding content
  2. Trash Recovery - Safety net for accidental deletions
  3. Subscription Limits - Necessary for monetization
  4. Onboarding - Better new user experience

Pre-merge Checklist

  • [ ] Review all 56 changed files
  • [ ] Test subscription tier limits
  • [ ] Verify Stripe webhook handling
  • [ ] Test soft delete → restore flow
  • [ ] Verify search indexes on MongoDB
  • [ ] Update client to support new endpoints
  • [ ] Update environment variables in production
  • [ ] Database migration for new schema fields

Last Updated: January 2026

Ctrl-Audio Platform Documentation