Scott Tolinski on Svelte 5 Local First Development - podcast episode cover

Scott Tolinski on Svelte 5 Local First Development

Dec 28, 202443 minEp. 78
--:--
--:--
Listen in podcast apps:

Episode description

Summary:
In this episode we sit down with Scott Tolinski — cohost of Syntax.fm — to talk about Svelte 5 and local first development.

Sponsored by Svelte Summit
Svelte Summit is an event dedicated to Svelte and everything that is happening in the community. Don't miss it! It's going to be an absolute blast. It's happening on May 8 and 9, 2025 in Barcelona Spain.

Discussion

  • Who is Scott?
  • Check out Syntax on YT
  • Primeagen feud thing
  • North Star
  • AI Robot
  • Building App in Svelte
  • Brad frost design system
  • Svelte 5 beginners course vs other frameworks
  • Svelte 5
  • Local first
    • InstantDB
    • Zero Sync
    • Meteor
    • Drop in (project)
    • Svelte Summit talk

Transcript

♪ ♪ Welcome to Svelte Radio ♪ - All right, hello everyone. Welcome to another episode of Svelte Radio. I'm here with a previous guest of ours that is, I've never met him before. Well, that's not true. I met him yesterday actually. Hello, Scott. - Hey. - Nice to finally meet you. - Likewise. - Yeah, cool, cool. So we're both here for a conference in New York and the stars aligned and we can do a, we've managed to figure out a time slot for doing an interview. So Svelte 5 is out.

What are your thoughts? Actually, wait, wait, sorry. Who are you before we start? - Oh, yeah, yeah, I'm Scott Tielinski these days. I'm the co-host of the Syntax podcast, Syntax.fm. And we're releasing a lot on YouTube these days. So I think that the line that we're hitting now is that Syntax isn't a podcast anymore. Syntax has a podcast and that we are, we're doing more than just a podcast.

And the podcast is just one of the things we hired CJ Reynolds to come on and he's been doing a lot of great content on our YouTube too. So we're doing a lot of video and stuff. So I have to get used to saying not just the Syntax podcast, I'm, you know, of Syntax, yeah. And so, yeah, I'm here in New York right now. I've been doing a lot of interviews. I got to interview Rich yesterday in a really tall tower that overlooked New York. That was pretty incredible.

- You showed me some pictures yesterday. - Yeah, it looked like a fake backdrop. - Right, right. - It was incredible, yeah. - I wish I could go up there at some point, but. - Yeah, it was wild. It looked like, you know, like one of those things where they project like, or put it like a sheet, like a news channel to make it look like you're high up. But we were actually there. It was a joy to get to chat with Rich for a while. And that's going to be on, I think, Git Nation's YouTube channel.

And today I was emceeing React Summit. - Right, in a Svelte T-shirt. - I did, sadly I did not wear my Svelte T-shirt today. I wore it all day yesterday. And then we did a Family Feud game for the PrimaGens Twitch channel. And I was on a team with Kent C. Dodds, Tanner Lindsley, and Wes Boss. And before I got there, they named our team, the React-A-Lees. And so I decided to wear my Svelte T-shirt and I had to move my name tag so that way the Svelte logo wouldn't be covered.

I had to not claim React, but yes, today I'm emceeing React Summit, which is funny, but I had a great time, awesome conference, yeah. - Yeah, I saw some pictures of your team, I think, and like the signs were like comically large as well. - They're comically large and they were super, they were so funny. They were like falling over in different directions and nobody could get them on. And the whole thing was very funny because you're expected to make jokes and stuff on the fly.

And I'm not, I'm not, you know, I can, I can be funny if I like, I'm thinking about it, but like if somebody shows a microphone on my face, they're just like, make a joke, I'm like, oh. - That's hard. - So a large part of the comedy of, of my performance there was just the fact that I could not say anything, you know. (laughing) It was just, yeah, but it was fun, it was cool. - So what kind of, where will people be able to catch that?

- Yeah, I think it's on the, I think it's on the PrimaGen's Twitch channel right now. I believe that's how Twitch works, but I'm not 100% positive. Maybe you put it on YouTube too, but yeah, it was a wild event, yes, certainly. - All right, cool, cool. - And we won, so. - That's good, that's the most important part. (laughing) All right, so you probably caught Rich's talk yesterday, like the North Star talk that he did. What do you think about "Svelte 5" now that you've used it for a bit?

- I didn't get to check Rich's talk, because I was interviewing at that time. I had to do a number of interviews, so yeah, I had to miss like a lot of talks I wanted to see because of that, so I'll have to watch it. But yeah, as far as "Svelte 5" goes, oh man, I've been using it for so long at this point. - Feels like it's been out for years, probably.

- Feels like it's been out for a long time, and I was, pretty much any side project I was doing, or even my own website, I would do in "Svelte 5," even though it's like, "Do not use this." You know, it's like low stakes. - Not production ready, stop, stop.

- I managed to hold off on even attempting the syntax site until the migration tool was released, 'cause that site is big enough where you would have to touch a lot of components, and I knew the migration assistant would be good, so I'm gonna wait, and I'm gonna hold off, even though some of the state around our audio player and stuff is a little complex, and it's a little, like it's the type of state that any time I was touching it, I was like, "I wish this was the newer stuff,"

'cause I feel like I had a much better handle on keeping things organized without the way that we were doing with custom stuff, yeah. - Yeah, I feel similarly. We waited, so I'm doing some client work. I used the migration tool for a Svelte 4 project that we're moving to Svelte 5, and it was easy peasy. Just a couple of things to update. - Yeah, I think I had to touch like 15 files or something, which is like minimal, considering how big the site is, yeah.

So it was a very smooth migration, but after the last migration assistant, I knew it would be, it was, yeah. - Yeah, the bar is set very high now, right? - It's amazing. - For like all of the migrations lately, it's been pretty good, like very smooth. - Yeah, so I'm liking it, you know. There are some times where I feel like I don't have a handle on why my state is not updating, or like, there are some times where I'm like, "All right, does it make sense to use an effect here?

"Does it make sense to even use state here at all?" There are some times where I'm still not 100% confident in some of the choices that I'm making, but that's the same thing with anything new. And yeah, it's definitely, in my mind, it feels more organized, even if there are like new things you have to pick. - Yeah, the reactive statement thing was, could get super confusing, right? - Totally. - But the good thing about Svelte 4 was that everything was reactive, right?

- Yes. - You didn't have to worry about it. So now you have to kind of think a bit about it. I saw recently now on, I think it was GitHub, that Dominic Ganaway made, I think, a PR for a new rune called like inspect.trace, which kind of lets you see, you put it inside of an effect, I think, and then you can see the actual dependencies and how they update. I think that's going to be really useful.

- Yeah, you know what's so funny is that in the entire time that we've had Svelte, there was like the debug, what was it before? - Yeah, act debug or something. I never really used it. - I didn't really use it either. But nobody else is really doing kind of like custom console log stuff. And the inspector at first, I was like, "I wish this was just a console log." But then I was thinking about it, and I'm like, "There's so much more powerful. There's so much more it can do."

And I really sincerely appreciate it that it says in it or update, 'cause you're never guessing about how the value is set or if it's updating. And I've been doing so much stuff with like local data, where the data is being loaded from here, and then it's like either being picked up by the server or what. And I was hitting situations where I had to like refresh that cache, and something was updating here and not there.

And I'm just like, "All right, I throw a couple of inspects on where the state's being used." And it made it really trivial to find out, all right, it's not ever updating in this component, and I'm confirming that more than just visually or whatever. And therefore, that really makes it easier to get into what's going on. - Yeah, so the stuff that I build, I so rarely use like effect and stuff, derived maybe a bit. But it's because it's like mostly non-interactive stuff.

I do use it for some things, but generally not a lot. - Yeah, you can get by with derived by to do a lot. And for me, I'm like trying to train, 'cause I'm working on like some Svelte bindings for a local first library, zero. And I'm looking at the solid code, the React bindings, and I'm like, "How do I translate this into Svelte?" Which obviously the solid version makes more sense, but there's still like different helpers there and things like that.

So I'm like always thinking like, "Do I need the use effect here?" - Right. - Yeah, yeah. They're using it. - Why do we need it though? - Yeah, yeah. - Yeah, I mean, it's a matter of trying to learn sometimes. - Yes, I know. - For me at least. - I know, I actually pinged Rich. I'm like, "Hey, by the way, if you wanna lend a hand on this."

'Cause he was asking if I, he's like dude, 'cause he's in the chat room and he was just like, "Hey, do you have the Svelte bindings for these?" And I was like, "I have them, but let me tell you, there's a lot of red squigglies in these files." So yeah, I mean, I'd like to help. - All right. All right, so yeah, so that's effect. What do you think about the other stuff in Svelte 5, like snippets and do you use those a lot? - Yeah, I found myself using snippets a lot.

It is funny 'cause we built the syntax site in SvelteKit and Wes, my cohost, Wes Boss, he's very deep into React still and he really appreciates Svelte. So when he started working on our site, he's like, "Wow, this is so great for these following reasons. My biggest gripe is that if I am doing like looping over a list and I just want a little mini component of list items, I have to make a whole file and that really bugs me."

And so he hasn't gotten to try out Svelte 5 yet, but that is like the use case for me, especially the like little things like that. - You know, sometimes my brain is still defaulting to just create a file 'cause I'm so used to single file components. But yeah, I've been loving snippets a lot. The only thing I don't like about them is having to always do in TypeScript, like the snippet children prop stuff. Like I would just love it to just not exist for some reason. Yeah, just be automatic.

- The children prop should be, it's what's it called, reserve, I think. - Yes. - So I feel like they should be able to... - Yeah, I don't even know. - Maybe they do now, I don't know. - I like it 'cause I say that and then you think about it, it's like, well, that kind of breaks some of the rules of TypeScript and obviously whatever, they don't want to do that.

So yeah, a lot of times I get these like web dev feelings that are like completely nonsensical in that way, where it's less about, is it practical? And more of just like, I just want it that way, you know? - Totally, totally.

Like for me as a user that is not really using effects and like I wasn't really using reactive statements that much either, so for me going from Svelte four to Svelte five is not as big of an improvement probably as it is for some people that are doing like super interactive stuff. You met Brady yesterday as well. - Yeah. - And he's doing like super interactive things with 3D models and stuff like that, way above my pay grade. - Yeah, yeah.

- But then I can see that like, yeah, you probably want a better way of doing the state. - Even like I was alluding to like the state and our syntax set for the audio player is surprisingly super complex. And you're having to keep things in sync with like a web component, but we also, you kind of want to have that information available outside of the component anywhere. There's a lot to it for some reason and that state just ballooned so fast.

And it's gonna like greatly be simplified even by moving into a class, which is something that I did not expect to be doing. 'Cause even like up until like a couple months ago, I was putting all of my Svelte five state into functions, creating the function. And since I've opened my mind up to even attempting to use classes for this stuff and like, you know, I can't use a class, I'm only using classes now. - Yeah, it's crazy.

And I actually, we had a, since we're moving the syntax site over and I'm trying to update the team on it, we wanted to have like a really strong style guide for the code style because we didn't have that before. I've used to always working on projects just by myself. So now I'm right with the team. It's like, all right, we need a strong style guide for this. And I proposed a bunch of stuff and I'm like, classes are functions for state. And everybody was like functions.

And I was like, all right, but let me show you the class version and the function version. - And then the both are known. Yeah, let's use the classes way easier. I think it's just the getters and setters stuff. It all makes sense, but they're just obnoxious. - Yeah, no, totally. Like it's really before Svelte 5, I didn't really use a lot of classes in JavaScript. Since I, so I did some React stuff before moving over to Svelte and I came in just as hooks were released.

So I never really used classes in React either. So for me, it's a whole new world kind of, but it's fun. It's like new stuff, new stuff to learn, just in general, very nice, nice developer experience. - And it's oddly enough opened me up to using classes in other ways that I like had not done before. And I'm like, oh, I, you know, I went from being like only functional everything to being like, no wait, actually classes are kind of all right, like.

- Yeah, as long as you don't do it, like in a really kind of wild way where you like inherit from like. - Oh yeah. - Like very deeply and then you have no idea where some method that is on the class is coming from. You're like, what is going on? - Yeah. - But just keep them simple. - And with UI code, you hardly ever have to get into it. - Yes. - Yeah, so yeah, totally.

- Yeah, I tend to use nowadays classes for, so I usually build like services for fetching data and stuff from a database and in the backend and the load functions and stuff. And that's pretty nice. - Yeah, I did it for auth for the same type of thing, yeah. - Yeah, so this local first thing that you've been working on, I feel like you've been diving into the local first like world lately. - For like maybe half a year ish. I forget where or why it first came on to my radar.

Man, I really wish I could remember, but I was- - Probably DAX. - Not even DAX, yeah. I was shocked when I found out DAX was into it 'cause he and I were both using RepliCache. So I had already shipped something with RepliCache when I found out DAX was using it too. And yeah, I forget what I did. I saw something and it made so much sense to me 'cause I was very deep into SSR specifically for a lot of things. And with local first, you're almost doing entirely client-side rendering for everything.

And you think, oh no, wait, we're past client-side rendering. Well, actually like, well, there's a lot of really great benefits to the client-side rendering with local first stuff. And everything happening on the client means that you don't have to worry about optimistic UI. You don't have to worry about any kind of latency whatsoever. You don't have to worry about poor network conditions. And a lot of the apps I was building, I was using in poor network conditions.

And so like, I made a dance app for myself and I like swiped away the dance moves that I'd used in competition 'cause you're not supposed to repeat them. And so that notoriously bad wifi. And I was using it at my practice space and I was like, oh, okay, this is like terrible experience because of the latency. So then I made an optimistic UI and I'm like, okay, yeah. But then if they failed, now you have the fail state. - Right, but then it feels worse when it fails.

- So like, that's what's been amazing about the local data stuff is that you're largely saving to a database that's in the client, whether that is IndexedDB or even something crazier. And the moment that you tap that thing, it saves to the database. Yeah, and in the background, for people who don't know, typically what that's doing, it doesn't have to, but let's say you wanted to stick to a third party server. You click it, it does this thing.

And in the background, there's a process that says, oh, change happened, let's sync with that server. And with something like RepliCache, it's sending patch messages. So not like just an object of the data, but it's sending a patch message of only the information that the server needs to have. The only problem with RepliCache was is that when you write your push and pull server, it's way harder because now you're not like getting an object with the data that you need to update.

You're getting this like patch message that has what version the database is and like what specifically has changed. And you have to like manage that all yourself. - So you have to write like a diffing engine kind of. - Yeah, and you have to do so much of that stuff manually that it was just like, oh, this is really worth it, but it's a giant pain. I wrote, I did this in my Svelte Summit talk.

I showed like the push or pull server, I forget which, the amount of step takes when data comes into the server. And it was like a 15 step process of like checking the version and updating the version, looking at the server version or the row version. And it's like, oh my gosh. - It's a lot of steps. - Yeah, it's a lot of steps. So I have an app that I have using replication is nice, but there's a ton of different local first platforms.

And it wasn't until recently that the, like people would go down how to make this easier. And there's a few people that have like Instant DB is a product that's available right now, but it's closed source. And it's like a Firebase. It's like they remade Firebase to be local first. And it is very good, but it felt a little immature. And when I built an app in it, I had a really good time. It worked really easily, came out of the box with auth, everything saved locally, synced in the back.

And it was just like effortless. But then when I got into like data permissions and stuff like that, you like find the edges of this thing. It is really good, but there are edges. And then the RepliCache folks have been working on Xero, which I'm not going to share any of the technical backend 'cause I don't know if this is going to be released or Xero will be released by then. It should be, it should be.

And in that case, you can check out Xero Sync to see how they do this stuff because there's some really novel approaches to it. But speaking on just the API of using it, you are simply just like calling an update function. It's almost like, you know, our PC where you're calling a save function from the front end, but it is actually saving it to the client. And then in the background, the sync happens, but they've done it in a way where all you have to supply Xero is Postgres address. - Oh, wow.

- And that's it. I mean, you have to take care of migrations and stuff on your database. So I use Drizzle to do that. And so it's a little bit of a bummer because I'm maintaining two schemas of the same data, basically, the database schema and the client side schema. Nate from Tamaguy actually wrote a translator to translate from Drizzle to Xero and it's not done yet, but like, well, I'll use that all day. - Yeah, writing one thing instead of two.

- Yeah. And it's, let me tell you, this to me is going to be, this is going to be, I think, really groundbreaking for a lot of people. 'Cause people can get a Postgres URL, they can migrate a database and then you don't have to worry about a single server side anything. And it is unbelievable how fast and how good it is. I built like a survey app in no time. And because it's all WebSocket based too, it was very like Meteor-like, which people who've been following me know that, right?

I long for the days of Meteor. So I have the browsers open and different computers and I'm typing in one and showing up in the other instantly. But not only that, I'm hitting refresh and it's persisted to the synced database and it works offline automatically. And this is like, holy cow, this is everything I wanted to do. This is the platform of my dreams here. So I'm actually working on an initiative, a nice Svelte talk.

And it is kind of like a light project of mine, but I'm working on like a, I want it to be kind of like Meteor. And so out of the box, it has auth and I already have this in. So I have like demos that I'm building with it now. So out of the box, you basically just give it a Postgres URL and you have auth, you have local first data sync. And then a lot of that's being done through Xero.

But I also, since I'm working on the Svelte bindings for Xero you're basically just saying, you know, here's a new state query or whatever. You pass it in the query language that you're, you know, to find your data. And then you have like a reactive data that is always in sync with your database and sync with your client side database. You don't even have to think about it. It was crazy fast. So I've been working really hard on that.

And I'm even including like, you know, like Meteor had templates for things like login templates, not just like a file, but like a drop-in component that you could have login. So it's like, all right, I'm gonna include login templates. I'm gonna include email. So you just don't even have to think about email, like a transactional email. And yeah, it's just a for fun project.

- If that sounds interesting to anybody and you want to work on something like that, I'm always happy to have anybody jump in and ask questions or whatever. Again, like I said, it's a casual project, but it's what I want. And I've actually built like five or six sites with it already. Yeah, well, it's so funny because I've been just doing a lot of weird side projects, either for my wife or for myself.

And it's really nice to be able to NPX drop-in and start with auth in the database and all this stuff and a template. And even the CSS, one of the things I didn't even mention is that it has a whole CSS-based grid system out of the box that I wrote and a base styling library that you can use. It's basically just like a fancy reset, but yeah. - Yeah, no, but that sounds nice for like, especially for those small utility projects that you kind of always-- - It has a fluid typography kit even, yeah?

- There you go, there you go. - Oh yeah. - So I do have some questions about the local first and how that marries with SvelteKit because my first thought is that it's hard. Can you even do that? - Oh yeah. - Or is it like, do you use server endpoints instead of form actions or like-- - Oh yeah, you don't use form actions and you largely don't even use endpoints. Now when, well, that's with zero. When I was using RepliCache, I had API endpoints and there was three of them only.

One is for push messages. So like sometimes it's like on a polling where every three seconds, the server will just send a message to the client. Other times it is you make a change and in the background is pushing. And then you're, again, you're doing that like patch message work. And then another is like a server send events. So that way you can keep things in sync when anything changes. So that's pretty much it. And that's only if you're doing it that way.

And if you're doing it with something like zero, I don't have like any server side code, it's crazy. But also I've done a lot of local first apps that are actually truly local first and not using a sync server at all. And I'm storing all of the data in index DB and they don't need to have a sync. I mean, that's kind of uncommon, but like I just built like little export functions if I wanted to take my data elsewhere. Export is JSON, import is JSON. - As long as it works.

- Yeah, not something I would give to users, but there's a lot there you can do anyways. But yeah, so for the most part, yeah, you'd use API endpoints and you don't get as much into form actions and since everything is like, it is funny. I'm so firmly into the web standards approach. I love all my web stuff. I love my forms, all this stuff. And now I'm in a world where I'm doing so much JavaScript and everything is JavaScript based. But at the same time, it's all smaller and faster.

It's like such a weird, yeah. It's like counterintuitive to the way that my brain has been thinking about. - I mean, I totally love form actions. - Oh yeah. - It's like my favorite thing about SvelteKit, almost. - Same, yeah. - Load and just like, that's probably also the reason why I don't have to use effects and stuff, right? - Yeah, yeah, yeah. - Just I'll flow that stuff to the backend. No need to worry about it. - I know.

There's so many times where like you even try to, and this is with Svelte overall in general. There's so many times where you like try to do something a more complex way and you're like, why am I just not doing like the Svelte way or whatever. Like, oh, I'm making this too difficult. So it makes this way easier than it needs to be, yeah. - Yeah, so yeah, I guess, so for any other thoughts about Svelte 5 that you haven't changed. - Yeah, I'm interested to see the new stuff coming out.

I can't wait to see how it evolves because yeah, it's a big jump forward in a big direction, not like a direction change, but definitely a big shift. And I think the most interesting things are yet to come, right, 'cause like whenever you, like the first version of React that had hooks, you were like, okay, I get it. - What can we do with this? - Right, and then as time's gone on, we've gotten more and more there. And I think this is gonna be the same way.

I can't wait to see what happens next in general, so. - I saw recently, I think error boundaries. - Error boundaries, yeah. I worked for Sentry and they were super stoked about that. - I can imagine. - Yeah, I sent them the message when we first was mentioned and they were like, yes, not only that, but this is the API of my dreams. And you're like, yes, okay, cool. I'm glad y'all are error folk, people are happy, yeah. - It's such a niche thing to be interested in.

- Oh yeah. - Just specifically errors. - Exactly, I love to see the errors. I love to see the stack trace, okay, not me, but. - I guess for Sentry, it's like the more errors, the better. - Oh, totally, yeah. - I'm kidding, obviously. Everyone wants to not build applications that break, but. - Sure, I think that's why Sentry probably loves developers that use AI for everything. (laughing) - Yeah, have you tried using AI with Svelte? - Yeah, yeah, I primarily use Cursor as my editor right now.

And I do like that I can reference the Svelte 5 docs in it, which is one of the defining features because without that, man, it has no clue about Svelte 5, and even then it's tough. Yeah, yeah, I found that to be one of the harder parts. Not that I, you know, it can get me there or whatever. And I mostly don't even need it for the Svelte stuff because you end up doing so little in Svelte overall.

But like, just in general, the autocomplete can be pretty good to just save you some time here and there. And as long as it gets the template code correct, I'll do the rest for myself. Yeah, I do like being able to reference the Svelte 5 docs. And I hope more of the models either gain better features there or make it easier to work with Svelte 5. - Totally.

Yeah, I've been trying to get it to like, I have that issue where, so I'm using mostly Claude's on 3.5 and I'm just like on the website and I'm trying to like, oh, create an endpoint for, I don't know, for slash new posts or whatever. And it's like, here's a page.Svelte and it's just like, and it's almost like importing React components and stuff. And you're like, no. - I have it oftentimes give me writables and I'm just like, not a writable, no, moved on.

- Yeah, I had to really like nail down, you know, like custom prompt thing to make sure like, never reply with React code or view codes. - Oh yeah. The cursor custom prompt things are the cursor file, whatever that is, cursor rules file. Really handy for stuff like that. Always use classes for state, use runes, use them like this. Always do TypeScript, always do snake case, whatever. And you just like give it a big old list of things. - I'll have to give it a try.

Like I've been using mostly Zed. - Okay, yeah. - And it's been okay, but cursor sounds. - Yeah, it's good. You know, I mean, it is VS code basically, but I really liked Zed for a lot of reasons, but there's one, this is the dumbest thing. There's one piece of functionality in Zed that they do not have and I opened an issue for it a while ago.

And I think it's so niche that like nobody really cares, but you know, when you do like, I don't know, whatever you do when you split a window, a minus hyper S, I don't know what it typically is. But when you split a window, it opens the same file in two window panes. And I know people do that, but I almost always want to split a window and have two different files open.

So yeah, so I'm working here, I do hyper S, I want the file I'm working in to go over here and then a different file to open or whatever, the last one I had opened. And so VS code can do that with a, I forget what the thing is, it's something in move file. And I, you know, I have such muscle memory to do hyper S all the time when I'm working and the Zed does not have that yet. And I cannot live without it. - It is a bit weird to open the same file. - I know. - Why would you want, I don't know.

- And if you have that, I get why you might have that for long files or whatever, but if you have that, why not also have the other one? Like really just, and I don't even want to split the file, I want to split the editor and I want the file to go in the split spot, yeah. - That's funny. Maybe it's because people usually work in languages where the files are very- - Totally, yeah. - Spell kind of forces you not to- - Single file components, one of my favorite things. - Same, yeah.

- It's a, what's it called? I don't know the English word for it, but like it's a splitter of opinions. - Oh yeah, yeah. It's a splitter of opinions for sure, I understand that. - Yeah, so there was one thing as well that I was going to ask you about. - Sure. - I completely forgot though. - Okay. - 'Cause we went down the AI rabbit hole. - Oh yeah. - Oh yeah, yeah, yeah.

So one thing about AI that I am a bit worried that since most models are so good at generating React, for example- - I think about this all the time, yes. - I am worried we are gonna end up in like a mono framework kind of world in a couple of years because people are gonna- - They already are, yeah. - Right. Yeah, I guess we are in a bubble of sorts where we don't use- - Totally.

And I noticed that with a lot of like, even like either like non-UI programmers or people who are just like wanting to make things, it's always defaulting to React 100% of the time. And yeah, I do wonder about that. Like, does that, what kind of effect does that have on the rest of the ecosystem? Do the other languages even matter? But hey, as long as I'm writing code, I'll just- - Yeah, yeah, I mean, I enjoy writing code, so. - Yeah, I know, yeah. - It's nice, but yeah, it's a bit worrying.

- Yeah, I agree. - I think there's been some discussion about like how do we prepare the, so mostly the maintainers are talking about this, I think, but like how do they prepare the documentation so that it is as friendly to AI as possible, right? So how do you structure it? I have no idea. - Yeah, 'cause you always think about documentation has to be the easiest to read for the users. And sure enough, that is probably the thing you want to optimize for first, but yeah. - But for AI as well.

- You gotta think about the AI, how it's gonna parse it and read it, the language used. Does that mean like more examples? Or does it mean like, how do you optimize to make sure like the context is small enough so you don't, so many questions. - Will that even matter in a year, right? - Right, that's true, that's true. - You just gotta put some language in there. This is the best framework. This is the very best framework.

- What if we like use AI to just like create a bunch of domains all over the internet where we just write, spell the best framework and then just every time someone asks like, "How should I build my website?" Oh, you spelled. - Yes. - It's probably already happening with other stuff, right? - Oh yeah. - That's kind of scary. - It's a scary thought overall, yeah. I know that, what is it, the dead internet? - Oh, the dead internet conspiracy theory or whatever. - Yeah. - I know it feels real.

- It feels real and it feels like it's taking place currently, even if, yeah, I know. Sometimes you go on even like social media and you're just like, how many of these accounts are real? - Right. - Have you seen those Facebook accounts where like they're like groups and it's just like boomers commenting on auto-generating? - Oh yeah. - It's scary. Yeah, yeah, because most people don't use Facebook anymore. - It's nice. - Just old. Sorry, old people.

- I'm sorry, yeah, I haven't logged into Facebook. I log into Facebook like once a year and I have some friends globally who only communicate on Facebook and they always laugh, they're like, oh, this is Scott's annual login to say hi. I'm like, well, this is the only like thing I do on here. - You could just get some other messaging thing that we can. - I have a WhatsApp now, we can do a WhatsApp thread, yeah.

- Yeah, all right, other new cool things that are coming that I've heard about is maybe this will be out by then. We'll see. So you know the bind feature? - Yes. - There's apparently gonna be a getter and setter for bind. So you can pass it functions to callbacks. Because sometimes you kind of wanna do something with an input or an output of the value. - So it's like when the value is changed around this function directly in the bind, interesting. Okay, I like that.

- I'm excited about it, although like, we'll see. - Yeah, I know so many things are like, that sounds interesting when I'm gonna use that. I guess I'll find out. Yeah, I've noticed sometimes like when you want, like if you're building some weird component where you need to do something with an input before you pass it up to like another component, something like that, I usually find it to be a bit, 'cause then I just opt out of bind completely and just be like a listener and stuff.

So I think this will help a bit. - That would, yeah, and I could see how that would be helpful specifically, or listening for changes. It is funny, like when I first read derived by, I was like, I'm never gonna need this, I think derived is fine. And then I use drive by all the time. It's like, yeah, okay. - It's probably the one I use the most. - It's probably the one I use the most, yeah, I know. I know it's like so funny. I'm like, do I need it just to derived here?

No, I think I need to drive by. Yeah, yeah, yeah. - All right, so for you then, like what's next? After local first, what's the next interesting thing that you're gonna, maybe you don't know yet. - Yeah, I don't know. You know, for me, I'm so deep into that and I feel so like, it is funny. Like I still feel conflicted about it 'cause I do like the web standards stuff so much, but like when I use my local first apps that I've made, they feel so much better.

I am working on, we're gonna be rewriting the syntax site, even though we just rewrote it. And we just built it from scratch. It was like a full build. Like I'd mentioned, we wanna be not just a podcast. And the website right now is very much like, this is the website for a podcast. - Right, there's the audio player, there's the transcript. - You wouldn't even know we had YouTube, even though like primarily we're releasing a ton of stuff there. There's like a section for videos.

So we, for the first time, we hired a designer. It's the same person that designed the Level Up tutorial site, Travis Nielsen. He's a good friend of mine. - Oh yeah, I think I watched this. I think we actually talked about this in a couple of, like the first episode you were on. - Probably we were talking about redesigning the Level Up site. - 'Cause he used to run like a YouTube channel. - Dev Tips TV, yeah. Yeah, he's so great.

So, you know, for the first time we're working on that and we're still like major in the process of it. But yeah, I think it's gonna be really cool and it's gonna give us an opportunity to like re-architect while keeping the same code base. And that's gonna be a fun challenge. But now that we're in Svelte 5, it feels like, all right, we have the base. Obviously we don't need to start over from scratch and we can take an approach to this and knock this thing out in an interesting way.

So that's gonna be a big project and it should be a lot of fun. 'Cause CJ Reynolds on Syntax is also very talented Svelte dev. He does a lot of Svelte. In fact, he actually just released a video at the time of recording this today on building some app in Svelte on our YouTube channel. So it'll be fun to work on it with those guys. 'Cause it's like last time what I did is I built the whole site. I even designed it, the whole Syntax site.

And then Wes came in and then the last couple of weeks and then just like threw a huge coat of paint on the whole thing and made it look amazing. And he was just like, "Oh, let me just tweak this all." And that's the way Wes- - He really has a very specific design style with you. - And it's so funny. My first pass, I was like, "I'm so proud of this design. "I did such good work on this design." And then Wes like rips it all out and does his coat of paint on.

And I'm just like, "Oh yeah, mine sucked compared to this." Like I guess, my design is so lifeless. It is very like systemized. Here's a design system and everything fits into that system and you do not stray from that system. And meanwhile, Wes is the opposite. He's just like tossing things here and there. It's like, whatever, it looks good to him. It's funny, when we interviewed Brad Frost on Syntax, we were talking about design systems and I was like, "I really like a strong system."

And Wes is like, "You know what? "The thing I don't like about systems "is that when I need a gradient, "I can't just write that gradient. "What am I supposed to do?" And like almost on cue, like Brad and I were both like, "You add it to the system. "You don't just add it to the component, "you add it to the system." - Yeah, yeah, no, no, I'm the same. Like I prefer to have it like in the Tailwind config if I'm using Tailwind and then works very well for me. - Yeah, yeah, exactly, yeah.

Know where your stuff's at. - Yeah, all right. Unless you have anything else that you wanna chat about, then-- - No, I expect to actually, you know what I did release a Svelte 5 Beginner's Course on our YouTube. It's like two and a half hours long and it is truly for either people coming from other frameworks. I do a lot of in React, you do it like this type of comments.

Yeah, 'cause I do recognize that a lot of people will try Svelte 5 for the first time coming from React and it is less for the person who is even like even tried Svelte 5, but the people who wanna like really get a good foundational set of skills on it, it covers all the basic stuff in two hours and we'll be doing a lot more. So if you like Svelte tutorial content, we'll be doing a lot of that. We'll be doing examples.

I'm going to be doing a full local first series with Xero and Svelte, and SvelteKit 1.0 is finally released in past alpha 'cause I know they're gonna release in alpha first. - Right, yeah. - So there's that to look forward to. - Cool, cool. There's one more question that I wanted to ask you that I just got reminded about. So when do you build your, I guess, non-local first applications? Like what's your stack like? Do you use serverless or do you self-host?

I feel like I've seen you post about Coolify. - Yeah. - 'Cause I am a big Coolify fan, so. - I love Coolify. I host a lot, man, I hit you so many little sites or demos or side projects. I host a lot of stuff on my Coolify, which is in an ARM server on Hetzner. And I just, I feel like any time I just want to throw something, I just throw it on there 'cause it's easy. But then a lot of the times I'm hosting on like my personal site and several other projects, hosted on Cloudflare pages.

That's what I'll reach for first. Vercel has long sponsored the hosting of the Syntax site. So our Syntax site is hosted on Vercel. But for me personally, I'm gonna either go Cloudflare pages if I want a serverless or I do a Coolify for like a node site. That's pretty much my go-to. Stack-wise, I tend to-- - Hopefully Svelte. - Yeah, absolutely, Svelte for everything.

I don't even consider using anything else, which is, at first I think it's like since Svelte 3, it's like I don't want to use anything else. - No, you totally get it. - Yeah, it's just what I like. And I either go back and forth 'cause I have a lot of experience with both Prisma and Drizzle. I'll use Prisma or Drizzle. Syntax site is Prisma. A lot of my other projects are Drizzle. So I'll usually pick one of those two. And then Postgres usually for database now.

I'm just like a long MongoDB user. So I have to get used to not writing MongoDB. But it's been a little while since I have. So yeah, I'm pretty much reaching for Postgres right now if I needed a database. The Syntax site is on PlanetScale, which has been great. There's a lot of cool features with branching and versioning. And when you change your schema, you have to merge the new schema. And I like all that stuff. - That sounds like very nice features to have. - Very nice features to have.

But so many of the other ones I think are, I mean, not that they're too hyped up or something like that. I'll just more or less just spin up a normal-ass Postgres server, you know? - It's usually enough, right? - Yeah. - All right, thanks for doing the interview with me, Scott. - Absolutely. - And again, it was very nice to meet you in person. - Yes, yes, yeah. For the first time. - For the first time, yes. - To today, just now, yeah. - Yeah, we did not meet yesterday. - No. - No, all right.

And with that said, that's it for us. Thanks for listening. And you will hear from us next week. - Later. - Bye. - Hey, it's Kev here. If you like the show, please drop a review on your favorite podcast player. It would help out a lot. Thanks. (silence) (silence) (silence) (silence) (silence) [BLANK_AUDIO]

Transcript source: Provided by creator in RSS feed: download file