Skip to main content

One model, multiple booths

The active large-club deployment decision is one dedicated mixer container plus four CDJ containers, initially two CDJs per DJ. That runtime lives in aidj-club-emulator; the following platform diagram describes the broader actor/adapter contract, whose integration with the new distributed runtime remains pending.

Human / AI / Scripted / Replay actors
|
command envelope
v
booth-engine + dj-domain
validation / ownership / scheduling
|
+---------+----------+
| |
Virtual booth Physical adapter
decks + DSP MIDI / PRO DJ LINK
| |
+------ events ------+
|
state / sessions / metrics
|
booth-api (HTTP + WS)
|
Browser / CLI / Tauri

Actors submit intent. The engine validates capabilities, ownership, values, and scheduling before routing an action. Accepted events update the domain projection. Adapters report observations through the same engine boundary; they never expose vendor packet layouts to actors.

ComponentResponsibilityBoundary
dj-domainTyped state, commands, events, IDs, capability modelNo UI, vendor protocols, networking, or wall clock
booth-engineArbitration, scheduling, event order, state reductionDoes not run network work in the audio callback
virtual-boothDeterministic virtual transport and deck behaviorUses injected clock and renderer
Physical adaptersTranslate supported actions and observationsPreserve uncertainty, latency, and provenance
audio-engineDecode, DSP, monitoring, offline renderingBounded real-time work
sessions / evaluationDurable logs, replay, comparisonConsume versioned records
booth-apiClient commands, snapshots, subscriptionsNever the clock authority

A shared interface means shared semantics for supported capabilities. Physical devices may expose read-only fields, delayed observations, or no remote control for an operation. An accepted command is not evidence that hardware performed it.

See hardware abstraction, event model, and timing.