Skip to content
design

Web UI

The crew-facing app in packages/bosun/ui/web, served by bosund on the vessel and used at the helm, the nav station and in the bunk.

On this page
Althea
Go to…/
Underway
Dashboard
Situation⬤ 1
Conning
Chart7
Anchor
Passage
Aboard
ConningGPS 3DRisk low ▼21:04
ALARMAnchor drag · 38 m outside swing circle · since 21:02ACK
DepthSOUNDER
8.4m
▲ +0.3 m / 10 min
True windMAST
14G22kn
TWD 214°
SOGGPS
0.4kn
COG 087°
The web UI in the system: sidebar, status strip, alarm row and readouts, in the theme the site is set to.

The web UI is a React app built into the bosund binary and served from the vessel. The crew uses it on a tablet at the helm, a laptop at the nav station and a phone in the bunk, often with no internet connection. It takes more from the system than any other surface: every token, all four themes, the severity and integrity rules, and every pattern.

01Data loud, chrome quietReadings and alerts own the brightness and color. Navigation, labels and borders stay dim.
02Works offlineFonts, icons and tokens ship inside the binary. Nothing on screen depends on reaching the internet.
03Checked by testsContract tests and browser checks verify specific styling and interaction contracts. A passing suite does not establish that every screen is accessible or safe in every operating condition.

What it takes from the system

System elementWhere it lives in the web UI
Tokens and the four themessrc/tokens.css, components/instruments/themes.css; src/theme.ts stamps the theme
TypefacesIBM Plex Sans and IBM Plex Mono, bundled with the app
Iconssrc/icons/openbridge/ for maritime concepts, Lucide for generic UI
Severitysrc/severity.ts: board level to color, shape, label and flash
Data integrityThe Reading component and src/instrumentIntegrity.ts
PatternsSidebar, alarm row, status pill, readout strip
Verificationsrc/styles.contract.test.ts and the Playwright suite in visual/

In every theme

The web UI offers all four themes for the light conditions aboard. Theme and brilliance are presentation preferences. The application restores saved preferences at startup; automatic light/dark selection follows the system preference. A Night presentation must be an explicit crew choice, not a consequence of opening a report.

GPS 3DRisk low ▼21:04
DepthSOUNDER
8.4m
▲ +0.3 m / 10 min
True windMAST
14G22kn
TWD 214°
SOGGPS
0.4kn
COG 087°
Status strip and readouts, as the web UI draws them

Adoption: IBM Plex fonts are bundled in the app. Consumer token aliases, instrument styles and application data adapters live under packages/bosun/ui/web/src/; individual screens determine their kit adoption.

Chrome quiet, data loud

Do
DEPTH12.4 m
Keep the label dim and the value bright. The eye lands on the depth, and the label is there when it is looked for.
Don't
DEPTH12.4 m
Don't let chrome outshine the data. A label at full brightness pulls the eye to the word and away from the number beside it.

Connecting a component to the vessel

The application owns subscriptions, timestamps, validation and persistence. Pass the kit a value with its unit, reference and integrity state; a visually plausible dial cannot establish whether its sensor is connected. Keep a user's draft separate from incoming shared records, and show a completed save only after confirmation. An alert acknowledgment follows the authoritative alert state, not the click alone.

Verify a screen with lost data, delayed responses, long translated labels, touch and keyboard input. Exercise Night and Bright at the intended viewing distance. A report preview can reuse the presentation, but it must identify recorded or illustrative data and cannot offer controls that appear to operate the vessel.