The Changelog: Software Development, Open Source - Pushing ntfy to the next level (Interview)

Episode Date: October 20, 2023

This week Jerod goes solo with Philipp Heckel, creator of ntfy, to discuss this simple HTTP-based service that lets you send notifications to your phone or desktop via scripts from any computer. They ...discuss why he built it, how he built it, and what his plans are for the future of this beloved side hustle.

Transcript
Discussion (0)
Starting point is 00:00:00 This week on The Changelog, Jared goes solo with Philip Heckel, creator of Notify, spelled N-T-F-Y. They discuss this simple HTTP-based service that lets you send notifications to your phone or your desktop via scripts from any computer they discuss why he built it how he built it and what his plans are for the future of this beloved side hustle big thank you to our friends at fastly and our friends at fly this pod got you fast because fastly is super fast all over the world check them out at fastly.com and our friends at fly will help you put your app and your database closer users all over the world with no ops check them out at fly.io what's up friends i'm here with james cowling co-founder and CTO at Convex. They're one of our new sponsors, and they're building a full-stack platform for the TypeScript era. So, James, you have some awesome docs for Convex, and inside those docs is a document that sort of describes the entire world, the entire thinking, the framework of Convex.
Starting point is 00:01:20 It's called the Zen of Convex. Can you describe that for me? From my time building large gut applications, I believe very strongly that there are a certain set of abstractions, primitives, and ways of solving problems that make life easy forever, and they compound in positive ways, and ways to solve problems that make life worse every day. And the things, you know, everyone can recognize these things. What makes life easy is clean abstractions, information hiding, composability. What makes life hard is conditionals, checks everywhere, corner cases. Now, the Zen of convex is about how to build applications in a way that scales for you. And in convex specifically, one key component of that is influenced actually quite a lot by languages like Haskell. To think in terms of transactions, everything is a transaction. You don't have to think about
Starting point is 00:02:09 functions interacting with each other because they're transactional. Think in terms of deterministic execution, so functions that are deterministic so they can get replayed, they can get cached, and if any of the inputs to that function changes, we can push those functions in real time, the new results of those functions to you in real time over a web socket. So the zen of convex is about thinking about the kind of ways of building an application that are going to pay dividends to you in the long run. Now you can use convex and completely ignore the zen if you want, right? You can use convex just as a workhorse tool. We think the framework's design in such a way that it encourages you to do things in the right way and in a way that designed in such a way that it encourages you to do things
Starting point is 00:02:45 in the right way and in a way that will scale and a way that will make life simple for you in the long run. Okay. If you're looking for a better type of backend, Convex is the full stack TypeScript development platform you've been looking for. Replace your database, server functions, and glue code. Get started at Convex.dev. That's C-O-N-V-E-X.dev. Again, Convex.dev. We are here to talk about Notify, spelled N-T-F-Y, living at N-T-F-Y dot S-H, an open source push notification service built on HTTP and PubSub. Notify lets you send push notifications to your phone or desktop via scripts from any computer and or using its REST API. It's created by Philip.
Starting point is 00:04:07 C. Heckle, we'll call him Phil. And Phil is here with me. Hey, man. Welcome to the show. Hey, how are you? I'm very good. I've been excited for this conversation. I've been a Notify user, casual user. I think I have a couple of things hanging out there. And I actually use it so infrequently that I'm excited when I get a push notification because it's kind of, it's a mixed bag because usually when I get one, it means something went wrong, but I'm excited because everything's still working as planned and advertised. So I've been a user for a little while and excited to share
Starting point is 00:04:40 this cool tool with our audience. Let's start with why you built this thing. It's been out there for a while. It's also open source, which is neat. But there are others. When I set out to find how to scratch this particular itch for myself, it's after a long time of using different things. I, for a long time, had like a special Gmail address that I would just email when things went wrong. And then from there, you could dispatch different things. I, for a long time, had like a special Gmail address that I would just email when things went wrong. And then from there you could dispatch, right? Different things.
Starting point is 00:05:09 I used to use the Twitter API back when it was awesome. And just all you needed was a token and you could then subscribe to like some robot feed and get DMS, or you could do all kinds of stuff with that. Various things throughout the years of like, Hey, just send me a push notification to my phone without having like an Apple developer, you know, subscription, all that kind of stuff. And so I asked our audience or our Slack community, I think it was when I was looking for it over the summer. And there was a whole bunch of different services doing this one. I think the two that struck my eye was yours as well as pushover.net and Notify was cool because no account. Just send it to an endpoint and it's a beautiful thing.
Starting point is 00:05:52 So that was really cool. That's why I select Notify. I really like it. But I'm curious, when you set out to build this, what made you want to build one versus using something else that's out there? Yeah. I mean, so this question gets asked a lot and usually people start by saying, why didn't you just use this instead? Just like you did. And the reason for me building it wasn't
Starting point is 00:06:13 particularly, I need to build this. It was more like I need to build something because, so it was multiple things. It was A, I was bored at work. Now I can say it, I don't work there anymore, but, uh, so I was, I was bored at work. I love open source. Uh, so I've, I've done a number of open source projects in the past, none that took off like this. And then of course there was a personal itch. There was the same thing that you did. I had a bunch of scripts, I had backup scripts and I had at the end of the script, there was a thing that was supposed to send me something. For a while, I sent it with email and the mail command, and that was a pain in the neck to configure. And then I finally settled on, I think it was called Send XMPP or XMPP Send, I forgot which way around, which is XMP is this like chat protocol jabber jabber yeah jabber exactly and um so google was supporting jabber and xmpp with google hangouts for a long time so i
Starting point is 00:07:17 made a google account and um you know i called it heinz ketchup just to make it funny and like and then i got like messages from heinz ketchup every now and then to say, like, your backup is done and whatnot. And then eventually Google killed XMPP and Hangouts. So you can sort of say, like, the fact that Notify is here is because Google killed the product again. You say that about lots of stuff. I know. I know, right? But so that's when I started dabbling.
Starting point is 00:07:43 And I kind of always liked the idea of just using curl, just do things with curl. I don't want to install anything. I don't want to apt-get this and have to whatever. I want to just use an API with curl. And so notify is built around the idea of like simple, simple, simple, right? So it's a, I don't know, 60 character curl command to send a push notification to your phone. That's pretty, pretty insane if you ask me. So, so the combination of bored at work, loving open source and my own thing broke, I started working on it. And just as I said before the the fact that I wanted to just make something I didn't go looking for something else which was a really good thing in the beginning just to make what you want to make without looking at competition because I didn't even know gotofi or pushover or I don't know that the other competitors quote QuotyFingers competitors existed because I didn't research.
Starting point is 00:08:47 I just made the thing that I wanted to make. And when I then released it, then of course people said, why don't you, how does this compare to, and so on. So yeah, that's how it came to be. And that's when I started looking at the others. And of course I copied the features. Oh, they've got that. That's a great idea. So like I have some of the features, but I do have lots of features that the others don't. And, and yeah, so,
Starting point is 00:09:14 so that's how it came to be. Gotcha. It's interesting. You were looking for something to build, which made you not look around. I'm usually the exact opposite. The last thing I want to do is build something. And so of course I look around and I say, has anybody done this? Usually nobody has done it the exact way that I would want it to be done. And so I settle for something. But honestly, Phil, when I first used this, I'm like, this is what I would have built. Like this is, I'm the same way, especially like weird places, like inside of a cron job or something where you can just curl an endpoint
Starting point is 00:09:46 and get a notification, like no extra tooling, no nothing, no signup, no account. It's just beautiful. And so I guess I'm glad you didn't look around, but I looked around and I found notify. Otherwise maybe I would have built the exact same thing, at least at first glance. And so I'm glad that you built it and I can just use it. That's pretty cool. How did you have this insight of, I guess you just like curl so much? That was the answer. I do like simple things.
Starting point is 00:10:16 So I am a software engineer at heart. And my day job is software engineering too. But user experience is ridiculously important. And we as developers and sysadmins and whatnot, we are users. So you don't want to make a config file with an API key in it. You want to just send the message already. And yeah, that's how it came to be what it is okay so talk about what it is fill everybody in yeah yeah i mean you gave a good intro um notify is a
Starting point is 00:10:53 push notification system it's i think that the website calls it a pub sub system which i might change because people don't know what pubSub is and they don't care. Because first and foremost, it is meant to send push notifications to your phone from wherever you want, right? So the API is HTTP based. So you can just send the actual message in the body of the HTTP request. And everything speaks HTTP. So you can send yourself whatever message you want.
Starting point is 00:11:29 The way to use it is you go to the website or you go to Google Play or the App Store and you download the app. Then you subscribe to a topic. So this is where the PubSub comes in. You subscribe to a topic. A topic can be any word you can think of. And then you can push subscribe to a topic. A topic can be any word you can think of, and then you can push messages to this topic, and everybody who subscribes to the topic will receive it.
Starting point is 00:11:52 So that means you can have multiple subscribers to one topic. So if you're a group of people, they can all listen to the same topic. They will all get the same message. Or if you want to have a private topic, you can either pick something really complicated, similar to a password, or reserve a topic if you have a private instance. And since it's open source, you can host your own private instance, or you can purchase a plan for the Notify Pro plan and reserve topics that way. And yeah, and then the message itself can be just everybody's seen a push notification so they know what they look like, but there's tons of stuff that you can do with it. You can
Starting point is 00:12:30 give it a title. You can, you know, they have different priorities, so different ringtones. You can, the override do not disturb. You can make it so that it persistently rings until you tap it you can add you know emojis and tags that i've added as a classification method and so on yeah i mean i could list all the feet do you want me to list all i suppose that's a good intro to it yeah so the thing that makes it that simple is this topic subscription feature, where as long as your notification data, that, that payload that you're sending isn't so top secret that it has to be super, super secured with an account and a username and a password and typical authentication schemes. You can simply pick an obscure topic name that only you know or only people that you distribute
Starting point is 00:13:27 that information to know and you can subscribe to that which is effectively public but it's obscure so if you're dealing with uh the crown jewels perhaps you know maybe not maybe it's up to you but if you're not like me i'm basically notifying myself when a certain thing is down or when a backup finishes or these one-off ad hoc things that developers want to know about. Heck, I could even publish my topic to people. I don't really care if they spy on the fact that my backup succeeded, correct? Yeah. So I mean, so I've had this conversation so many times. I'm glad it's coming up again. You touched on the fact that the topic is public, right? And the topic is public in the same sense
Starting point is 00:14:12 that a URL that you know is public. So when you share a link on Google Photos or Apple iCloud or whatever, that's a private link, the same way that this can be a private link. So if you pick a really complicated password or a really complicated topic, it's the same level of security that a private link for Google Photos has. Now, if you pick Jared's topic, that's the equivalent of a bad password. People would be able to guess that. Test 1, 2, 3, 4. I'm assuming that's out equivalent of a bad password, people would be able to guess that. Test 1, 2, 3, 4. I'm assuming that's out there somewhere.
Starting point is 00:14:48 In that sense, so when you look at competitors and the way that they've done it with the API keys and so on, when you look at the raw HTTP request, it is very similar what you're sending, right? In the notify case, the topic is in the path. And in the pushover case, the topic is in a header. There is differences, obviously, but yes, it's not the Fort Knox tool, but that's the trade-off that you get this simplicity by using this approach over API keys, right? But if you want to, you can self-host.
Starting point is 00:15:27 If you are Fort Knox or you have your Bionz, you don't want to share that your backup is finished, or you have more sensitive stuff that you distribute or that you notify yourself on, then yeah, you can self-host and there's no phone home feature or anything. It's completely open source. You can have accounts. You can have proper access control. There's access control lists. You can go all the way in or you can just send a message. It puts a little bit more control in the user's hands,
Starting point is 00:16:02 which I realize these days is controversial. Everything is secure by default to a crazy extent. And for me, we are developers. So this is a developer and sysadmin tool. So we're not your average user, your grandpa and grandma. It's not made for that. So I've had my mom install it and she's like, right now what? Because there's no, I can't send a message back. I send her a message and she's like, how do I respond? And I'm like, that's not what it's for. That's not what it's for.
Starting point is 00:16:39 But so people have asked for that published messages from the app so many times. So then, yeah, I'm adding it, but it's not what it's for. But again, that's the beauty of it. It doesn't matter. Like if you want to use it that way, then you can. Then you can use it. Yeah, it's a hacker's tool. I mean, that's what I love about it. Like if I don't care and I just want to send to an endpoint
Starting point is 00:16:56 and whatever happens, happens, fine. Maybe I'll just go test one, two, three, four and just send the data, you know? But if I want to be Fort Knox and self-host and tie it into my SSO and blah, blah, blah, blah, I'm sure those are all things that a hacker can do with an open source hacker tool that's self-hostable. So that's spectacular because it starts with the user experience
Starting point is 00:17:16 and like really easy to get a win. I mean, this is something I talk about a lot is like, give people wins as soon as you can with whatever it is that you're building and they're going to come back for more they'll even sign up for your account if you've given them enough wins that it is a reasonable trade-off i'm not against having an account on a system i'm against you requiring me to have an account before i've actually even used the thing and seeing if i liked it so So I think that you're making the right trade-offs. I'm sure there's people who would prefer the other trade-off and that's why there's
Starting point is 00:17:48 a nice diversity of options out there, right? I do like the no account thing was really important to me because it's the, again, the user experience and the way you get to interact with it are so different. You get to try it out without having to do anything. I rarely sign up for things anymore because I'm like, that's a hassle to email. And then I have to generate a purposeful email address so that I can not get spammed forever and so on. So I like having the no account thing. So one thing that can happen when you don't require accounts is people just spam your endpoints, I would assume. So a lot of us are casual users, just hitting it every once in a while. But I would think that abuse might be a concern.
Starting point is 00:18:35 Has that been a problem? So has it been happening? Yes. Has it been a problem? No. So I've done this long enough to know that once you put something on the internet, you're going to get spammed. You're going to get spammed. Once it hits popularity, you're going to get abused and spammed. And so I've done this before at work. I've done this called notepaste.net, which is, I don't know if you remember from the olden days of IRC where you wouldn't put like large text in the chat.
Starting point is 00:19:11 So Pastebin, it's called these days, right? So it's a Pastebin service, which is similarly to Notify you can use from curl. So you can pipe a file into curl and so on. That one didn't hit a spot like Notify did, but it taught me some lessons in terms of what to do and how to rate limit. So Notify has a ridiculous amount of rate limiting and logic around usage limits, logic around the constant abusers being banned, and so on. So there's a page in the docs around rate limiting if you want to know more, but ultimately it's a token bucket-based rate limiter.
Starting point is 00:19:55 And there's a rate limiter in NGINX, which combined with fail to ban will ultimately ban people if they are real abusers. But the application itself, every endpoint and everything has different rate limits. So the number of emails you can send, the number of messages you can send, the number of attachments, the amount of attachments, how big the attachments are, and so on. So that doesn't mean that there isn't holes. So if you go and audit the software, you might find something. But I have been pretty happy with the way it's going. The service runs on one machine so far, which it's like 20 something thousand active connections. And, you know, like thousands and millions and millions of messages a day.
Starting point is 00:20:42 Many of them are rejected. So like many of them don't even, you know, hit notify because people are banned. Sometimes it's, you know, just bad folks, but mostly it's bad scripts. It's really just the, oh, I forgot that this is still running. In a loop. And then, yeah, you'll eventually in a loop and it it happens. It happens. Or somebody put every stack trace in a notify message, and then their application starts failing more, and suddenly you're doing 10,000 stack traces a day over notify.
Starting point is 00:21:17 So yeah, that's what it is. But I've not hit any scary limits, because people are cut off really early. What's up, friends? We're working closely with.tech domains to feature startups that are participating in their startups.tech program right here on the changelog. I've never seen something like this from one of our advertisers, but it does make sense to me to show off not only what.tech domains offer, but also who is building on.tech domains. And I'm here with Bastian,w-a-r-e.tech where they build a high powered webcam eye tracking software used by amd microsoft and even intel bastion give me the backstory what what does eyewear do we're deep tech spin-off computer vision and ai spin-off
Starting point is 00:22:40 from a swiss research lab we turn your webcam or 3D sensor into an eye tracker, so you don't have to buy expensive hardware to get a reliable and robust eye tracking performance on your PC. So we have two main products. One is the GazeSense SDK, which is an eye tracking SDK that companies like AMD have used in collaboration with us to build, for example, the AMD Privacy View app that is now part of the Radiant software driver suite. There, you can use eye-tracking for certain features like privacy view. It blurs out parts of the screen that you're not looking at. We also took that app and built our own solution called iWare Beam that is targeting gamers where you can turn your webcam into a gaming eye tracker for more
Starting point is 00:23:31 immersive gameplay in for example simulator games over 200 of them through the OpenTrack extension or you can use it for streaming or game recording to improve your own gameplay by re-watching your recordings with that overlay and seeing when you missed something during essential sections of your gameplay or just share it with your audience and engage better with them. Well, this is definitely the next frontier. Are you only licensing focused or do you have any offerings that's ready for developers to consume and leverage in their projects? So with iWordBeam, we are facing consumers directly with this app. You can download it. There's a free trial on our website and on Steam.
Starting point is 00:24:13 So you can give it a go and see how you like it. The idea is still that we provide licensing solutions to big players, to OEMs, and allow them to integrate eye tracking. I think there's going to be a world where you're going to have headsets. They're for sure going to come. I'm going to be one of the users, and eye tracking is an essential part of it. But then you'll have a lot of just interfaces, surfaces, screens, where you will want to interact with them without a headset on. And their eye tracking will also matter. So there's, for example, these 3D screens,
Starting point is 00:24:47 3D stereoscopic displays where you would need eye tracking, and similar situations. So it's going to be a hybrid setup, and I think our technology is an essential part of that. Talk to me about the choice of using a Diatek domain. I think it was a logical decision to make from, I think every startup will first take their name and then add a.com behind it and try that out. And then it's probably going to be too
Starting point is 00:25:11 expensive or taken already. And then look for alternatives. We are a deep tech company that has already part of it in the name. So if we put eyewear.tech, it makes it clear for third parties, specifically for these potential clients that we want to license to, that we are a tech provider. We're a deep tech company. We're a spinoff. And I think that represents it pretty well. Okay. Make sure you check out iwear.tech.
Starting point is 00:25:36 That's E-Y-E-W-A-R-E.tech. And of course, go to startups dot tech slash changelog. If you want to have your startup that's building on a dot tech domain featured on a show like this, don't wait. Go to startups dot tech slash changelog. Again, startups dot tech slash changelog. do you have limits on the app store sides, like with Apple and or Android? Like how many push notifications you could actually send? Because you are basically funneling, I guess. Like it's one, is it one App Store credential that's sending for everybody? Yeah, so it's interesting.
Starting point is 00:26:37 You're hitting on the how does it work under the hood, the message delivery, which maybe is a good small segue. So Notify.sh does use Firebase messaging, what is it called, FCM, Firebase cloud messaging to deliver messages through Google. And then for Apple, for iOS devices, Firebase itself will forward to APNS, which is Apple's Apple Push Notification Service, which in turn will then deliver that to iPhones. There is other ways to deliver messages. So for self-hosted instances, they don't go through Google. They go through regular WebSockets or HTTP stream. So there's obviously, there's no limits there. Interestingly, Google doesn't have
Starting point is 00:27:27 limits on FCM. I'm literally pushing thousands and like, it's not millions of messages a day, but it's a lot of messages. Every day, it costs nothing. And I am scared that at one point they'll say, yeah, that's enough. But there's no published limits. There's no, like, I have not experienced any rate limits. I've not experienced any disruptions in delivery because of FCM, because of Firebase. I will say this, the Firebase mechanism to deliver messages is much slower than the WebSocket, which is why it's called, when you're in the app, when you select, there's a checkbox called Instant Delivery. That's basically, yeah, just do it over WebSocket and not over Firebase.
Starting point is 00:28:20 So WebSocket goes to where? What's the other side of the endpoint? Yeah, so the other side of the endpoint is NotifySH or your self-hosted server. So basically when you open your app, it's constantly connected to the NotifySH server. So when you push your message to NotifySH, it directly finds the correct web socket and pushes it through there. What about apps that haven't been launched for a while? It's running in the background. It doesn't, so like people, the first question when they hear that is,
Starting point is 00:28:50 what about battery? So it does consume more battery than Firebase. On my phone, it's about percent, half a percent a day. On other people's phones, it has been more significant. It depends on the number of messages. It depends on like how you travel so like or how often you hop network different mobile networks and so on but usually it's you know like one to two percent max there is some phone manufacturers that are notoriously bad and there's sometimes apps get killed in the background so that it doesn't work well. But let's say that 98% or so of users are perfectly happy, don't complain about battery anymore. I
Starting point is 00:29:33 had battery issues in the beginning, but now it's been solid for a long time. Is this your first foray into native mobile app development? Because you have, I assume you got two apps out there, right? Yeah, I have the Android app and the iOS app. It was my first Android app. I learned Kotlin, which like the language is beautiful. I didn't have to learn it. I felt like I knew it. It was like an old friend that you had never met.
Starting point is 00:30:00 What languages were you familiar with coming into it that made you feel that way? I mean, I've done Java in the past. It's Java-esque, right? It runs on the JDK. But I've done Java in the past, but I'm a Go fan. So the notify server is written in Go. Yeah, so the Android side of things, it was odd, but it was okay.
Starting point is 00:30:19 It felt like it's going quickly, relatively quickly. There's a lot of Googling involved in Android development. I feel like when I write Go, I don't have to Google how basic things work in Android development. It's weird. It's just really strange. For the iOS app, I don't have a Mac and I don't have an iPhone. It makes it harder. So I got an iPhone and a Mac. There you go. Yeah, so I bought a used Mac, MacBook, and I borrowed an iPhone and I made the app. And I'm not happy with the iOS app.
Starting point is 00:30:58 It's so terrible compared to the Android app. It has like 10% of the features. People complain all the time. I think the Android app is really solid. People mostly ask for new features. So I think one of the last shows, the Towery guy, what was his name? David, I think. Daniel.
Starting point is 00:31:16 Daniel, close. Sorry, Daniel. He talked about the issue bubble. And I think in the Android world, we are like past the issue bubble. There's mostly features. Yes, people have issues, but mostly it's about features. And in iOS land, we're like, I haven't touched the iOS app in a long, long time. And I just need to get back to it. It's just Swift and that universe is just not my realm.
Starting point is 00:31:44 Yeah. I would love to have some help. So if somebody out there is listening and like wants to. And the apps are both open as well? Everything's open. Everything's open source. iOS app is a little tricky to debug because you need a physical device and so on. But it's, everything's open source.
Starting point is 00:32:03 Yeah. Well, like I said, casual user and mostly just install the app in order to subscribe to the ones that I am interested in and then don't ever launch it unless I get a push notification from notify. So not having enough user to have feature requests or have, I remember thinking, Oh, this is a bare bones is what I thought. Like this is like utilitarian, the app compared to other apps. Like it just has what I need in order to get subscribed.
Starting point is 00:32:29 Are you on Android or iOS? On iOS. Oh, on iOS. Okay. I'm sorry. You're getting such a terrible experience. No, like I said, it's not terrible for me because I don't launch it unless I get a push notification.
Starting point is 00:32:40 But you don't know what you're missing. I don't. Well, that's why it's not so bad. You know, I don't even know what I'm missing. You don't know what you're missing. I don't. Well, that's why it's not so bad. You know, I don't even know what I'm missing. You don't even have attachments. You can send files and you have action buttons and icons. I don't have any of that. No, I don't.
Starting point is 00:32:53 Oh, man. You should get an Android device. I've never owned an Android device in the course of my life. Let's not have that discussion. Yeah. I'm not against it. I just don't have one. Okay, so you need help on the ios side that's interesting that leads me to think about money i don't know that makes you think
Starting point is 00:33:11 about money but i started thinking about money when i started thinking about i need help programming something uh what's the money situation so obviously there's a pro plan you got github sponsors going on and i saw there's a decent amount over 30 there's i mean i think there's some people backing the project but do you have like could you bring on somebody to work on the ios or you're not quite there yet where you're at financially um yeah i mean it's when i started the project it's an open source side project so that's what I started it as, right? I had open source projects in the past, as I've said, one of them called Syncany, which is, think of like a Dropbox clone, but secure. The website's still up, but it, you know, it's pretty much defunct and
Starting point is 00:33:58 abandoned. And that gained a little bit of popularity back then. And people started donating and they started donating and donating. And the problem with Syncany with that other project was it was never really functional and finished. So I felt really bad for receiving so much money. It wasn't much. It was a couple thousand bucks. But at the time, I'm like, I have just this open source project. I didn't really expect anything. It felt like bad money to me. So for the longest time for Notify, I didn't accept money. I didn't accept donations. And I didn't have paid plans. And I even said in the docs, I don't want any money. I don't want any money. I don't want any donations.
Starting point is 00:34:46 And then it gained traction, and suddenly it cost more money to run the server, and the Apple license, the developer license, and all that, it kind of added up. And then I bought a Mac and so on. So I just figured, all right, I guess I could start asking for donations. And I did. And then beginning of this year, so I think it was March, I rolled out the paid plans. Well, and it's not like I've been making bank with it, but it is still like in very much side project territory.
Starting point is 00:35:22 I can give out, you know, contributor, I can give up like some, a couple of hundred to, to contributors, which I do, but it's not like I can quit my day job because of it, sadly, because I like notify. I like the concept on the other hand, I do like that it's, it's entirely open and that I don't, you know, depend financially on it. Because when you start depending on something financially, your perspective changes a lot. And so maybe your usage limits are not as generous as the free usage limits that I have. Maybe you do require a sign-up.
Starting point is 00:35:58 Maybe you start talking about leads and you start talking and you require, you know, like I've done this dance. I've done this dance. Like your, your perspective on things starts changing and it is very difficult to be a successful open source company. I mean, you've had a number of them on the podcast, right? Yeah. It's not easy. It's not easy. And then like, eventually you're going to have to take on money, like VCs and whatnot. Am I ready to do that right now no in the future maybe so notify makes a little bit of money i'm not swimming in money and and that's okay fair enough i think it's at a scale right now
Starting point is 00:36:38 where in your faq you get to say what are the uptime guarantees you get to say, what are the uptime guarantees? You get to say, best effort. That's what it says. So I've actually stolen this from, do you know HealthChecks.io? No. It's a website that's based around the idea of a dead man's switch where you send a message to HealthChecks.io every, I don't know, two minutes or every whatever interval you choose. Right, and then you stop you choose right and you stop and then when you stop it lakes it notifies you it actually has notify integration now it's great
Starting point is 00:37:10 it's like the opposite of notify it is and it isn't so like there's a very small change that i have to make and suddenly i can do that too but that's beside the point my my my model is based on i forgot his name but like whoever the maintainer of that is. Because I said to myself, I want to be fully open source. I want to be transparent. And, you know, I want to be a good citizen just like him. And he writes in his FAQs or in the terms and conditions, he writes, I'm just one guy. And so if my Postgres server is down,
Starting point is 00:37:46 I have backups, but it could be a couple hours or if I'm asleep, then it could be more. So I do have a ridiculously good uptime so far. I haven't really been down at all. There was one window where I was asleep and people kept pinging me and I didn't have my Ops Genie. Push-over. Yeah, so I didn't notify myself about Notify being down. So there's an interesting use case. Oh, you need another service. That's how you sign up for push-over.
Starting point is 00:38:15 No, I don't. Do you know what I do now? You run like a dev box and staging or something. No, there's public Notify service that other people run. So if you look in the docs there's a integrations and projects page at the bottom there's somebody else's notify just pick a private topic boom i do that's cool and so yeah it rings continue i didn't have it so i did that after that what's your infrastructure look like it's again and i said one machine it's one box it's one
Starting point is 00:38:42 droplet on digital ocean i have it, given that it's running Go, and Go is really good at concurrency, I don't need more. I can scale much more than this. The reliability aspect of it is questionable, obviously. Yeah. Wouldn't take too much to go to two, right? Yeah, so there's...
Starting point is 00:39:04 At this point point you might be on like a digital ocean has a problem that's when you have a problem kind of a thing where it's like if you could just have two you know two everything why not it probably would take a few hours to get set up and then you just have that one i mean you go from like five nines to nine nines or something just having two of them i would have to make changes in the app too because right now it's backed by sqlite sqlite is a file uh so if i back it by postgres or you know even an arcuate or something like a some somewhat distributed database then it would be relatively easy to go to five nine seven nines or whatever but right now again i'm still in the growth phase i haven't experienced any issues but i i do it is around the corner i like i want to do just for my own sanity i don't
Starting point is 00:39:52 want to be woken up in the middle of the night believe it or not my my my kids do that enough i don't need right uh you know software to do that too. Well, how big is that SQLite database? Just curious. It is, so notify messages get pruned after 12 hours. Okay, so it stays at a constant size. So it stays, it roughly stays at a constant size right now.
Starting point is 00:40:18 It's 320,000. So that gives you a number of how many messages a day it is. It's like 600,000 messages a day, or almost 700 a day. But yeah, it gets pruned. Obviously, if you have pro plans, your messages get cached longer and so on,
Starting point is 00:40:35 but for the most part, it's 12 hours. You might look into Lightstream and some of the stuff that the Fly team is doing around SQLite and allowing it to be... I have, I have. You have. I have looked at a lot of things. stream and some of the stuff that the fly team is doing around SQL light and allowing it to be, I have, I have looked at a lot of things by that, or you're not going to do that. You're instead, you're, you're either switch the backend. No, I have, I have explored so many different things and there's 8 million things to do. And I just, you know, I have to like the, the beauty of this being just me plus the contributors is that I can do fun-driven development. I've called it that and I do the things that are fun for me.
Starting point is 00:41:14 And sometimes that means I dabble with the Android app. Almost never means I dabble with the iOS app. And sometimes it means I do investigate the reliability aspect. But it takes a lot of time. That stuff takes a lot of time and fine-tuning, so I haven't acted on it. There's many options. What's up, friends? There's so much going on in the data and machine learning space. It's just hard to keep up. Did you know that graph technology lets you connect the dots across your data and ground your LLM in actual knowledge. To learn about this new approach, don't miss Nodes on October 26th at this free online conference. Developers and data scientists
Starting point is 00:42:31 from around the world will share how they use graph technology for everything from building intelligent apps and APIs to enhancing machine learning and improving data visualizations. There are 90 inspiring talks over 24 hours, so no matter where you're at in the world, you can attend live sessions. To register for this free conference, visit neo4j.com slash nodes. That's N-E-O, the number four, J.com slash nodes. One thing about Notify is when I asked folks for a solution, I had a handful all say Notify. And I wonder how you got the word out, how you established this tool,
Starting point is 00:43:38 because there's just so much noise these days and so many cool things and many competing services, even on this one particular thing. Did you do any, I know you're not thinking in leads and stuff, but did you do any grassroots, like, get the word out kind of stuff, or did you just put it out there and let fate take it? I don't think that works. No, I don't think you can.
Starting point is 00:44:01 Dang it, that's been my entire plan. No, you can't do that anymore. As you said, there's too much stuff. So you do have to do marketing or advertising. And not in the traditional sense, right? It's open source. So you can say, look, I've got this cool tool. So for the most part, what I did was Reddit.
Starting point is 00:44:20 There's a fantastic subreddit called Self Hosted, which they're really receptive, really fantastically nice people, and very much the target audience of people that like to dabble with new and open source stuff. They don't really like hosted things. So I could always say, look, you can try it out here and then you install it yourself. So I did a number of posts there. The community has really, really been nice to me, have suggested features and so on. They've integrated it into things and so on. So I'd say 90% was spent trying to, here's a new feature with that community.
Starting point is 00:45:00 I did a show Hacker News post that took off, or somebody else posted it and that took off. So that was nice. And then recently, very recently, it got picked up by Network Chuck on YouTube. And he has like 3 million subscribers. So that doubled the number of users. That was pretty cool. But yeah, other than that, I've tried to make it as simple as possible
Starting point is 00:45:26 and make the docs the best docs that you could ever imagine. So the documentation really has a lot of screenshots and videos and so on. And I think the easier it is for people to get started, the more hooked you get. When you look at others, you understand what it is, but like, sometimes it's like, oh, how do I do this? Or it's tricky to get started. And I think Notify doesn't have that problem. The other thing that I did was in the very beginning, there's a standard called Unified Push, where it's a set of specifications is what they call it. It's not really an official standard, but it's a project that lets users choose how push notifications are delivered to their devices. So it's meant to be
Starting point is 00:46:13 a competitor to Google's FCM Firebase in an open source way. So instead of talking to Google servers, you can pick the provider that delivers your messages. And as Notify, I worked with the Unified Push team to integrate Notify as a distributor. So a lot of the traffic on Notify.sh isn't people sending messages to themselves, it's your matrix client, your element, and your various apps that support Unified Push that just deliver messages from their app server to their Android app and use Notify as a sort of delivery person. So Notify is just the vessel to deliver the message to the local app. That sort of made people aware because they installed, like Unified Push on their website says,
Starting point is 00:47:12 if you want to just get it going, use Notify. I see. So they find it because they go, they install the app, they get the Notify app and now they're aware of the service. Are there people building their own apps? Like really want, or is that just like, why?
Starting point is 00:47:26 Just use the Notify app. I imagine if somebody wanted to white label it, or is there any reason to just bypass the Notify app and build your own sub on the PubSub? There is, I mean, so there's people trying to build on top of Notify, which I think historically has been tricky because they expect it to be white labelable and to sort of expect it to be what FCM is. So I think most people that try to build their app on top of Notify really want Firebase
Starting point is 00:48:02 and don't know that Firebase exists. So a lot of people have reached out to me and want to contract me to help them integrate Notify into things. And every now and then I like to help people, but most of the time I say, what you really want is, I'd love to, you know, for you to give me money to help you work on your app, but what you really want is this. And it's mostly Firebase that they want. They want to deliver their custom push notifications to their custom app, then that's not what it's for.
Starting point is 00:48:33 It can work that way, but really what you want is this. That could be your moneymaker though. As long as FCM stays no limit at the zero prices, you could offer that for people to build their own apps on top of Notify. I could. I could.
Starting point is 00:48:49 Again, fun-driven development. Right. Not fun. I don't know. I'd rather do the features that people want. People want it marked down. And I was like, I don't really like to style too fancy styles and whatnot. I want it to be clean and look nice.
Starting point is 00:49:06 But people wanted Markdown, so I added Markdown. People want end-to-end encryption, so they want to be able to send private messages. And I'm like, yeah, that should really be up there. So I'll work on that next probably and so on. So what's on your fun list, though? What would you work on if it was just you using it? I mean, assuming that you'd still be working on it.
Starting point is 00:49:26 Yeah, that's a good question. I didn't prepare that question. I finally found one. You found one. He's not just me wanting it, right? But the ability to send a message and then send a second message to update the first one. So think of you're downloading a large file and you have a little progress bar in your phone that just
Starting point is 00:49:58 shows, I don't know, or you're downloading a movie, or there's 1, thousand use cases for that. I just find the idea of having a progress bar on my phone for something that is somewhere else is kind of cool. I've really wanted, I've tried implementing that and the server, the way I implement it in the server, it makes it just tricky. It's not hard to do. It's just the way I initially designed the software makes it hard to refactor. But that's a feature that I always wanted. Progress bar on your phone for something that's progressing elsewhere.
Starting point is 00:50:35 I know it's weird. Why not? I've never wanted that before. So, I mean, there's so many things that you didn't know you wanted, right? True. I mean, I don't even know I you didn't know you wanted, right? True. I mean, I don't even know I want the Android app at this point. So exactly. You're telling me stuff that I didn't know I wanted. So maybe I'll build a browser. Hey, there's a nice curve ball. You know, I want a browser, but there's a lot of people tackling that at this point. It seems like, okay, I guess that would definitely be a scratcheryour-own-itch kind of a feature. Obviously, other people think it's cool as well.
Starting point is 00:51:07 Have you ever considered just hanging it up? You mean not working on it, being done? Yeah, hanging them up, you know, putting your sign up. Finished. No. How long have you been working on it? Not very long. I feel like it's not even two years.
Starting point is 00:51:26 Okay. long have you been working on it now very long i feel like it's it's not even two years okay i do consider the android app to be relatively complete because it is it is the idea is very unixy right it's a it's a tool it does one thing and it does it really well to i i think and there's only so much you can add to notifications, right? So what, what else could you possibly do? There's, of course, there's a thousand things. I mean, no, I mean, if you look at the GitHub issues and sort them by, you know, thumbs up, there's a lot of people, like a lot of things that people want. Yeah. I'm not going to do all of them i'm not going to do most of them but a lot of people have great ideas of what what could could be added and uh to keep a tool you know small and not complicated like simple simple simple you just have to stop at some point and that's tricky if you like working on it. It's tricky to just
Starting point is 00:52:25 stop. And hanging it up, definitely not, because that would imply that I let people down and I don't want to let people down. It's self-hostable, Phil. You can't let anybody down. Yeah, but it's, well, you have to update software. You know that. That's true. Truly valuable tools that are open source will be picked up by somebody else but i agree that you don't want to let anybody down so top voted features right now end to end encryption you already talked about that one update slash delete notifications i believe that's your progress bar one right there and then publish messages in the app which you already talked about so like you're on top of it these are things that people want synchronized between devices. Yeah. Yeah. That's, that's, it's a little odd.
Starting point is 00:53:06 Notify was built by the same, the same goes for the web app. It's a web app that only runs in the browser and stores state in the browser. There's no account because there's no account. Like it's just an API client. It's a, yeah. Because notify started without accounts, accounts were added later. Yeah. The web app has to work in a. Because Notify started without accounts. Accounts were added later. Yeah. The web app has to work in a way that it doesn't have accounts. So when you subscribe to a topic, it's stored in the local browser, local storage, the same way an Android app stores it
Starting point is 00:53:37 just locally there because you don't have an account to link it to. Now that I have accounts, the web app syncs with that account. The Android app doesn't. So that feature is half done. But it's weird that you can log into an account from the Android app. It doesn't sync down the subscribe topics. It doesn't behave like a WhatsApp would, right? When you read a message that it's read everywhere.
Starting point is 00:54:05 Basically, every client is independent. So that's what that means. Cool, man. Anything I didn't ask you that you had on your list of answers, you're going to hit me with it. You make me sound like I'm overly prepared. You're just, you're just well-prepared, not overly prepared. You're just well-prepared, which I appreciate. And I'm sure our listener appreciates. I am German, so that's probably why. I love anybody who's prepared for anything. So I appreciate you having some thoughts prepared. Anything that you expected me to ask that I haven't asked
Starting point is 00:54:38 or that we haven't talked about any aspects of the project, anything that you think our listener would still want to hear about before we let them go. No, I mean, I just want to say thank you to all the Notify users and people who have contributed code and ideas and help other people in the Discord and the Matrix chat. And it's just fantastic to see like a tiny little project grow and it's it's humbling to see yourself in like podcasts weird to me and i i appreciate the opportunity i just thank you very much for letting me be here and be a guest well you're welcome thanks for joining us like i said i'm a user i'm a fan and I love that it's open source. Pretty much the spirit of what you're doing is
Starting point is 00:55:28 combining with the spirit of things that I like. So that's why you're here. And I think our listeners are going to also, if they don't know about it, I think they're going to enjoy checking it out, setting it up for themselves, perhaps self-hosting or just curling the endpoint when their backups finish and see that cool non-markdown, non-attachment version on their iOS apps until somebody hops in there and helps Phil out with his iOS app. I'm missing features, y'all. I didn't know this. I'm missing features.
Starting point is 00:55:58 Please do help. Please do help me out. All right. Thanks, Phil. This has been lots of fun. Thank you. So Jared and I are fresh off the steel horse back to home coming from all things open. I want to say wow. Seeing everybody and more importantly, seeing everybody who listens to this podcast
Starting point is 00:56:17 basically every day. It's kind of crazy, honestly, but it was good seeing you all. Thank you so much for saying hello. And sometimes we just get so busy at our booth that we just can't say hello to everybody. So if you're a listener and we weren't able to say hello or at length, please, next time you see us, come and say hi. We want to say hello to everybody. Sometimes we can't, and we're so sorry for that. But it was so awesome seeing those who we were able to see. And that's what it's all about, really. That's what it's all about.
Starting point is 00:56:47 And up next, we have our good friend, Kevin Ball, also known as K-Ball, panelist on JS Party and friend joining us on Change Login Friends. So that is on Friday. And next week, I mentioned All Things Open. So next week is our first episode of I mentioned All Things Open, so next week is our first episode of coverage from All Things Open. I hope you enjoy it. And if you're a Plus Plus subscriber, stick around on this episode.
Starting point is 00:57:13 We have a bonus for you. If you are not a Plus Plus subscriber, there is an easy remedy. Go to changelog.com slash plus plus. It's better. That's right. slash plus plus. It's better. That's right. It is better. It's better every single time you listen to it.
Starting point is 00:57:30 And it's even better when you subscribe. $10 a month, $100 a year. Drop the ads. Get directly on that medal, that cool changelog medal. And, of course, get bonus content like today. Once again, changelog.com slash plus plus of course big thanks to our friends and partners at fastly fly and type sense and also to the beats master in residence break master cylinder those beats so good just so good well that's it
Starting point is 00:58:02 this show is done we will see you on the next one.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.