Eliot Hertenstein 0:01 Okay, this is going to be an exciting one. 0:03 We're going to be talking about product development with quite an auspicious crew here. Paul Frazee 0:07 We've got Elliot from Expo, we've got Reid from Skylight Social, we've got Eli from Streamplace, and then we've got Paul Frazee from Bluesky. Eliot Hertenstein 0:20 So I'm going to let them take it away. 0:26 All right. 0:27 Welcome. Eli Mallon 0:28 Oh, yeah, we do need the mic. Eliot Hertenstein 0:31 All right. Eli Mallon 0:32 Welcome, everyone. 0:32 Thank you so much for being here. 0:35 Just to start, I would love to have you guys introduce yourselves, a little bit about yourself, what you're working on. 0:39 And we'll go from there. Eliot Hertenstein 0:41 All right. 0:41 Sounds good. 0:44 Hey, there we go. 0:45 There we go. Paul Frazee 0:46 Well, hi, everybody. Eliot Hertenstein 0:46 I'm Paul Frazee. 0:47 I'm the CTO at Bluesky. 0:50 I think the specific reason I'm on the panel is because back when Bluesky was very small, I was the lead engineer on building the Bluesky application, which I did with Expo and React Native. 1:03 And I'll just go ahead and spoiler alert, wouldn't have been able to do it without the help of Expo and React Native. 1:09 So I'm here to share that story. Paul Frazee 1:14 My name's Eli Mallen. 1:15 I'm the founder and CEO of Streamplace. 1:18 If you're watching this remotely right now, that's that thing. 1:23 And I also, from the start, We have built Streamplace using Expo and React Native WebRTC and some other technologies that we will get into. Reed Harmeyer 1:40 And I'm Reed, the CTO of Skylight Social. 1:43 And we built Skylight on Expo. 1:45 I've been using React Native since like 2017. 1:48 And when we thought about how to build this video app, we were like, okay, well, we're going to start with React Native. 1:56 And then luckily for us, the video component itself was already a library that Expo was offering. 2:03 So we were able to get a working prototype in 2 days and release it before TikTok had gotten banned last January. Eli Mallon 2:13 Cool. 2:14 So Paul, just to start with you, you mentioned Expo made a lot of stuff possible. 2:18 And so I wanted to start— this is to the whole panel, but what has Expo specifically made possible What has App Proto made possible? 2:24 I guess Blue Sky is built on it. 2:25 But how have they combined in building up Blue Sky, especially in the early days? Eliot Hertenstein 2:30 Yeah, so should we assume that people know what Expo is? 2:34 I can— Eli Mallon 2:34 Oh, yes. 2:35 OK. 2:36 Maybe I'm happy to give a very quick intro. 2:38 Expo is a way to build cross-platform mobile apps. 2:41 We're the main way of building mobile apps with JavaScript or TypeScript. 2:45 And then they run on both iOS and Android. Paul Frazee 2:47 Yeah. Eliot Hertenstein 2:48 Well, and so for us kicking off, we had 12 people maybe when we were first writing the Blue Sky. 2:57 Actually, not even that. 2:57 I think we were maybe at like 6 when we were first building the application. 3:02 And the reality is that when you have a code base that is an application, for every code base you have is a different product, more or less. 3:11 So if you're trying to write for both, you know, 3 platforms really, iOS, Android, and web, if you're building 3 different code bases, you basically have 3 different products with their own teams that are maintaining their own roadmaps, their own issue trackers and things like that. 3:25 And you're kind of just working with each other on the concepts that you're going to implement on each one of them. 3:32 You see this sometimes actually when you switch between apps. 3:35 Like I think Twitter for a long time had a pretty different— like you would get into the Android one and be like, oh, it's kind of different, actually. 3:42 That's interesting. 3:43 Because it's a different product. 3:45 It's a different team. 3:47 So that was just not viable for us. 3:50 It was just me doing frontend for a long time. 3:52 And then as the complexity of the product continued to grow and more features came in, the challenge of the idea of having multiple code bases became even less viable, even though we were getting more help. 4:02 So having one code base to target all three of the platforms using technologies that we were already familiar with certainly helped as well— TypeScript and React. 4:13 Essentially CSS, kind of a CSS variant, really helped us hit the timelines that we needed. 4:19 And it's no joke. 4:21 You can't ship just iOS or just web or just Android. 4:26 It's very, very limiting to do that. 4:29 And people expect to have the platform be available in all three places. 4:32 So I don't think we would have been able to accomplish the rollout that we needed to do and hit our business objectives if we weren't using Expo and React Native. Eli Mallon 4:40 Yeah. 4:41 And so Eli, same question to you, although I'm curious also for Streamplace, which is obviously dealing with video. 4:45 How is that working with Expo and shipping to multiple platforms? Paul Frazee 4:49 Yeah, yeah. 4:50 I mean, the first part of the answer is the same, right? 4:52 So building any kind of Twitch competitor, we very much needed an iOS, an Android app, and a website as quickly as humanly possible. 5:01 And I just don't think there's— maybe there's other frameworks that would argue with it, but I think Expo is the most credible way to try and do all of those things. 5:10 The other piece for us, For us, part of StreamPlays' strategy as a company is that live video infrastructure and software is very, very difficult, one of the harder things you can do in technology. 5:23 And a lot of the other teams in the atmosphere aren't very excited about taking that on. 5:28 So from the beginning, we've really, really wanted to, as much of our code as possible needs to live in libraries that are accessible to other applications that they can access. 5:39 And so that eventually means, unfortunately, because Expo is not the only framework in the world, that does eventually mean we need to— and we have in various stages of development, we have sort of like React Native slash web library, that's the main one. 5:52 And then we've got like a Flutter library in development. 5:55 We've got a native Swift OS library in development. 5:57 We'll probably do something for Android at some point. 5:59 But in terms of getting the biggest slice of the pie that we could as quickly as possible, building that with with Expo and React Native and building that library made a lot of sense. 6:13 Unique challenges of dealing with video. 6:16 I would say that for us in particular, if you're watching the livestream now and it's working, which it seems to mostly be doing so, I attribute that mostly to WebRTC playback. 6:32 That's the technology we built on. 6:33 It's the same technology that's used to power Google Meet. 6:36 And if you've had a conversation in a web browser with somebody, it was built on WebRTC. 6:41 WebRTC. 6:42 It's very good at, for example, if something goes wrong, recovers because it's trying to play back the video as quickly as possible. 6:49 That's been a pain. 6:51 Even with as much help as we can get from the frameworks and stuff, we've had to get something like picture-in-picture playback working. 7:00 So when you navigate out of the app, you still have it up there in the corner. 7:03 We needed to use forked versions of different WebRTC libraries, do our own native builds. 7:09 Building all of this in an open source way that theoretically other people could build. 7:13 So then we don't use from Expo is like the— I'm blanking on the name— the like Cloud Build. Reed Harmeyer 7:18 Yes. Paul Frazee 7:20 Yeah. 7:20 Because we need to be able to build all of everything ourselves in a Docker container. 7:24 So yeah, yeah. 7:26 I would say once we got it all wired up, it worked pretty well. 7:28 But definitely the build process was a big challenge. Eli Mallon 7:31 Yeah. 7:32 And then Reed, you're also dealing with video in a kind of different format. 7:36 So I'm curious how you've dealt with that in similar or different ways. Reed Harmeyer 7:39 Yeah, I'm lucky that I think it wasn't that long before that you guys released a new Expo video package. 7:45 And that helped me out a lot, obviously, because it did allow me to start with Expo Go. 7:53 And you're able to build these native modules in Expo. 7:56 It's kind of the most important part of it that you can go to the native side instead of the JavaScript side whenever you actually need it. 8:04 So you're kind of never limited on what you can do. 8:08 But Expo Go is kind of like the preset group of modules. 8:12 And it just allowed us to focus on the things that the users were caring about because we kind of immediately had a lot of people who were interested in using our app or using our app. 8:24 We had about 150,000 users in the first 3 months. 8:28 And so there wasn't a lot of time to work on anything except for things that the users were actively in our comments about. 8:37 And because of Expo, it was basically like we just got to work on those specific behaviors. 8:43 Somebody would report a bug, and because we could do over-the-air updates, which are like JavaScript-only updates, we could fix it immediately and then comment back and then just move on to the next thing and just do that over and over and over again. 8:56 Versus if it was a Swift app, we would have had to go through a whole App Store deployment of several days before they ever got feedback. 9:04 And they would have just given up on us, basically, in those 3 days. 9:09 So yeah, that's been my experience. Eli Mallon 9:11 That makes sense. 9:12 And then, so Paul, I'm curious. 9:13 You mentioned earlier you have to build for a bunch of different platforms. 9:17 And now in the mobile space, it's really easy to iterate on web. 9:20 And before Expo, there wasn't an easy way to iterate on mobile. 9:23 But I'm curious why even target mobile in the first place. 9:26 Why is mobile important to Bluesky as a platform? Eliot Hertenstein 9:29 Well, the web mobile experience in a web browser is pretty good. 9:38 But there's a lot of interaction patterns that you just can't accomplish. 9:44 One hopes that PWAs will someday. 9:47 Yeah, yeah. 9:49 It seems to get jammed up. 9:50 And it seems to be some kind of politics between Apple, I think, and Google. 9:54 Google really wants it because they're sold on web tech. 9:56 So I think it's Apple that's kind of jamming it up. 10:01 Gestural interfaces are very much the expectation with mobile. 10:05 And I'm doing a mobile web application right now. 10:08 And I had to stop and go, I can only tap. 10:13 How do I design this? 10:14 This is very interesting. 10:17 Found some stuff, but it's a little weird. 10:19 I also can't do vibrations. 10:20 So there's no haptic feedback, which is the worst. 10:22 When you press on a button and it doesn't give you a little— oh, gosh. 10:25 So you get a little bit crippled whenever— because the web is— Apple has been pretty opinionated about the web should be for web documents, essentially. 10:32 It's just not their application's runtime. 10:34 And so you've got to go native for that reason. 10:36 That's reason number 1, is the usability of the application. 10:39 Reason number 2 is that people look inside of the App Store to find the apps. 10:42 That's just how it works. 10:44 If you're not there, then you don't exist. 10:47 And I think that's pretty much it. 10:49 You want to have a good experience. 10:50 People aren't going to accept less. 10:52 There are still some people— I mean, the only people that are really hardcore on the web are the big, real big nerds. 10:56 So you kind of have to meet people where they're at. 10:59 And that's native. Eli Mallon 11:01 Yeah. 11:02 And so then same question for you, Eli. 11:03 Why is native mobile apps— why is that important for String Place? Paul Frazee 11:07 Yeah, I would say it's just sort of table stakes to be taken seriously in terms of releasing something. 11:13 I mean, the other piece, of course, is we want to be able to stream from phones. 11:20 And I think that you wouldn't be taken seriously as a streaming platform if you didn't have that capability. 11:27 And so that was very, very necessary to go to mobile. 11:30 It hasn't always been the difficulty of building this in sort of a library fashion for other mobile apps has been a particular challenge. 11:39 I don't know if there's a good— there's a funny story on like the interaction between Skylight was one of the first apps to integrate Streamplace live streaming. 11:49 And we accidentally did a thing where when you log into Streamplace, one of the first things we do is create a place.stream.actor— place.stream.chat.profile record because it just shows what chat color that you have. 12:03 And of course that makes perfect sense when you log into Streamplace. 12:05 Then we integrated into Skylight and I didn't realize I had kind of put that in the library code instead of the app code. 12:10 So as soon as you booted Skylight, you got a place.stream.chat.profile record even if you hadn't interacted with like the Streamplace features within Skylight, which made us seem sort of aping off Skylight's popularity a little bit. 12:22 All of a sudden we were like the second most popular, we were like the most popular non-Bluesky lexicon in the atmosphere because of that integration, which I guess felt good, but wasn't really legitimate. 12:33 So yeah, in that context, like figuring out— but I think, you know, as much as like the Atmosphere stuff has been built to be interoperable, some of the norms around that kind of like what does make sense there, right? 12:46 Like probably if you're going to go tap into chat and participate in it, then it would be appropriate for us to create that record. 12:52 And we just like don't really have community norms around that kind of thing yet. 12:54 So I don't know. 12:56 I think I went away from your question a little bit, but that was a unique challenge. Reed Harmeyer 13:00 That was a really funny story. 13:02 I'm guessing you're asking me the same question. Eli Mallon 13:03 Yeah, yeah, yeah, basically. Reed Harmeyer 13:04 I want to add to Eli's story because what it initially started as was he thought he was being attacked, like by a DDoS attack. 13:12 It was like, no, I just added your library to our codebase. 13:20 But it was really important for us, probably even more so than these guys, because the gesture of swiping through TikTok is so specific. 13:27 And it would have been impossible doing the web. 13:29 I tried on day 3 to try to do it. 13:33 And it was like the way that Safari works is you have to go click something to start playing a video. 13:38 They won't even let you do this thing that TikTok does. 13:42 So we don't even really have that much of a web app. 13:46 It's just all mobile for us. Eli Mallon 13:48 I see. 13:48 And then just to follow up on that, what was scaling like for you with Hex? 13:52 Because you mentioned— I think Bluesky also had this a bit, just going from— your user growth was so crazy, and was Expo part of enabling you to scale in that way? Reed Harmeyer 14:01 Yeah, I think so, because we just were able to be so client-focused because they had built all this infrastructure in a way that we could use it. 14:10 We could really just focus on the client and trying to reach parity on that side in client-based solutions. 14:16 But then also when we did need server code, there was EAS hosting, and it was like we could just throw it in the same codebase. 14:22 There wasn't a whole separate thing. 14:24 For us. Eli Mallon 14:25 Yeah. 14:26 And so then I'm also curious, just as a kind of state of the ecosystem, like if there's anything that you guys want to just think is really cool that you've seen in either that proto world or the expo world that you want to shout out or just are kind of excited to build with? Eliot Hertenstein 14:39 Oh, well, I mean, my talk in what, 15 minutes is like nonstop shoutouts. 14:44 So you can't give away my talk. Eli Mallon 14:46 I don't want to spoil your talk. Eliot Hertenstein 14:47 Yeah, yeah, yeah. 14:49 I'm sorry. 14:51 So actually, I am going to pass because I don't want to— OK, fair enough. Paul Frazee 14:54 So this is becoming part of the @proto world, but Media Over QUIC is the sort of next generation way that we are going to replace both sort of traditional HLS-based video playback on the internet, especially for live streams, as well as WebRTC. 15:13 And yeah, it's just like all of the different arrows that we used to use all of these different protocols for are moving toward Media Over QUIC. 15:20 As well as two Cisco engineers recently put out a paper explaining how you would do app proto relay data over Media over QUIC, which totally blew up StreamPlace's technical roadmap, 'cause I'm like, oh, I thought we would do MOC someday, and it was like, oh, that'll be like a fun optimization. 15:36 But now it's like, oh, this is the only protocol we would ever need for everything. 15:42 The app proto data, media data, we can just like speak one language across absolutely everything. 15:47 Yeah, every time I talk to anyone from Expo, I'm like, please Expo Media Over Quick. 15:51 The existence of that library is going to make my life so much easier. 15:55 And also, it'd be good for people's battery life and everything. 15:57 But mostly me, it would be good. Eli Mallon 16:00 We'll work on it, yeah. Eliot Hertenstein 16:01 Yeah. Reed Harmeyer 16:03 I'll say on the Expo side, the Liquid Glass stuff that you guys have, to just be able to get that and it's not super hard to configure, you can get the accessory view stuff. 16:14 That's really nice to be able to provide the high fidelity experience for— iOS apps and stuff like that. Eli Mallon 16:20 So then I'm curious also just to kind of for the whole panel, like at Proto Conference, is there a kind of weird or interesting way that you're using the protocol that maybe isn't exactly as it was designed but works really well for your specific use case? 16:33 I have a feeling Eli might have some specific— Paul Frazee 16:35 That was the question that I should have told that story in response to. 16:38 I have another one though, which is so I found myself— this is a little bit of a preview of my VOD talk. 16:47 In an hour or two, but I found myself in a situation where, so you know, you've got one stream place architecture, you've got one server that's ingesting the live stream and signing all of the segments that come in, and then I needed to start archiving them and making it available across lots of different servers, especially so you can provide what live stream engineers call DVR, right? 17:09 So you can seek back from the live stream and go see what happened a couple minutes ago. 17:13 In order to make that happen, I needed to sync that data from the origin server to a bunch of other servers. 17:21 And I realized what I had was like all of these little blobs. 17:25 And I needed to have a sync protocol that could go from one server to another and make sure that they both got an up-to-date state. 17:34 And I started coding something. 17:35 I'm like, wait a minute. 17:36 This is an @proto repository. 17:38 That's exactly what I'm doing. 17:39 So that's That will be in the VOD talk. 17:42 That's kind of how we're doing that. 17:44 I have turned it off for relays because you get a new segment every second. 17:48 We would get throttled by the entire atmosphere if we released that out. 17:52 So currently that's like a new peer-to-peer at Proto thing that I'm going to be talking about in a little bit. 17:56 But yeah, yeah. 17:58 But it all— because it's the same primitives, it all does still work. 18:01 So if you're a third-party app that wants to integrate with Streamplace, you can subscribe to the Firehose on the Streamplace stream. 18:10 You use all the existing app proto libraries that you're already using for everything else. 18:13 So yeah, yeah, interesting fit. 18:15 I'm not sure how many things like that there are in the atmosphere right now. 18:19 But we're going to see what happens if we do app proto, but really, really fast. Eli Mallon 18:24 Cool. 18:25 Reid, I don't know if you have any. Reed Harmeyer 18:26 Yeah, I got a good one. 18:29 So I think this is kind of, I think, related to Rudy's talk earlier that I believe these apps will kind of move somewhere between a bespoke social app, but also with a bunch of extended secondary features to be kind of like a browser too. 18:45 That's what we kind of saw from Skylights users, that it was like there really wasn't any reason not to show all the other stuff that's going on. 18:55 And it was actually really powerful for getting— for kind of delivering a core user experience where it's like, hey, look, this might be a video-first app, but there's actually these posts, and they might be related to the stuff that you liked watching as a video. 19:09 And so I think— and this kind of then relates to Expo— that if we're all kind of doing the same things, we can have these libraries. 19:16 And we all end up with these slightly different versions of browsers and stuff. 19:20 And that's probably what the future looks like. Eliot Hertenstein 19:22 Cool. Eli Mallon 19:23 I don't know if you have anything weird ways— Eliot Hertenstein 19:25 Using the protocol in unexpected ways? Eli Mallon 19:28 You're kind of linked to the protocol. Eliot Hertenstein 19:30 Yeah, we had an unfair advantage on that. 19:33 We actually— I mean, I guess I can use— the answer is not really. 19:37 But two things do come to mind. 19:38 One of them is that I didn't think bridging to ActivityPub would work. 19:41 I told Ryan, like, don't even try it. 19:45 And he proved me wrong, like, big time. 19:47 That works shockingly well. 19:50 So I suppose that in a way is a bit of an abuse of it, especially the, you know, like the automatic kind of mirroring of the accounts and the infrastructure. 19:56 I kind of still can't believe that worked. 20:01 Yeah. 20:03 Woo! 20:05 What was the other thing I was going to say? 20:06 I think I lost it. 20:07 So that's it. Eli Mallon 20:08 Yeah. 20:10 And then kind of on that same note, I'm curious for all of you guys if there's anything that you could like snap your fingers now and just ignore all of the technical complexity and implementation, if there's something you'd like to be in the app protocol. Eliot Hertenstein 20:22 Oh, that's an easy— Eli Mallon 20:22 I don't want to spoil your talk. Eliot Hertenstein 20:23 That one won't spoil my talk. 20:25 No, it's the permission data system. 20:27 Yeah, I think everybody's kind of on the same page with that. 20:30 I mean, the good news is that like now it's a dedicated work stream, right? 20:34 Daniel published his kind of informal version of the proposal that we're making. 20:38 And there's a number of different proposals also from the community that have been getting shared. 20:42 So we're gonna be able to come out of the conference and start to side by side all of them and drive towards actually having permission data. 20:47 And so I've been saying like, okay, by the middle of the year, let's try to have this thing actually in production and getting to go. 20:53 And I guess we'll get to look back on the video next year and see if I was right or not. 20:58 But that's roughly, If I could snap my fingers now, I would have it. 21:02 Because I think that's the last kind of really big fundamental piece to the technology before we can just start to build any kind of application we want. 21:09 So I'm very excited for that. 21:10 Cool. Paul Frazee 21:12 I'm doing good at answering your questions one too early, because I would say it's the Expo Media Over Quick thing. 21:18 Something else I'll throw out. 21:20 There's obviously always— I don't have the solution yet, but there's obviously always tons of room in taming OAuth complexity. 21:27 That's one of the most difficult things for people to implement. 21:33 In particular for us, there have been 3 Streamplace frontends created by third-party developers since the beginning of this conference 2 days ago, which I don't know if that's not like a good review of our frontend if people are like, "I gotta make my own." But it's awesome that it's possible. 21:53 And but it's a really weird interaction because when you log into Streamplace itself, we do server-side OAuth. 22:00 OAuth and have access to your key, which is important for live streaming because we update stuff in your repository without you being there taking actions, right? 22:10 Like when you have a live stream going, it updates the timestamps on it and all of that is automated. 22:17 I have no idea yet what the relationship between that and like these third-party applications look like. 22:22 Are they going to OAuth to Streamplace and then to something else and then through this other front end and like add another layer in there? 22:30 Is there some way to do these automated interactions when you log in with the other app and you're streaming in. 22:35 I don't know. 22:36 So that's, yeah, lots of complexity there that we just need to figure out stories around all that stuff. Eliot Hertenstein 22:41 Yeah. Reed Harmeyer 22:43 I'd say from my side, the thing that I'd like to add to the protocol other than the permission data would be if we could basically bring our AI with our data to these applications to have a kind of an agent that you own. 22:59 So it's not Meta's intelligence or personalization system recommending you videos. 23:04 It's your own paid-for cloud or whatever subscription. 23:10 And I think in particular for us, we kind of figured out that one of the limitations we were going to hit is how much personalization we could actually do for Skylight. 23:21 And it would have made a pretty significant difference if we could have relied on the users themselves to kind of cause that personalization to happen to their app. Eli Mallon 23:31 Yeah, cool. 23:33 And then one final question, I guess. 23:35 I think there are a lot of people maybe watching who have seen the app proto but haven't really experimented with it. 23:41 And I think there is a bunch of technologies like Expo that make it easier. 23:44 But do you guys have any pieces of advice for developers who've looked at it but haven't yet played around with it, or maybe just something that the app proto makes super easy that's exciting? Eliot Hertenstein 23:53 OK, yeah. 23:53 Well, I've got a little bit of a canned line that I'll they'll hit you with on that. 23:56 So I would say that Expo and App Proto, the similarity between them is that they're both web heads invading other things. 24:05 So Expo is taking web technology and invading native application development and making it so that you have one shared thing. 24:11 And I think that the App Protocol is the same story. 24:14 It's the mentality and ethos of web application developers, people that believe in the open web, applying that to the server side of things. 24:21 The other commonality is that they both do a lot for you. 24:25 They kind of help you get to where you want to go faster. 24:28 And I think that as Expo has matured a little bit longer than App Proto has, as App Proto gets even more mature, it's going to feel even more kind of like backend as a service as a protocol in a way where you're getting accounts for free, you're getting access to the network by default, and increasingly, hopefully, helping with cold start, being able to tap into existing activity networks and things like that. 24:53 Yeah, I guess the tip would be check the docs and ask the agents because they are getting hooked in. Eli Mallon 25:00 Cool. 25:01 You'll ask him a question? Paul Frazee 25:02 Yeah. 25:02 Something I think is the— that Proto is super good for that I think is underutilized right now is real-time applications where you get immediately— you get immediate, you know, the UI re-renders as soon as data comes in. 25:17 Streamplace chat. 25:18 When I first wired it up, I thought, I was like, let's do it. 25:21 This will be funny. 25:22 This will be like a little hacky way we'll do it. 25:23 What I'm going to do is just make a chat message and then push it to the user's PDS. 25:27 And then it goes all the way from that PDS to the relay to the Streamplace app view. 25:33 And then there's another WebSocket that goes all the way back to the browser. 25:36 And we're going to see like, oh, it'll be funny. 25:37 It'll be like so slow, but it'll be like kind of like chat that's working. 25:40 And it's just great. 25:41 It just kicks ass. 25:42 Like it's so fast. 25:44 It is like the finality in that, like, you know, we do the standard reactive rendering thing where you type in— we like render it in the UI as soon as you type it in. 25:55 But even if I didn't do that, the round trip from browser, Streamplace, PDS, Relay, Streamplace, browser is— it's like a second. 26:07 It's like so fast and it feels like a totally responsive application. 26:11 Yeah, and I don't think— maybe the missing piece there is like there's not necessarily like a way for— a standardized way for an app view and a browser to communicate. 26:22 So maybe that's like a barrier to people to get started with it. 26:26 But like literally just like make the records JSON and send them down the WebSocket and it works super, super well. Eli Mallon 26:31 Cool. Reed Harmeyer 26:33 Yeah, and I'd say that as a React developer is like my background, I got it I learned about @proto from Dan Abramov giving a talk and kind of recognizing the same principles that I loved about React were kind of represented, like the composition pattern of how you can have data from these different lexicons and they all come together. 26:53 And yeah, I think it's just kind of like those same good concepts applied to the backend. Eli Mallon 26:58 Fantastic. 26:59 OK, well, I think we're out of time. 27:00 But thank you guys all so much for being here. 27:03 And thank you all for coming.