There is a photo on Maya's phone that has survived four phones. It's a setlist, written in the Notes app at 1 a.m. on Geary Boulevard, thumbs still buzzing: every song from the Bonobo show, in order, with a star next to Kerala.
Rdio turned that note into a playlist once. The playlist died with Rdio. The photo of the note outlived the platform — which tells you everything about which of the two formats respected her.
Tonight the list comes back. Permanently, this time.
A playlist was never a special thing#
Here's the quiet realization that makes this chapter easy: platforms always treated playlists as their objects — proprietary containers, owned by the app, dead with the app. But look at what a playlist actually is. It's a thing (the list itself) plus a set of facts (this song belongs to it). And the crate already knows how to store both of those.
The list is just an atom:
import { buildAtomData } from "@0xintuition/classifications";
import { calculateAtomId } from "@0xintuition/ids";
const list = buildAtomData("thing", { name: "Heard Live at The Fillmore" });
// {"@context":"https://schema.org/","@type":"Thing","name":"Heard Live at The Fillmore"}
calculateAtomId(list);
// 0x0cea91fbb498d49f862a2e52b81cab5b41c7075668478d9f6a9fdc1a6b19d37a
And membership is just a claim, with an enshrined verb made for exactly this:
import { buildTriple } from "@0xintuition/primitives";
buildTriple(kerala, "listedIn", heardLive);
// → 0x983ea54c1444c9bf3969f74c5550614e29a64c9c12ab6cef84e626788e9bf0ff
That's the whole trick. Lists, stacks, rankings, crates — they're all this same three-part shape. No container format. No export file. Nothing for a dying platform to take hostage, because the list is made of the same permanent material as everything else in it.
The curator enters her own graph#
One more claim belongs here: whose list this is. The registry has an enshrined verb for that too — curatedBy — but it needs an object, and that object is Maya. Who is not, as of this moment, in the graph.
The Person classification requires exactly two fields: givenName and familyName. Maya stares at the second one. Fifteen years of usernames — mayak_2011, crateqveen, m4ya — and the graph's opening question is just: who are you, actually?
const maya = buildAtomData("person", { givenName: "Maya", familyName: "Reyes" });
// {"@context":"https://schema.org/","@type":"Person","givenName":"Maya","familyName":"Reyes"}
// → 0x1e62e0ce8e3404bc88deb67b361fc5e65398bb98e9947ecf5ac4e086885cc1f8
buildTriple(heardLive, "curatedBy", mayaAtom);
// → 0xb7d86dd3341a16d916aef30321139b1fdeffa9da7fef7113f9fa11d1acae4dc0
The collector is now part of the collection. It won't be the last time that matters.
Where this is going#
Maya spends a very good evening doing archaeology — rebuilding lists from screenshots, star ratings from memory. The crate finally feels like hers.
So naturally, she shows Sam.
Sam has been her best friend since a warehouse show in 2011. He is also, in her words, constitutionally incapable of not touching things — which is exactly why she shows him. Sam loves it. Sam wants in. Sam imports his entire library over one enthusiastic weekend, and on Monday morning the crate has more Keralas than any reasonable person needs, a genre spelled "Down-tempo" with a hyphen, and Maya remembers — with great fondness and mild dread — that she never actually cleaned up the duplicate problem. Not her own homemade atom from chapter one. Not the stranger's, still out there in the wild. And now, not Sam's either. It's not her graph anymore. It's theirs. Next chapter: the difference between a shared graph and a million private ones.