project 01 of 06

Nesso desk assistant

Built on the Arduino Nesso N1

work in progress
context Side project
date Sep 2026
team Solo
ownership Concept, IxD, prototyping
hardware Arduino Nesso N1
The Nesso N1 clipped to the top edge of a laptop in a dim room, two round white eyes glowing on its screen.
01

Context

I built this desk assistant to stay productive, and above all to keep distractions out of the dead time, which has multiplied with the advent of AI.

It runs on the Arduino Nesso N1, a pocket-sized board with a 240×135 touch display, and sits on my computer. It tells me when I need to jump into a meeting (and whether my mic is on) and when Claude needs my attention. It also controls my music, which is always on when I work from home.

It hangs on the top-left corner of the screen, held by a small magnet behind it, so it comes off and goes back in a second. Flip it and the face turns with it: the Nesso senses its own orientation and corrects the display on the fly, with the cable on either side.

off the magnet, flipped, upright again
02

A simple interFace

I wanted to experiment with a new, more “human” way of conveying states: not text, icons and badges, but a face. An expression reads at a glance, from across the desk, which also balanced out working with a very small screen.

So the face stays simple: two filled circles for eyes, with no pupils, and no mouth at rest. It blinks at a random rhythm and now and then glances to one side. Tilt the Nesso and the eyes follow; shake it and it gets nauseous; low on battery, it looks tired.

The Nesso on the top-left corner of a laptop screen, its two round eyes lit. two circles, no pupils, no mouth
The Nesso on top of the laptop at rest: two round white eyes that blink, then glance to one side. at rest
A hand lifts the Nesso and shakes it; it comes back with green eyes and a wavy mouth, then turns white again. shaken
The battery panel: eyes closed as two flat lines, and below them a lightning bolt with 100%. battery, on a key press
03

Features

I didn't want the Nesso to “look inside” my computer, so the computer tells it just what's needed, every two seconds:

  • Inactivity. After a minute without keyboard or trackpad, the face gets sleepy; after five, it falls asleep and snores – so the sound brings my attention back.
  • Claude Code. While it works, the eyes turn terracotta and become a starburst, a nod to Claude's logo. When it's done, a ding and a smile. When it needs my answer, the face trembles and chimes.
  • Meetings. Based on my calendar: the mouth talks and the eyes hold still.
  • Microphone. It catches the calls the calendar doesn't know about, like quick calls from internal messaging apps.
  • Mute. The computer tells the Nesso whether I'm muted, and a key on its side toggles my mic on and off.
  • Music. Headphones, a gentle bob, the song title scrolling along the bottom and a heart on the songs I've liked. Swipe to skip, double-tap to like.

Every interaction can be controlled either via touch or trackpad/mouse: by simply pushing the cursor past the top-right of the screen it lands on the Nesso, like on a tiny second monitor.

Claude works, Claude's done
muted from Meet, unmuted from the Nesso
swipe to skip, double-tap to like
asleep
the cursor, on the Nesso
04

Small screen, hard choices

Failures get a signal; normality doesn't. A working Bluetooth connection isn't drawn at all: only a small rune appears when it drops.

Every alert must end. When Claude waits for an answer, the face chimes three times, then stops but keeps trembling: the question is still there. A tap on the Nesso means “got it”; if I've walked away for 90 seconds, it calls once more. An alarm you can't silence is one you learn to ignore.

No dozing at the wrong time. While Claude works or I'm on a call, I'm not typing for good reasons, so the idle count freezes. Otherwise the face would fall asleep right as Claude delivers the good news.

When in doubt, back to normal. Every signal can say “I don't know”, and every signal expires. A dead script, a pulled cable or a calendar that doesn't answer brings back the neutral face, never one stuck asleep or in a meeting.

The Nesso on the edge of the laptop with gray eyes, a small Bluetooth rune and a yellow warning triangle side by side in the top-right corner of its screen. only failures get a signal
05

Zero permissions

One rule from the start: nothing on the computer gets more access than it needs. The Nesso learns how long I've been idle, never what I type; how many meetings are on, never what they're about; whether my mic is in use, never what it hears.

Two channels connect it to the computer, and very little crosses either of them. Even if something went wrong on one side, the worst it could do is put the face to sleep or skip a song.

Holding to that rule cost a couple of features along the way, a trade I'd make again.

The two channels between the Nesso and the computer The Nesso N1 at the top, the computer at the bottom, two channels between them. Bluetooth carries media keys and mute to the computer, and brings back from Google Meet whether a call is on and muted. The USB cable carries status updates to the Nesso, and brings back only a like for the song playing. What it sends is as little as it can be: idle time as seconds, never keys; Claude Code as working, waiting or done; the calendar as in a meeting or not, never titles; the microphone as in use, never audio; the front app as one bit, never its name; Spotify as the song playing. Nesso N1 draws the face touch · keys · tilt Bluetooth to the computer media keys, mute to the Nesso Meet call status USB cable to the Nesso status updates to the computer like a song Computer sent to the Nesso idle time seconds, never keys Claude Code working, waiting, done calendar in a meeting, never titles microphone in use, never audio front app one bit, never its name Spotify the song playing two channels, and the little that crosses them
06

Conclusions

  • The goal was to build trust: a face I glance at a hundred times a day is only useful if I can believe it, even when something breaks.
  • A tiny screen forces a hierarchy of signals: what gets color, what gets shape, what gets sound and what gets nothing at all.
  • For things that last, like a meeting or a running task, an ambient display works better than a notification: I can check it without being interrupted.
  • AI agents keep proving more capable, and they built a lot of this with me. Still, every screen landed in Figma: that's where I could take care of the details.
The Nesso Assistant file in Figma: frames for Music mode (no like, liking, like), starburst eyes for Claude, the cursor on the face, and a work-in-progress notification with a bell. every face, drawn in Figma first

The project is still evolving. Every day I use it becomes a test, and a way to find the next feature it needs.

Side project | Nesso desk assistant