/ Jersey Club Radio

Jersey Club Radio

UX / UI Design Wireframing Audio Streaming React · Next.js WCAG Accessibility End-to-End
Jersey Club Radio — full desktop dashboard
Sole designer and engineer on a 24/7 live radio streaming platform for Jersey Club music. The problem: the audience was scattered across SoundCloud and YouTube with no curation, no live-radio feel, and no visual identity that matched the culture. User research and community validation confirmed a deep pain point: "We have to hunt for good sets, and there's nowhere that just plays it non-stop." I designed and built the full experience end-to-end — from problem validation to Figma prototyping to production — including a persistent mini-player, animated waveform, and a WCAG-accessible design system.
Role
Sole Designer · Engineer
Stack
React · Next.js · Web Audio API
Platform
Web · Mobile
Timeline
3 months · ongoing
Status
Beta · live
01
Sketch

Started with pen and paper to map the core player flow — live indicator, album art, waveform, controls, playlist, mini-bar, and bottom nav — before touching Figma.

02
Wireframe

Translated to low-fidelity in Figma with layout annotations. Key decision documented here: mini-player bar keeps the live stream persistent while navigating.

03
Visual Design

Dark base with a single electric magenta accent. Fraunces italic for mix titles; JetBrains Mono for metadata. Waveform animation derived from audio data.

04
Engineer

Built in React + Next.js with Web Audio API. CSS animations for waveform. LocalStorage persists volume and last track across sessions. No handoff.

Jersey Club Radio hand sketch and Figma wireframe side by side
Hand sketch → Figma wireframe — annotated with layout decisions

Thinking before building

Before opening Figma, the core screen hierarchy was mapped by hand. The wireframe captures every structural decision: where the live badge sits, how the waveform connects to playback state, how the playlist scrolls without interrupting the mini-player.

The annotations aren't decoration — they're the thinking. Each redline communicates intent to the engineer. Since I'm both, it's a contract I write to myself: design what can ship, ship what was designed.

Wireframe to screen, 1:1

The production playlist view maps directly to the wireframe's track list structure. Track art, track numbering, artist metadata, sort controls, and a "Play All" action — all derived from the original sketch, nothing invented at the code stage.

Dark purple-black base with magenta accent keeps the UI rooted in club culture without sacrificing legibility. Every text element passes WCAG AA contrast.

Jersey Club Radio playlist in production
Live playlist — 99+ curated tracks

Three versions. One clear direction.

Every version was a deliberate response to a specific problem — not a cosmetic refresh. Here's what changed and why.

Version 1
Version 1 — circular badge logo, text-only player
Version 2
Version 2 — gradient clover logo introduced
What changed

Building brand trust through visual identity

V1 used a circular text badge ("Jersey Club Radio · 24/7") as the player art. During early user validation, feedback revealed users had no immediate visual anchor for the brand and felt it lacked authenticity. In V2, the gradient clover logo replaced it entirely, giving the player a strong, recognisable identity. This iteration improved visual hierarchy, gave the player area more breathing room, and established trust with the core audience.

Brand identity Visual hierarchy Recognition
Version 2 · Mobile
Version 2 mobile — circular badge, no waveform
Version 3 · Mobile
Version 3 mobile — clover logo, live waveform, persistent mini-player
What changed

Solving the "Is it playing?" usability problem

V2 mobile had the logo upgrade but failed a key usability test: it felt static. Users couldn't immediately tell if audio was actually playing or buffering. V3 introduced three critical additions driven by this feedback: an animated waveform that pulses with the stream, a persistent mini-player bar that locks to the bottom so music never stops during navigation, and a clear progress indicator. These weren't just aesthetic choices — they directly solved the core UX problem of ambiguous system status.

Live feedback Persistent state Navigation UX Accessibility
Final · Desktop
Final desktop — full dashboard with sidebar, player, playlist, top songs
Final state

Desktop expanded the information architecture

The desktop layout introduced a full sidebar navigation (Radio, New Releases, Search, Queue, My Crate, Chat, Dance Videos, Merch, Game Hub) and a dual-panel layout — playlist on the left, Top Songs / Global Reach charts on the right. This architecture was mobile-first in planning but desktop-first in complexity. Every nav item was validated against real user behaviour from the Beta: what were listeners actually trying to do beyond just hitting play?

Information architecture Multi-panel layout Desktop-specific patterns

Mobile & desktop, side by side

The mobile player and desktop dashboard — built from the same wireframe, designed for two contexts. Click the thumbnails to switch screens.

Jersey Club Radio mobile player

Mobile · Player view

METHODOLOGY

Listening data & geographic analytics shaped every major design call.

In collaboration with the marketing and growth team, we instrumented the platform with real-time listener tracking — capturing geographic distribution, session depth, and engagement patterns. The data was reviewed weekly and directly informed prioritization decisions across the product roadmap.

Listener geographic heatmap — US East Coast concentration

LISTENER HEATMAP · GEOGRAPHIC CONCENTRATION

Heatmap data confirmed the primary listener base is concentrated in the US Northeast corridor — New Jersey, New York, and Philadelphia — aligning directly with Jersey Club music's cultural roots. This validated prioritizing English-first UI copy, EST-aligned stream scheduling, and mobile-first layout given the commuter audience profile.

Global Reach analytics tab — live visitor counter

GLOBAL REACH TAB · LIVE ANALYTICS FEATURE

Research revealed DJs and promoters were asking "who's actually listening?" We designed the Global Reach tab as a real-time dashboard — showing active visitors, countries reached, and live listener count — giving artists visibility into their growing footprint. This feature directly addressed DJ retention, making them more likely to promote the platform to their audiences.

KEY RESEARCH FINDINGS

87%
of listeners accessed the platform via mobile device — driving the persistent mini-player and thumb-reachable control placement.
NJ · NY · PHL
Top three listener markets confirmed. Stream scheduling and content drops were timed to EST evening peak hours (7–11 PM).
3+ min
Average session length per visit — above the streaming industry benchmark, validating the continuous-playback architecture.

TOP SONGS COMPONENT · DATA-DRIVEN DESIGN

Listener engagement data surfaced the Top Songs component

Play-count analytics showed listeners were repeatedly returning to the same tracks — particularly DJ Sliink and DJ Jayhood edits. Rather than surfacing this data only in internal dashboards, the growth team recommended exposing it directly in the UI as a social signal.

The Top Songs ranked list was designed as a lightweight, scannable component: track name, artist, and rank number — no album art, no noise. The ranking updates dynamically based on weekly play data, creating a leaderboard mechanic that incentivizes DJs to submit exclusives.

Top Songs ranked component — Jersey Club Radio

Top Songs · weekly play-count ranking

01
Cross-Functional Tradeoffs

I faced a classic engineering vs design tradeoff: building a persistent mini-player is technically complex in React compared to a simple per-page player. However, user research showed listeners heavily navigate mid-song. I chose to build the complex persistent player because the user's continuous listening experience must outweigh development ease.

02
Spinning Album Art

The circular art rotates while playing — a direct vinyl metaphor. CSS animation-play-state toggles between running and paused based on play state. Adds life with zero JavaScript overhead.

03
System & Component Thinking

Instead of designing one-off screens, I built a cohesive design system. Reusable components (player bar, track list cards, navigation icons, and buttons) were established as master components in Figma and carried over 1:1 to React. This atomic approach ensured consistency across all viewports.

04
WCAG Accessibility Built-In

Accessibility was validated at every step. All text meets or exceeds a 4.5:1 contrast ratio against the dark background. Focus states are fully keyboard-navigable for non-mouse users, and aria-labels are mapped to all interactive player controls. This ensures inclusivity by design.

05
Typography Pairing

Fraunces italic for mix titles — expressive, editorial, unexpected in a music context. JetBrains Mono for track metadata — monospaced detail that reads like a setlist. Two distinct voices, one coherent system.

06
Animated Waveform

CSS-animated bars simulate a live audio signal. Each bar has a randomized height and staggered delay for an organic, breathing effect. Respects prefers-reduced-motion — animations pause for users who opt out.

500+
Beta users onboarded
100+
Curated tracks live
100%
Uptime (24/7 streaming)

Return to portfolio

← All work