Calendar Discord Bot and Turbo Stream Gotchas

Show Notes

In this episode you'll hear about Colin's adventure of building a Google Calendar Discord bot using CloudFlare, mastering Google Calendar APIs, and navigating serverless Postgres with neon.tech. We'll also share our insights on the benefits of being part of Y Combinator, and the unexpected hiccups we faced with Rails' Turbo Streams. Dive in and learn from our experiences!

Resources:

* https://neon.tech/
* Jason's tweet: https://twitter.com/jmcharnes/status/1687286039356829698 
* Cloudflare Worker docs: https://developers.cloudflare.com/workers/
* Jumpstart Pro starter kit for Ruby on Rails: https://jumpstartrails.com/
* Turbo Streams documentation: https://turbo.hotwired.dev/handbook/streams
* YCombinator: https://www.ycombinator.com/
* Google Calendar API docs: https://developers.google.com/calendar/api/guides/overview 
* Microsoft Startup program for credits: https://www.microsoft.com/en-us/startups

Full Transcripts

CJ: Welcome to build and learn. My name is CJ.

Colin: And I'm Colin and today we are catching up on some things that we've been working on, some things that we've been learning recently. Good to see you again, CJ.

CJ: Yeah. Likewise. Likewise. We're just talking about Zencaster here and I use the Opal camera as like my main webcam. And over the past couple of weeks, it's been doing this really annoying thing where every time I start a new call, I have to unplug it and plug it back in. And someone told me that there was like a firmware update that bricked their camera. And so now I'm just like terrified to do any updates or anything, but. yeah, it's I don't know. what, what webcam do you use?

Colin: That is rough. yeah, so right now I'm actually using a 12 year old webcam because, I have a scarlet solo that's running my XLR mic and it cannot be plugged into the Mac while also plugging in a cam link for my, cause I usually use a Sony, what is this? A Sony A1000 or something like that. A, it's one of those like a point and shoot cameras. It's not like a full DSLR and, totally feel you there. Like I have a MacBook pro that should be able to handle all this stuff. I have one of the CalDigit hubs, which I bought because I was told that it will handle all this stuff. And, USB gets a little weird when you go through powered and unpowered hubs and all of this. And there's another tool that I've got the Elgato stream deck that is sitting here and I think it's bricked like when I plug it in and I ran some like terminal commands, it shows up, but it doesn't show up as. A stream deck. It just shows up as like this very specific hardware number. And so I reached out to support. Cause I was like, I don't know what happened. there's no factory reset button. There's no, it doesn't show up in my machine. And I don't, I think this is like a thing I've been thinking about a lot lately is I have a lot of old tech that I don't have easy ways of disposing in a responsible way. And I don't want the stream deck to just become a part of that like I actually want to use it And I don't want to go buy another one and then have this one that's sitting here bricked if it can be fixed so i've been trying to lean into the fixing things that I have and making use of them versus buying new things, but I definitely have a drawer of things with batteries in them and old, Old fitness bands and old Android phones. And I have a windows phone and a Facebook phone, all these things that don't even work anymore. because they were like failed projects.

CJ: The graveyard of electronics. There's just like a drawer that's got the label on it, like cell phone graveyard or something.

Colin: Yeah. You probably have the same problem, but I have More cables than I know what to do with as well. And so I'm trying to figure out, like, how many USBC cables do you really need? How many, cables, as soon as you get rid of it, you're going to realize it was like a proprietary cable that you needed for some specific thing. but just having less of those things. And we've been trying to figure out, can we do like a repair slash e waste, like recycling event at the coworking space? Just because I know this is like something a lot of people have. I also don't necessarily want to fix everyone's things, but. There's some things where we can be like, Oh yeah, that's definitely dead on arrival and let's recycle it in a good way. and unfortunately, like most of the ways of doing that in Reno have closed. So it's an interesting thing where it's we want to be more. environmentally conscious and aware and yet it's not made easy to do that. So

CJ: Yeah. It's interesting because I feel like it is, the path of least resistance is just throw it in the trash and like it ends up in a landfill and causes all kinds of issues. And to do any sort of responsible. Disposal of any electronics is such a pain. I think Best Buy at some time, at some point had a program where you could throw stuff away. They had an e waste thing, but I know like

Colin: them and Target do. that might be an option for us.

CJ: nice. We had a local, our local dump here in Bedford, New Hampshire has a community e waste day. It's once I want to say it's like once a month or something a lot of people here don't have their trash picked up. There's like private companies, like third parties, you can hire to come pick your trash up, but most people just bring their own trash to the transfer center. And so it's a little bit different where like we have. A community run dump where you go and there's a lion's club sponsored bin where you can put your clean plastic bags. And there's a, place where you can put all your yard waste and there's a place where you can put, your food scraps and they do certain things with the food scrap stuff. it's I don't know. I liked that when we got here, it was, definitely different from coming from big cities where there's just waste management,

Colin: it's more intentional it sounds like too, like you know where it's going to end up versus A lot of that stuff just ends up in the same trash can we have single stream here and you know The argument is that most of the recycling that gets doesn't get recycled It ends up in a landfill somewhere or sold to another country and then becomes their problem Which is the weirdest thing I think we made out of Recycling.

CJ: Yeah. we were one of the topics that we had on the slate today was to talk about money, but we're thinking maybe we'll just tease an episode and tell you that in a future episode, we will be talking about money. We want to just share, our own experience and our own thoughts around how we're using money. but if you have ideas about what specific money topics you might be interested in hearing, please hit us up, let us know so that we can talk about those on the show. So stay tuned for that,

Colin: I think framing the money thing into the build and learn, like with a build and learn lens will be interesting too, because I think you and I both talked about wanting to bootstrap things. We've worked at Startups that are venture backed we've worked in now I can now say that I've also now I'm in a larger startup like later stage startup where, money in stocks and benefits and all the things that go along with those are they're all different. And freelancing and start small stage startups and tech stars and YC startups, all these different things are so different. And so I think we, it'll be interesting to talk about like how some of that's been different over the years for us too. And, I don't know if we mentioned it on the show, but I used to do it podcasts about getting out of debt. And so we can definitely touch on that in that episode too, when we get there. looking forward to that, but, promise that the show is not going to become like a. whatever CJ and Colin want to talk about today, we are still trying to frame it under the, build and learn. And, that is going to encompass things that touch us as software developers, but also as we start to just develop our careers even more, like where does that take us? And, and definitely curious what you're wondering about if you're listening to this, so let us know.

CJ: Yeah, it's a, I think it's like when we talk about money in personal finances and we talk, even when we talk about weight loss or we've talked about your sort of like running stuff and we've talked about vacationing and taking breaks, like all of this is. Also definitely related to personal development and you're building your own life that you want to experience. And a lot of it comes back to like our careers as software developers and engineers, but we're doing it so that we can have these awesome lives.

Colin: I think we often put a lot of that off like an early career, right? We figure we can catch up later and it's like catching up on health, extremely difficult. Catching up on money and things like that also can be a challenge. yeah, I think there's a lot that we can. either worn against, but also not necessarily give it financial advice. this worked for us. This didn't work for us. Things we would do. I actually think about this a lot when I think about could I ever go back to consulting and freelancing? And I don't know, I don't know if I could, I would do it very differently, which might be a whole other episode. And then I was just listening to the latest episode of Build Your Sass from, and Justin Jackson was interviewing Paul Jarvis, or they were doing a catch up, much like we are, just because they hadn't talked in a while. and that got me rethinking again about this whole idea of the episode was like gaining freedom by building an indie business. And it's still something that's swirling around in my head, all the time. And it plays a lot into money. So maybe we'll save that for that episode as well.

CJ: Yeah, it's interesting too. I saw Jason Charns, from the remote Ruby podcast. He just tweeted, I've been building my side project for six years and I just am so tired. Like I just want it to work. And man, everyone in the comments was resonating so hard with that because I think a lot of people, especially in tech are dreaming about having an indie side hustle that, takes over and gives them independence. And that might be fun to get into. Also, it'd be cool to have Jason come on the show. ,

Colin: me more about this weight loss challenge

CJ: Oh yeah. Okay. I almost skipped over it, but yeah, so I broke my ankle. We've talked about this on the show. now it was probably like 20 months ago or something and it's still sore, but, I was looking at my fitness pal and just like my general weight and I gained over 20 pounds. After I broke my ankle and it was just like hung around since then. And I am trying to get like more intentional about losing that extra weight, for a bunch of reasons. but yeah, mainly it's just I want to be at a healthy weight and feel, feel like I'm. Able to run around and jump and, jump out of the back of the truck when I'm going to the dump or whatever. And just not have my knees, like given out things, just like playing with the kids and also being able to sleep better and things like that. So this weight loss challenge was, it's actually organized by someone that's in a Peloton dads group. So it's like a super niche inside of a niche. It's like dads who want to lose weight, who are also into Peloton, who are also like on this one, like Facebook group or whatever. But, the way that it's set up, I think is really good. And the way that it was presented is. pretty powerful. there's these statistics about how likely you are to actually accomplish something depending on, a bunch of factors related to accountability. So if you just have an idea, you're maybe 5% likely to do something. If you say, if you tell someone you're going to do something, you're maybe 10%. If you have a plan, you like jumps to 40% and then if you have a specific plan that you're going to do something by a specific date and you have someone who's going to hold you accountable, then you're like 95% likely to achieve some, some goal. And the program is in, it's done in eight week sessions or eight week cohorts and everyone comes up with smart goals in the beginning. those are, specific, measurable, attainable, realistic, and time bound. And, you've got to say, I'm going to lose this much weight by eating the, this many calories per day and. Exercising at least five days a week and whatever, come up with the five different rules for yourself. And then you're put into these little small groups where you have a thread, a text thread with other. Dad's from the group and every single day you're sending each other. This is like a picture of what I'm eating right now. And then, a snapshot of your, like my fitness pal diary with here's the food that I ate today. And, I'm over or, Oh, I'm under. And it's been really cool to like, just get the support and accountability from these other people who are going through the same thing and, making suggestions like, Oh, Hey, I would like. go from two tortillas to one tortilla, or like I would, try, swapping out your milk in your latte to this other milk or whatever, like just like little kind of things that people, are able to help you out with, and so I've, I don't know, I'm pumped about it. Right now I am 245 pounds and so we can check in, we can check in eight weeks and you can hold me accountable too. So I'm trying to lose 15 pounds so we'll see

Colin: it's out there on the show now.

CJ: yeah, so we'll see,

Colin: I really liked that from, we've done a lot of work with like atomic habits from James clear and. It's a good book. I think like the, if you're interested in this kind of stuff, like listening to an interview with him on a podcast, like the ground up show has a really good podcast, with him, where it's just very inspiring. And one of my favorite quotes by him is you do not rise to the level of your goals. You fall to the level of your systems is that you have this system, right? Of people that you're checking in with, they are checking in with you. You all agree that you're going to share to that. channel and it helps. And I think a lot of people try to get through these goals with like by sheer willpower. And at the end of the day after all the work and all the meetings and all the things you got to do and you're all the life things like your willpower is pretty tapped. And then it's easy to, be like, Oh, I have this goal, but I want to do that. And so having a system in place where you cannot fall below that level is super powerful. And, Yeah, that's awesome and happy to help hold you accountable. I think for me, I've always struggled with like consistency. Like I'll do my running or I'll start, doing kettlebells or something, but then I like completely fall off the wagon or hurt myself or get obsessed with some other fascination. and that 1% every, better every day type of thing, adds up over time.

CJ: totally, yeah. Is there something that you're working on right now or are you, you're in like the resetting phase or do you have anything on the horizon, whether it's fitness or otherwise?

Colin: for me it's just wanting to get a better sense of like, when I'm done with work, turning off the screens, not then going home, and then sitting in front of the second screen, and falling into like video games and things, hikes, spikes. running, whatever it is, just getting out a little bit more. So no specific goal or anything right now, but, just, I think like my last job, I was just, and it was not the work's fault. It was me and pressure I put on myself, but I didn't really have a, my brain never stopped. So I was always, because we were. So remote and distributed like all around the world. Like I would wake up to all these notifications. I go to bed with the other team waking up and it was like, I never felt like I was stopping work. Um, and changing jobs and then focusing on making sure that five, six o'clock, whatever, depending on what I did that day, it's time to go outside. Time to go do something.

CJ: Yeah, absolutely. I think in the last episode you talked about the discord app that you're building on cloudflare workers for Google calendar. Is this the same one that you're working on now?

Colin: it is. Yeah. So I've been playing with the calendar API Learning that all the different things that cloudflare workers can do they're very similar to lambdas aws lambdas but I find myself like now i'm now that i'm doing google calendar I think we I don't know if we talked about this on show or post show last week But like i'm working on how to get reminders for when you have a meeting like we're recording this podcast. I want to get A DM like a minute or two before the meeting to say like meeting with CJ or podcast time. And there's a bunch involved there with talking to the API, storing the upcoming events, making sure that none of those events have changed. If you like subscribing to webhooks for creating, editing and deleting events. and then having some sort of cron that goes and checks every minute to see if there's like an event happening in two minutes. But you also don't want to send a notification more than once. So there's a whole bunch of stuff there that like, I feel like I'm building a calendar app, even though I'm syncing with a calendar app. So it's been interesting.

CJ: Yeah. We were talking about how that, like that problem is actually pretty common, right? there's an event that's coming up, whether that's a booking, like an Airbnb booking or that you need to send guests communication before, during and after the booking or a paint Job, like we're dealing with a craft work where like the paint jobs coming up and we want to send people certain like nurture emails up into, up to the day that we start painting in this case. It's a, I think in your case, it's much more granular. And so like the room for error is smaller because you want to send it like, boom, like two minutes right before the thing starts, whereas ours might be like hours before and, or even days before. And do you have a sense for the direction that you're. Solving, like how you're gonna solve it, what you're storing and

Colin: well, the thing that's interesting. I was like, oh, I need to store all these events. And I'm like, I actually only need to store today's events. Because I don't really care about tomorrow. Because I can't I'm not going to alert on tomorrow yet. And so I think and I need to write this out first, but I think I'm going to have like, when you first off you subscribe to The calendars, you actually do get new events, but you don't automatically, you didn't have to go get all the existing events. So I show you the existing events for today. Anyway, I also want to subscribe to event changes in case any of them are canceled, move, whatever changes happen, right? If a meeting moves to right now, then we'll probably miss that one. But Oh, like those edge cases, I'm not going to try to catch necessarily. But I don't think it should be much of an issue there. The thing that's interesting is for me, coming from I've worked with lambdas before and I like the way Cloudflare workers work. You have a server that has got like a really small route. You can have multiple routes to it, but you can't run, like you have to run a different worker to do your cron. And so you have to create like a queue that all of these are connected to. And so then one worker can. Send a message on the queue, then the other worker can go process it. Or you can have another worker that's just croning to do the checking to see if you need to tell anybody. And then you need to have a database or like a key value store between all of these. And so right now I've got, I'm using Cloudflare's KV store for who you are and who you are connected to in Google. And then I'm using Postgres. right now I'm using this really cool new. Company called neon dot tech. and they've got an integration of cloudflare, which is how I found them. But it's like a It's a postgres serverless postgres design for Distributed serverless apps. and so it's really cool to see like Innovation still happening in this world where, I used to love Heroku and how easy it was to, throw a database onto it. But surprisingly, you don't see anyone recommending Heroku for anything these days, right? You don't see in the dev docs, like, how to spin up a Heroku app with a Heroku database. It's here's CloudFlare, here's Fly, here's Render, here's literally everything but Heroku. So I think that's a sad state of the world, especially from how we're like the two of us. I know we, we grew alongside of Heroku for so long.

CJ: I think, it's sad. I still have some old stuff on Heroku, but all the new stuff seems to be running pretty well for me, at least on Vercel and render. So fingers crossed. Yeah. We'll keep, using that, but neon tech detect that sounds, is it similar to super base or

Colin: so like super base is more for, if I understand correctly, like more like a Firebase, this is just Postgres. So you can, you run this issue when you're doing serverless where you might have lots of instances of a worker connected into a Postgres and you run into connect too many connections. So you have to do connection pooling. There's like all of these things where it's I just wanted to build this little Google calendar app and I am now dealing with, at. I'm also preemptively thinking about lots of people using it. So a little bit of preemptive scaling here, but you can't have lots and lots of workers connecting to a Postgres without connection pooling and thinking about that, even if it's. for a second to go check. And even right now, I'm like, okay, if you ask what events do you have today, I'm just going to go talk to Google and return what events you have today. I'm not going to go store that and try to keep that in sync. I only am storing events for notifications. I would love if Google could tell me that an event is happening, but then you run into also like you might miss it. You might. You know get it on accident. There's a bunch of reasons probably why they don't do that The cool thing that I like about neon though is that they have this idea where you create one database and you can branch it So it's probably similar to having a dev and a staging and a production But like I have one database that has a dev branch a staging branch and a production branch and they all have different connection URLs and you can have, I don't know technically if it's the same database under the hood or what's going on there, but it makes it really easy to like branch in a situation, create a new timeline and then revert over to it, backup, restore to that branch, things like that as a database too, which is cool.

CJ: That's cool. Yeah. Planet scale. So we use planet scale, as the backing for our next JS site. And it also has that branching feature, which was new to me. It was like the first time I'd seen that. yeah, I think planet scale is my SQL though. It's not Postgres and I love Postgres, so I am definitely intrigued by, This neon. tech, I'm sad to see that they don't have rails on their guides. They have Prisma, Django, Go, Hasura. They have Laravel and Next. js and they don't have rails. They need a rails guide here. Come on neon. But,

Colin: I think I understand why someone would not necessarily pick rails like in a world for very much like most of the serverless stuff is not in rails. That's probably why.

CJ: So it sounds like the problem that I always wondered about too, with serverless and these edge functions was like, at some point you have to go back and talk to the database. So maybe neon is abstracting over that and making it so that you can have. A database closer to,

Colin: Yeah, that part I'm not thinking about too much. I'm using the KV store, the key value store for the, who you are, because I need it to be everywhere and fast and accessible. The Postgres, because it's mostly going to be in backgrounds, I'm not as worried about it. It's going to be like background workers for storing tomorrow's events. Like I think, I'm sure there'll be some sort of flaw in this, but I was thinking like a midnight cron, which is challenging because time zones, but like a nighttime cron for each user at their nighttime, or however, that's going to be that just checks to see if they have any upcoming events that we don't already know about. That's the thing where it's some of the events are coming in through a webhook because they got put on your calendar at the end of the day. And then some of them aren't. going to be, or maybe I'll throw them away if I, if they're not for today, I have to figure that out. Cause I guess something gets put on your calendar and two weeks from now, I don't really want to store it. until two weeks from now. so yeah, calendars, they're fun.

CJ: calendaring and dates are just so tough. Like it's, it sounds like a fun little project though. that, is probably exploding out to be way more than a little project.

Colin: A little bit. Yeah. it's helping me to learn some of the Discord stuff. And then I'm viewing it on Cloudflare because it's one of the vendors that we do use. Like I can't go use Versal or some of these things without like vendor. I just don't think it's even possible. So I think we can do things on Google, GCP pretty easily, but we have more of a push towards doing things on CloudFlare. It's easier to deploy to and try not to run VMs and things like that. and Google, we can talk about it later, but like Google Cloud run is like an alternative on Google, which is pretty cool too. but yeah, we actually don't use AWS. We probably do for something, but

CJ: Yeah, sounds familiar. There's once you get to these big co tech companies, there's always like lists of approved vendors that have gone through, all of the vetting processes and contract review and whatever, to make sure that everything's cool where man at a startup, it's pretty nice. We get to just pick and choose whatever we want to work or work with. and

Colin: You're like, who's going to give us the best, the most credits and the best deal? And what can we move away from if we needed to easily and all of that?

CJ: Yeah. I think it's, it's totally public now. I can't remember if we've mentioned it on, on the podcast, but we did get into YC and through Y Combinator, we get we've, I don't know, we've been given so many free credits and things to different services that have been really helpful because it gives you like, a chance to experiment with stuff and like really push its limits.

Colin: It's nice to not take the money that YC gives you and then just spend it on services, right? It's that money can go towards the team and you get free credits to at least get to try to get to product market fit on credits.

CJ: Yeah. Yeah. And yeah, I was like, man, for the startups who are not in accelerators, this is, I feel like it's quite a leg up. honestly, like the, all the credits and stuff you get as part of the accelerator and the network connections, they, I don't know,

Colin: Yeah, it's pretty crazy. Yeah, we got a lot in tech stars. Microsoft actually doesn't require you to be an accelerator for this very reason. They're just like use Azure. And I think that's because they want people to use Azure more than anything. They're like, if you're a startup, if you can show us your LLC or your incorporation docs, like cool, we'll give you a lot of credits. Because if you grow and successful, you're probably not going to get off that cloud, which is. A good gamble for them. It's like the first taste free type of thing.

CJ: Yeah, I feel like Microsoft does that all the way down the stack. They like give away so much free stuff to like schools too. It's

Colin: Bundling is yeah. They're like, oh, we got to teach you access in college and spreadsheets in Excel and Google doc. and then Google's no, no schools. We're going to give you all of our stuff for free.

CJ: Yeah. Yeah, so Logan just got a, a PC. so he's been building and designing like all these custom gaming PC components, and then he was gifted one and just yesterday, so he's been like switching back between his Mac and his PC and like starting to feel the frustration of Oh, it's command, not control for, copy and paste and little things like that. And it's funny cause on the PC he's using Bing and he's using all like the built in stuff, which is just. So different than what he's used to on the Mac and,

Colin: it's a lot of context switching, tool switching.

CJ: Yes. Yes. But, I like making sure that he's getting exposure to all that stuff, but, so we've been working on building out this, it's like inventory management, project management, CRM tool. It's basically like a giant crud app right now where you can create these paint projects and you can create locations and you can, upload images of the rooms that are going to be painted or the exteriors that are going to be painted, cabinets, et cetera. And because there's so many little forms that you need when you're building out a project, I wanted to, improve the usability by adding some like quick ad features with modals where you could like, Oh, let me click this link and it'll pop up in a modal that lets me like quick add a location or, add a room while I'm trying to build out an estimate or whatever. And so as I was doing that, I was like, Oh, I think I want to use turbo. so like hot wire and like turbo streams and turbo frames and all this stuff to try to make this happen. And so I was like, let me go try to get into this. And there's a couple of interesting bugs that I think a lot of people will run into.

Colin: And this is all Rails stuff for

CJ: yeah, yeah, like you can use hotwire outside of rails, but it's, yeah, I think it might be

Colin: It came from

CJ: in some places, but yeah, came from rails. The idea is that you can build more interactive apps, but you have like full. Client server interaction. And you build it, you like, you basically build the application as if it's like a dumb server rendered app, but it uses web sockets, like it like upgrades to web sockets when it can do smart things on the client. So The easiest example is if you click a link, it, will fetch the resulting page and then do a diff on the result and inject only the parts that changed, when you clicked that link. The, like longer story is that you can build sort of multiplayer. Experiences like you might see in Google docs where there's like lots of people in there typing at the same time using, these things called turbo streams. And the idea is that or the way that, the jumpstart generators work, cause I'm using jumpstart pro as the base for this is that in every single model, there's three after commit hooks. So if you create update or delete something, then it will broadcast out. Pre pens or deletes or whatever removed from the page. So like just by default, it feels multiplayer. So if you're looking at like a list of projects and someone else in another state creates a project, like boom, it'll pop onto your screen as a project. And that all just comes out of the box for you. and so I thought I was being clever in with these quick ads where it's like, Oh, I want to add a room. So I'll pop the modal and then when you submit, it will, it's going to submit with turbo streams and then I'm going to broadcast and update so that it updates like a dropdown in like the bottom form so that it shows the newly added thing that was quick added and what was happening was like everyone's select boxes. We're all getting updated because I wasn't targeting or like scoping down the broadcast. So like by default, oftentimes you'll see like turbo stream from, and then a string. And that's like the unique string. That's like the channel or like the room that the web sockets are listening on. And so I was just saying Oh, on every single page, we're all going to listen to the same channels for that page, basically. And so when anyone was making changes, it was updating everyone else's stuff, which became a, it was like quite funny, Oh, we were in the middle of this giant migration and we had to basically just pump the brakes for everybody, okay, nobody touch anything because right now we're all like adding items to each other's pages and stuff. And, yeah, so the crux of the. Problem was that like, when you are broadcasting, you want to broadcast with the, an ID that makes it so that it's scoped to that specific page. So for instance, if I am on an estimate page where I'm adding a room that is related to that estimate, then when I broadcast, I only want to broadcast like for that estimate underscore ID, instead of just estimates or whatever. And then that way it won't end up on everybody's pages. Turbo has been super fun to learn. I think I'm late to the party for sure, but it is, yeah, I'm sure a lot of people have run into that same bug, but.

Colin: This is one of those Oh, it works on my machine

CJ: Yes. It's like you don't encounter it until you're in like these multiplayer modes.

Colin: Yeah. You're like, Oh, it added it to the list. I guess we're done here. Let's

CJ: yeah,

Colin: in. And amazing.

CJ: So that was fun. But, yeah, turbo and turbo frames and turbo streams and, I dunno. all of that has been really fun to play with. And also it just worked so seamlessly with stimulus. I think I wrote three lines of JavaScript and got like all these crazy modals working,

Colin: And that's the inspiration behind it, right? Is that normally you'd have to do a bunch of react, manage a bunch of state, have a bunch of APIs just to do that. And I see the appeal of each with like react. You can have this like really crazy, fine tuned user experience and do exactly what you want and when, and then sometimes you just need to build an app. And I'm running into this right now at the coworking space. We've been using this software for. years that used to be like conference room booking and it had an iPad app so you could see like the conference rooms booked or not and you could book it and they just decided to go from like you can have as many people in your office to having 15 people in your office at our very expensive plan. And they've been slowly moving upstream to like enterprise. Like they work with the biggest companies in the world to help them now with who's coming into the office, who's got what desk, who's got which conference room. And we only needed it for conference rooms. And it pains me to pay for it because it's great software, but now we're paying a lot for one piece of what it does. And now with this update. We like have to get off and now I'm deciding, do I build this? Do, and which parts do I build? It's a lot of the calendars stuff that we just talked about, which is also scary. do I just build an app that just. Turns red and green based on the availability of the calendar. Cause right. Thankfully, like we use Google calendar for both the rooms, but I'm trying to decide, do I do a quick little rails app and like turbo stream, like just broadcasts, like available, not available, not available. They don't need to book the room on the iPad. Like I'll, I think it could just be like a website on an iPad and we'd be fine. So interesting. This is one of those, because I write code, I can get myself in trouble. Cause it's should I build this?

CJ: Right. What are we talking about? Like in terms of monthly price for something like that?

Colin: So this is where it's not a lot in the grand scheme of things. I think it's like 1, 500 for the year. So actually no, it's more than that. It's 150 a month.

CJ: Yeah. Okay.

Colin: so it feels like a lot because I will say like coworking spaces. I have, I don't think we've talked about it on this show, but I've thought about building coworking space. Management software and it is, it's something that Jelly Switch and Dave Paola, who is our past episode, past, past guests has talked about. It's a bad business to be in. I'm assuming that's the same thing that happened with the people we used to use is that it's the margins are so low. Coworking spaces work as a business if they can break even, but there aren't. going to be upgrading and doing like expansion revenue and all this stuff. You have to go upstream to the office management for bigger offices or yoga studios or CrossFit gyms or things like that. We talked about this with Mike because he did do coworking space software and I actually met with him and he recommended do not go like they . Cause it was just very, every coworking space is different. Every subscription is different. Every business model is different and they usually are non technical people. Running them. And so I'm probably in the minority of like software developer running a coworking space who also wants to write their own software. And, of course, mine's going to be better than all the ones out there, but in real world, it probably won't be. so yeah, I dunno, it's not the biggest thing, but honestly, I still can't find just an app that will show. red or green state based on calendar, but I have asked chat GPT to help me with this. And it's, I think it'll make it like a day or a weekend project instead of a multi week project. So

CJ: Nice. Okay. if, yeah, if you are already paying that much, an interesting nugget that I got from one of the recent episodes of build your sass, Justin was like, Oh, not enough people are saying that you could just go downstream and just charge less money. And if you could get a room booking thing, that's 20 bucks a month per iPad or whatever that needs to connect to it. Or I don't know, like how you would do it, but figure out some interesting pricing and then. Build your thing on the side and then have some other coworking space pay for it or whatever. it seems like a problem that a lot of people might have, right?

Colin: Yeah, and I think shy still listens to this, but hi shy, if you're listening, but he, I used to work with him at orbit and he built like a, it was called overbooked, which we'll throw it in the show notes and it's in, it's an elixir, with Phoenix, I believe. And it's really cool. Like it, it actually has most of the room booking and checking to see if the room's available and all of that. It needs the API to like. display, whether or not the room is available on an iPad type of thing. so I'm thinking about just forking that and adding the Google calendar sync to it, cause it's an open source project and shy spent some fun time working on that and getting it, working on it. I've never used Elixir or Phoenix. That's the problem there. It's Do I want to learn a new language? I actually do want to learn Elixir, but, am I going to get my project done if I also need to learn Elixir? So that's the balance of the build and the learn. But, yeah, I agree on that other front of just, maybe I don't build co working software. Maybe I just build conference room booking available, not available. but

CJ: Hot or not. And by hot, you mean it's booked. Yeah.

Colin: Can't use the room. green is go.

CJ: Is it, so would you build like a mobile app for, like for iPad or would you just use like the browser?

Colin: I've gotten, yeah. I could do it in a quick react app that just lives in the browser. the alternative I was thinking about is like doing react, turbo native, do a rails app that can be shipped to Android. And it says depends like if I just need it for us, I'm going to go the quickest way if I was going to build it as something I sell. With accompanying apps, it'd probably be like Rails or React Native or something like that. So TurboNative, React Native, cause I don't want to support Kotlin, Swift,

CJ: Yeah. Is there like a no code solution here where you have the iPad and you put it like in caffeine mode or whatever and you just have it on the Google Calendar page that's this is the page that you're gonna see and it's like the actual calendar for the day of who has what time?

Colin: Yeah, we might be able to do that. We used to have whiteboards. I will say that did not work well. Um, cause people would just write in that they have it, even though someone booked it on the calendar and it's we need it to refresh that people are there and it's like at the end of the day, this is almost like. The Google calendar thing I had, I don't care about tomorrow. We only care about today. So it's just show the list of events for today. And if you want to get on there, then maybe we do like a type form that adds your event to the calendar or and then put a QR code on the door, actually at WeWork, I was shocked, like for as big as WeWork is and as much money as they've burned, they just have a QR code on their doors. They don't have iPads.

CJ: Wow.

Colin: Yeah, calendars. that's the theme of my life right now.

CJ: Yeah. They're tough. They're super tough.

Colin: But yeah. I guess we're both building and learning about turbo streams and calendars and booking jobs, And with discord, we, we run into this thing where we want to be able to like stream developer events, but we can't show our code. but the stuff that I'm working on is completely open. the Google calendar app, I'm not using internal code. I'm using the same APIs that developers have access to. so I'm wondering, and I'll have to talk to my team about this. So hello, if anyone's listening, but, just figuring out, if I want to be that kind of dev rel, I think that's, we're trying to figure out, do I want to be more public facing? Do I want to do streams? Do I want to work on this live? What are the pros and cons to that stuff? Will people show up, those kinds of things. Cause some of these calendar things I could see being some entertaining, like calendar wrangling live, and just. hanging out with the community. we do these events that, one of our community managers runs where it's like code and chat where the devs, building bots and apps just hanging out, but it's more like a lo fi, body doubling type of thing where it's like accountability. Like we started the episode with more than we're not going to show you how to do it. We're all just hanging out, just talking about what we're working on and hopefully working on stuff. So digital coworking. So

CJ: I like that. Yeah. It'd be interesting to see, I think all those directions are fun. So whatever, yeah, whatever you land on, it'll be interesting. All right. let's wrap it there. As always, you can head over to build and learn. dev to check out all the links and resources. We'll put all the fun things in there about neon. tech and all the other things that we talked about. And, yeah, I think that's a wrap.

Colin: Awesome. And we don't do this often, but if you enjoy the show, think about giving it a review or giving it a star rating so other people can find it. we are back this episode, we'll keep them coming. So thanks all.

CJ: Bye friends. All audio, artwork, episode descriptions and notes are property of CJ Avilla, Colin Loretz, for Build and Learn, and published with permission by Transistor, Inc. Broadcast by