{
"path": "/a/3mk7ojxl6bv23-moving-everyone-plays-the-same-song-to-the-atmosphere",
"site": "at://did:plc:pf6izdjdonyd46isl3txwu4g/site.standard.publication/3mk7ojiwa772m",
"$type": "site.standard.document",
"title": "Moving Everyone Plays the Same Song to The Atmosphere",
"content": {
"$type": "app.offprint.content",
"items": [
{
"$type": "app.offprint.block.text",
"facets": [
{
"index": {
"byteEnd": 63,
"byteStart": 34
},
"features": [
{
"uri": "https://bsky.app/profile/seattle.atprotocol.community",
"$type": "app.offprint.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 162,
"byteStart": 134
},
"features": [
{
"uri": "https://everyoneplaysthesamesong.com",
"$type": "app.offprint.richtext.facet#link"
}
]
}
],
"plaintext": " In sheer excitement at tonight's @seattle.atprotocol.community meetup, in a state of connection and inspiration, I pledged to launch everyoneplaysthesamesong.com into the Atmosphere. This document will serve as a brainstorming session and intentions document on how I plan to do it. I'll provide a brief blurb about the project, go over why I want to migrate, and then dig into the meat of what I want to migrate specifically, my plans and my outstanding questions."
},
{
"$type": "app.offprint.block.text",
"plaintext": "For background, Everyone Plays the Same Song (EPTSS) is a project I've been running since Mayish of 2020. It's a music project where each quarter, all participants create and submit a cover of the same song. The song changes each quarter. There's also democracy involved. Rough numbers, each round gets somewhere between 10 and 15 signups and somewhere between 5 and 10 submissions. There is a core group of folks that always come back, as well as a larger group of folks who may or may not participate in any given round."
},
{
"$type": "app.offprint.block.text",
"plaintext": ""
},
{
"$type": "app.offprint.block.text",
"plaintext": "The TLDR; "
},
{
"$type": "app.offprint.block.bulletList",
"children": [
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "User management will be the most complicated part. I probably need to create my own PDS to support my users. "
}
},
{
"content": {
"$type": "app.offprint.block.text",
"facets": [
{
"index": {
"byteEnd": 29,
"byteStart": 21
},
"features": [
{
"did": "did:plc:vs3hnzq2daqbszxlysywzy54",
"$type": "app.offprint.richtext.facet#mention",
"handle": "plyr.fm"
}
]
}
],
"plaintext": "Do I want to use the @plyr.fm lexicon for media streaming? Probably. "
}
},
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "I need to look into Group Chat solutions. I'd be surprised if something good didn't already exist. "
}
}
]
},
{
"$type": "app.offprint.block.heading",
"level": 2,
"plaintext": "Why do I want to move into the Atmosphere?"
},
{
"$type": "app.offprint.block.text",
"plaintext": "In order of priority -"
},
{
"$type": "app.offprint.block.bulletList",
"children": [
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "I believe in the future of the protocol and want to build something on it. I also appreciate that putting this project on the protocol loosens my ownership of it. As the project creates public data, it can be remixed, built on top of, etc."
}
},
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "I think my users will benefit from being in the Atmosphere. Because I am but one developer - LLM assisted or otherwise - and a lot of my problems are already solved by existing ATProto apps and patterns. More on that later."
}
},
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "I'm excited about serving as a front door for the Atmosphere. Congratulations - you have your everything account."
}
}
]
},
{
"$type": "app.offprint.block.heading",
"level": 2,
"plaintext": "Things to migrate"
},
{
"$type": "app.offprint.block.text",
"plaintext": "To warn you, dear reader, this is going to be mostly off the dome. I want to finish this before I go to sleep, and the hours are waning. So, there will be a lot of loose ends that I will tie up more concretely."
},
{
"$type": "app.offprint.block.heading",
"level": 3,
"plaintext": "Users"
},
{
"$type": "app.offprint.block.text",
"plaintext": "Let's start with the most complicated thing. EPTSS implements auth using Supabase. I'll need to use ATproto oauth here, which I know is more and more of a paved path. The quickest go-to-market would be to have my users create an Atmosphere account elsewhere. The best user experience would be to allow them to make a new account on the site, and therefore, spin up a PDS."
},
{
"$type": "app.offprint.block.text",
"plaintext": "I need to look into spinning up my own PDS for my users, and any new users to come. Welcome to the Atmosphere, my friends."
},
{
"$type": "app.offprint.block.heading",
"level": 3,
"plaintext": "Music hosting"
},
{
"$type": "app.offprint.block.text",
"facets": [
{
"index": {
"byteEnd": 75,
"byteStart": 67
},
"features": [
{
"$type": "app.offprint.richtext.facet#code"
}
]
},
{
"index": {
"byteEnd": 268,
"byteStart": 260
},
"features": [
{
"uri": "https://bsky.app/profile/plyr.fm",
"$type": "app.offprint.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 354,
"byteStart": 349
},
"features": [
{
"$type": "app.offprint.richtext.facet#code"
}
]
}
],
"plaintext": "When users submit their music to the EPTSS website, it's stored in Supabase bucket storage. This can still happen in our ATProto future, but I'll need to use a lexicon to create a record for each upload, to be able to point folks to the media. My guess is the @plyr.fm Lexicon will do the trick for the media playback itself, and I'll create my own eptss schema for additional required decorators."
},
{
"$type": "app.offprint.block.heading",
"level": 3,
"plaintext": "Round management"
},
{
"$type": "app.offprint.block.text",
"plaintext": "EPTSS runs a new round each quarter, ish. I'll need to create a lexicon for rounds, user signups, voting confirmation, submissions, etc."
},
{
"$type": "app.offprint.block.heading",
"level": 3,
"plaintext": "Blogging / Reflections"
},
{
"$type": "app.offprint.block.text",
"facets": [
{
"index": {
"byteEnd": 203,
"byteStart": 189
},
"features": [
{
"uri": "https://bsky.app/profile/standard.site",
"$type": "app.offprint.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 271,
"byteStart": 261
},
"features": [
{
"uri": "https://bsky.app/profile/pckt.blog",
"$type": "app.offprint.richtext.facet#link"
}
]
}
],
"plaintext": "Right now the website uses a basic markdown editor. I'll have to figure out if I should keep the UX the same, but instead of just saving the post in the database, if I should also create a @standard.site record. Or should I / can I somehow embed an instance of @pckt.blog?"
},
{
"$type": "app.offprint.block.heading",
"level": 3,
"plaintext": "Chat"
},
{
"$type": "app.offprint.block.text",
"plaintext": "We have a chat thread on the site. It's okay. It's kinda janky. We also have a Facebook group chat - yuck - that'd love to get off of. I don't know the specific solve I want to implement yet, but I'm sure there's an ATProto pattern for putting users in the same chatroom, so that when other folks in the chatroom post with a specific metadata tag, it is seen by everyone else in the chatroom."
},
{
"$type": "app.offprint.block.heading",
"level": 2,
"plaintext": "In conclusion"
},
{
"$type": "app.offprint.block.text",
"plaintext": "I appreciate you reading. This isn't a large or complex project, but there are still many unknowns on how to stick this landing. I hope these posts serve to pave the path for the next community organizer. "
},
{
"$type": "app.offprint.block.text",
"plaintext": "\nPosts to come - "
},
{
"$type": "app.offprint.block.bulletList",
"children": [
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "User management plan "
}
},
{
"content": {
"$type": "app.offprint.block.text",
"facets": [
{
"index": {
"byteEnd": 5,
"byteStart": 0
},
"features": [
{
"$type": "app.offprint.richtext.facet#code"
}
]
}
],
"plaintext": "eptss lexicon proposals"
}
},
{
"content": {
"$type": "app.offprint.block.text",
"plaintext": "migration plan and timelines "
}
}
]
},
{
"$type": "app.offprint.block.text",
"plaintext": ""
}
]
},
"publishedAt": "2026-04-24T05:32:55+00:00",
"textContent": "In sheer excitement at tonight's @seattle.atprotocol.community meetup, in a state of connection and inspiration, I pledged to launch everyoneplaysthesamesong.com into the Atmosphere. This document will serve as a brainstorming session and intentions document on how I plan to do it. I'll provide a brief blurb about the project, go over why I want to migrate, and then dig into the meat of what I want to migrate specifically, my plans and my outstanding questions.\nFor background, Everyone Plays the Same Song (EPTSS) is a project I've been running since Mayish of 2020. It's a music project where each quarter, all participants create and submit a cover of the same song. The song changes each quarter. There's also democracy involved. Rough numbers, each round gets somewhere between 10 and 15 signups and somewhere between 5 and 10 submissions. There is a core group of folks that always come back, as well as a larger group of folks who may or may not participate in any given round.\n\nThe TLDR; \n- User management will be the most complicated part. I probably need to create my own PDS to support my users. \n- Do I want to use the @plyr.fm lexicon for media streaming? Probably. \n- I need to look into Group Chat solutions. I'd be surprised if something good didn't already exist. \n\nWhy do I want to move into the Atmosphere?\nIn order of priority -\n- I believe in the future of the protocol and want to build something on it. I also appreciate that putting this project on the protocol loosens my ownership of it. As the project creates public data, it can be remixed, built on top of, etc.\n- I think my users will benefit from being in the Atmosphere. Because I am but one developer - LLM assisted or otherwise - and a lot of my problems are already solved by existing ATProto apps and patterns. More on that later.\n- I'm excited about serving as a front door for the Atmosphere. Congratulations - you have your everything account.\n\nThings to migrate\nTo warn you, dear reader, this is going to be mostly off the dome. I want to finish this before I go to sleep, and the hours are waning. So, there will be a lot of loose ends that I will tie up more concretely.\nUsers\nLet's start with the most complicated thing. EPTSS implements auth using Supabase. I'll need to use ATproto oauth here, which I know is more and more of a paved path. The quickest go-to-market would be to have my users create an Atmosphere account elsewhere. The best user experience would be to allow them to make a new account on the site, and therefore, spin up a PDS.\nI need to look into spinning up my own PDS for my users, and any new users to come. Welcome to the Atmosphere, my friends.\nMusic hosting\nWhen users submit their music to the EPTSS website, it's stored in Supabase bucket storage. This can still happen in our ATProto future, but I'll need to use a lexicon to create a record for each upload, to be able to point folks to the media. My guess is the @plyr.fm Lexicon will do the trick for the media playback itself, and I'll create my own eptss schema for additional required decorators.\nRound management\nEPTSS runs a new round each quarter, ish. I'll need to create a lexicon for rounds, user signups, voting confirmation, submissions, etc.\nBlogging / Reflections\nRight now the website uses a basic markdown editor. I'll have to figure out if I should keep the UX the same, but instead of just saving the post in the database, if I should also create a @standard.site record. Or should I / can I somehow embed an instance of @pckt.blog?\nChat\nWe have a chat thread on the site. It's okay. It's kinda janky. We also have a Facebook group chat - yuck - that'd love to get off of. I don't know the specific solve I want to implement yet, but I'm sure there's an ATProto pattern for putting users in the same chatroom, so that when other folks in the chatroom post with a specific metadata tag, it is seen by everyone else in the chatroom.\nIn conclusion\nI appreciate you reading. This isn't a large or complex project, but there are still many unknowns on how to stick this landing. I hope these posts serve to pave the path for the next community organizer. \n\nPosts to come - \n- User management plan \n- eptss lexicon proposals\n- migration plan and timelines"
}