Holding the ode. audiobook player
A handheld audiobook player, built from scratch

ode.

1,000 books in your pocket.

Audiobooks, remembered

Scroll to explore ↓

Get the highlights.

Library

A whole library

A thousand books — MP3, M4B, AAC, FLAC — on 256 GB.

Controls

Intuitive mapping

I mapped the buttons and wheel so I can use them without looking.

Speak a thought
Voice notes

Speak a thought

The mic button pauses playback and saves your note with the chapter and timestamp.

Capture

Keep the good lines

One press saves the last thirty seconds as text.

Companion

A little web UI

The player hosts a web interface for uploading books, checking stats, and copying quotes or notes.

Notification-free
Focus

Notification-free

No feeds, no badges, nothing buzzing for your attention.

Soldered & serviceable
By hand

Soldered & serviceable

Point-to-point, packed into a printed shell.

Designed & built from scratch

Every part, in its place.

Scroll through the assembly.

  1. 01
    Capture · Voice · Back buttonsControls

    The button sub-assembly — three buttons designed and 3D-printed for a satisfying press.

  2. 02
    Shell + 1.28″ round TFTChassis

    The printed shell and the round screen — one book, one cover.

  3. 03
    Power modulePower

    Regulation and USB-C charging along the spine.

  4. 04
    Raspberry Pi Zero 2 WCompute

    The quad-core brain running the player and on-device Whisper.

  5. 05
    DACAudio

    A dedicated digital-to-analog converter for clean playback.

  6. 06
    MicrophoneCapture

    A MEMS mic for capturing quotes and voice notes.

  7. 07
    1100 mAh LiPoBattery

    An all-day cell tucked into the base.

  8. 08
    Amplifier + speakerSound

    Amp and speaker for listening out loud before bed.

  9. 09
    Rotary encoder + knobWheel

    The knurled wheel for scrubbing and menus.

  10. 10
    Back cover + screwsCover

    The back cover and fasteners close it up by hand.

Why

I love books. Somewhere in college, I stopped having the time to get lost in one.

Audiobooks gave reading back to me — in the gym, on walks, doing dishes. But listening on my phone meant every notification came along for the ride. I wanted one object that does this and nothing else.

Why it’s built this way

Four problems. Four fixes.

01The problem

Listening on your phone means every notification comes along for the ride.

The fixDistraction-free

I built a dedicated player so I could listen on walks or at the gym with my phone put away.

02The problem

Hear a line worth keeping and there’s no easy way to save it — you rewind, scribble it down, then rewind again to be sure you didn’t miss anything.

The fixKeep the quote

Press the bookmark button and Whisper transcribes the last thirty seconds on the device. The player saves the quote with the book, chapter, and timestamp, without an account or internet connection.

03The problem

It’s easy to drift off mid-chapter — the one thing research keeps pointing to for why audiobooks can stick less than print.

The fixStay present

After each chapter it prompts you for a quick spoken note, with AI-generated questions that pull you back in and make the story stick.

04The problem

No stats, no streaks — none of the fun tracking that keeps you coming back.

The fixYour library, your data

The player hosts a web page where you can check your stats, upload books, and export saved quotes and voice notes.

Try the simulator

Turn/scroll the wheel · click it to play · mic records, bookmark saves a quoteOpen the full simulator ↗
How it was made

How it all came together.

01 — Prove it in software

I simulated the player on my Mac

I mocked up each screen in Photoshop and simulated the interface and I/O on my Mac. By the time I picked up a soldering iron, I knew which parts I needed and how they’d behave.

Photoshop mockup
Photoshop mockup
The whole interface, simulated on macOS
02 — Bring it up on the bench

Building the hardware one board at a time.

On the breadboard I brought the system up piece by piece — power, audio, controls — then switched from a rectangular screen to a round one, which sent everything downstream back to the drawing board.

The final breadboard
The final breadboard
Switching to a round display
Switching to a round display
03 — Make it all fit

The electronics didn’t fit the first design.

So I sketched concept after concept in CAD, hunting for a shape that could pack the Pi, battery, audio, screen and controls into something that still felt right in the hand.

04 — Print, test, adjust

The first print needed work

The first print was ugly, and the rotary encoder needed more room. I stretched the body and gave the buttons more travel so the click felt better.

First real print — ugly, and finicky
First real print — ugly, and finicky
Stretched to fit the encoder
Stretched to fit the encoder
More travel, better press
More travel, better press
05 — Every version

It took a lot of tries.

Every shell here is a print I held, judged, and threw back on the pile — shrinking the body, nudging buttons a millimetre, and chasing the round screen until the whole thing disappeared into the hand.

Every 3D-printed prototype part across dozens of iterations
06 — Soldered together

Off the breadboard, into the shell.

Everything soldered together and packed into the final printed enclosure — the device that opens this page.

Final assembly
Final assembly
The finished ode.
The finished ode.

The specs.

×240
round display
hr
per charge
GB
library
MB
on-device AI
Raspberry PiPythonCAD3D printingbashdesign thinkingRaspberry Pi Zero 2 WGC9A01 displayPCM5102A DACWhisper on-devicempvSQLite

Soldered, sealed, and still easy to open.

Quote capture works on the assembled player. Lately I’ve been working on securing the parts inside the shell while keeping it easy to open for the next upgrade.