Voicer API — Audio Dataset Platform
Modular backend platform for audio dataset collection, two-step signed uploads, and async multi-format exports.

A modular backend built to coordinate crowd-sourced audio dataset collection across multiple languages, featuring direct-to-storage signed uploads, multi-role review workflows, and asynchronous dataset export pipelines.
Streaming high-volume audio uploads through a Node.js application server consumes significant RAM, ties up event loop threads during file ingestion, and creates bottlenecks during peak community collection campaigns.
Architected a two-step submission workflow: the client requests an upload authorization ticket; the API generates a time-limited signed URL directly to private Supabase Storage. Upon direct upload confirmation, the client notifies the API to register metadata and queue the audio for multi-role review.
Architected and implemented the backend API across 10 modular domains (auth, organizations, projects, members, languages, tasks, submissions, reviews, notifications, exports). Designed the two-step direct-to-storage audio submission pipeline with 1-hour time-limited signed URLs. Built asynchronous dataset export pipelines supporting CSV, JSON, and ZIP bundle generation with 10-minute download signatures. Implemented role-based permissions across Admin, Contributor, and Reviewer roles.
Employed direct client-to-storage uploads via signed URLs to completely offload binary file handling from Node.js event loop memory, preserving server compute for metadata, validation, and permissions. Delegated dataset compilation (CSV, JSON, ZIP) to asynchronous workers to prevent blocking HTTP request handlers on long-running file compressions.
Preventing unlinked orphaned audio blobs from abandoned upload sessions and handling concurrent review race conditions to guarantee a submission cannot be reviewed simultaneously by multiple analysts.
Deployed as a functional backend API on Render with full Swagger documentation and verified audio submission workflows. (Not yet serving real users).
Separating binary storage traffic from relational metadata is essential for media-heavy backends to scale predictably on lightweight compute instances.