rds
Back to Design System

Principles

The guiding philosophy behind the Reba Design System

Design Philosophy
Best Practices
Guidelines

Introduction

The Reba Design System (RDS) is more than a component library. It's a comprehensive framework for building cohesive, accessible, and performant interfaces across the music industry ecosystem.

These principles guide every decision we make—from the smallest utility function to the largest composite pattern. They ensure that RDS remains consistent, maintainable, and genuinely useful for the teams who build with it.

Whether you're building label management tools, artist portals, or distribution platforms, these principles help you create experiences that feel like a natural extension of the music business workflow.

Core Principles

01

Atomic First

Build from the smallest units up. Every component starts as a primitive and can be composed into larger patterns.

We follow atomic design methodology: atoms (primitives like buttons, inputs) compose into molecules (form fields, cards), which form organisms (forms, navigation), and ultimately templates and pages.

This approach ensures maximum reusability while maintaining flexibility. A button is just a button—but it can be styled, sized, and composed in countless ways without creating new abstractions.

02

Music-Business Native

Purpose-built for the music industry. Components understand catalogs, releases, tracks, royalties, and rights.

Generic design systems force you to adapt business logic to UI patterns. RDS does the opposite—our components are built with music industry concepts baked in.

Track listings, release metadata, artist profiles, royalty splits, and territorial rights aren't afterthoughts. They're first-class citizens with dedicated components and patterns.

03

Shared Reality Across Roles

One design language for labels, artists, managers, distributors, and engineers.

The music industry involves diverse stakeholders with different needs but overlapping data. RDS provides a unified visual language that scales across these roles.

A release card looks and behaves consistently whether it's viewed by a label admin, an artist checking their catalog, or a distributor managing deliveries. Context changes, but the experience remains familiar.

04

Opinionated but Flexible

Strong defaults that work out of the box, with escape hatches for custom needs.

Every component ships with sensible defaults based on real-world usage patterns. You shouldn't need to configure 20 props to get a functional result.

But when your use case demands customization, the escape hatches are there. CSS variables, composition patterns, and prop overrides let you adapt without fighting the system.

05

Media-Centric at the Core

Audio, video, and MIDI are first-class citizens. Media playback is unified and consistent.

Music applications live and breathe media. RDS treats audio, video, and MIDI as core primitives, not bolted-on features. The MediaCore architecture provides unified state management across all media types.

Timeline comments, waveform visualization, playback controls, and casting support share the same foundation. Whether it's a preview player or a full editing suite, the patterns are consistent.

06

Modular & Composable Patterns

Mix and match components like LEGO blocks. Patterns emerge from composition, not inheritance.

RDS favors composition over configuration. Instead of one mega-component with 50 props, we provide smaller pieces that snap together predictably.

A page layout isn't a single component—it's PageTemplate + PageHeader + PageContent composed together. Need something different? Swap out the pieces you need without rewriting everything.

07

Accessible by Default

WCAG 2.1 AA compliance out of the box. Accessibility isn't an afterthought.

Every component is built with accessibility in mind from day one. Keyboard navigation, screen reader support, focus management, and color contrast are baked into the foundation.

We use Radix UI primitives as our base, which handles the hard parts of accessible component development. You get proper ARIA attributes, focus trapping, and keyboard interactions without extra effort.

08

Performance-Driven UX

Fast by default. No unnecessary re-renders, lazy loading where it matters.

Performance is a feature. RDS components are optimized for minimal re-renders, efficient DOM updates, and intelligent code splitting. Heavy components like media players load on demand.

We leverage React Server Components where possible, minimize client-side JavaScript, and provide loading states that make perceived performance feel instant even when the network isn't.

09

Predictable Behavior

Components behave the same way every time. No surprises, no magic.

When you use an RDS component, you should be able to predict exactly how it will behave. Same inputs, same outputs. No hidden state, no unexpected side effects.

This predictability extends to styling (Tailwind classes work as expected), event handling (callbacks fire when you expect), and state management (controlled components stay controlled).

10

Documented for Humans

Clear, practical documentation with real examples. Not just API references.

Documentation isn't complete until a developer can copy-paste an example and have it work. Every component includes live examples, prop tables, and guidance on common patterns.

We explain the "why" alongside the "how." Understanding the reasoning behind design decisions helps you make better choices when extending or customizing components.

Applying These Principles

When building with RDS, use these principles as a decision-making framework:

  • Adding a new component? Start with the smallest useful primitive (Atomic First).
  • Designing a feature? Consider how it maps to music industry concepts (Music-Business Native).
  • Building for multiple user types? Ensure the UI language stays consistent (Shared Reality).
  • Choosing between options? Prefer the approach with better defaults (Opinionated but Flexible).
  • Working with media? Use MediaCore for state management (Media-Centric).
  • Creating complex layouts? Compose smaller pieces (Modular & Composable).
  • Testing interactions? Verify keyboard and screen reader support (Accessible by Default).
  • Shipping new code? Profile for unnecessary re-renders (Performance-Driven).
  • Reviewing PRs? Check for surprising behaviors (Predictable Behavior).
  • Finishing a feature? Write documentation with examples (Documented for Humans).