Monolith

A small voice companion that rides in my passenger seat, knows where I am and what the air in the cabin is like, and answers when I press a button.

The question

What would an ambient companion feel like if it actually knew its surroundings? Not a phone on a mount, not another screen to tap, but something that sits quietly next to me, keeps track of location, altitude, weather and cabin air, and only speaks when I ask or when something matters.

I wanted the answer to be a physical object with restraint built in: mostly silent, glanceable at a red light, and useful the moment I ask it something like "how's the air in here?"

What I built

Monolith is a Raspberry Pi Zero 2 W wearing a PiSugar WhisPlay HAT, which gives it a small 240×280 LCD, a button, a mic and a speaker. A PiSugar battery keeps it running through short power gaps. A USB GPS dongle gives it location and speed, and a little I2C sensor cluster on a breadboard reads cabin CO₂, temperature and humidity (SCD41), air pressure for altitude (BME688) and ambient light for auto-dimming (VEML7700).

The flow is simple. I hold the button and ask a question. Monolith transcribes it, attaches the live sensor and GPS readings, asks the model, and speaks the answer while the text streams onto the screen. When I'm not asking anything, the screen is an always-on dashboard. Every reading and exchange goes into a local SQLite trip log, and it has been logging every day since July 19.

Screen states, refreshed

A five by five grid of Monolith screen states drawn over topographic contour lines: boot, home, night, asleep, last trip, air, last answer, driving, arrived, listening, thinking, speaking, weather alerts, a critical warning, ears down and offline.
The current UI. Topographic contour lines are the map language: the terrain sits behind every screen, with a single dot for where I am. Twenty-five states cover ambient, driving, voice, alerts and failure. Places, answers and readings are sample data.

This is where the design landed. Below is how it got there.

How it's built

Plate VI, an exploded isometric map of Monolith's parts in four stacks: the device, the sensors, the log and the voice, with a bar chart of daily readings since July 19 underneath.
Plate VI: an exploded map of the parts, grouped as the device, the sensors, the log and the voice, with a record of every reading underneath. Shown with sample data. Open full screen to explore.

Design process

I explored the design language in HTML before a single pixel hit the LCD, always at the real 240×280 size so I could judge it on the device's terms.

Brutalism won, so I pushed it ten more ways, from monumental and serious to openly playful, to find where the edges were.

Then I applied the winning style to every screen the device needs, boot through critical alert. The test was whether "one thing, holding everything" survives the full system or breaks down somewhere.

The higher fidelity pass pinned it down: six type sizes, three colors plus one, a three-tier grid with a fixed 14px edge, and four motion behaviors. The LCD is mostly seen in peripheral vision while driving, so color has to mean something or nothing at all.

Motion and naming came next. The project took its design language as its name: a quiet slab that knows things and reveals them when asked. The boot sequence is five frames in about three seconds, and the first thing you see is nothing.

Later I drew the whole build as an exploded, isometric plate, and tested it in seven palettes for contrast, including for color-deficient vision.

How it works

  1. I hold the button and ask. The screen says it's listening.
  2. OpenAI transcribes the recording.
  3. Monolith adds live context: CO₂, temperature, humidity, pressure, and with a GPS fix, place, speed and altitude.
  4. Gemini 2.5 Flash streams an answer back onto the screen.
  5. ElevenLabs speaks it, sentence by sentence, with OpenAI or local Piper voices as fallbacks.
  6. The exchange is logged to SQLite, and after 30 seconds the screen returns to the dashboard.

Every part fails soft on its own. If a sensor drops, its value goes blank. If GPS is unplugged, the answers just lose their place name. With no Wi-Fi it shows an offline screen and keeps sensing.

What I learned

What's next

Working daily in my car · 2026