Live production control
Alcántara
A broadcast control surface for graphics, program state, media, and live guest contributions.
I designed and built this project independently, using my own resources.
01 / Context
The problem behind the project
A live production needs one place to control what goes to air, coordinate contributors, and understand program state.
I built Alcántara as the operator’s control plane for television, radio, and simulcast. The important distinction is between preparing something and putting it on air: editing a scene, inviting a guest, or opening the console must not silently change Program.
The radio workflow grew from the same operational need. A continuous filler rotation should keep running without 24 artificial hourly schedules, while timed content blocks take over deliberately and hand control back predictably. The interface has to show what the engines actually did, not just the last button pressed.
02 / Implementation
Design and implementation
I build the production interface, program and media model, renderer integration, and live contribution workflows.
I designed and built the React operator console, NestJS/Fastify backend, PostgreSQL model, authorization boundaries, media library integration, and machine contracts with Alana and Palazzo. Preview and Program have separate state; CUT, TAKE, and explicit lifecycle commands control what reaches air.
The guest-contribution system provides six reusable slots, private invitations, device checks, short-lived room credentials, reconnect leases, producer cues, and private talkback. Layouts reference a stable slot rather than a person, so replacing a guest does not require rebuilding scenes. A guest reaches Program only through the normal switcher workflow.
For radio I implemented continuous rotation, optional timed rundowns, tag-assisted draft generation, cue-specific browser voice tracks, mixer control, and output confidence. Playback advances on Palazzo’s authoritative end events. Preview generation, saving, checking, and publication remain distinct steps.
03 / Architecture
Architecture and workflow
Prepare off air
Create scenes, select media, prepare guest slots, and stage Preview without mutating Program.
Authorize a command
Backend permissions distinguish viewing, operating, and managing destination configuration. A Start snapshots the exact selection and credential references.
Execute through the right engine
Television commands go through Alana to Croccante; radio commands go to Palazzo. Simulcast exposes the state of each leg.
Receive authoritative feedback
SSE and engine lifecycle observations update now-playing, requested/actual state, output confidence, and degraded conditions.
Monitor the encoded output
The Radio desk receives Icecast audio through Palazzo and Alcántara’s backends. Listening and monitor volume affect only the operator’s device.
04 / Approach
Engineering decisions
Explicit program state
Graphics, scenes, and media are coordinated through a shared program model and streamed updates instead of unrelated browser controls.
Separate control from rendering
Alcántara owns production decisions; Alana renders the program, and Croccante owns delivery to public broadcast destinations.
Live guests as a managed workflow
The calls console manages reusable contribution slots, invitations, and return audio and video within the production workflow.
05 / Evidence
Evidence and outcomes
The retained radio work documents an actual integration problem: a one-use audio-monitor grant failed when a browser probed or reconnected to the media URL. The revised contract allows a bounded connection/reconnection window while retaining program scope and avoiding login tokens in the media URL.
The local stack supplies PostgreSQL, migrations, fictional programs, guarded test authentication, LiveKit, and a machine-contract fixture. It exercises normal ownership and permission paths without publishing to real destinations. The repository also includes interaction fixtures for TV, radio, simulcast, and safety states.
Guest return audio uses a separate mix-minus route for each guest, excluding that guest’s own microphone. Producer talkback is confined to its intended return path rather than being mixed into Program.
Source and technical notes
06 / Current scope
Where it stands
The current public source includes graphics, program control, and WebRTC contribution work. Individual integrations and rollout stages are documented separately.
A connected stream and detected engine audio are different observations. Output-confidence samples can become stale; a level check does not by itself prove listener-side reception.
Timed rundowns require the backend to be available at the scheduled start. Ambiguous starts are surfaced rather than blindly replayed. External source ingestion and renderer migrations have their own rollout gates; a documented design is not automatically a completed cutover.