“Pretty emails” he says with joy
Welcome to Slow and Steady, the podcast where you get to follow along as we build products in public. Each episode gives you an honest peek into our lives as we share our struggles, our wins, and everything in between. I'm Benedikt, and I'm feeling productive.
Benedicte:And I'm Benedicte. Today is October 28. This is episode number two thirty one, and I'm tired.
Benedikt:Oh, what's going Did you party too hard or are you getting sick?
Benedicte:You know, I might have. I might have. We went to wine tasting on Thursday and then a family dinner with also quite some wine on Sunday. So it, you know, it might be.
Benedikt:Still the still the hangover
Benedicte:too hard
Benedikt:days days after.
Benedicte:Plus. Yeah. Yeah. I know. It could be.
Benedicte:It could be. But I kind of proud of myself because I could I felt like I was trying to code. It just, like, didn't like, the brain wasn't working. I wasn't feeling it. And now it's like, okay.
Benedicte:I'm actually tired. And I took some hours off before this podcast where I just, like, laid on the couch and watched some television and didn't feel bad about it.
Benedikt:That's good.
Benedicte:Because that's the perks of this life. Right? We need to enjoy or, you know, take take the perks. So
Benedikt:Yep. Yep. Actually, be flexible with the flexible time you have. Right?
Benedicte:I mean, that is one of the flexibility. I guess it's the only major perk. It's The a self weird
Benedikt:fulfillment and the freedom of not having a boss.
Benedicte:Yes. Well,
Benedikt:for you, I guess you have a boss.
Benedicte:Yes. And then also I had to charge because you might not, like, live this as thoroughly as we do, but on Friday, it's Halloween. And Right.
Benedikt:Yeah. Now that you mentioned it, that makes sense.
Benedicte:And, you know, the kids these days are all into Halloween, and I get it. It is a fun holiday. It's a candy filled holiday. And in the beginning, I was like, I'm not doing it. And now we're like, we're doing it.
Benedicte:We are making
Benedikt:a graveyard. When
Benedicte:we were closing the cabin in Sweden, we got cheap candy, and we even bought candy for two of the neighbors. The guy who was, like, ringing this bill off was just like laughing. There's so much candy. I'll see if I can post a photo and people can see. We just, yeah, we look like crazy Norwegians, which we are, you know, we're buying cheap, cheap Swedish candy, which is actually German, it was Haribou and some Oh, nice.
Benedicte:So, yeah.
Benedikt:Very nice.
Benedicte:So we're all, you know, we're ready for it, and this year I'm also doing Halloweeno, so I'm having some friends come over and drink wine with me while we hand out candy.
Benedikt:That sounds like fun. Yeah. I tend to forget about Halloween and then it's there and I'm completely unprepared. Usually, we have kids going around as well, but apparently, there's a rule. I think I might have mentioned this last year.
Benedikt:There's apparently a rule that you have to put a candle outside in front of your door if you like participating. If you don't do that, you're usually safe. But we're traveling on Friday anyway, so, yeah, we might just be leaving when everyone's going around trying to get candy.
Benedicte:Yeah. But you were productive, and I've seen you've been productive with your video challenge.
Benedikt:Yeah. Yeah. Before we get into the video challenge, I probably need to talk about the other stuff we've been productive on. We have been publishing stuff that we have built over the last, I want to say months, but it's probably also some of it is years old that was always in this half baked state and not really ready to be launched. So one of the tasks we set ourselves for the last quarter of the year is just polishing some of those, or most of them even.
Benedikt:I think there are one or two things we decided to not launch. But everything else, we're polishing and then enabling, removing the feature flags for it, and then announcing it. So in the last two weeks, since the last recording, we launched array filtering. So you can now build you've always been able to send array data into user list for, like, I don't know, a list of integrations so that customers are enabled or the list of feature flags enabled and stuff like that. And you could use them in emails to just iterate over them, but you were never able to build segments on them or any sorts of filters or any conditions in workflows even.
Benedikt:And a couple of weeks ago, we had a customer request us, and we went back and forth, it turned out array filtering was the only proper solution. So we sat down and built it, and it has been sitting there. And honestly, I'm not even sure that particular customer actually got around to changing their setup to use it. But yeah, I guess that's it. We decided to enable it, we announced it, and immediately got some more customers using it.
Benedikt:And they had feedback, so we already built improvements and stuff like that. So that was exciting. And then last week, the other thing we launched was recurring triggers, which we already built half a year ago or something like that. And it was also just sitting there, not enabled for most people.
Benedicte:Yeah. Because this was funny because we we had that feature request come in to Outseta, and we were like, we should probably build something like that. And we were like, because everybody else has it. And, you know, somebody wrote in the in the Slack, and I was like, I I don't think so. I remember, like, Yousube just launching it this year, and ConvertKit still doesn't have it as far as I know.
Benedicte:So I was like, yeah. And then I went on LinkedIn, and you were announcing it that day. Yeah. It was it like, I was pretty like, didn't they launch that? Like
Benedikt:We built this as I said, like, we built this months ago, but we never got a run to to launching it.
Benedicte:Well, that is super cool that you're just, like, polishing and getting stuff out, like, you know.
Benedikt:Yeah. We we were just, like, looking at the backlog lock of, like, half half baked, half finished stuff and decided to just, like, just needs to go. Right? Like, we just put check marks on it and just publish it. The other thing we also enabled for everyone, and this has literally been around for years, we have theming support built in.
Benedikt:Like, I I don't like it. Like, I actually hate it because it's pretty bad. But you can select between a cuss a few custom built built in themes, and then you can also just write your own HTML and use that. So we also enabled that because, basically, we enabled it for everyone who asked for it anyways. And while we're right now reworking all of the theming things, I figured we already have to figure out migration strategies for the people that are on the old stuff anyway, so we can just enable it for everyone, and then doesn't really change anything other than we're checking another box for people who are just checking us out.
Benedikt:But, anyways, those are the things we launched among other things.
Benedicte:But with the array filter, because you mentioned it, and I was like, okay. Yeah. That's that's pretty cool. But still, I was like, you know, like, arrays, like tags in an array. But then I looked I think it was on your video or, like, the announcement thing, and you actually do, like, arrays of objects, and you can you can trigger based on things inside of the objects in the array.
Benedicte:And then I was like, oh, mind blown. You know, that's super cool. Because when I was like, arrays, you mean, like, category, like, tags, like that?
Benedikt:Yeah. Yeah. Yeah. It is pretty advanced, and you can even do arrays of arrays. I still have no idea what a use case for this might be, but the implementation supports it because we were like, if we process, we just just build it so it works in all combinations, I guess.
Benedicte:It looks super slick. I haven't been into your product, but I saw the announcement, like, little GIF or
Benedikt:I still need to do a video about this, but that's probably the video for this week, I guess. But, yeah, like, talking about the videos, I I'm currently in the lead with three videos, and Jane has not recorded a video yet. But still, like, I I need to do at least 10 until the end of the quarter. Basically, every week, I need to at least publish one video. At this point, I'm starting to wonder if she just tricked me into recording videos without having the intention of recording videos
Benedicte:Good or one, Jane. Good one.
Benedikt:Who knows? Like, maybe maybe that was just an elaborate mind trick on me to, yeah, to convince me to record stuff.
Benedicte:That's a good that's good leadership.
Benedikt:But so far, I enjoy it. Like, we're just using Screen Studio or, like, I'm just using Screen Studio for this, and that makes it super quick and easy to just record the screen, and then you get those Zooms and stuff like that. You can edit it relatively easy and cut it. And it's just the right amount of, like, right level between just recording something but also having just enough ability to edit. And it does transcripts as well, AI generated transcripts, so you can also just edit and embed the zooms and video embedding and stuff like that of your camera.
Benedikt:I really enjoy it, and I was worried that this would all take a lot of time, but usually I can bang one out in an hour or so with all the practice takes and preparing and stuff like that. So they might not be the most polished ones, but I think they are okay enough to put out there. Right now we Maybe polish
Benedicte:them as well? Or Yeah. Like having like a bank of them.
Benedikt:We started so I recorded three, as I said, like one is about using our API, just the basics of it, like how you send data over and how it then shows up inside the application, and that it does up search and stuff like that. So just pointed out the fact that you don't have to care about anything that's already in there. Just send new stuff and we will figure it out. We embedded that on our I think it's in the Getting Started guide where it talks about how to get data into Userlist. It's just in there on the website.
Benedikt:And the one on Recording Triggers was a little bit of a longer one. I think it was like five minutes or so. We embedded that in the announcement email, and it's also in the docs in the section about triggers. There's now the video embedded in there. And then earlier this week, well, yesterday, I recorded another one about recurring triggers.
Benedikt:It's just super short, and the other ones were landscape, and this one was square, so we could post them on LinkedIn and social media because, yeah, landscape is kinda like if you're on the phone, you can't read anything on the landscape thing anyways. So, yeah, tried that, made a super short one, I think it's thirty seconds or so, and posted that on socials yesterday. I was hoping for a little bit of more, like, engagement, like, people liking it more or something like that, but not the case. But whatever. I think this is you just need to keep going, I guess, and not get discouraged by this.
Benedikt:Mhmm. So, yeah, that's the current state of the video challenge.
Benedicte:So I'm joining the video challenge, even though you haven't You invited
Benedikt:are free to join the challenge.
Benedicte:Anyone can join the challenge. Let us know. So for OutsetEye, I've been very focused on Framer. We needed an upgrade to the Framer plugin that I made, I guess, like a year and a half ago at this point.
Benedikt:It's been a while.
Benedicte:It it's been a while. We don't really have that good tracking of what accounts are using what technology. So sometimes it can feel a little discouraging, at least for me, to be like, okay, I'm gonna upgrade this plugin. Like, are anyone even using Framer? And other than, like, what I get through support, but, like, it's hard to gosh what people are using just from support because there are a lot of people who just never contact support and just get shit done on their own, and those are actually better customers.
Benedicte:Right? We we love that kind of a customer. So I just had like a brief energy spurt, I guess, before the last week. And I downloaded all of or I went through all of the sign ups for the last thirty days that were still active because that then I can actually figure out what tech they are. And I looked at what tech stacks they were using, and it's quite like varied.
Benedicte:Or we have like a long tail, I guess, with like a lot of one like only one. You know, we have, like I think we had, like, one on card, and we have a couple on Wix, which is not always great. But most of our customers are Webflow. So it's quite, you know, it's it's kinda like quite a lot. It's a long jump to the next one.
Benedicte:Right. But the next one is Framer, and that is the double of what we have on Squarespace and on kind of React, like self coded React or white coded React mostly these days. So I was like, oh, you know, this is kinda cool. Like, we do have quite a lot of interest, and I find it fascinating because Webflow is our better, I guess, and we have been in that in that space for a long time. And Webflow is super large.
Benedicte:So having Framer, which is still relatively a newcomer, kind of compete up there with Webflow was interesting. Like, they're really coming in hot and yeah. So that was like, okay. Got that little motivation I needed that there will be people seeing and using this and, you know, and not just, like, making something for, like, a ghost town of Framer.
Benedikt:Yep. Yep.
Benedicte:Framer people. So that was kinda cool. So I'm working on the new update for our framers, just like a little bit of bugs, a little bit of paper cuts, like just making it easier and getting better error messages for the people using the plugin. I saw some errors where where people have their accounts have expired, and then they try to use the plugin again with their etcetera domain and, like, giving them proper error messages instead of just, there is an error. You know, I could be like, oh, it's expired.
Benedicte:You'll need to, you know, pay your bills if you wanna keep this going or, you know, give them better. So that's that's, like, that kind of work mostly. And then a couple of weeks back, I did a lot of work on framer overrides, which I've probably said a million times now. But those those are higher order React components that can go around anything on the framework canvas. So what these stand for is to hide and show things based on properties on the logged in user.
Benedicte:So I made like I had like very the bare minimum already that you can copy paste from the plugin. But now there's, like, a true library of stuff you can use. And this is where the framer kind of story falls a little short. Like, I really love their concept that you can, like, draw anything basically on the canvas, and then you select the code override. And it's like a logical component that can do anything.
Benedicte:But still, have to copy paste code into file, like these assets files. And now you can a Framer plugin can create an asset file. So that's what I'm gonna look at to, like, put our things in there. But it's still a tiny like you say, oh, I wanna add an override. And then there's a tiny drop down that now has, like, 60, you know, overrides that you can choose from.
Benedicte:So I'm I'm, you know, I'm I'm conflicted between putting them in separate files or putting them in one file, what is easiest for the user. So now I've like I've tried both. I have one that is super large and I kind of preface them with with a mod like a module and an underscore so that all of the odd stuff are together and all of the kind of user data is together. But it's still not like crystallized in the framework community how to best like do these, name these, and how to best update them. So usually a framework override is just like you copy code into this file asset.
Benedicte:And then if you're gonna update, you copy paste new code into this file asset.
Benedikt:Obviously.
Benedicte:Obviously. But what I've done at least with my kind of with my frame override is that most of the logic is in a in a ESM module that is living on a URL. So I can change the logic in there and bug fix in there, but they will still have to go to the override and update the version number for, like, the main logic. And I found some, like, really interesting things where Framer caches the imports, obviously, because they can't import it every time. That makes sense.
Benedicte:But no one knows how long. It's like, well, you know, so in I have them so that, okay, so o seven should, you know, choose the latest patch version. So you don't have to like be like o seven one. But I have never seen it actually update while I'm working. So I'm like, is this, like, five months, six months, a year?
Benedicte:Will it never like, will it ever Yeah. Update if we don't change the change the the URL? And sometimes it just gets stuck stuck when I'm well, so these are, like, the rough edges of framework, but I still think they're, like, on the right track. They just you know, there there needs to be something around distribution, and and hopefully, we could just use known modules straight in MPM modules or MPM modules. Yeah.
Benedicte:Packages, I mean, straight in this in these files, but we can't. So you have to, like, package it all up together if you're gonna use SUSTEN, which is what I'm using for, like, state management. But it's interesting. And it's like a fun little new frontier where I get to learn about distributing code in ways I've never distributed code before. And trying to communicate how people who have no idea what they're doing when they're copy pasting into these files
Benedikt:Yep. Yep.
Benedicte:What they need to update. So it's it's gonna be an interesting future or keeping this maintained and and working for for everyone.
Benedikt:Sounds also like this might be a little bit in flux still and even stuff in Framer might fundamentally change, so you need to be on top of things. It's like it's both exciting and tricky for, like like, early in those, wanna say marketplaces or, like, early on those platforms.
Benedicte:Yes. And that's why I kinda had to go in and, like, count, like, how many people are coming from Framer. Because at least for me now, the k like, I feel like the case is clear. Like, if we can be a preferred, you know, a preferred vendor in the Framer space, we can get the same kind of, hopefully, same kind of numbers that we're getting in Webflow. And it looks like Framer is growing and growing, and it's kind of worth spending the time learning Framer.
Benedicte:Like, I've had to learn Framer. You know, I don't sit in Framer every day and build websites for for my clients, which, you know, other like React, I've actually done that as a consultant. Like, I know but, luckily, I can use my React knowledge, but I still so so I'm also lurking a lot in, the communities and trying to answer questions to kind of get to know, like, where are the pain points? Like, where where is the community finding best practices or ways of doing things so we don't, like, kind of break with the common way of, like, the evolved or, like, organically evolved way of doing things, even though I think maybe there's a smarter way of doing it, the React way. It's like but it's still, you know, if you're a nondev that have used a couple of components from some providers or you've done, and then suddenly we just do it in a completely different way because we're like smarter or more savvy.
Benedicte:That's not gonna be helpful. So I'm trying to, I'm like, yes, I'm being like a little framer spy like in the communities trying to to learn and and understand, but that takes time. Like, it's not a it's it's not something that just takes, like, a ten minute here and there to kinda understand the whole community. Yeah. Yeah.
Benedicte:It's like a product in itself. Right?
Benedikt:The Mhmm.
Benedicte:These plagiarisms overrides. So but but in all of this, like, I suddenly I think I had a really great idea for marketing of the Framer, like, Framer outside a combo, and that is making tiny, tiny little Sassas in Framer. So, like, showcasing because there's a lot of people doing educational content around design and kind of basic setting up of the sites. But if we could do some remixable projects that have a back end and some proper React code and outside as the authentication and don't like, the design has to be, like, nice enough because these people are very, you know, interested in in design. But it could be, like, a tiny little it could just be, like, one page with like one feature.
Benedicte:So I've been looking at something like it could be like a habit tracker or just a countdown timer or, you know, something like super small, but that shows authentication through etcetera. And then you put something in a back end and you get to see whatever you have from your back end. So I think that could be like a fun way and also utilize some of the skills that I already have. Then I can live code and do all the things that I've done before and kinda just roll the playbook again. So it finally all clicked in my head, And maybe that's what made me tired.
Benedicte:Let's just do it all again.
Benedikt:Yeah, maybe that just made you tired. Yeah, I could totally see that. And on top of that, you want to join the video challenge, so who knows?
Benedicte:Well, this so the so yeah. Because that was a segue into this. I thought, like, my video challenge, but I will be like, they I'm I'm gonna make the shortest shorts about Framer and Outsider. That is, like, my niche for this challenge, and I'm gonna be recording my screen with my phone and point to things with my finger and being, like, super cringe, but also very modern.
Benedikt:Very real.
Benedicte:Yes. And trendy and cringe. So that is so that's that's, like, like, I wanted to do for the challenge.
Benedikt:And hopefully Cool. I'm looking forward to see the first video. I ever since you mentioned, like, recording the screen with your phone, I was like I just couldn't get myself to do it.
Benedicte:Even sent you an inspirational video on LinkedIn that I saw. Was like,
Benedikt:this cannot is do it just because I know that screen recording software exists. I cannot. And when I told this to the team, Jane was also like, Why would you do that? So far we're sticking with with screen recording software, but let's see. Maybe if we don't get any engagement of any of my social media video posts that I will be doing over the next couple of weeks, maybe it's time to reconsider the approach.
Benedicte:And I think, like, you wouldn't put this in your documentation.
Benedikt:No. Probably not.
Benedicte:You know, it like, there's there's different genres of video.
Benedikt:For sure.
Benedicte:And sometimes you can use what you use in your documentation on your YouTube, like, if people are really interested and they're looking for that information. But I don't think a screencast as, like, as you said, like, as a landscape on like Google Shorts. Nobody's gonna watch that as a short.
Benedikt:Yes.
Benedicte:So but I wanna play with shorts. So that's why I'm gonna go with this.
Benedikt:Makes sense.
Benedicte:Poinsty, shaky, raw, cringe style. We'll see how it goes. We'll see
Benedikt:how it Cool. Well, you're officially entered into the challenge. It goes until December, I guess. So let's see.
Benedicte:And what I'll be doing in my Christmas vacation.
Benedikt:20 videos in four days.
Benedicte:Oh, yes. That is exactly what's gonna happen.
Benedikt:Oh, no.
Benedicte:Because I am a deadline kind of person.
Benedikt:Yeah, well then I guess I will be losing this challenge. But my approach to this is consistency. Just do at least one per week and then I should be good.
Benedicte:You mean slow and steady?
Benedikt:Slow and Yeah. Yeah. Yeah. Exactly.
Benedicte:But I was gonna say if anybody has an idea for, like, a mini SaaS, like, a one feature SaaS that I could make, I would love to hear ideas and yeah. For what could be fun to make and that you
Benedikt:would comes as so as exam like, yeah. But the most basic basic example.
Benedicte:I'll try to make to do list, and my mind just, like suddenly goes to project management then I end up doing too much.
Benedikt:Yeah. Fair enough. Yeah.
Benedicte:I can't stop it on just the to do list, but maybe I should make that as like appropriate. So I I I want something that's like more nonsensical or just, like, it could just be something that's not useful at all, but that showcases the exact same functionality you would need in something more proper.
Benedikt:But the thing is, like, if it's something nonsensical, will people actually look for it?
Benedicte:So what I will do is that it will be I guess it will be, like, these remixable so Framer has this thing where you can make a project remixable so they can, like, copy the whole thing with code and everything over to their project. So I think, like, if it's even if it's just, like, nonsensical, but if it's, like, adding data and showing data and because because these are it's not like they need we don't need to showcase, like, complex functionality. We just because a lot of the people are gonna be super new to development. And maybe they won't bridge it over to being like, oh, this is a joke generator. It could be a social media post generator.
Benedikt:Yeah. Like, I guess it needs to be something where they look at the list or whatever or, like, actually search for something. Stuff they would actually be like, ah, this is what I need. I'm not sure that yeah. I mean, sure.
Benedikt:If they're flexible enough, they they can adapt a joke generator to whatever the tip of the day generator. But, I don't know. Just trying to say,
Benedicte:like, maybe make them more
Benedikt:useful than than just gimmicky.
Benedicte:Yeah. So this was, like, a little on the sides, like, wanted to do for fun and be able to be a little creative around videos and stuff. But we're gonna make a course template, which is
Benedikt:Obviously.
Benedicte:With bookmark functionality and lesson completed functionality. We have that in Webflow. So So we'll definitely be making or contracting some framer framer designers to just make, like, straight up templates that people need. And then my, like, little mini SaaS thing would be more on the, like, experimental side, like, how far can you push Framer? Can you actually make a full app?
Benedicte:And not just, like, you know, more of a content heavy site. So we'd be more to, like, look at these things. Like, where would we host a code? Like, how do do we wanna is it better to put the code in the, you know, in the file editor that they have? Because then if somebody remixes this, they can see the whole code, but also you can't use any of the NPM modules in there or packages in there.
Benedicte:Then you would have to package it up. So there's, like, different things you could talk through and kind of even be honest about, like, this is this is kind of where it breaks a little bit for Framer, but we see that there's at least I can, like, imagine a future where Framer has this down, like, really well, where where you can have designers go in and design kind of a whole app design, and then you add the logic in there in some smart way that the smart people in Framer are gonna evolve their offering into. And I think it's it's an interesting kind of proper separation of design and and code in a way that I can see actually working. I don't know. I have like because it's not there, but I can like I can feel like I can feel like
Benedikt:There's potential. You can you're seeing the potential.
Benedicte:Yeah. Like, they're onto something, and I hope they manage with all of their VC funding to figure it out.
Benedikt:Yep. Yep. Yep. That would be awesome.
Benedicte:Before they run out of VC funding.
Benedikt:Obviously. Before they get new VC funding, I guess. Yeah. Yeah. Talking about VC funding, our postdoc integration got merged into the postdoc repository.
Benedicte:Why?
Benedikt:Why? I don't know. I guess they are pretty on top of actually reviewing the poll requests they get, which is surprising to me because they get a million poll requests a day. At least it feels like that. I think I opened mine on Friday, and by Monday, it was on page two or three on Gethub.
Benedikt:But they actually get to it and review it. And what was funny was that the guy who reviewed it in the comments mentioned that he was listening to our previous episode where I've been ranting about post hoc. Obviously, you feel I did feel bad. Because, like, you record these, but you never think about people actually listening to them. Right?
Benedikt:And, honestly, I don't know how they found it. I'm I think they're probably just doing a very good job at monitoring mentions across podcasts
Benedicte:They're probably, you know, customers of Arvind's new startup?
Benedikt:Yeah, I thinking about Podscan. I was thinking about that as well. Was like, are they using that to discover this? Are they just like it's like I cannot imagine anyone on their team being a regular listener, but maybe I'm wrong. Like, if you are a regular listener, let us know.
Benedicte:But also I think, like, yes, you felt bad, but I also think to stage that they're at where they're on like serious something. They they got a ton of money. They got like a lot of end users loving them. You know, they're on, like, riding a high. I'm not saying, like, you should, like, dunk on people because they're doing well, but I also think when you're in that, like, I think they feel pretty good about their product.
Benedicte:It's you know? And and then getting kind of real unfiltered developer feedback, it's hard to get.
Benedikt:Yeah. I don't You know?
Benedicte:So, like, they could have done a user user test, like, ask you to, like, try to do this and, like, they watch you. But I think it's hard to find developers when they're at that stage. Like, if you're making integrations, like, you're just doing it. Like, you're not that interested in in or you would have just given up and you would never have told them. So in a way, like and you weren't like mean mean.
Benedicte:You were just like frustrated and getting like that frustration and little bit unfiltered. I think that is helpful because maybe somebody internally has been saying we need to make the integration story better. And then they're like, well, you know, they they managed. And like now they have, I know, a thirty seconds audio transcript. Yeah.
Benedicte:Like one thing they mentioned mentioned in that as well is like they have it was something like, we kind
Benedikt:of agree that this is too complicated, and they have a plan of where they want to take this. But, I mean, obviously, they probably have a ton of stuff to work on, and they will get there eventually. But I guess with a million balls in the air, you just have to prioritize what you're working on. I think it will be getting easier in the future, and I'm actually looking forward to maybe just well, maybe we'll probably adjust our integration at some point when move towards a more I don't know what to say a more focused way of actually allowing people to build integrations because it sounded a little bit like it wasn't supposed to happen like this. Think it's Yeah, just started, they laid some of the groundwork, and then I just swooped in and was like, Ah, it's just like, Wow, I want to do it in here.
Benedikt:And I don't think they were anticipating that at this point. But again, I'm super happy that it got merged. It's already live on postdoc.com in the hosted version, so you can already use it. We have not announced it on the user list side of things, but that list of mini launches that we'll be doing over the next couple of weeks. So it's going to be published soon.
Benedikt:But yeah, I was just super happy that because honestly, I did not expect anyone to review this ever.
Benedicte:I was thinking, like, maybe the review came because they did pick up on your
Benedikt:Maybe, but I don't know. Maybe they maybe they just, like, have a good process around this because they get a ton of these. Anyway, so that's the post hoc story. And, yeah, the other interesting thing we started working on that I want to touch on quickly is we are currently working on our message editor, which like, is, right now it's a WYSIWYG editor, but it's not quite WYSIWYG. Like, you're getting some sort of formatting, but the finely rendered email will always depend a little bit on the styling you choose and the theme you choose and what your custom CSS and stuff like this are.
Benedikt:And we've been starting a project to actually render our message editor in an iframe to then be able to load all of the CSS and all of the HTML around it and actually have it look like the email you are sending out, or at least a lot closer than what we have right now. And it's been an interesting journey. We started out doing this via Shadow DOM initially, which also I mean, stepping back a little bit, I think we first attempted this two years ago or something like that, and then there were some problems with the Shadow DOM implementation inconsistencies between browsers, which have since been resolved, and we got it working with the Shadow DOM stuff in place, and it was actually pretty solid. I enjoyed the implementation. But then the thing that we hadn't thought about was we are basically loading entire pages into the thing, right, with an HTML and a body tag because that's what the email is in the end.
Benedikt:And turns out, if you do that in the Shadow DOM, that's not actually that doesn't work. So we had to throw away all of it and, yeah, use an iframe for this. And now we're in the process of rebuilding this again. But just earlier today, Leo and I were just reviewing his progress, and we have a fully working WYSIWYG editor within the iframe now. And it took a little bit of heavy lifting on some of the components that we didn't really think about.
Benedikt:For example, initially, we were struggling with in our editor, when you select text, we get a nice floating toolbar with bold and italics and stuff like that. And that would show up, but in completely the wrong position. And it took us a while to figure out what was going on. And in the end, it was like the positioning you get from the selection is relative to the iframe route, but we're rendering outside, so we have to move stuff around and stuff like that. Yeah, it took a while, It's but it's looking good.
Benedikt:We had to do some math. We had to do a lot of wrapping brains around because then you're working with two document structures, basically, and you're trying to figure out which is the correct window even, right? And we ended up doing some crazy stuff of replaying events. Like, for example, some key events within the iframe we capture, and then we build new ones based on what key you're pressing and then replaying them outside of the iframe because they don't cross the boundary by themselves, right? Yeah, it's a little bit crazy.
Benedikt:But I think we figured out all the problems, and Leo, at this very moment probably, is working on a cleaned up version. We have a super messy branch right now, and we are going to build a new branch based on the current master or main branch, it is, and then just merge this soon ish. Even though it won't have any new styling, but at least we get the iframe implementation out. And then we will start working on actually getting the full design into the thing, and I'm super excited about this because that unlocks some new interesting possibilities that we didn't have before and hopefully also addresses some of the criticism we are getting from some of our leads who are like, oh, your emails look, like, super boring, and they want prettier emails and more styling, and why can I just not drag and drop stuff around? And, yeah, it would be nice to finally address those and hopefully build a powerful tool for people to build pretty emails.
Benedicte:He says with joy.
Benedikt:He says with joy. Yeah. I mean It's
Benedicte:a pretty email. Pretty yeah. They're all making pretty emails.
Benedikt:Internally, the project is called pretty emails because that's usually the language that people use when they're requesting this. But I want to send pretty emails, not just boring emails like your default ones. Well, That's interesting. That's where we are right now.
Benedicte:You know, in the no code world, there is often iframes involved. So that is one of the ways you can embed code in Framer also and in other other tools. And then we often get the why doesn't these Google you can, like, add a reCAPTCHA from Google to your forms, and it's like, well, when it's in an iframe, it's not on the domain that you see in the, like, in your browser. Like, that's never gonna work. And and, like, when they put it in, they don't know that it's gonna be an iframe even.
Benedicte:So that like, if they Google or they AI or whatever, like, it doesn't really use that language. It's just like, oh, embed code. And you you paste it in somewhere, and then it doesn't work because it's
Benedikt:Yep.
Benedicte:All on its own little island with no connection to anything else. There's no bridges.
Benedikt:Yep. Yep. Yep. Turns out there are bridges, but you have to dig deep for them.
Benedicte:And I think you kind of
Benedikt:have to
Benedicte:build the bridge, right, in a way? Like
Benedikt:No. Like, if it's on the same domain, there's a there's you can basically do anything. Well, as I said, like, the events don't travel automatically, but you can of like, have full access to the DOM inside. So that's actually pretty nice.
Benedicte:From the outside in. Right?
Benedikt:From the outside in and from in the in or even from the inside out, you can do that as
Benedicte:Interesting. I think of that. I thought that was kind of the pun point that they were gonna be isolated from okay. But if it's the same domain, then they allow more things.
Benedikt:Yeah. Exactly. It's on the same domain, then it's fine. Then you can still access from the outs from the inside out. But there there's a sandbox attribute on the iframe that I didn't know about, but you can if you put that one in, you can basically choose what to allow or what to disallow from inside the iframe.
Benedikt:And I guess for us, we're just going to not allow anything because in theory, could, like, call JavaScript from inside the iframe and modify stuff outside of the iframe. We don't want that. Right?
Benedicte:Nope. Nope. And I think, you know, in in the no code world, you don't get to choose how your iframe is rendered.
Benedikt:Probably not. Yeah.
Benedicte:And I also would think that often they are on a different URL. Like you paste in
Benedikt:the
Benedicte:code No. And they might be on an internal URL and then you put it on your custom domain. I don't think that embedded iframe is gonna be served on your custom domain usually. But that would be interesting to kinda like have a little peek and see how they how they do this. Yeah.
Benedikt:Like, I've been peeking a lot of, like, editors lately, trying to figure out what they do.
Benedicte:Yeah. Have you seen others use the iframe approach? Is that how you kind of got the ID, or did you have the ID and then you don't see anybody else using it? Or
Benedikt:Yeah. It it feels like the iframe approach well, depends a little bit. I think you can get away with not using the iframe, but then you lose a little bit of flexibility of what you allow inside. The iframe I think the iframe approach is the only way where you can allow fully custom stuff inside. Right?
Benedikt:And I'm not sure how much of custom stuff we will allow in the future, but we decided to get it as close as possible to allowing as much as possible. That's what we settled on. What I also noticed with one of the tools out there that they completely use completely different rendering methods than compared to the final email, which also feels like like, that that yeah. That will work and also extra work to keep it consistent. If your editor doesn't use any tables and stuff like that for delayouting but the emails do, it feels like it's going to be a headache to come up with styling that works for both consistently.
Benedikt:But maybe they know something that I have still that I have yet to figure out. So let's see.
Benedicte:Okay. Interesting. Exciting. It's gonna be be it's gonna be interesting to follow and see what you land on.
Benedikt:If you Yeah. For feel
Benedicte:happy with the choices in a couple of weeks.
Benedikt:I I this was one of the projects where initially I was like, I don't whatever. I don't want to. But it's getting into into area where there's interesting challenges and interesting opportunities, so it becomes exciting again. So, yeah, let's see.
Benedicte:Let's see. I guess that's it.
Benedikt:Yeah, I think that's it. If you don't have anything else
Benedicte:I'm gonna go lay down on the couch again.
Benedikt:Oh, sounds lovely.
Benedicte:But I'll see you around the interwebs.
Benedikt:See you. Bye.
Benedicte:Bye bye.
Creators and Guests
