JAJerry Aneke
Back to all projects

Voicer API — Audio Dataset Platform

Modular backend platform for audio dataset collection, two-step signed uploads, and async multi-format exports.

DATA PIPELINE / AUDIO INGESTION
Deployed API
Voicer landing page headline: Build, manage, review, and scale audio datasets.
Guarantee: Application server never touches audio binary streams: uploads use 1-hour signed URLs direct to private storage.VERIFIED
Year
2026
Type
DATA PIPELINE / AUDIO INGESTION
Role
Backend Software Engineer (Team Project)
Status
Deployed API
Stack
TypeScriptNode.jsExpress.jsDrizzle ORMSupabase StoragePostgreSQLSwagger / OpenAPI
Overview

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.

Problem

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.

Solution

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.

My Contribution

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.

Technical Decisions

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.

Challenges

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.

Outcome

Deployed as a functional backend API on Render with full Swagger documentation and verified audio submission workflows. (Not yet serving real users).

What I Learned

Separating binary storage traffic from relational metadata is essential for media-heavy backends to scale predictably on lightweight compute instances.