Broadcast engineers
They've built signal chains in the dark at 5am. They know what works and what's marketing. Earn their trust with specifics, not promises.
Salvo is the live production system formerly named LGL-OS. In a broadcast router, a salvo is a saved set of crosspoints fired together — one action, many routes, simultaneously. This document covers the name, the mark, the palette, the type and the writing voice that hold it together across every surface.
Let's Go Live! builds infrastructure for live production. Salvo is the product — the operational layer that sits between signal entry and content delivery. We serve people who work live, under pressure, where the stakes are real.
We're not a streaming app. We're not an editing tool. We're the system underneath — the thing that makes sure everything else works when it counts.
They've built signal chains in the dark at 5am. They know what works and what's marketing. Earn their trust with specifics, not promises.
They need to see the whole system at a glance and trust it won't break mid-show. They care about reliability and operational clarity.
They're running events under time pressure. They don't read manuals in advance — they need things to be obvious when they sit down.
A term of art from the exact room the product lives in, that also reads as plain English to everyone outside it. Engineers hear the router term; everyone else hears simultaneity and force. Both readings point at the same product truth.
Engineers hear the router term and assume you've done live before. LGL-OS had to earn that; Salvo asserts it in five letters.
Everyone else hears simultaneity and force. Many sources, one trigger.
Five letters, two syllables, no hyphen, no suffix. It survives a favicon, a tab title and a rack label — none of which LGL-OS did well.
It's a common word — clearance and SEO are harder than for an invented name. Trademark search before anything gets printed.
The product name and the router term will appear in the same sentence. The rule is capitalisation, and it is not optional.
Capitalised Salvo is the product. Lowercase salvo is the action.
"When an operator fires a salvo, every routed source cuts together."
"Salvo fires a Salvo" — the product doesn't take the verb's capital.
"salvo records continuously" — the product always takes its own.
| Name | What it is | When to use |
|---|---|---|
| Let's Go Live! | The company and parent brand | Corporate contexts, contracts, about pages, legal |
| Salvo | The product. Written the same way it's set — no hyphen, no suffix, no TLD | Everywhere. Body copy, docs, product pages, marketing, print |
| Salvo [Module] | Individual modules — the name is short enough to carry a suffix without becoming a phrase | Feature pages, in-app navigation, docs |
| salvo.network | The address, not the brand | URLs, footers, business cards. Never as a substitute for the name in copy |
salvo |
The CLI command, and the lowercase router term | Terminal, code samples, technical prose |
First mention on a page: full name + what it does. After that, just the short name.
Salvo Vault handles continuous recording across all active streams. Once Vault is running, every frame is captured.
"LGL-OS Vault" (retired — and it never fit a tab title)
"the Vault module" (unnecessary)
"Salvo's Relay" (awkward possessive)
The dot is the only place the URL earns colour — one violet keystroke, at a size where it still reads. The wordmark itself stays black or white throughout.
A router matrix is a grid of points; a salvo is the set of points closed together. Draw that set so it spells the S and the mark is simultaneously a letter and a diagram — it stops being a generic commerce glyph because it only exists as lit crosspoints. Terminals run the full four cells; square pixels throughout. Every asset below is SVG built from rects and outlined paths, so nothing depends on a font at render time.
At 16px the matrix is one pixel per cell — legible as a shape, not as a letter, which is acceptable for a tab. The violet tile holds better because the field carries the brand while the S carries the meaning. Below 24px, use the tile.
IBM Plex Sans Condensed 700, uppercase, −0.015em. No new typeface enters the system for the logo. The condensed widths keep it compact in a nav bar — it holds at 13px, which is the size that actually ships.
The mark sets to cap height, never taller. Clear space on all sides equals one grid cell.
Plain condensed caps are the wordmark everywhere — product, marketing, print, swag. Colour enters through the crosspoint mark beside it and the violet dot in the URL, never through a tinted letter.
Never tint a letter of the wordmark. Never set it in a lowercase or mono cut. Never let the mark sit taller than cap height, and never put it closer than one grid cell to the word.
Full inventory and usage notes: salvo-assets/README.md · rebuild with node scripts/salvo-assets-build.mjs
The voice stays consistent everywhere. It's who we are, regardless of the channel. Think: experienced colleague, not brand mascot.
No filler, no build-up. Lead with the function. "Vault records continuously" is better than three sentences explaining why recording matters.
We don't need superlatives. "Reliable" beats "ultra-reliable." "Fast" beats "blazingly fast." The product is the proof.
Our audience knows what SRT, RTMP and LTC mean. Don't over-explain. Don't put protocols in quotes. Trust the reader.
Precision doesn't mean cold. Write like a person — just one who happens to be really good at this and doesn't waste your time.
Before publishing anything, ask yourself four things:
Would a TD at Pinkpop read this and nod, or roll their eyes?
Could I say this out loud to a colleague without it feeling weird?
Did I say what it does, or just what it is?
Is there a shorter way to say this?
Same voice, different temperature. The formality and detail shift depending on where the words appear.
Shortest possible. Verb-first. Clarity is the personality.
Recording started
Source disconnected. Retrying…
2 streams ingesting
Your recording has been successfully initiated!
Oops! Something went wrong.
You are currently ingesting 2 streams.
Conversational but grounded. Like explaining it to a smart colleague, not pitching a VC.
Salvo records, routes and releases every feed in your production at once. If the stream is live, the file is growing.
What you see in the timeline is what you get in the export. Frame for frame.
Our state-of-the-art recording engine leverages cutting-edge technology…
Say goodbye to timeline drift forever!
Task-oriented. Lead with what to do, not background. Write for someone at 2am before a show.
To add an SRT source, navigate to Relay → Sources → Add.
In this section, we'll walk you through the process of configuring a new source…
Specific about what happened. Specific about what to do. Never cute, never vague, never blame the operator.
Ingest source 'CAM-02' dropped. Last frame: 4s ago. Check connection.
Export failed: disk full. Free 2.1 GB to continue.
Something went wrong. Please try again.
Uh oh! We hit a snag 😅
Every neutral is oklch(L 0.0xx 285) — hue held exactly, chroma stepping evenly instead of tripling at the first panel. Elevation is a lightness step, never a colour change. Violet itself sits at 293°: close enough to feel related, far enough that the accent separates from the surface it's on.
The brand fill #8B5CF6 carries white at 4.2:1 — fine behind a 24px heading, below AA behind a 13px button label. Buttons are where the accent and small text meet, so they get their own step. The fill spec doesn't change; it just stops being a button.
Use it for brand elements, primary actions and active states. It never carries operational meaning, so it can't be confused with tally or PGM.
Green = confirmed live / healthy. Amber = pending / warning. Red = failure / critical. Identical in light and dark — status is never ambiguous across themes.
One superfamily across every surface. Plex was drawn for machine interfaces — high-contrast terminals, a slab-ish rigidity in the uprights, a single-storey a and a slashed zero in the mono. Critically, the three cuts share metrics and skeleton, so a Condensed 700 headline and a Mono timecode are visibly the same voice at different temperatures.
Rack-panel silkscreen. Sets tight and long without shrinking.
Holds at 13px body and 10px caps. Tabular figures on by default.
Same skeleton as the sans, so 01:14:32:18 sits square under its label.
Cut for an arts residency. Its personality is in the widths, and widths that move between weights make a headline feel unstable — the opposite of "calm under pressure."
Nothing wrong with it. It just means the product is indistinguishable from every dashboard your operators also have open. Plex costs nothing in legibility and buys an identity.
Built for reading code at one size in one place. Plex Mono is built to sit next to Plex Sans in a table — which is where every Salvo readout actually lives.
Salvo is light-first: marketing, docs, sign-in, admin and every default application view sit on #F9F9FB. Dark is a second temperature, not the base — reserved for surfaces operators stare at in low light: the program view, the multiviewer, the rack-mounted panel in a truck at midnight. Same tokens, same status colors, same type ramp.
#141419 is the darkest surface. Pure black creates harsh edges and reads as a void.
#EDEDF0 for primary text. Pure white on dark causes eye strain over a long show.
Base → Panel → Raised → Elevated. Hue and chroma are locked; only lightness moves. This replaces shadows, which don't read on dark.
On dark, links and active states use #A78BFA. The #7C3AED control fill stays as-is — it already clears AA against white text.
Every label, tooltip and notification is copy — treat it that way.
Verb-first. Describe the action, not the destination. Short enough to scan instantly.
Fire salvo · Start recording · Add source · Export clip · Open timeline
Click here to start · Submit · Go · Recording options
Tell the operator what to do, not what's missing.
No sources connected. Add one via Relay → Sources.
Nothing here yet! Get started by adding your first source 🎉
State what happened. Past tense. Done.
Clip exported · 00:02:14 · 1080p
4 crosspoints armed · released 01:14:32:18
Your clip has been successfully exported! Great job!
| Use | Instead of |
|---|---|
| stream, source, feed | input, asset (in live context) |
| record | capture (unless at ingest level) |
| fire a salvo | trigger the preset, execute the routing |
| extract | pull, grab |
| timeline | session, project |
| operator | user (in production context) |
| reliable | robust, rock-solid, bulletproof |
Live component demo built on @ionglue/ui-core. Every component, token and pattern in the system — interactive and in context. The ui-core aliases at the top of this page are kept in sync with the palette above; the playground bundle ships its own scheme layer on top, so it still renders the pre-Salvo values until @ionglue/ui-core is rebuilt.