When trying to come up with a lit playlist on Spotify, there's often a struggle to balance songs "early" on, when there are few people and conversation is quiet, with the songs you'd typically want to dance to as the night wears on.

What if your playlist automatically curated itself based on some measure of how "lit" a party is?

What it does

We leverage the fact that nearly everyone has a smartphone, and nearly every smartphone comes with WiFi. The IEEE802.11 standard includes a type of link-level data frame called "probe requests" which are generated by WiFi radios as they search for possible access points. These requests are WiFi "metadata" essentially - always there and indicative of a radio - but fortunately do not contain any personally-identifying data. Assuming that on average the number of WiFi radios grows linearly with the number of nearby people, we come up with a broad measure of attendance at a party

How we built it

The project is split into three levels of abstraction: the monitor device which captures WiFi probe requests, a cloud-based backend that acts as a data store as well as API server, and a web-based front end client for the end user to see.

Challenges we ran into

Ideally, this could operate using an internet-capable embedded device monitoring data frames, a cloud-based backend API exposing a data store, and a web-based front end client for the end user. Unfortunately, the hardware available to us did not have a driver capable of monitoring link level WiFi frames. A workaround was to substitute a Macbook Pro for this "embedded device", while remaining relatively platform-agnostic in our software for a potential future deployment on a capable device.

Accomplishments that we're proud of

It seems to work?

What we learned

We learned a lot about how the WiFi stack is implemented in Linux, and how to work with link-level 802.11 frames

What's next for Party Litmus

The project is open source and so it's hopefully extensible by anyone who finds a use for it. Ideally, we'd like to be able to incorporate other data into some sort of inference pipeline to provide a better descriptor of "litness" (since attendance by itself is not the ultimate factor)

Share this project: