Skip to content

Project / Head Unit

A purpose-built head unit for Ubuntu laptops with touchscreen support.

A complete head unit system for RVs and mobile applications: navigation, media playback, phone integration, cameras, and system monitoring in one touch-friendly interface optimised for driving.

Ubuntu 22.04+

Target platform, with a touchscreen

Node.js 18+

Runtime, managed with pnpm

8

Camera slots in the live wall

-30°C

Cold-start design target

Core Functionality

Everything a driver needs, without the phone in their hand.

Maps & Navigation

GPS-powered navigation with waypoint management, so a route can be set up before leaving rather than while driving.

Media Player

A local music library with an MPV backend, so playback does not depend on a data connection.

Phone Integration

Bluetooth hands-free calling over HFP/HSP, keeping the phone out of the driver's hands.

Settings Management

Persistent configuration on a SQLite backend, so the setup survives a power cycle.

Cameras & CCTV

An eight-camera live wall, recorder status, clip playback, downloads, and trimmed exports.

System Monitoring

System status and hardware health surfaced in the same interface, not in a separate admin tool.

System Features

Built to be left running.

A head unit in a vehicle is not a laptop that gets closed. It boots, goes full-screen, keeps the data current, and stays useful when the network does not.

Kiosk mode

A full-screen driving interface, launched on boot so it is never one tap away from being useful.

Real-time monitoring

System status and hardware health shown in the interface rather than hidden in logs.

WebSocket updates

Live data synchronisation, so the screen does not depend on polling to stay accurate.

Prometheus metrics

A machine-readable monitoring endpoint for anything that needs to scrape the box.

Interface

Designed around the driver's hands, not the developer's desk.

The interface is built for a fixed touchscreen in a moving vehicle, which is a much narrower constraint than a general-purpose application.

  • Large buttons and gestures sized for driving rather than for a mouse
  • Responsive layout tested against a 17-inch touchscreen
  • Dark theme, to stay usable at night without glare
  • Offline-first behaviour, degrading gracefully without a connection

Electron + React

The dashboard is an Electron application with a React interface.

Express services

A Node.js/Express API server exposes status, settings, media, GPS, Bluetooth, and camera routes.

SQLite + Prisma

Configuration and application state live in SQLite, accessed through the Prisma ORM.

HAL abstraction

A hardware abstraction layer keeps GPS, Bluetooth, and media behind one interface.

The CapnCoil van parked in low light during winter testing.
The camera system is exercised where it matters: in winter, in the dark, and on a vehicle that is being used rather than demonstrated.

Camera Workflow

Eight cameras, treated as a recording system rather than a novelty.

The camera stack covers the parts that make video useful after the fact: knowing what the recorder is actually doing, getting a clip off the device, and trimming an export without leaving the vehicle.

  • Eight-camera live wall with per-camera enable toggles
  • Recorder and storage health surfaced separately from camera access
  • Clip playback, downloads, and trimmed MP4 exports from the interface
  • Monitor enablement separated from camera access, as groundwork for a fuller NVR stack

Requirements

What the head unit needs to run.

Requires Ubuntu 22.04 or newer with a touchscreen, Node.js 18 or newer, pnpm, a Bluetooth adapter for phone integration, and a USB or Bluetooth GPS device.

The head unit is developed and maintained in house, and access is arranged as part of an evaluation or field validation programme rather than distributed as a download.

Want this evaluated in real conditions?

The head unit is one of the things the van exists to test. Product evaluation and field validation programmes are arranged through the contact form.