[00:00:00] Introduction
Zeno: I was struggling with email so much, like you and I've used every single tool you can imagine, I'm sure they are amazing for product marketers and product managers, but as an engineer, it doesn't relate to my needs, the things that I care.
So we started playing with this idea of like. What would it look like to build the Stripe of email or the Vercel of email, like a next generation solution to a very old problem.
Andrew: Hello. Welcome to the DevTools FM podcast. This is a podcast about developer tools and the people who make them. I'm Andrew. And this is my cohost, Justin.
Justin: hey Everyone, uh, we're really excited to have Zeno on. Uh, so before we give your introduction, I just want to say that, I used the Dracula theme for a long time and I did not know that you made it. And I'm so excited because it was so cool. It was one of those, it was like, there's themes for everything.
It's so good. So good. So before we, uh, dig in to talk about what you're doing now with Resend, could you tell, tell us a little bit more about yourself?
Zeno: Yeah, sure. Um, I'm Zeno. I am based in San Francisco. I moved here last year. Uh, but before that I was in LA and before that I was in Brazil when, where I grew up. Uh, I have a wife, I have a two year old daughter. And I absolutely love coding. I absolutely love open source. that's just something that I, I can't help myself, but do that.
You know, like I love DevTools. I love building things for developers. Uh, and I love sharing about those two things as well. Like for me, it's all about building and sharing, building and sharing. Uh, so yeah. That's me.
[00:01:54] The Birth of Dracula Theme
Andrew: Yeah. So I was, I was going through the Dracula website and it, it alludes to like the, the start of Dracula. Like it was like 10 years ago. There seems to be a little bit of a story behind it. So would you mind telling us that, us that story? And then after that. Uh, Dracula is actually like a paid theme too, and you don't see many paid themes like that.
So, just like, going into the decision to like, why did you do that, and how it's gone.
Zeno: Yeah, no, the, the story of, uh, of Dracula is absolutely insane. Uh, this is one where for a long time I didn't tell that story because I kind of felt like ashamed in a way. Uh, but I remember I was traveling, I was in Germany, and then. Um, I was going to Spain right after, and I've never been to Germany and I've never been to Spain.
My first time, like, traveling there, uh, I don't speak Spanish at all, uh, but when I was in the flight, um, going to Madrid, I started to feel like this pain. I was so and I was alone. There's nobody traveling with me and I started to feel like so much pain that I, I was like, I need help. Like, uh, I think I'm going to die.
I don't know what's happening. Like, there's just so much pain and I called the flight attendant and then she came and then talked to me and they're like, okay, we're going to do, uh, we're going to land. Uh, and then they, they landed in Madrid. I was the first one to leave the airplane, they took me on an ambulance to the hospital.
Wild, right? Like, super crazy. But, when I got to the hospital, I started to feel a little bit better, and I'm like, okay, I think I'm fine, I think they're just gonna release me now. Turns out, I spent three weeks in that hospital. Which was absolutely insane, right? Imagine you're traveling to give a talk at a conference.
The conference was like two days later, I had to cancel everything. Right. And, what was interesting about that, uh, episode is that, you know, on the second or third day. I already called my co workers like there was an office in Madrid and I called them and said, Hey, can you bring my computer? Because you know, like they had to bring my luggage separately for me.
Just like a mess. And they brought my computer and I was like, you know, I'm feeling a little bit better. My blood test is still pretty bad. Um, but Hey. I can do stuff on my computer and I also need to tell my mom that I'm in a hospital and in a foreign country. Right? Uh, so I get my computer and then I'm fine and I'm just like, okay, I'm just gonna code a little bit.
I don't have anything to do here. Really? It's just like just to and it was really good, right? To take my mind off that super bad experience being there alone, you know, um, and everything. So that was. Going well until it didn't, one day I left my room for a split second just to get some water. Like there was a corridor.
I got some water. When I got back, I'm like, Oh, where's my computer? And I'm looking around. Oh, I thought I left here. Like, where is it? And I'm like, Oh, someone stole my computer. It took me like a minute to just realize that. Like it's gone. Um, and I was so sad. It was like the worst moment of my life probably because it was the whole thing.
That whole experience was like so bad and I felt like crushed. I started crying a lot. And like, that was the way I could talk to my family, you know, back home. So once again, like I, I was able to talk to the nurse. They called, uh, the company I used to work at. And then my coworkers, once again, they brought me a new computer.
To the hospital and I'm like, okay, that now, uh, yeah, let me get, you know, distract myself again. Um, and then as any developer, and I'm sure you can relate to that feeling when you get a new computer, there's that moment where like, okay, let's get this started. I have all my dot files. I have like all my little shortcuts.
I need my. Trackpad speech to be at this level, you know, like you have all these bad peeves and just preferences that you can't, uh, get away with. Like you need to configure that. So I remember just popping up my I term and thinking, okay, let me put a theme here and then popping up my sublime text back then.
And then, uh, just using something there too. And I just felt this thing of like, Oh, wow. I wish I had the same thing. Across all my apps, uh, and I looked around. There are a few things things already doing something like that. It's one that is like brownish, very old theme.
and then I'm like, okay, I think, I think I would just do a theme. I've never done a theme in my life. I'm not a designer. I don't know anything about colors, but let me put something together that looks fine for me. So I did that for iTerms, ZSH, Sublime, and then I. Made it open source and then people start contributing 10 years later, here we are.
Dracula has 6 million users only on VS code, which is absolutely insane, right? It's just like, just so crazy. Uh, and right now, actually, let me put those numbers, but let me check that out. There are. Oh, 366 apps that support Dracula. so it was just amazing to see the power of open source, the power of a small idea that started in a hospital, then becoming this thing.
There's even a Wikipedia page about Dracula. That's how big it is now. Uh, so I'm just like really. Shocked by the power of open source and the power of consistency to, you know, whatever you do, if you like, there were many years, years that I didn't push a single commit to Dracula. And then there were years that I was more active.
Um, but I, I never really stopped. Uh, I've never said like, you know what, I think I'm just going to drop. I just kept going and, and it's so nice to see like Dracula being one of these themes where whenever, whatever I go, like when I say. Oh, I'm the founder of resend people are like, Oh yeah, cool. I'm like, Oh yeah, I also created Dracula.
People are like, Oh, you're the creator of Dracula. No way. Like I use this, you know, they start telling you a story. So it's, I know that doesn't matter what I do in life, Dracula will always be the thing that, you know, uh, that I created. So it's pretty cool.
Andrew: Well, that's the meme, right? You post some, some code on Twitter and then everybody's just like, oh, what's the theme? So it's the same thing, but with your life.
Zeno: You said you use Dracula, right, Justin? When was the first time you stumbled upon it? Like, how was it?
Justin: it was, it's been a while. It's been a while. Uh, because I had went through, I think maybe the theme you were talking, well, no, maybe not. There's a theme called solarized, which had like a, kind of a dark turquoise and they had a Brown version, I guess. Uh, so I, I tried solarized for a while. I tried Nord.
Which is another theme that like was across a few things and then Dracula was one and and honestly the the great thing about Dracula has always been the coverage is like, like, it got a lot of coverage really quickly.
Zeno: yes.
Justin:
Zeno: And just setting up that infrastructure, I feel like there's something tricky about building that V1 of any open source project and then If you're lucky enough for people to care about what you're doing and start contributing, then how do you make it so it's easy to contribute? Um, that was a very interesting challenge.
And then also, how do you sustain it for 10 years? That, that was your question, right? Like, oh, there's a paid version of Dracula. And, um, this came out because, one, I felt like, man, I really want to continue doing this thing. Like, I love this fame and community. I want to do it for the next 10 years. So how can I set it up in a way where that can happen?
Right? And I could ask for donations. I could put add spots on the website, but those are not the things that I feel like are sustainable. So how do I add value? That was my thing. Like, There's this thing. How can I, I, I build like a pro version. And that was my, my original thought process. And this was during a time where I wanted to learn more about sales.
Uh, I was at a executive role at another company and we're doing like selling stuff to McDonald's and Vodafone and, uh, like all these big companies. I'm like, Oh, this is a gap. Like as a developer, I wasn't trained in sales. Uh, so let me learn it. And the way I approached this problem was. Exactly. Like I approach anything through side projects.
I absolutely love side projects. I feel like they are this. Canvas where you can explore different things without, uh, any constraints. Right. So I'm like, let me get Dracula the way it is. And let me try to build a pro version. So this was during, uh, those dark times of, uh, COVID and, and everything. And. It was such an amazing experience building that and thinking about packaging, thinking about, uh, pricing and, you know, we charge like 79 bucks, like, and I'm still amazed by the fact that People buy these six colors, you know, like that's what they're buying, like a feed, like this combo of colors, but it's consistent across all devices now, like for this one.
I'm like, okay, now I need to learn about color theory. If I'm really going to do this right in composition and contrast. So that was such an interesting journey to go through. And I think by now, Dracula sold more than 300 and something thousand dollars, uh, which is something that is completely unbelievable for me.
Like that, a side project like that, uh, was able to generate that much. Interest, uh, from folks really like, it's really cool.
Justin: Yeah, it's amazing. It's a great story too.
Andrew: yeah, I always tell like, literally anybody that's trying to get in a program just like. Do as many side projects as you can, like learn as much fail as much as you can. If you don't go through those failures, you're, you're not going to grow. And like, even this podcast is an example of kind of like the similar story to yours.
Like I didn't know much about marketing. I didn't know much about social media or video editing, but in through this podcast, this, this side project, essentially I've really grown those skills and it's all just about taking that step.
[00:12:45] Ad
Andrew: It's time to thank our sponsors for this episode. This week's episode is sponsored by code crafters. Code crafters makes programming challenges for experienced software engineers. If you're looking for a weekend project that takes you to the edge of your programming abilities, you have to check them out.
They've got a bunch of different, really hard challenges. And when I say challenges, I don't mean something like leet code. I don't mean something that's like in applicable or just like a math problem you did from college. With code crafters, you get to build. Your own versions of modern tools. They have courses such as build your own BitTorrent, build your own, get, build your own Docker and so on.
You can go through the challenges and most popular programming languages, including rust, go and JavaScript.
If you asked me, this is a really fun way to expand your knowledge of our common tools. This weekend, I started out with their build your own get challenge. And it's, it's a complicated beast to tell you the least, but as I've gone through it, I've learned a bunch of cool things like. When get was first started it.
Wasn't what we view it as today. All the commands you probably use are porcelain commands The porcelain commands are built on those plumbing commands. Originally get was only supposed to be a toolkit that you could use to build your own version control system before actually morphed into its own version control system.
another thing that surprised me about get is that it's just a content addressable store of code. That reminds me of our conversation with the creators of unison lang it's interesting to see how these ideas such as content addressable code have percolated throughout the ecosystem.
And besides the content, even the user experience is targeted towards experienced software developers. For example, instead of trying to make you use a custom in browser experience where you don't have access to all the tools you love. Code crafters lets you build locally using your own ID and terminal one cool part about this is we're building really complex things and sometimes we need help. Luckily co-pilot is right there.
My editor has been helping you pass some of the things that I don't have as much experience with such as using the node crypto library or Z lib. Simply get pushed when you're done writing code and code crafters, does the rest they'll run tests for you and you don't even have to run those tests locally. So really I'm just forced pushing to a branch. Seeing if my tests pass.
To try out code crafters, yourself. Visit code crafters.io/devtools-fm. There you'll get a 40% discount and we'll get a little bit of the cut too. So we'll be supporting the podcast.
Are you tired of hearing these ads, but come a member on one of our various channels where you can get ad-free episodes.
Currently we support memberships on platforms, such as Patrion, Spotify, apple, and YouTube.
If you want to find another way to support the podcast, head over to shop.dev tools.fm. There, you'll be able to see all the coolest mergers that we've come out with recently.
And in the coming weeks, I plan to release a bunch of really fun teas.
And if you want dev tools, FM in your inbox, head over to mail.dev tools.fm.
And with that, let's get back to the episode.
[00:15:39] React Email
Andrew: Uh, but speaking about open source and kind of like morphing it into a business, uh, let's change topics and start talking about react email.
Uh, so react email is kind of like, from what I understand, like the nexus, the starting of resend. So before we move on to resend, let's talk about a little bit about what react email is and what about emails are hard to do in the modern era or what. React email is making better about them.
Zeno: Yeah, no, it's super interesting. and it's funny how there are all these things that happen in your career early on. And then. Much later in life, you're able to connect the dots in terms of like how you're going to approach building something new. That was the case for us when I was struggling with email so much, like you and I've used every single tool you can imagine, MailChimp, SendGrid and, uh, Postmark, like all of those guys.
And I felt like, wow, all of these tools are here for a long time, like 10 plus years. And they are. Like the leaders of this market, but I don't feel like none of them were built for me as an engineer. They, I'm sure they are amazing for product marketers and product managers, but as an engineer, it doesn't relate to my needs, the things that I care.
So we started playing with this idea of like. What would it look like to build the Stripe of email or the Vercel of email, like a next generation solution to a very old problem. And we were building it and it was fun. We're like, Oh wow, maybe there's something here. Like this looks interesting. It was a side project.
This was not like this grand vision of creating a company and raising money. It was just like, let's play around. But then it came to this point where we're like, okay, we have something. It works, uh, but we're just going to come out of nowhere and say, Hey, here's a solution for email. Like, and I very much believe in storytelling and the power of telling a story that, you know, here's a hero.
Here is the, the, the, the, that point where things turn around and here's how, uh, we emerged from that, uh, from that thing, from that challenge. And. When we came about resend, we're like, Oh, so what if we, and we were learning this as we're talking to folks, right? It's, we were talking to all of these people to learn more about how we build the email platform.
But in reality, what they were saying was, man, I hate building emails. It sucks, like I have to, like, whenever the designer gives me that, that beautiful Figma file and I try to convert that to a real email, it's, it feels like 1995 where I cannot do rounded corners on Outlook and when I try to align things on a center on Yahoo mail, I need to use table elements.
So it's. I'm like, wow, like this is so bad. And if I'm trying to style things, they're all these like proprietary rules that I need to use. It's just like a mess. And I felt that way when I started with web development, I needed to do almost like a different website for Firefox and I six and, uh, all these browsers.
Right. So I'm like. I can't believe no one solved this problem. It's unbelievable. And we have like so many amazing tools today. I absolutely love react. I love JSX. I love having types with TypeScript. Uh, and I hate getting an email that says, Hey, space comma, you know, like I know there was like something missing there.
and I love Tailwind. I absolutely love building websites with Tailwind. So then we, we went on this journey and I was working at WorkOS back then, uh, along with my co founder now at recent, uh, Boo. And we were like playing around with this idea. Let's, like, if there was a radix for email, uh, like this set of building blocks.
And you just want to have a button that works the same on superhuman and hey, and, uh, Yahoo mail and Gmail and Outlook. Here it is. Here are the primitives. So we started building and we're like, okay, this is looking nice. Share it with a few friends. And then we're like, oh yeah, let's buy this react. email domain.
And then, okay, let's make it, um, open source. And with everything that I do, I think about the whole package. It's not only about. The source code, the source code is the beginning of the story. And that's where I think people get it wrong with open source. They push the code and they're like, okay, my job is done.
That couldn't be, you know, farther from the truth. Like, no, like your job starts now. Like you, you need a very good readme. You need a very good website. You need a very good docs. Uh, if you want adoption. If you're just like, I'm, I'm pushing and, and that's all like, okay, you're that's fine. But if you want to build something that is going to be meaningful, not only for you, but for others, there's this whole other thing that you need to do.
So that's, that was React email. So we launched React email in December, uh, 2022. And then in January, 2023. That's when we announced Resend.
Justin: That's a great story. And I love how like. You have this consistent thing of like, oh, I'm working on this problem. It's like, oh, I want it to be better. And then it like turns into something. And like, you're talking about lacking storytelling. It's just like, you're, you're sort of living these stories. I find the, the idea of React email so fascinating.
I, I, in a previous life, I did a lot of growth, uh, engineering and had to do, you know, stuff to generate emails. And at the time I think I was using MJML, which is like a templating language for emails. And this, the only thing that I knew of, uh, I think this was used a little bit in the Ruby world for a while.
And it sort of was trying to do the same sort of thing of like, here's some limited subset of tags that you can use to build something. But of course it's like more of a, a markup language. So, how does, uh, how does react email different, like differ? What, what would draw people to it? I mean, besides obviously the fact that it's written in react.
Zeno: No, it's, it's funny because, uh, as we were navigating this problem, MGML would come up, uh, very often. Uh, and then I'm like, oh, people are talking about this thing. I, I've personally never used it, but let me check it out. And then I went there. I'm like, okay, this is pretty solid. There's actually a lot of components.
There's a lot of adoption, but it felt like this was again, like almost like everything that I've seen in the email world, it felt like this was built in 2010. and I could see those patterns. I could see that. Oh, this readme looks very outdated. Oh, they're not as many commits as it used to be, as it used to have.
And then I go to the docs. I'm like, Um, I don't really like this docs. And then I looked at the actual thing, right? Okay, so this is a new markup language I need to learn. I don't know if I like that. I actually prefer to use whatever I like using. In this case, I know how to do A loop using map, on react, right.
When I'm, when I'm doing, uh, a list, you know, like I already have that knowledge. I don't need to learn how to do a loop in MJML or like a tag that is only made for MJML. it felt like if I had the primitives in a language that I already know, and if the styling could come with tools that I already know.
Then that felt more natural. So the way we approach it was this is going to be our next JS, right? There's next JS and there's Vercel. React email is going to be our next JS. Resend is going to be our Vercel. Um, and we use that to you know just establish ourselves as expert in that world I found this Notion doc, very, it's an old one, like from the first days that we were like thinking about this idea and there's only like three bullet points there.
The first one is launch an open source project around email. The second one is establish ourselves as experts in the email space. Launch a SaaS to support email sending. So the story was around that, like, and it follows the journey of you sending an email. You first need to build a template. Now you have the template using MJML or pure HTML or react.
It doesn't really matter. We support all of them, but after you have the template, you need a way to send it. Oh, here's a transportation layer. Now you can send it and it has logs. It has observability. It has everything that you would expect from a modern, uh, API tool from a modern dev tool. So yeah, it was very interesting, super challenging to do both at the same time with a very small team.
We're still only six people. so it's extremely difficult, uh, but yeah, we, we love it. So we, we keep. Pushing it and keep trying to make it better.
Justin: Nice. Nice. That's awesome.
Andrew: So, uh, email is pretty old at this point. Like it was created a very long time ago. And like the fact that it even supports HTML is kind of crazy. Like I looked up, I had to go ask my friendly chat bot. Uh, Hey, did Email always support HTML. And it was actually included in around like the mid nineties. So, uh, I feel like it's frozen in time though, probably.
I bet like it was added to email clients and then they were just like, okay, it kind of works now. So like, given that we're in the year 2024 and you've spent, uh, the better part of the last few years thinking about this problem, what are some features that you wish like email clients would build into them today to make them more modern?
Zeno: Wow. That's a good one. Um, and you're totally right. Like, uh, recently we got the golden kitty award in the developer tools section. And they, the other top three, uh, players that were competing with us were all AI tools. And it felt, it feels like that's the way to go. If you want to build a new product today, you've got to follow the hype.
You've got to follow the trend. Uh, and it's very much what we haven't done. We, we got a very old problem with very established players, but we are rethinking from a different angle. And I feel like there's something powerful, um, about that, you know, as folks are trying to come up with their own side projects, with their own ideas. Uh, for a long time, I felt that way, that if you wanted to be a creator and entrepreneur, there was this aha moment of something that never existed. And it's so brilliant. It's so new. but you know, I don't feel like that's the case at all. Uh, now that I've done this, it's like, no, just get a problem that you really care and try to solve it 100 times better.
Because if, if your product is like two times or three times better. It's not enough for folks to migrate, especially if it's like ingraining the infrastructure, there are all these dependencies, multiple teams that use these tools. So you've got to approach it from a, from a different angle. But wow, like I have a big wish list of things that, uh, I hoped email would have done better. One is just in terms of interaction. There's no interaction with email at all. If you think about it. There's not even hover effects, right? Like there's a button you try to just, I just want to see like a transition, like a, a 0. 3 second, easy in out, uh, of opacity. Like, no, like you don't have that. so the small things like that, I don't necessarily want crazy animations and crazy things happening on my email.
I'm actually happy with the fact that it's. Mainly content and, uh, with specific boundaries, but I also feel like there is a lot of room for, for better experiences. What I really hate is when I get an email and the purpose of that email is to take me outside to their own website. Like, uh, and that's probably like a product marketer that needs to change this one metric.
So they're like, Oh, we got to. Use email as a hook. that, that happens the same on Twitter or X for me. Like I much rather like read the whole thing there than going outside and consuming. and there's been some changes to allow, more interactive emails, but still not the best thing in the world, but light mode and dark mode are still a pain.
As well. and just like. Interoperability in general. I wish I could build, I wish I could use a regular button tag and I wish that worked. but that's not even the case, right? Like every button on an email is actually a link. It's an anchor. It's not a button, uh, because buttons don't work, on email.
So things like that, where I'm like, uh, I wish there was more love, the same way that the web evolved so much. I started with Flash, with ActionScript 3, and then HTML5 came in, and oh my gosh, it changed everything. And I remember playing with Canvas for the first time, and I was like, wow, this is amazing, I love this thing.
And then WebGL came in, I'm like, wow, WebAssembly. The web kept evolving, but email is still. Feels like, you know, it just stopped in time, which is crazy because so many people use it. I use it every single day. so yeah, I, I wish there were more love in that industry as a whole. And it doesn't feel like that's the case at all.
[00:29:55] Resend
Justin: Yeah, it's one of the challenging things with like a proliferation of clients. So, so there are just a lot of different email clients. Somebody might be reading their email and the terminal, you know, like that's probably not an advisable thing, but they might be doing it. And you know, it's just like, it just an interesting challenge.
Whereas like, I think that we are fortunate that the industry has rallied around the web in a way and like been able to push forward standards and like make progress. I'm glad that, cause there was a period when the web felt like for a little while that it was going to stagnate that like, we weren't going to be able to get anything through like the kind of a winter and JavaScript world for sure.
What is like, we're just like stuck in this like weird version of JavaScript um But it is cool to both see that happen. And, and you're right. Uh, hopefully we'll get some, uh, some better, better email clients out there. Maybe, who knows? so let's, let's transition to talk about resend. So you, you, you mentioned kind of what it is, uh, layer to send emails that you've made with a react email, but, tell us more about the service and what it offers and why people should use it.
Zeno: I think a lot of the reasons why we built Resend were around removing friction. I remember setting up a new account on postmark and then they ask on the signup form for me to use my work email. And that's such a silly friction for most folks, they're like, Oh yeah, I just, I'm just going to put my work email.
That's fine. Only that by itself already bothers me because I know that the moment I put my work email, they're going to use Clearbit and get my job title. And then for my job title, they're going to route me for their sales team. And oh, oh, this person has an executive title. Let's put a salesperson to like send all these follow up emails, for the next three weeks, uh, just to like try to sign up, them.
And I've always hated like those little things like that, that people do, uh, and the same experience when I was using SES on AWS, where I set up an account and then to move to production, I need to wait like two to three days to get a verification, often like a manual human, like they come in, they review this whole form that you have to fill out.
And I'm like, what? Like, I just want to send an email. It shouldn't be that hard. Like. Why do I need to go through this thing? Um, so a lot of it just came from that frustration of like, no, that's not how products should work. Products for developers, like you need to build something where. On a Saturday afternoon, as a dad, I only have like an hour or two to play around with something.
And then my daughter is running around. I'm playing on my computer. And then I'm like, Oh, there's a new service. Let me sign up. And then you see that landing page. You're like, Okay, this looks good. And then you create an account. You try to send the first API call. And then it works. You're like, Oh, this is nice.
And then you look at the docs, you can do something a little bit more advanced. And then you're like, Oh, this is nice. So, and when you have that feeling, then Monday morning, you come in at work and then you're like, Hey guys. You talk to your team, you go on Slack, you share the thing you built. Maybe you already integrated with something, uh, on your side project.
And now you're doing something for work. And I feel like that's how that's my, that's the way I do things. I don't know if everybody does that, but that's how I feel. And the opposite is also true, right? If I see a new product coming up and then I go to their website and it's confusing and then I try the API, I get an error right away.
Then I go to the docs, there's a typo. So now like I'm, I'm not going to share that with my friends. I'm not going to talk about it Monday morning with my team. So that's like the, the basis of what we're trying to build, just a better product for this specific audience. And we were very thoughtful about like, what is the API to send an email?
It should be simple. You should. Experience sending an email in the first 10 seconds of signing up. And in the beginning, we had like five steps on the onboarding process. One of them was configure your own domain. So then you go to Cloudflare, you add all these DNS records, and it takes like a few hours for the DNS to propagate.
We're like, no. Let's remove it. Okay. Now there are four steps. Now there are three. Now, today we have like two steps, so that's what we're trying to do. Just a better way to send email in an easier way. And just a product that when you use it, you're actually excited to use. Uh, I remember when I use SendGrid, whenever I.
Start, it's not even, I don't know if you have that feeling with some products that you use, but I open my browser and I always use command L to select the, the nav bar. And I start typing. The moment I start typing, I already start feeling either happy or frustrated. I'm like, Oh, okay. I'm going to have to use this thing.
I'm like, Oh, I know the login page will take like. Three seconds to load. They're going to like ask me this MFA that it only works with SMS because it's really about same grid and now they're pushing that. And then after I confirm only SMS, then there's this huge banner on how I should send SMS. I don't want to send an SMS.
I just want to send an email. Uh, so like, there's just like, uh, I want to build a product that doesn't feel that way. and yeah, I just want to use something that I, I would enjoy using as a user. So that's. The foundation of everything that we do, it needs to be fast. It needs to be slick. It needs to be, you know, we need support for all these different languages, just like Dracula, where we have support for all of these different apps.
We need SDKs like we live in an SDK first world, not an API first world. There's a huge difference in the way we consume. APIs today than we used to consume, years ago. So it was just like, for me, a lot of things that we could do to make that whole space better.
[00:36:20] Sweating the Details
Andrew: Yeah. And it really shows on your website. Like the docs are just like for, even for like react email, which is like the side project to the company. Like the docs there are immaculate. You tell how to like even integrate with your competitors. So like you're, you're, you're not even trying to sell yourself too much.
You're just like, yeah, we, we, we maintain this also. We recommend you use it. So like, it's nice to see that. And then another note on polish your guys's homepage is, is beautiful. Uh, that animation you guys did with the Rubik's cube. Very nice. Uh, what, what, why a Rubik's cube? I have to know.
are you a Rubik's cube kid?
Zeno: I definitely am. And I have one here right in front of me.
Justin: Nice. That's amazing.
Zeno: and I keep like just rotating it whenever I'm in a meeting. I keep just like playing around with it. Uh, but it's interesting how, uh, when you're building a website, like imagine like if that's your company, right? Like this is the most important website ever for you.
And then. Like there's so much room in the screen and then you choose to like use the most important real estate you have as a company and you put like half of that, that first load, half of it is a Rubik's cube that is rotating. Why do like, there's like, why are you doing that? And the reason was because we wanted to send a message, a message that, Hey, if you care about the technical details, we care about it too.
If you care about like modern technology, we care tha- about that too. If you care about polish and design, if that's a value that you hold, this is the place for you. And this is not what are you used to? Like, this is not mail gun. Like if you want that vibe, if you want to schedule a demo, you can go there and good luck.
Like, um, you know, that's fine. Uh, but if you just want to have a great experience, that's for you. And we could write a whole manifesto page about it. Like, Oh, we hear our values. We care about the details. Like, but, or we can just demonstrate it. And I feel like that's what that Rubik's cube does. It demonstrate these values without saying a word. and I very much love that cube, and I'm so happy, like, it's built with Spline, which then exports to WebGL and, uh, it's just like, now it's just a thing that people know us about, even if they don't remember the name recent, they're like, Oh, yeah, the website with the Rubik's Cube. Yeah, I know those guys.
Justin: It is. It is fascinating how just like a little bit, something a little bit above and beyond really can set you apart though. And I'm like, can, can tell a good story. And I see some consistency here with the storytelling aspect.
Zeno: Even with your personal brand, right? I feel like. we buy from people, we don't buy from other companies. So when you're using Vercel, of course you use Vercel because of how amazing it is and all the ecosystem and the stability. But you also love using Vercel because you like Guillermo Rauch's tweets and you like the work that Lee Robb does, uh, you know, and that's the reason why so many people bought Teslas in 2020, you know, uh, they just, they, they felt connected to Elon Musk.
There's that thing where the founder brand and the company brand, they kind of mix together and they need to be consistent. Right? So if you go to my personal website and it's this super ugly website with all of these outdated posts, that's not going to translate. It's like there's something off here.
Maybe they're hiding something that maybe they hired a good designer. But they don't really care about the details. It's just like something they're trying to sell. Uh, and the opposite is also true, right? Like you go to my personal website and it's amazing. You go to the company's website and it's super bad.
So like, uh, are like the values doesn't seem to be aligned. So, I think about that a lot, like how those two worlds. Connect, and how people consume things these days. I feel like there's, there was a shift there, you know, uh, of, you know, even like from the Steve Jobs times where people are like, yeah, of course, Apple is amazing for many reasons, but they also wanted to.
Feel the genius of Steve Jobs as they were using products that were built by him and his team.
[00:40:53] The Complexities of Email Delivery
Andrew: So we've talked about, uh, like why writing emails themselves is hard, but I have this open source library. Why can't I just send those emails myself? Uh, I know it's a little disingenuous because I know sending email at that scale is hard. So like, what are some of the challenges that come with like actually facilitating, like.
Probably the millions of emails that you've sent so far.
Zeno: Yeah, no, it's so fascinating because if I knew everything that I know now, I'll probably never start a resend Like there's just so much work that goes, uh, on, on making like the email arrive on your inbox, uh, versus. botch, you know, so there's definitely a lot of things that we, we've been learning around sending emails at scale, like millions and millions of emails every month.
And of course, you can set up your own SMTP server. And, and send it for your Linux machine. There's a lot of things around the different authentication methods. So there are things, uh, like DKIM, SPF, DMARC. Those are things that you need to make sure that you're adding those headers to every single email that you're sending.
And then there are things around just complying with rules and, and uh Things that might change from country to country. Like if you're sending promotional emails in the U S you need an unsubscribe button and you need to include like the physical mailing address, which it's a little bit weird, right? Like adding that it feels so what, like, do I really need this?
Uh, but that helps with deliverability. So. Email is very much a team sport where to get amazing deliverability, you need a very strong foundation and platform to support you and you need good content, a warm up audience. a good IP. So there's a lot of things, like, if you think about reputation for email, you can go on the domain level, on the subdomain level, on the actual IP, and then you can choose to buy a dedicated IP, and then you need to warm that IP as well.
And just recently, like, three days ago, from the moment we are recording this, early February, Both Gmail and Yahoo mail, they've made changes to the way, uh, emails are like sent. So if you don't include a one click unsubscribe header, they might just send you to the spam folder. So there's just like many of these details that if you were not in the email world, it's going to be very hard for you to not just land on spam right out of the gate.
Um, so I would definitely recommend folks to. Try something that is already, uh, built for you before you start rolling out yourself. But it's like one of those things where sometimes if you want to see how things are made, you can do that yourself too, right? Like, Oh, I want to roll my own auth. Instead of using auth zero or clerk, that's great.
Go for it. You know, uh, I'm sure you're going to learn a lot about security and authentication and data privacy by doing that. Um, so yeah, it, it really depends what you're trying to do, what scale you are in and everything.
Andrew: Yeah. It's a completely foreign technology stack to me. All, every acronym you said, I did not recognize one of them. And like, I was doing some, some research about like doing emails for this podcast. And I came upon like warming and I was like, wait, you have to, you have to warm things up. Like there's so many like weird rules and behaviors you have to do to like be a good email sender.
Zeno: It's wild. It's so wild.
Justin: It seems like there's like maybe two sides of the story. So there is the like provider, you're like actually sending the emails. And I saw this, uh, I was reading this thing on Hacker News a while back where somebody was talking about running their own SMTP server. And they're talking about how like Google can just mark you as spam and like everything coming from your thing is now just going to spam.
Like doesn't matter who it's being sent to. If they have a Gmail account, it's going straight to spam. And it's like, so there are rules that you have to, uh, Apply for, you know, to follow for them. But I, I imagine that the tricky thing here is like the content that is being included in the emails that you send, like counts for or against your platform too.
So it's like, they're ha I'm assuming you have to do some sort of like validation and be like, Oh, you're sending this to us. It has to be, have an unsubscribe button. Or like, maybe there's things that you can do to add that on top, but like, it seems, seems tricky. Right.
Zeno: It's super tricky, especially because we're talking about an industry that has a long history of abuse, uh, every single day. And I'm, I'm telling, I'm talking about like every single Saturday, every Sunday over Christmas during New Year's Eve. We, we were seeing people trying to attack resend`. They still do every single day and they try to send phishing emails.
They try to send spam and we have all sorts of controls to avoid that. And then some we simply cannot catch before they send, and then we learn, we adapt, and that's just like a constant mouse and rat chase, uh, it's something that it's incredible, like how, and there are things that we could do, like, for example, let's.
Scan every single email that is said, right? And then let's see, maybe let's run chat GPT on every single email so we can see the message and then maybe give it a score based on all these different rules. But then you've got to think about the cost of doing those things, the, how much you're adding in terms of overhead for time to inbox.
That's a metric that most people are not familiar with, but in the email world, depending on which type of emails you're sending, that's super important. Right? Imagine you go to devtools. fm and then there's a magic link authentication there. If that email doesn't get to your inbox in like. One or two seconds, your mind already goes somewhere.
You open a new tab. Now you forgot about, you know, what you're doing it. And then after you go there to your email again, then the, the link expired. And now you're like, ah, I have to do this again. And so like the time it takes for the API request to be triggered. From the time it takes for Gmail to process their anti virus check and then finally decide to place you in the primary inbox or the promotional tab or the spam folder.
You have to take all of that in consideration until finally you can, um, see that email landing. So it's a bit, but you know, there's some emails that you don't need that. Like if you're sending an email blast, like, Hey, new episode is up, right? Like, that's fine. You can like, maybe scatter that email sending throughout the day.
Maybe you can even. Optimized for specific time zones and all the users on the East coast are going to get at a specific time. All the users, if you do by user where you send on their time zone, uh, optimized for the time that are going to open. So there's just a lot that goes into it. And then there's link tracking and open tracking.
Uh, it's a huge, huge, like black box. Uh, and some informations are available to us and some aren't right. Like. The way Gmail does things, uh, the way Yahoo does things, it's like, you never really, it's like the Google search algorithm, like, you never really know how they, they place things. There's very few information online.
[00:48:59] Not Just JS
Andrew: So you mentioned earlier that you support a bunch of different platforms. Uh, you support JavaScript of course, but then you have things like Java, Python, Elixir, PHP, but something I noticed was that the only one that really supports the react email style of emailing seems to be like next JS. Do you have plans to bring those primitives to other platforms too?
Zeno: I'm so glad you brought it up. Uh, it, it shows that you really looked into it, uh, because that's something that people ask a lot. Uh, and that's true. Like the, the transforming of JSX to HTML only happens in the Node SDK. So we don't really offer that for Ruby or Python and other languages. And that's something that frustrate folks because they're like, I want, I, my front end is in React.
I want to build that email in React. But I want to send, like, this is a, we're talking about a back end solution, right? I want to send it through my Ruby SDK. So why can't I do that? And we're trying to figure that out. Uh, it's probably going to involve a solution where you're going to define that template in the dashboard online.
And then you're going to reference that template instead. Instead of having it on your SARS code, 'cause then transpiring that BA based on E every single language, it's a little bit hard. We would have to embed maybe like node into the, the SDK or just like, I don't know if you remember, like sas, uh, that the, the CSS thing, like that was always a pain, right?
Like you need that binary to be able to convert, uh, if you wearing the node js. Ecosystem, like you needed that Ruby thing. So, um, we want to avoid doing that, but we need a solution that helps everybody. So for now, what we tell people is like, Oh, if you want to use that, you can still use React email, but then you got to render to HTML first, and then you send the HTML, which not ideal.
It's another build step, but you can, you can still do it.
[00:51:09] Launch Week and Future Features
Justin: That's not too bad, though. That seems like a reasonable expectation. Uh, so you recently wrapped up, uh, ResendForwards, uh, where you and your team added a bunch of features. Could you give us some highlights of what came out of that?
Zeno: Yeah. That was our version of a launch week. The second one that we ran. and it was very nice because we spent the whole 2023 focused only in one specific use case, which is transactional emails. So we're only focused on reset password, welcome emails, those emails that are one to one. Where as a user, you request something, you get that information back.
That could be like a weekly digest as well. Like, but things that are very tailored, uh, for you as a user. But we, we would hearing a lot from folks that they would come to us and say, Hey, I absolutely love Resend for my transaction emails. But then I got to use something like MailChimp or whatever other tool to use my marketing emails.
But, uh, you know, like maybe I'm, I'm just like you guys were like, Hey, I have this side project. I don't want to use. Two tools, like it's not like I have a team of marketers, a team of developers. I just want to use one thing. I wish I could send emails straight from resend marketing emails, newsletters, change logs, and as a user, again, that was the pain that I was feeling as the CEO of resend every month, I wanted to talk about the things we shipped and I had to run this super hacky script.
To, to do that. And I hate it. I'm like, wow, this is the worst experience ever to send an email. Uh, I have to loop through like an entire contact list and then send it. It's so bad. So we're like, no, let's fix this. So we, we created like a proper editor but again, looking from that problem from a different angle.
So one angle could be like everybody does. So. It's a drag and drop experience. You have all the components on the right, just like HubSpot. Like you track this and then you make changes over. Like, is that the, the altering experience that people want in 2024? Uh, no, they love using things like Notion and the slash commands and.
Developers love to do things that are keyboard first. Like they, they want shortcuts. They want, they don't want to touch the trackpad or the mouse. Let's avoid that as much as possible. When you're copying markdown, it needs to work. Like it's not a option. Uh, if you're. Writing content on Google Docs. Once you paste the content, it needs to work.
We need to bring all that formatting. We can't just ignore it. So that's how we approach it. So this whole, uh, recent forward, this whole launch week was around unveiling this, this other use case. Uh, of being able to send newsletters and, uh, and all these other things. So it was super cool. Like ahead of last, and we also launched a light mode, which was a huge, like everybody's was asking for it.
Uh, so, uh, and then when we did, everybody was complaining that we launched a light, but like how, how a company can do that and, and, uh, so you're never going to please the people. It's just like
Andrew: Yeah, I saw I saw people guys shit for doing light mode and I was like, that's the opposite problem that people usually have. Usually it's dark mode. You're so developer centric. You took dark mode on first. umm So you guys shipped a lot of cool features during that week, uh, but we, we got lots a year ahead of us.
So what are you guys planning to release in the upcoming year?
Zeno: Collectors to a lot that we can do to be this one stop shop for all of your email needs. Um, if you're building a SAAS product, um, you probably experienced this thing where. There's a lot of people trying to abuse your free tier, for example, and they use mail, mail nature and all these other solutions to create disposable emails.
And then they try to, uh, just exploit your free tier. You know, we want to have verification APIs where you can send an email address and then tell you back, like, here's the risk score of that email. We think. Maybe you, you're not a good idea to send an email to this address because it's, uh, not that good.
And then that's connected also to deliverability and inbox placement, uh, as a, as a whole. And then things like receiving emails too. Uh, I want to be able to, you know, create a support system. Let's say where I send email, like I can receive emails and I can reply to that same thread. Uh, so just empowering that use case, like today we are very much like the platform for you to send so you can do that using our super base integration, our SMTP server, our API is all of our SDKs, but we don't have the ability to do that for receiving emails.
So we want to improve that as well.
Justin: So one of the questions that we like to ask at the end of our episodes is always a forward facing question. And I think that the question here is pretty obvious, but what do you think the future of email is?
Zeno: I feel like there's been a lot of, and again, just drawing a parallel, uh, as an individual observing this space, right? I use a lot of slack these days. I have, I get a lot of alerts from slack. I got a lot of texts, uh, from social media, DMs on social media, but I would never would want to rely only on those for people to communicate with me.
I really love the fact that email is this cornerstone of the web. Like that's a, like to sign up, you need that, uh, you need this address. So I hope to see. Emails to, to be doing that role of like, you know, being this place where I can have access to anyone and anyone can have access to me, uh, if you want to talk to me, if you're listening to this right now, you can send an m that's zeno@r esend.com. Beautiful for me and there's no algorithm to. Place that for me to get that message or not. Like, like I'm going to get that message. So I feel like there's something beautiful about that. And I just want to see that going. I don't have any, I wish there was better support. I wish, you know, like all these other things, uh, around email clients.
Um, but more than anything, I, I just hope it continues to be here because it's so useful. Um, so yeah,
Andrew: Yeah, it.
would be sad go the way of RSS like RSS kind of falls in the same bucket of like great technology, decentralized user centric that just over time kind of like. Deteriorated into like what it is today, which is like, just not a very good experience
Zeno: It's fascinating, right? Like what happened with that? Like it's, yeah, there's, there's definitely a lesson there for us to learn.
Justin: I think emails may be a little bit different because it's like a, it's not just a pull model. It's a push model. Right? So, uh, there's a, well, I mean, you could say that RSS has a push because you're publishing thing to it, but like a little bit different. Right? Uh, I think, you know, spam has always been the big problem of email.
And then one of the things I'm really interested in is like, Does Google stay on top? Does Gmail stay at the forefront of how people do email? Or does that change? Be interesting to see.
[00:58:52] Tooltips
Andrew: with that. Let's move on to tooltips. Okay.
my first tooltip of the week is WorkerPool. So recently I was doing a task where, at Descript, where I had to delete 300, 000 projects, and I did it all through the API, and I wanted to do it as fast as possible. So I was looking for a bunch of tools that would help me do it as fast as I could.
One way to make your Java, your node code run a little bit faster is to spin up different workers to do the same task. Uh, actually doing that, uh, was like in like orchestrating that and figuring out how many workers I could run at the same time was a lot more detail than I wanted to get into. So I found this cool little, uh, library called worker pool that has a nice API that makes it all super easy.
You just, you start a pool. Uh, you add functions to call into the pool and then you wait for it to terminate and it figures out all the stuff of like actually spawning the workers, uh, figuring out how many of them it can run at once. So, if you're looking for something to do a task like this, uh, definitely give it a try, but it, it definitely makes you think.
That JavaScript is not the right language to be doing stuff like this. And if it's like kind of so many hoops, I have to jump through to do it.
Justin: That might be a fair assessment. I think,
Andrew: Next up, we have esm.sh/run.
Justin: yeah, so this was a really interesting little discovery. So it's just, it's just like a little script that you can basically use to write JSX an HTML file. Um, Which is kind of fun. So, uh, ESM. sh is the, the sort of ESM CDN. Uh, and this is just like a little tool that they, they released. So it's like, if you want to have this experience of, uh, yeah, of writing.
Uh, JSX in your thing, you just literally include a script tag in the HTML and it's like, uh, esm.sh/run. And then you use JSX in your HTML file and it just works. And that's kind of mind blowing. Um, so yeah, it's fun.
Andrew: Look, ma, no build step.
Justin: Yeah. The, the, the tech slash JSX is the special thing there. Right. So they have like a special. Uh, type, so that means it doesn't get interpreted as like regular JavaScript. Uh, so when that is parsed, it doesn't do anything, but then their JavaScript comes through and like Finds it and then replaces it.
Very
clever kind of fun.
Andrew: Another win for the no build step community.
Zeno: Yes.
Andrew: up next, our previous sponsor Raycast.
Zeno: Oh, really? That's nice. I absolutely love the team behind Raycast and I absolutely love the tool. Um, I have this. Uh, if you look on my personal GitHub account, there's a, this repo called, uh, Alfred workflows. So for years I've used Alfred and I was a big fan of Alfred. If you search my name, smash it. And you put it like smashing magazine, Alfred, like I wrote a whole article about like all the things I love about Alfred and the things you could do.
Uh, and somehow. Raycast was able to convince me to move to, to their tool instead. And I'm super hooked. Our whole team uses it. It helps us a lot with support. For example, we have like all sorts of, uh, snippets that we collaborate and we share amongst the team. Uh, So it's just made my experience of using a launcher on macOS now to be a collaborative one.
And it's just so exciting. And if you use Dracula, there's a Dracula theme for it. So there you go.
Justin: Nice. Nice Yeah, Raycast is so good. It's so good
Andrew: And it's fun to watch their Twitter driven development. When somebody will just be like, I have a problem on my Mac. And then the Ray cast teams, like a few days later, here's an extension to solve your exact problem.
Justin: yeah, it's amazing
Andrew: my next tool tip is a bunch of packages. So, uh, sindresorhus is the, the biggest developer in the JavaScript space, and he has come up with. A crazy amount of promise packages like this list literally has Like, probably, like, 50 different packages on things to do with promises. And if you're doing any scripts, like I was mentioning earlier, where you might be hitting an API 300, 000 times as fast as possible, and you might be getting, uh.
Rate limited and all these different things. You might even be breaking the API. I might've done that. Uh, uh, these libraries will help you out a lot. So I use PQ, which is just a really simple library to make a queue, add some promises to it and, uh, wait for it to run them in chunks. So you don't like just blast your system or blast the network with all these different API calls.
And then another one I used in here was P retry. Which just does an automatic exponential back off for a promise, which is really nice. So I could send off my, my request. It might fail and then to retry once or twice and it would go through. So if you, if you want some like nice lower level things to. Use with your promise based code.
I would definitely give out, give a check to the promise fund repo on cinder. So houses github.
Justin: I've definitely used multiple of these over the, over the years, this has been around for a little while. Yeah, they're, they're quality.
Andrew: Yeah. I knew of the P dash packages, but I think I had only seen like maybe half a dozen of them. I did not know there were like 30 to 50 of them.
Zeno: Yeah, I've only used PQ on that list. Same as like, P retry looks amazing. I doubt like now I'm like, Oh yeah, I should definitely use that.
Andrew: Yeah. I had, I had my own implementation that I like carried around with me between repos called chunk promises. That was like a much shittier version of PQ. And then I realized, Oh, that's what that, that package name means. I'll use that now.
Justin: Yeah. Yeah.
Andrew: Next up, we have ActionForge.
Justin: This is a really interesting project. It's just somebody I was following on Twitter. It was like hacking on this thing. It's, uh, it's GitHub workflows. Uh, in a visual editor interface. Uh, so if you've ever, you know, you ever do any CI stuff, it's like the CI world loves YAML it's, it's everywhere. It's unescapable.
It's awful. Um, and GitHub actions use, use YAML, but this, this action for forge is a, it's a VS code extension and I think there's like a standalone thing. Um. But yeah, it displays your whole GitHub actions orchestration workflow in this like visual node based editor and really, really cool thing is you can like edit it and it will update your config.
It's just really interesting. Um, cause there were like a lot of really, there's a lot of small nuance things about like how you like. Return a value from one step to an action and like read it in another step. And it's like the, the semantics of like how that works are a little just strange and like, sometimes it doesn't work.
Andrew: And like, I don't know, it's just like a lot of stuff to learn and like try to remember, and this just makes it pretty easy. So it's, it's, it's just neat. It's fun. Plus I love visual coding interfaces. So, you know, that's Yeah, it's no fun to be lost in a thousand lines of YAML for a GitHub action. Uh, my life since becoming client platform here at Descript, it's all YAML now.
next up, we have the package LinkCheck.
Zeno: Do you know when you go to a docs? And there's a link and you click and it's a 404. Uh, that's so frustrating. I hate going to any website and click on a link that doesn't work. So what I love about this package is that it's extremely simple. If you want to. I, I, I really think about docs as code. And when you think about docs as code, then you think about what's your CICD strategy for docs.
Uh, maybe you can add like a, there's a package called write good where they check your spelling. You know, like I'm not a native English speaker, so that helps me a lot. Uh, same with this, you know, you can check all of the links, uh, that you have on your docs, and then if they don't return 200. You know, great.
You can go and go ahead and fix it. So highly recommend thinking about how you can make your links to work because they might work today, but a year from now or two years from now, then they might not be working anymore. So check that out.
Justin: This is always such a subtle thing.
Andrew: The open sourcer in me is just like, I need to make a remark plugin for this right now. I want to put this in all my markdown
priority exists.
Justin: Yes, absolutely.
Andrew: okay. My last tool tip of the week actually comes from the CEO of Vercel himself. He made this cursed little project called React Postgres Components that actually runs React Server Components in V8. Inside your Postgres database. Yeah. The, your face, your face is right, Justin.
That, that is, that is what, what you should be doing. Uh, so you can make, yeah, exactly. So you make your RPC with your, uh, React server components. You can run SQL. Uh, you don't need a wait. It's this is running within your database and then you can use those like regular react components. Uh, it does some crazy stuff under the hood that I don't quite understand, but I love the precedent it's setting of like what this is proving out.
And at the bottom, they, uh, they kind of like, he walks through, uh, what the inspiration is and why he would do it. And, uh, I just, I just find it really interesting. And I want to see what React server components are like in like three years when people have had time to like sit with them. The primitives have like matured a little bit and we start getting these like cooler things that we couldn't do before.
Justin: It's pretty wild. Yeah. This is interesting. Retake on like what it actually means for a react server component. We talked in one of the last episodes where it's like, not actually, it doesn't actually mean that it's running on the server. Like it could just be running at build time. And there's like a lot of different semantics to that.
Uh, and this is, I think, another example.
Andrew: Yep. It's somebody else's machine.
Justin: Yep.
Andrew: Next up, we have this cool article about PartyKit from Sunil Pai.
Justin: So, uh, we had Sunil on the podcast a while back, uh, you know, he's been doing a lot of great work on PartyKit, which is a, WebSocket like multiplayer, framework, which is excellent. You should definitely check it out if this is a problem that you have. Uh, and he wrote this really great article that I just read today about, uh, stateful Serverless functions, um, so serverless functions are classically stateless, you know, it's just like you're not, you're not persisting anything, but there's this notion that, and I, and I feel like we've all been sort of pushing towards this of, like, simplifying our primitives and thinking about things that, like, Sort of, you know, I think, I think about how you were talking about recent and like removing all the friction and really just like focusing on the core value and getting there really fast and doing that.
And I feel like we all are getting that way with our code, right? We just like, want to get to the point. We don't want to deal with a lot of fluff. We would just like, want to do the thing that's really important to us. And in this article, uh, so Neil's talking about how party kit does that, with durable, durable objects in CloudFlare and CloudFlare's platform.
But it's just like, here's how you can like write a, durable object and, and CloudFare kind of just through part of kit. Right. But it like, looks like a little kind of composed module. And, uh, this has been on my mind a lot lately. I just like this idea of like simple deployable code. That's stateful.
That's easy to reason about, but you can manipulate pretty quickly. I don't know. It's a, it's a great article. Definitely recommend you check it out.
Zeno: You know what I love the most about this article? The code blocks. Are you using Dracula?
Justin: pulls it all back together in the end.
And then our last tool tip of the day, probably the most important tool tip we've discussed recently is this lava rock essential oil diffuser. It looks really cool.
Zeno: Okay, check this out. I have this designer friend who is like super into designer objects, right? And then he gave me that as a gift and I have it here sitting right next to me. Uh, and I'm like, wow, this is so crazy. Like a lava rock. What does it do? And it turns out it's an essential oil diffuser. So then every morning I come in.
And then I put like a little bit here and then like the whole environment changes, you know, I'm more calm and that's the secret to, to building Resend. Uh, like, uh, it's, it's just like a funny thing. Like I never thought that would even exist, but I got it as a gift and now I absolutely love it.
Andrew: Email does weird things to you. We heard it here, folks.
Zeno: Oh, my gosh.
Andrew: okay.
that wraps it up for tooltip
tips this week. Thanks for coming on Zeno. this was a, such a fun conversation about email words. I never thought I'd be saying, but thanks again for coming on.
Zeno: Thank you, Andrew. Thank you, Justin. It was really nice having this. I absolutely love the work that you all are doing here at DevTools. FM. Uh, I feel like you're really bringing some like heavy hitters and like some people that I admire and that I take inspiration from. So rocking. This is, this is really good.
Justin: Thanks. And I'm happy to add you to that list because the work you've been doing is for a long time is excellent. And you know, this is, this is really cool. So thanks for coming on.