ATRIA
A visual social playlist for the car cabin. Passengers AirDrop content to the head unit, where it lands as a Tinder-style card stack to swipe into a shared queue — Unity front end, a Raspberry Pi running a reverse-engineered AirDrop receiver, Spotify under the hood.
Conner Ward built ATRIA, a visual social playlist for the car cabin, for BMW of North America — passengers AirDrop content to the head unit and it lands as a Tinder-style swipeable card stack, with a Unity front end, a Raspberry Pi running a reverse-engineered AirDrop receiver, and Spotify under the hood.
ATRIA replaces the road-trip argument over whose music plays with a shared card stack everyone in the cabin can read and edit: each passenger AirDrops a song to the car, the drop appears as a card to swipe into a shared queue, and Spotify plays the top of the queue. Conner Ward built it in 2021 at BMW North America's EN-54 Experience Design Lab; it is internal work with no public repository.
Every road trip is a small negotiation over whose music plays. ATRIA replaces it with a shared card stack on the head unit: each passenger AirDrops a song (or photo, or webloc) to the car like they would to a friend's phone, it lands as a draggable card in a “Spotlight,” and a right-swipe queues it. Spotify plays the top of the queue — the cabin's music becomes one visible playlist everyone can edit.
Stack
- Raspberry Pi (in-cabin server)
- Announces itself on the local network as an AirDrop device named
MyCar— it just appears in every cabin iPhone's AirDrop sheet. No app, no pairing, no QR. Runs the Python services that receive drops and bridge them to Unity. - OWL · OpenDrop · nexmon
- The AirDrop stack on Linux. OWL (TU Darmstadt) is a reverse-engineered AWDL daemon; OpenDrop speaks the AirDrop application layer on top; nexmon patches the Pi's BCM43455 card into the monitor mode AWDL needs. Cold-start:
mon0up,owl -i mon0 -N -D,python3 main.py. - airdrop_server.py
- Modified OpenDrop receiver. The deviation from stock: it simultaneously accepts drops and scans for nearby AirDrop users (feeding a “people in range” indicator). Drops land in a watched folder.
- watchdog_handler.py
- watchdog file watcher. New
.jpg/.png/.webloc/.url→ resolve to a URL → emit JSON over the TCP bridge ({msgtype:"spotify", action:"add", url:…}). - tcp_server.py · schema.py
- JSON socket on port
8085. Fixed schema:msgtype,action,user,url,misc. Unity opens the socket on boot; Python blocks until it connects. - Unity (head-unit UI)
- The card stack as a real-time scene. Controller owns Spotlight / Queue / PlayingNow and listens to the TCP client. DraggableSpotlightCard / DraggableContent handle the gestures — swipe past a radius, tap to preview, long-press to scrub. QueueHorizontalLayoutGroup extends
HorizontalLayoutGroupwith an S-curve so cards arc into place. SpotifyService (Spotify4Unity) plays; AtriaSpotifyClient fetches album art at a separate OAuth scope. - Spotify Web API
- Unity authenticates on boot (OAuth via Spotify4Unity) and drives transport on the connected speaker. Album art is fetched by URL as each card is added.
Process
Why AirDrop. Every other “share with the car” flow has a friction step that kills it — install the app, pair Bluetooth, scan a QR, log in. AirDrop is the one transfer every iPhone owner already uses without thinking; if the car's in the sheet, contributing a track is one tap. The project is built around that.
OWL was the unlock. AirDrop rides on Apple Wireless Direct Link, a proprietary Wi-Fi-direct variant. Until OWL reverse-engineered AWDL, no non-Apple device could even be discovered as an AirDrop target. With OWL and a nexmon-patched kernel in monitor mode, the Pi sits in every cabin iPhone's sheet as MyCar — same handshake, same UX, Linux underneath instead of macOS.
mon0 in monitor mode, the OWL daemon up with its ASCII-owl banner, and the battle scars (kernel flashing, the lab's Innovations router) logged alongside.Cards, not lists. A queue is functional; a card stack is social. Each contribution becomes a physical-feeling object anyone in the cabin can swipe, reorder, or skip. The Tinder gesture does double duty — it queues the track and it's a public act every passenger sees — turning the queue into a shared editing surface instead of a private append-only log.
The data flow, end-to-end. AirDrop a Spotify URL → AWDL handshake to MyCar → OpenDrop writes a .webloc → watchdog fires → URL packaged into the schema, sent over the TCP socket → Controller spawns a DraggableSpotlightCard and fetches album art, animating it into the Spotlight. Swipe it into the Queue; the S-curve slots it in; SpotifyService picks up the next card when the current one ends.
What this is really about. Most car-music UX optimizes the solo driver. ATRIA optimizes the four-passenger case where the music is the social object of the trip — the whole stack (AWDL on Linux, threaded Python, TCP bridge, Unity gestures, Spotify OAuth) in service of replacing an argument with a shared editing surface: frictionless to contribute to (AirDrop, no app), explicit to everyone watching (a card the cabin reacts to). Pi cost ~$120; AUX-cable peace, priceless.
Architecture
:8085.References
- OWL
- owlink.org — Open Wireless Link, TU Darmstadt (the AWDL reverse-engineering project this whole thing rides on).
- owl
- github.com/seemoo-lab/owl — the AWDL daemon.
- opendrop
- github.com/seemoo-lab/opendrop — AirDrop on top of OWL.
- nexmon
- github.com/seemoo-lab/nexmon — Broadcom Wi-Fi firmware patching used to put the Pi's BCM43455 card into the monitor mode AWDL needs.
- Spotify4Unity
- OAuth + playback control bindings used by the Unity front end.
FAQ
What is ATRIA?
ATRIA is a visual social playlist for the car cabin that Conner Ward built for BMW of North America in 2021 at the EN-54 Experience Design Lab. Passengers AirDrop content to the head unit, where it lands as a Tinder-style card stack they can swipe into a shared music queue.
What was Conner Ward's role on ATRIA?
Conner Ward designed and built ATRIA end-to-end at BMW North America's EN-54 Experience Design Lab — the Unity head-unit UI and card-swipe interaction, the Raspberry Pi back end running a reverse-engineered AirDrop receiver, and the Spotify playback integration.
How does ATRIA work technically?
ATRIA uses a Unity front end for the cabin's card-stack UI and a Raspberry Pi back end running a reverse-engineered AirDrop (AWDL) receiver, so any passenger's iPhone sees the car in its AirDrop sheet with no app or pairing. Drops are bridged to Unity, swiped into a shared queue, and played through the Spotify Web API. Conner Ward built it for BMW of North America in 2021.