Matt Kane 0:02 I'll give it a minute. 0:08 Yeah. 0:09 Okay. 0:20 Hi everybody. 0:22 A few people coming. 0:26 I'm not going to start immediately. 0:35 So, hi. 0:36 I'm Matt. 0:39 I am— my main thing I do, I'm on the core Astro team for the Astro web framework. 0:46 I also work at Cloudflare, but I'm not here to talk about any of that today. 0:50 I'm here to talk about Cirrus, which is my PDS. 0:56 So, I have built a PDS that I use to help self-host and I hopefully might convince some of you people here to self-host your PDS as well. 1:09 But first, what is a PDS? 1:17 PDS is a personal data server. 1:22 It is where all of your stuff is on the App Proto Network. 1:26 Now, a lot of people here probably know this, but your PDS holds pretty much everything on the App Proto Network for you. 1:36 It's all of your posts, of course, but it's also all of your likes and your your friends and every— your whole social graph, but it's also everything from any of your other third-party apps that you're working with. 1:52 All of the different network— all of the things on the app router network live on your PDS. 1:57 They also— your— all of the blobs live on there as well, which are, you know, the files, the images, and the videos, and things like that. 2:05 So the whole point of a PDS is to make it so that you are able to have the network as decentralized so that you own all of your data. 2:20 And what I didn't realize is, as well as being where all your data is, it's also where you talk to. 2:28 So it's where your API calls go when you're using the network. 2:32 So when you've got the, like, Blue Sky app, for example, on your phone or on the web, It's not talking to BlueSky when it's connected. 2:43 If you look at the network panel, and honestly, I mean, the first time I knew this was when I opened up the network panel and saw that it was hitting my PDS. 2:50 You talk directly to your PDS. 2:52 So all of your connections and everything go directly to your PDS. 2:57 So most of the stuff a PDS does is talking to you. 3:06 Obviously, your PDS doesn't have all of the data on it. 3:09 Most of the data on the network is somewhere else. 3:12 So for anything that it doesn't have, like all of your timeline and everything else, it proxies it to the app view, which, you know, in most cases is BlueSky, which holds everything. 3:27 But how does the— how does BlueSky or the the rest of the network get your data. 3:34 It's done through a relay. 3:36 So there are two relays that BlueSky has, US East and US West. 3:41 They recently changed them around. 3:43 And basically, your PDS, when you publish something, it sends it out to the relay. 3:50 So the way that works is it's a WebSocket, like a permanent WebSocket. 3:55 The relay connects to your WebSocket, and it's Whenever you post something, it sends it out into your— into the relay. 4:03 And as you can probably see from this at the moment, it's not actually doing a huge amount of work, the PDS, per person. 4:11 It's only doing something when you post on it or when you make a query on it because the app view isn't— so when somebody goes and looks at your timeline, they aren't hitting your PDS. 4:23 What they're doing is it's being relayed to the app view from the relays. 4:28 And the relays hold every single post on the network. 4:32 Every single record, every single event on the network goes through the relays, and they send it off to the app view. 4:41 So all of the work, really, the heavy work, is done by the relays and the app view. 4:46 So it's a PDS. 4:49 Doesn't actually do a huge amount of work, but— and anyone can host them, but that's not what people are doing. 4:57 So, you know, 99 point— I mean, these are numbers as of last week. 5:02 99.4% of all users are using the Blue Sky PDSs. 5:09 They're the mushroom ones. 5:11 They're named after mushrooms. 5:15 There are some obviously fast-growing other PDS hosts. 5:22 The new kid on the block is EuroSky. 5:24 I'm not including the bridgey ones on here, because they don't really count. 5:28 But the bridgey one is like 10 times more than that, but I'm not including it, because they're not real accounts. 5:36 So EuroSky is the new kid. 5:38 It's growing very fast. 5:41 Has managed to make it all the way up to almost 0.02% of all users. 5:48 I mean, I think, and obviously Black Sky is also very, you know, is a very solid percentage of users in terms of the ones who are using a third-party PDS or an independent PDS. 6:03 And then there's another, you know, less than 3,000 PDSs out there which, you know, collectively make up, you know, 0.03% of users and that includes all of mine. 6:17 Now, why is that? 6:19 Why is it that people aren't hosting these things? 6:23 It's because it's really heavy and not designed for hosting your— hosting an individual thing. 6:31 It's to This is the Blue Sky reference PDS. 6:37 It's a Docker image. 6:40 There's a hell of a lot of stuff going on in there. 6:43 It's well documented and you can host it and it's great for hosting thousands of users, but it is complete overkill for hosting a single account. 6:54 So I wanted to build something that was easier and that was simpler. 6:59 And was a bit more like how you would host a single website. 7:03 If you're deploying a little single-user website, you're not going to spin up— most people are not going to spin up a Docker image. 7:09 They're not going to hold, you know, run up a whole thing that's got all the databases and all that kind of stuff. 7:15 Most people will just deploy it to a serverless platform or something and host it for free somewhere. 7:21 And I thought, why can't we do with PDSs that are as simple as that. 7:28 So, I'm going to show doing exactly that. 7:33 So, this is my risky demo. 7:36 This is where I'm going to attempt to actually deploy this. Speaker B 7:40 So, I've— Matt Kane 7:43 yes, I can put that up there. 7:52 So I somehow managed to get the create-pds name on npm. 7:57 So I'm making a big thing of that and have made stickers with it and everything because I'm so pleased that I got hold of the PDS name. 8:03 So what I'm going to do is npm create-pds. 8:07 Actually, I'm going to do pnpm because I don't want to wait around all day. 8:13 Oh, I can get there in— I'm watching this on the— I'm doing the screen mirroring on here, so it's not the easiest things of doing. 8:22 So, this is just like a CLI that what I wanted to do was just to make it as easy as possible because moving over to a different PDS is actually, there's quite a lot involved. 8:33 There's a lot of tools out there for helping you like PDS mover and so on. 8:36 But what I wanted to do was to make something that worked end-to-end. 8:40 Now, if I ran through this without talking, it would take less than a minute. 8:45 It wouldn't be much of a talk. 8:47 So I'm going to spin it out a bit. 8:48 You bear with me. 8:49 Hope you don't get bored. 8:51 So, folder name, okay, I'm going to call this Atmo PDS. 8:58 Package manager, pnpm, initialize Git repository. 9:01 Now the point for this is it creates like a little folder like you're deploying a website on your computer and it's just pulling it down, setting up a PDS, I am not going to migrate my account on this demo here. 9:16 I'm going to YOLO this a bit, but I'm not going to try migrating my primary account or any of— I mean, also it can take a while because it's got to move all of your blobs from one to the other. 9:26 So that is the bit that takes a long time. 9:28 When I moved my main account, it took about 10 minutes to move between them. 9:33 I'm sure that there are people who've complained to me that once they started to get to 50 gig, it was hitting limits. 9:39 So some people, post considerably more than I do. 9:44 So, I'm not. 9:46 Then this is where the domain is. 9:47 Now, I said before that I work at Cloudflare. 9:51 This is not a sponsored talk. 9:53 One of the key things that's going to come out of this is that you can do this without paying Cloudflare anything. 9:58 The idea is that this is basically free tier. 10:00 Maybe you'll pay a penny or so for the blob hosting, but you need a domain that is on Cloudflare. 10:07 So, I'm going to do @mos.mk. 10:11 This is really difficult to see, mk.gg. 10:16 Now, I'm going to choose the same account handle as the domain. 10:22 And that unlocks something that makes everything a lot easier. 10:26 Because if I've got the same name and the same as the PDS, because this is a single user, this is something we can do. 10:34 The PDS is also able to serve the documents, the identity documents, So you don't need to do any verification. 10:41 So while I go through this, I'm not going to be going off and doing any DNS records or anything like that. 10:45 I'm going to just say, yeah, I'm going to choose the same thing. 10:48 And I'm generating a DID web document. 10:50 So if you know what a DID web is, then great, well done. 10:54 I'm in the only place in the world where there's going to be more than about 3 people who do know what that is. 10:59 But for those who don't, DID PLC is the centralized record. 11:04 So the DID is your unique identifier. 11:08 That you can take around even if you change your handle. 11:13 DID PLC is the centralized one where it's all like managed for you on the PLC directory, which you'll find at plc.directory, which is hosted by Bluesky. 11:22 DID Web is a kind of more simple, but it's got some downsides, but basically all that is involved for hosting a DID Web is that you have a file on a web server somewhere. 11:34 That's like.well-known/did.json. 11:40 I am going to use the same domain for my DID, my handle, and my PDS, which means that I can host them all, which makes everything a hell of a lot easier. 11:51 Worker name, that doesn't mean anything. 11:52 That just has to be unique per my account. 11:56 So I'm going to take this opportunity to have a sip of water. 12:03 So this one, I think some of you people here might find this interesting. 12:07 You can choose where your data goes. 12:09 Now, this is going on Cloudflare, as I said. 12:12 It's storing it in a durable object, which is one of these weird things that we have at Cloudflare that I didn't really understand until I started working there a few months ago. 12:23 And as soon as I started working there, I was like, I wanna use these for everything 'cause they're amazingly cool. 12:27 That's my sales pitch for the day. 12:31 But one of the things you can do with a durable object is they come with their own little embedded SQLite database and you can say where you want it to go. 12:40 So most people would say automatic, which will basically put it near to where you are when you first create it. 12:46 But we also, for if you want to have data localization, you can have a guaranteed localization in the EU. 12:56 So this one is where it's guaranteed and is GDPR compliant and ePrivacy and whatever. 13:03 So you can choose that. 13:05 Or you can just say if you want it to be located near, if you're creating it at a conference, which is not where you are, you want to say, actually, I want it to be created somewhere else. 13:14 These are not ones that are going to give you a guaranteed location, but I'm going to just choose auto. 13:22 So, I said that there was downsides to using a DID web. 13:26 If you're using DID PLC, you need a signing key to sign all of your records. 13:33 If you're using PLC, then you can rotate your signing key, so it's not quite so much of a disaster if you lose your signing key. 13:42 If you are self-hosting your DID web and you lose your signing key, you are screwed. 13:47 You basically can't sign any more records anymore. 13:51 So save them. 13:53 I'm not going to save this. 13:54 I'm going to save it to a file because this is disposable. 13:57 Have you saved your signing key securely? 13:59 So there's a password. 14:02 Now, I wanted to make this all as non-password as possible. 14:06 So this is most stuff you can do on here, I do use passkeys. 14:09 But obviously, as many people here know, BlueSky doesn't support passkeys. 14:14 So I need a password, and this password is just in order to sign into BlueSky itself. 14:18 I'm going to generate one automatically. 14:21 So, you've noticed that this is saying that a lot of these things have got saved to 1Password. 14:26 That's just because it's detected that I've got 1Password CLI installed. 14:29 So, it will just use that. 14:31 I'm gonna copy it to the clipboard, but if you're doing it with 1Password, that's the easiest because it saves it as a BlueSky login. 14:37 So, it just works straight away. 14:40 And so, I'm gonna copy it to clipboard. 14:44 So, now I just need to remember to not copy anything else before I finish this demo. 14:50 The email address, I don't use the email address in this at all. 14:55 In fact, I don't have it even wired up to email sending because it's a single user. 15:00 So I don't need to verify anything. 15:01 I don't need to notify. 15:02 I don't need to, you know, if I'm moving away, I don't need to, like, send it. Speaker B 15:06 But— Matt Kane 15:07 so the reason I support email address is that some services want one. 15:10 So the first one that I ran into that with was deck.blue, which gave a perverse error message that I eventually tracked down to meaning that I needed an email address. 15:21 So you can create an email address and we will use it for nothing at all. 15:27 So, now we've saved all those secrets locally. 15:30 I'm going to push those to Cloudflare. 15:32 None of those are secrets, you can see up there. 15:36 But now I'm just going to push the secrets. 15:46 And now I'm going to deploy it to Cloudflare. 15:49 This is the risky bit. 15:50 So I'm compiling this with Vite. 15:54 It's basically— this whole thing is just— it's all written in TypeScript. 15:58 The actual thing it's generated— if I've got time at the end of this, I can show what is generated— is basically a Cloudflare worker that is 2 lines. 16:05 Is literally just importing and exporting the handler for it. 16:08 But I've created a whole project in there so that I've got somewhere to put all of your secrets. 16:13 So it does mean that I, for every single account that I've created on here, I've got a separate folder in my repos directory. 16:21 That's the downside of single-user PDSs. 16:23 I'm sure there's a smarter way I could do it, but I wanted to make sure this was single-user. 16:28 So that should actually be live now. 16:31 So I am going to attempt— oh, I almost did something very stupid there. 16:37 Nobody stopped me. 16:38 I'm going to— that's not what I— yeah. 16:45 So the very first thing I'm going to do is log in. 16:48 So this bit here is where you choose which PDS. 16:52 So it says hosting provider. 16:53 It means PDS. 16:55 So my PDS that I— It was Atmos, wasn't it? 17:01 You can see Atmo 2, that was this morning's run-through. 17:04 So, if this has gone wrong, that would be the video you would be watching. 17:08 Atmos.mk.gg. 17:11 So, that's the PDS. 17:14 Because we use the same, I'm going to do Atmos.mk.gg here and place that. 17:20 Looks about the right length. 17:21 I think we've lucked out. 17:24 Add your birthdate. 17:27 Yeah, that'll do. 17:30 The— if I'm in— I don't know why it started doing this because I did set it up that it verifies me because I'm in the UK. 17:38 So, in the UK, you have to verify your age on this. 17:42 So, I've got it hard-coded that everyone is verified when you create it because, you know, if you're responsible enough to create your own PDS, then you're responsible enough to chat with people. 17:55 So I have now got this account on here. 18:00 Now, if you were to go and look for me and I was to post anything, nothing was actually going to happen. 18:07 So what I'm going to do here is actually connect to the network. 18:14 So this is— Okay. 18:22 So this is the dashboard. 18:23 So this is how— obviously, we showed before that we were having to be part of the network. 18:30 The Blue Sky network has to know that we exist. 18:35 This— I managed to log in here without the Blue Sky— without the whole Atmos@Prota network knowing I exist. 18:41 Because I talk directly to my PDS here. 18:43 So as far as the network knows, I don't exist. 18:46 But as far as my browser here knows, I have just gone through a JWT signing, hit the APIs, all that bloody blah. 18:54 So at the moment, nobody knows. 18:56 But I've got one subscriber here. 18:58 That one subscriber is me. 19:00 That is the dashboard connecting to it. 19:03 So nothing is going on there. 19:05 Oh my god, I was hoping this might happen. 19:10 So, some people know about me. 19:13 What I'm going to do here is I'm going to request the crawl, and what that is doing is telling the relays I exist. 19:19 And look, US East and US West now know I exist. 19:22 Basically, what this did is just pinged them with a crawl request. 19:26 And now, we can see that the Firehose is connected. 19:29 So we've got two things connected on the Firehose. 19:33 They're at cursor 0 because we have nothing in this repo. 19:36 So let's change that one. 19:37 Let's write a post. 19:39 I'm going to say, "Hello Atmosphere." And let's post that. 19:46 There we go. 19:47 So this is the event here that has happened on the Firehose. 19:52 So this is my most trickily little Firehose you're going to get. 19:56 I've dropped a single— a single event has come off that. 19:59 Firehose. 20:00 And I can see it's worked because it's shown up here. 20:03 It wouldn't have shown up otherwise. 20:05 If the thing's not working, it wouldn't show up. 20:07 So, what some people here might find is that if you search for me on Blue Sky, I may not be visible because it might not have been indexed. 20:18 So, what I was trying, and I might be able to do this, is— It is visible? 20:26 It is visible. 20:28 So I've got 10 followers now. 20:30 Well, I can see all this stuff going on here. 20:32 So I've still only got one post. 20:34 I've not done anything else. 20:35 So I think the first thing I need to do is give myself a name. 20:39 I'm going to just say that I am @mopdsaccount. 20:48 I know, very interesting. 20:52 And so what that has done is that's created another record here. 20:57 So this is the profile is a record itself. 21:01 But now I've got all of these followers. 21:02 So if I follow all of these people back, you can see that this is creating a follow record. 21:08 So each one of you people here— say hi if you're one of the people I'm following. 21:16 Each one of these here is creating a new record. 21:19 Now, if I was to then go on to any one of these other atmosphere non-blue-sky things and created another record on here, it would show up. 21:30 So you can see I've got 3 types of thing here. 21:32 I've got a lot of follows in there, but I think what I'm going to do is I'm going to go and see Willow's stuff, because I know that she writes some good things. 21:39 And I'm going to say, oh, yes, those are amazing stickers. 21:44 Oh, hi James, I'm going to like both of these. 21:47 And now we can see those are coming up through as likes on there as well. 21:52 These notifications are not on the network. 21:55 What I've got here is I'm directly logging in to the app view to grab the notifications because the notifications are authenticated, which means that they can't be on the app proto network itself. 22:06 So basically, it's the same as the stuff that's coming through. 22:10 On that. 22:11 So, what I've got is that I'm able to show all of these things that we've created. 22:21 And this is, you know, this— if I'd done this without waffling, that would have taken less than a minute. 22:29 And some of you people here might have tried it out while I've been sitting here. 22:35 You would— I mean, The difficult part is you would need an account with a domain on Cloudflare. 22:41 You also, unfortunately, do need a credit card or a card or some payment method, not because we're going to charge you, but because we need to store blobs on there. 22:50 And blobs are massively abused on Cloudflare. 22:54 People put all kinds of crap up there, which means that you can't put blob— you can't use R2, which is the S3 compatible thing without a card on there. 23:06 So, even though, you know, it will— if you get charged, it will be pennies, but that's the way that that goes. 23:13 So, let's— that was— I'm not done yet, guys. 23:22 Thanks for the applause. 23:23 Thanks for the applause. 23:24 But I haven't told you how it works yet. 23:27 So, I'm gonna put my glasses on so I can see you lovely people again, and I'm gonna actually talk about how this thing works. 23:37 I've got, still got a few minutes, 6 minutes, okay, I've got time to talk about how it works. 23:42 So, it's inside Cloudflare. 23:45 It's, that's mainly just because it's an easy way for me to put everything all in one place, and the key part of that is the Firehose. 23:57 I'll get into why that's special. 24:00 But basically, so as I said, the client is the browser, the web browser or your mobile app. 24:09 And that talks to the worker, which is basically running a HONO little web server on there that just does the xRPC API endpoints. 24:18 There's a load of API endpoints that it serves on there. 24:22 and it's, you know, doing the sending messages to it. 24:26 And the durable object, which I mentioned there, is where the kind of the magic happens in there. 24:32 So it's got an SQLite database in there which stores your whole repo in there, all of the MST stuff in there. 24:39 It's all one big database or little database, really. 24:44 And then there's the Firehose. 24:47 Now, the firehose is the thing that makes it really difficult to host a PDS on a serverless platform in most cases. 24:56 You can't put it on an AWS Lambda or something like that because it needs a continuously connected WebSocket. 25:06 The actual thing that made me decide to build this was when I found out that you could do hibernating WebSockets on durable objects. 25:15 What that means is that you can have a WebSocket on this PDS that is open all the time and connected to the relay all the time, but you're not paying unless you are sending an event. 25:29 If there is nothing going from it, it just goes to sleep. 25:33 It hibernates it, but as far as the relay is concerned, it's still connected. 25:36 It thinks that it's connected, but it's actually just being held by some part of our Cloudflare infra or something. 25:42 But when you then want to add— send an event when you're posting something, it wakes it up and pings it off onto the relay, and you get charged for a few seconds. 25:50 Well, you don't get charged because it will be within the free tier unless— I think even the craziest of posters won't be able to get outside the free tier on this one. 25:58 And then it uses R2 for storing all the blobs. 26:01 That's all still inside Cloudflare. 26:04 And then it proxies it to the app view, which is wherever it is. 26:10 And I didn't show you a few things. 26:11 So there's account migration, which is built in. 26:14 So that was one of the things I didn't want you to have to use any third-party service, however good they are. 26:20 I wanted it to all be just done through this Create PDS workflow. 26:25 So if you are migrating something, you will move over to where it'll take you through a different flow. 26:32 You'll put in your password. 26:33 And it will migrate everything. 26:34 It will download it all and then upload it, and then it will help you do the PLC, the DID PLC migration and all that kind of stuff. 26:43 It uses passkeys for most stuff. 26:44 I was going to demo passkeys, but it sticks a bloody great QR code up on the screen. 26:49 So I was like, no, this is probably not the best way of doing that. 26:53 But that's something I'm particularly pleased with because to add a passkey on there, it does a QR code in the terminal that you can use to scan it. 27:02 And that works for all of the, you know, all the third-party services and everything. 27:08 So, this is a personal data server. 27:12 This is the thing. 27:13 This is— you can build one for yourself. 27:16 And I think there are— I think that there's a, you know, most people do want to have their PDS hosted by Blue Sky. 27:29 That's where it makes sense to do it. 27:30 But I think that if we want the App Proto Network to be properly decentralized, we need to have lots of different ways of hosting. 27:40 And I think that it needs to be easy for a service to have their own PDS. 27:46 Any of these other services can provide it for their users that they want. 27:52 But I think there also needs to be an easy way for people to deploy it themselves. 27:56 And I think that one of the things that I really love about this group of all of us, you know, weirdos, most affectionately, here, is that it reminds me a lot of early web stuff. 28:09 And one of the whole things about the early web is that you could, you know, deploy your own stuff and do all kinds of— and I think that the fact that all of the reference architecture of The atmosphere is blue sky stuff means that it's very much angled not just towards the social use case, but also to the massive scale. 28:34 And it's great that people are building all these other different implementations, but I think that we need more ways for people to just make this as easy as sticking something on Netlify or Vercel or Cloudflare or whatever. 28:49 Whatever you think of them, they are a very, very easy way of putting a website up. 28:53 And I wanted this to be a way to make it that easy to put a PDS up. 28:58 So hopefully some people will try this out. 29:02 Follow me, follow my 15 other variations of this that I used over the past week while I've been practicing. 29:11 I'm sure they're all going to have really useful things things to say. 29:15 And thank you, everybody. 29:18 One minute. Speaker B 32:03 Hello. 32:03 All right. 32:04 Start over for the stream. 32:06 Hello. 32:07 I'm Tyler Fisher. 32:08 I make a project called Syl, which is a client on top of the Bluesky post-lexicon. 32:12 That aggregates the top links in your network. 32:15 It's a unique client experience that nothing else in the atmosphere offers right now, and I think we need more unique types of clients, so I'm going to talk about how we can achieve that today. 32:27 Last year, I moved to Haarlem, a small city in the Netherlands. 32:31 At the center of the city, we have the Grote Markt, a large public plaza that is overlooked by the Sint Bavoek, the giant church. 32:39 It's a grand plaza that on the weekends turns into a public square for local vendors, but at any time during the week, it's a lovely place to be. 32:49 It's quiet, safe, comfortable. 32:53 You also notice in this photo it's car-free. 32:56 The Netherlands is famous for its pedestrian and bicycle infrastructure, but it wasn't always this way. 33:01 The Grote Markt in the 1960s was more of a parking lot. 33:05 And a road and a traffic circle going through it. 33:08 When visitors visit the Grote Markt today, they tend to think of it as it's always been this way. 33:15 This is an ancient public square that's been this way since the 1300s. 33:19 But it's not true. 33:21 The Grote Markt was transformed as a result of sustained protest and community engagement in Haarlem during the 1960s and '70s to rip out the road, to rip out the parking, and make it a pedestrianized plaza. 33:33 This got me thinking about how cities transform to places that are designed more for people and what we can learn from walkable cities about transforming digital spaces. 33:45 Ultimately, walkable cities are about getting people to walk or take some other form of mobility to their destination instead of driving a car. 33:54 The American city planner Jeff Speck gave a talk in 2013 about building walkable cities. 34:00 He says that a walk has to offer 4 things for somebody to walk or take some other form of mobility instead of drive. 34:09 It has to offer these 4 things simultaneously. 34:11 There needs to be a proper reason to walk. 34:13 The walk has to be safe and feel safe. 34:16 The walk has to be comfortable. 34:17 And the walk has to be interesting. 34:21 I, like many of you, have been thinking about how do we grow the atmosphere. 34:25 Building the atmosphere is an infrastructural change. 34:29 To the internet on the level of transforming a city from one that is car-centric to one that is person-centric. 34:35 So, in thinking about this problem, I found myself revisiting Speck's theory, but for the atmosphere. 34:41 There needs to be a proper reason to join the atmosphere. 34:44 The atmosphere has to be safe and feel safe. 34:48 The atmosphere has to be comfortable, and the atmosphere has to be interesting. 34:52 We can break this theory into 4 parts. 34:54 Purpose, a proper reason to join the atmosphere. 34:58 Safety, the atmosphere has to be safe and feel safe. 35:01 Comfort, the atmosphere has to be comfortable. 35:04 And interest, the atmosphere has to be interesting. 35:07 I'd like to propose this 4-component framing as a structure for how we think about building atmospheric clients. 35:14 In this talk, I'm going to walk through each of these 4 components and what they mean for client design. 35:19 I'll talk about how I think about them in my own projects. 35:22 And offer some inspiration from elsewhere in the atmosphere that I think do some of these things particularly well, and discuss what opportunities I see for us to further atmospheric clients in these four directions. 35:35 Let's start with purpose. 35:36 Speck's original theory describes us as having a proper reason to walk. 35:40 For this, he means having a destination in mind. 35:43 For a walkable city, you have to have schools and doctors, restaurants, bars, grocery stores, uh, everything you need within walking distance. 35:53 We're all here building new apps, new experiences, trying to entice people to join the OpenSocial web. 35:59 But why would they? 36:00 Often we lead with, uh, pitches about data sovereignty, privacy, openness. 36:04 And while these are critical features— it's why we're all here— um, they should be a given for atmospheric applications. 36:10 People need more purpose than that. 36:12 Um, it's not enough to build the pedestrianized streets of the internet. 36:16 They have to go somewhere. 36:18 The inability to convince people to join new social networks is a long-studied problem. 36:24 Switching costs are real. 36:26 People won't move unless their network has already moved. 36:28 We can't solve this problem overnight. 36:31 What's exciting about AT Proto is the opportunities offered by the PDS. 36:36 There have been over 40 million signups for Bluesky so far, each with their own PDS. 36:41 Each of those already have an account with your app too. 36:44 But if you're offering your own experience and your own lexicon separate from the Bluesky experience, this is somewhat cold comfort. 36:50 Um, 40 million people can sign into your app, but if there is no real content and their people aren't on your lexicons yet, there's not going to be much for them to engage with. 37:01 So how can we leverage the Bluesky existing network, uh, but offer new experiences that offer new motivations to join the Atmosphere? 37:10 One option is to build clients on top of the existing lexicons, but