Interactive 3D music & community platform
Founder · Product & Full-Stack Engineering
Interactive Three.js 3D listening room, FFmpeg/S3 streaming, and audience telemetry.
Founder & sole full-stack engineer across Next.js/Three.js frontend, Fastify/PostgreSQL APIs, FFmpeg/S3 media pipeline, and Playwright E2E release gates.
Live at abeinternet.com serving streaming catalog playback, an interactive 3D room, member sign-in, and first-party listener analytics.
Engineering & product case study
Problem & workflow context
Artist and creator sites typically split listening, community accounts, and interactive visuals across third-party embeds that break continuous audio playback and hide listener engagement data.
Decision & rejected alternative
Paired a persistent Web Audio / S3 streaming player with lazy-loaded Three.js scene chunks and passwordless email sign-in on Fastify/PostgreSQL, rejecting iframe streaming widgets that interrupted playback across route changes and blocked mobile autoplay recovery.
Failure encountered & diagnosis
Mobile browsers throttled frame rates and dropped audio buffers when high-DPI Three.js post-processing ran simultaneously with track transitions. Diagnosed via frame-timing + audio-underrun telemetry and fixed with adaptive DPR scaling, decoupled audio session state, and visibility-aware render pausing.
Verification, role & current status
Verified via automated Playwright E2E suites covering continuous audio across navigation, passwordless sign-in flows, mobile viewport bounds, and post-deploy smoke checks.
Architecture & reproducible evidence
- Continuous audio session persists across catalog browsing, account flows, and 3D room transitions.
- FFmpeg transcoding + S3 delivery pipeline strips private metadata and normalizes streaming assets.
- Adaptive WebGL frame budgeting keeps foreground typography sharp and responsive on mobile.
Technology stack
See all 9 roles, Penn M.A.S. status, U.S. citizenship/relocation logistics, and printable résumé on one page.
Open Recruiter View & Public Résumé →