Charles Max Wood:
Hey folks, welcome back to another episode of JavaScript Jabber. Man, it feels like it's been forever since I've been on this. I've had something going like every week. Anyway, we are here with our panel. First off, we have Dan Shapir.
Dan:
Hey from Tel Aviv, coming on a good connection finally.
Charles Max Wood:
We also have Steve Edwards.
Steve:
Yo, yo, coming at you from the Portland area in Oregon.
Charles Max Wood:
AJ O'Neil.
AJ:
Yo, yo, coming at you from Latin. Yeah, we'll just go with that.
Charles Max Wood:
Nice, I'm Charles Max Wood from Top End Devs. We have two special guests this week. We have Jaroslav Lapin, I hope I said that right, coming from our neck of the woods. He said he was from Utah and I was like, oh, I know where that is. You wanna introduce yourself?
Yaroslav Lapin:
Yeah, yeah. Hi, I'm Yaroslav. Most people know me like on the internet as JLarky and yeah, I'm here. Today I think is like the record breaking like hit should be happening. So we will see.
Charles Max Wood:
There we go. We also have Andre who's rocking an awesome beard.
Andrei:
Hey, how's it going? Calling it from just north of Lake Tahoe.
Charles Max Wood:
Yeah, beautiful out there.
Andrei:
Our internet is down.
Steve:
I think
Andrei:
I'm
Steve:
this is
Andrei:
in the
Steve:
the
Andrei:
car.
Steve:
first podcast I've done with somebody in their car.
Charles Max Wood:
Yeah.
Andrei:
Yeah, my electricity went out at the house, so I had to escape downtown for a good Verizon connection.
Dan:
Oh, it's also an air conditioning, I would guess.
Andrei:
No, no, I'm gonna roast. I just hope
Charles Max Wood:
He's gonna roast in that car,
Andrei:
that, yeah,
Charles Max Wood:
yeah.
Andrei:
I hope the phone doesn't get too hot. I'm gonna, if it starts to warn me, I will turn on air conditioning. I think it's actually
Charles Max Wood:
Good deal.
Andrei:
illegal to idle in California.
Charles Max Wood:
Oh really?
Andrei:
Yeah, I don't
Steve:
That
Andrei:
think
Steve:
surprised
Andrei:
you can just sit
Steve:
me.
Andrei:
there and idle. I don't think anyone would.
Charles Max Wood:
You're not that far from the border.
Yaroslav Lapin:
I'm going
Andrei:
It's
Yaroslav Lapin:
to go to bed.
Andrei:
true.
Steve:
Hahaha
Charles Max Wood:
Coming to you live on the highway to Nevada.
Andrei:
Ha ha ha.
Charles Max Wood:
Anyway, yeah, so we're gonna be talking about the B2B SaaS kit. And the way I've decided I kinda like starting these is just by describing what the problem is. Like, you know, it's like why do we need this? Or what are people doing that this makes it easier to do?
Andrei:
Yeah, so I think
Yaroslav Lapin:
Okay, I don't know
Andrei:
there's two
Yaroslav Lapin:
who should
Andrei:
problems.
Yaroslav Lapin:
go first. Ha ha ha.
Andrei:
There's the problem why we started building it, and then there's the real problem, and then there's the problem that we tell everyone about. So
Charles Max Wood:
Okay
Andrei:
the real problem is that we've been having a really difficult time getting people to learn about our for-profit SaaS product, which is a customer support
Charles Max Wood:
Uh huh.
Andrei:
solution. And so we started thinking about ways to, you know, tell people about it. And traditionally what most folks do is they'll start like spamming, they'll start sending cold emails, or, you know, they'll buy ads, you can do blog posts, you can go on podcasts. And all of that takes time and money and is, it's also not particularly creative, right? So. We kind of went back and we were like, so why are people discovering us organically? And we thought, well, maybe it's because there isn't like a recipe on the internet even where you can go and like build a B2B application that has all the components necessary to run a B2B application. And we thought if there was one like this and we were like a small optional part of that recipe, then maybe people would... start discovering us. It's a really roundabout way to do some marketing, I guess. But
Charles Max Wood:
Mm-hmm.
Andrei:
the outcome of that is a pretty cool sort of a side project, the B2B SaaS Kit, which has very little to do with Fogbender itself, with our for-profit startup. But it's been, yeah. And I think the bigger problem that we kind of began to understand is that there just isn't a way to spin up a fully functional B2B app. And our target is like, you just got laid off from Google or from Meta, and you have a lot of experience, you're a senior engineer, and you know this problem, right? You're an expert in some field. The last thing you know how to do or want to do is like set up authentication, set up product
Charles Max Wood:
Mm-hmm.
Andrei:
analytics and all this other stuff. And what you want to do ideally is just jump into coding business logic for your, whatever your insight is, whatever you think your business is going to be. So we tried
Charles Max Wood:
Right.
Andrei:
to come up with a way to present like this kid that someone like that could spin up in a weekend and actually start. playing around with an actual audience with actual users really, really quickly. And whether we're
Dan:
Thanks
Andrei:
a part
Dan:
for watching.
Andrei:
of it or not is at this point, not like that, even that interesting.
Dan:
So basically, to really get to the gist of it, and again, by listening to your description and also obviously also looking at your website or the website of this project actually, it's an opinionated collection of services and libraries and frameworks that you kind of bundle together, right?
Andrei:
Yeah.
Dan:
To come up with... and an opinionated starting point for the development of SAS B2B solution.
Andrei:
Yeah, and some of it is opinionated. Like I would say all the open source stuff is very like Astro, super opinionated, even Tailwind. I think that the B2B specific things like Propel Auth, I don't think that's opinionated. There's literally one other B2B user authentication solution, which is Clerk, and nothing else. And when I say by B2B is like org management, right? So as a customer,
Charles Max Wood:
Okay.
Andrei:
I sign up and I invite my colleague. hard to build, those two things offer it off the shelf. Fogbender is also the only off the shelf B2B support solution where we assume that the user is a team of people and not just a single individual. In other words, if
Charles Max Wood:
Uh-huh.
Andrei:
you signed up as a team and a member of that team has a question, if the vendor is using Fogbender for support, by default, the entire customer team is going to see that question and be able to respond and see the vendor's answer. So those are less opinionated, but yeah, everything else is especially open source stuff pretty much.
AJ:
This is
Charles Max Wood:
It's
AJ:
good.
Charles Max Wood:
interesting that you talk about it in those terms because yeah, I mean, I've used a lot of these authentication solutions or support solutions or things like that, and the focus is always on user-based, right?
Andrei:
Yeah, yeah.
Charles Max Wood:
Like a single person.
Andrei:
Yeah.
Charles Max Wood:
And so yeah, the assumption that, Hey, look, you know, I may be dealing with, and realistically, you know, as I've done different things or worked with different applications and connected with their support, yeah. If I connect with support and my virtual assistant, I have two of them, connects with support on the same issue, we're working on three different support tickets. Or to get them access to something, I add them as a team member, but then they interact with the software as an individual instead of as part of my team a lot of the times. And that's pretty inconvenient. So... Yeah, that's interesting and an interesting take on what we're doing here. Yeah, I'm guessing that, you know, Astro React, you know, Tailwind, yeah, a lot of that is just a matter of how you design your software, but you know, the way these others plug into it, that's really interesting to me.
Yaroslav Lapin:
Yeah,
Dan:
Yeah,
Yaroslav Lapin:
and I've had... I'm
Dan:
so
Yaroslav Lapin:
sorry.
Dan:
when I looked at it and I also told Jaroslav about it, the first kind of thing that it reminded me of, and it's interesting also to think about this in the context of a category, but one of the things that reminded me of is Ken C. Dodd's Epic Stack.
Charles Max Wood:
Mm-hmm.
Dan:
But it took me a bit of time to figure out the difference in focus that you're describing. that one is primarily for B2C, where you assume
Andrei:
Thank you.
Dan:
individual users, and one supports B2B, which means you need to be able to, like you said, consider a group of users as a single entity. Now, obviously, that entity may contain a party of one. in which case, so you're a superset, I guess, of the scenario that Epic Stack is specifically targeting. But like you also said, it kind of limits the options available for some of the parts that you chose because you needed to have that capability to work with groups.
Yaroslav Lapin:
Yeah, I want to actually address the Epic Stack comparison, but just going a bit back to this thinking of, when we created Fogmander, we needed to showcase a widget. So some people are like, hey, we're using neck jazz. We are using Nox. How do I integrate into your system? And the question was, OK, is there a template where we can use auth right away? because what we ended up doing were things where we just have hard-coded values because there is no easy way to authenticate users, moreover, authenticate teams and all of that stuff. But now in B2B SAS Kit, it's like, hey, here's user ID, here's org ID. That's all taken care of here. A lot of the starter projects, the whole category, if we start with create next, Create T3 app, right? They will give you kind of like base framework, maybe a few add-ons on top of it. So like maybe like Tailwind or TRPC, but they're not giving you too much into kind of like application code. That's where you would usually use like generators if we're talking about like Laravel or Rails or... I think Laravel actually has a few templates where it's more app-based. And even one of them, I think, has Teams management. But not everyone wants to use PHP. And it's especially just for one feature. So
Andrei:
And I think
Yaroslav Lapin:
all
Andrei:
that's
Yaroslav Lapin:
of those starter
Andrei:
a great
Yaroslav Lapin:
things,
Andrei:
way to
Yaroslav Lapin:
they
Andrei:
start
Yaroslav Lapin:
usually
Andrei:
a business.
Yaroslav Lapin:
are limited to testing or like... Pre-tier, so like kind of like lower level, just like tools, they don't go into like application. So our thing is a bit more kind of like higher level starting point. So in a comparison between like Epic stack and B2B SAS kit, the difference is Epic stack. is a thing for you to like start your project. Yeah, you know what you want to do. You don't want to do kind of like a boring parts and you start right away. Our thing is more how you like start a business. We already have kind of like a product that like your team can go in and sign up and like through Stripe, right? And have like a billing, like team wide billing. Like. Team white support and all that stuff. So it feels just like a bit like higher level and Going back to like opinionated I think like epic stack is a bit more opinionated so like Kent is I know the best Framework like remix. I know the best The best like UI library like this one, right? So like he picks all the all the tools that he he is considered like the best. And that's kind of like the only way, the only thing that is supported. For us, it's a bit like, it's a bit more open-ended. So a lot of the tools that we provide, they're optional. So the only way for you to kind of like, to sign into the app is to have like, you need to have SQL, otherwise like we don't know like, what to show you, right? We don't need, we don't have the data and we need authentication otherwise like. how are we going to show you your dashboard? So, those things are required. You have to set it up. Everything else is optional. So, if you don't want Stripe, you want to use something else, sure, just don't configure the Stripe and replace it with something else. But that's kind of like on your time. We can't support every possible kind of permutation of the thing. And we are not claiming that this is like the best possible. So for example, we use Vercell for hosting, but we also have like documentation on kind of like how to undo things. So if you go to like, if you start it locally and you go to like slash eject, it will show you like documentation like, hey, here's how you like get rid of Tailwind if you don't like it. Hey, here's how you can like use a different hosting solution if you don't like the Vercell, right? we are a bit less sure in that this thing is the best possible and no one should use anything else. We will provide you with instructions on how to undo some of that stuff. And yeah.
Dan:
It's interesting to think about it this way, that we had frameworks, and then we had meta frameworks, and now it seems that we're getting this new category of meta-meta frameworks?
Andrei:
Yeah.
Charles Max Wood:
haha
Dan:
Ah.
Andrei:
And then there's going to be the next layer where you just describe to AI kind of roughly what you want. And then that becomes a meta framework. Just builds a business for you.
AJ:
Well, I think,
Dan:
Yeah.
AJ:
I think we need more variety in stuff like what you're building. We need more of what you're building. We need what you're building and we need more of it and more variety of it, because there's too much of this. This, uh, you know, Facebook does this or, or Google does this, therefore I'll do this, which is not at all suited to real business needs or real, real scalability for the type of application that you have. Cause most likely if you have a business. Most people, if they have a business, you have to exchange a good or service for money. Whereas Google and all these big companies are just trading funny money and stocks and investors and there's no product at the end of it. It's a completely different use case.
Andrei:
Yeah.
Yaroslav Lapin:
Yeah, or they close it right away, right?
Andrei:
Or they close
Yaroslav Lapin:
So like
Andrei:
their ed.
Yaroslav Lapin:
we're already on a countdown for them to close threads, right?
Andrei:
And by the way, I think
Charles Max Wood:
Ha ha ha!
Andrei:
we have a, you know, my opinion is that like, it's good to have a one way, like sort of a, this is how you do stuff. I think that's for someone trying to build a business, that's not a bad, that's not a bad, bad message, you know, like if I see this as working, this was my, this was kind of like my hope, I think with the sample app, if you see it's working and what you want it to do, minus your business logic, then my hope is that we'll find enough people who are like, that's good enough for me. Like I'll just use whatever these, because once you start getting super opinionated, then I mean, the only way to really do stuff is to build everything from scratch, more or less. Yeah.
Dan:
Yeah, it kind of depends what you mean from scratch. But going off of what you just explained, it's worth stating that really the steps with what you created is that you effectively go to your website, copy the instructions, which are essentially to clone a repo and run the command line, command. And you're off to the races as it were.
Andrei:
Yeah, it gives you a pretty nice, locally hosted landing page. And then from there, you can, there's yet another set of very simple instructions. You basically go to a setup page that gives you a bunch of steps, of which only the first few are mandatory and the rest is optional. And so essentially, you install Doppler, which is a secrets management service with a very generous free plan. Then you... And you basically learn how to launch the app through Doppler so that all the secrets are picked up. You learn how to use the command line to set secrets and to read them. Then you basically sign up for SuperBase. You know, it's a free account. You get a free database. You know, you hook that up. And then you are maybe I'm reversing the order. You set up Propel Auth, which is the user authentication service. And at that point, basically, you've got a working app and everything else becomes kind of extra. Okay, well, here's how you also add a customer support component. This is how you also add product analytics with post hog. This is how you also add billing. This is if you want to sign in with GitHub, this is how you do it through PropelAuth. If you want to buy a domain, we send you to... Domainer, it's my friend's very cool domain search service. And then you in this case, you use Versal to deploy it with GitHub, right? With the GitHub integration. So it's sort of like this. Our goal is to start to give you like literally three steps initially, so you can just see that something is working, then ideally you would be drawn into trying more and more steps. And we're certainly seeing people doing it. because we have some product analytics. Obviously it's all like pretty meta. But yeah, there's been essentially a non like. And this is a stark contrast to Fogbender, which has very little traffic or customers. You know, B2B Saskette is someone's always on there doing stuff, which is kind of cool. And we just launched it too.
Yaroslav Lapin:
Yeah, but the idea is that we show you like the sample app that has kind of like enough moving pieces that when you look at it, you're like, oh, I know how to add like my thing into this. And it's a, like a working product. And we give you with like all the documentation on how to set it up and some documentation, like how to, how to basically use it later. And we had like people, uh, people try to go through all of these instructions and they're like. If they know English, it's usually kind of like enough,
Andrei:
Yeah.
Yaroslav Lapin:
which turned out to be a problem because we asked like few people on Upwork to just like go through instructions and try to set it up. And like, you can just see how much, like how, how English basically
Andrei:
Okay.
Yaroslav Lapin:
correlated
Andrei:
So,
Yaroslav Lapin:
with
Andrei:
we're
Yaroslav Lapin:
how
Andrei:
going
Yaroslav Lapin:
far
Andrei:
to
Yaroslav Lapin:
they
Andrei:
go ahead and get
Yaroslav Lapin:
could
Andrei:
started. Okay.
Yaroslav Lapin:
get
Andrei:
So,
Yaroslav Lapin:
through
Andrei:
we're
Yaroslav Lapin:
the instructions,
Andrei:
going to go ahead and
Yaroslav Lapin:
but
Andrei:
get
Yaroslav Lapin:
in
Andrei:
started.
Yaroslav Lapin:
the end
Andrei:
Okay.
Yaroslav Lapin:
everyone
Andrei:
So, we're going
Yaroslav Lapin:
did,
Andrei:
to go ahead
Yaroslav Lapin:
so
Andrei:
and get
Yaroslav Lapin:
it's,
Andrei:
started.
Yaroslav Lapin:
it's
Andrei:
Okay.
Yaroslav Lapin:
really
Andrei:
So,
Yaroslav Lapin:
kind
Andrei:
we're
Yaroslav Lapin:
of like,
Andrei:
going
Yaroslav Lapin:
uh,
Andrei:
to go ahead and
Yaroslav Lapin:
it's
Andrei:
get started.
Yaroslav Lapin:
a difference
Andrei:
Okay. So,
Yaroslav Lapin:
between
Andrei:
we're going
Yaroslav Lapin:
like,
Andrei:
to go
Yaroslav Lapin:
I'm
Andrei:
ahead
Yaroslav Lapin:
hiring like
Andrei:
and get
Yaroslav Lapin:
two
Andrei:
started.
Yaroslav Lapin:
teams,
Andrei:
Okay. So, we're
Yaroslav Lapin:
one
Andrei:
going
Yaroslav Lapin:
in.
Andrei:
to go ahead and
Yaroslav Lapin:
Brazil
Andrei:
get started. Okay.
Yaroslav Lapin:
who's
Andrei:
So, we're
Yaroslav Lapin:
going
Andrei:
going
Yaroslav Lapin:
to
Andrei:
to
Yaroslav Lapin:
do my
Andrei:
go ahead and get started.
Yaroslav Lapin:
like Like app
Andrei:
Okay. So, we're
Yaroslav Lapin:
one
Andrei:
going
Yaroslav Lapin:
is
Andrei:
to
Yaroslav Lapin:
Germany
Andrei:
go ahead
Yaroslav Lapin:
who's
Andrei:
and get
Yaroslav Lapin:
doing
Andrei:
started.
Yaroslav Lapin:
to do like my
Andrei:
Okay.
Yaroslav Lapin:
PHP
Andrei:
So,
Yaroslav Lapin:
back
Andrei:
we're
Yaroslav Lapin:
end
Andrei:
going
Yaroslav Lapin:
and
Andrei:
to
Yaroslav Lapin:
I just
Andrei:
go ahead
Yaroslav Lapin:
hope that
Andrei:
and get started.
Yaroslav Lapin:
in
Andrei:
Okay.
Yaroslav Lapin:
six
Andrei:
So,
Yaroslav Lapin:
months
Andrei:
we're going
Yaroslav Lapin:
they
Andrei:
to
Yaroslav Lapin:
can
Andrei:
go ahead
Yaroslav Lapin:
talk to
Andrei:
and
Yaroslav Lapin:
each
Andrei:
get
Yaroslav Lapin:
other
Andrei:
started.
Yaroslav Lapin:
and
Andrei:
Okay.
Yaroslav Lapin:
can
Andrei:
So, we're
Yaroslav Lapin:
like
Andrei:
going to
Yaroslav Lapin:
Make
Andrei:
go ahead
Yaroslav Lapin:
a login
Andrei:
and
Yaroslav Lapin:
form
Andrei:
get started. Okay. So, we're
Yaroslav Lapin:
as
Andrei:
going
Yaroslav Lapin:
compared
Andrei:
to go ahead
Yaroslav Lapin:
to like
Andrei:
and
Yaroslav Lapin:
something
Andrei:
get started.
Yaroslav Lapin:
that you
Andrei:
Okay.
Yaroslav Lapin:
can
Andrei:
So,
Yaroslav Lapin:
get
Andrei:
we
Yaroslav Lapin:
and like set it up yourself Even though you even know you're like semi-technical right to just know how to read English and you can get it and you can Get a feeling that you kind of like you don't have like a weather app. That's like there are like a thousand tutorials on YouTube, you get like a real app.
Dan:
One of the benefits of being open source is assuming you get enough traction. I can pretty well assume or guess that somebody will translate everything to the relevant languages from English.
Andrei:
You know, the problem is that these other services we're using, you know, we're heavily relying on their UI and none of them, I don't know, maybe some of them are, maybe Super Base is available in other languages, but most of them are not.
Dan:
Hmm.
Andrei:
So, at the end of the day, like, there's still going to be...
Dan:
Even even Astro?
Andrei:
No, Astra I'm sure has some, but we don't, you don't need anything from Astra in this toolkit.
Yaroslav Lapin:
Yeah, just around one command to
Andrei:
Yeah.
Yaroslav Lapin:
start it. And that's the extent of
Dan:
So
Yaroslav Lapin:
you using Astro.
Dan:
since we brought up Astro, I do have a question in that specific context. So first of all, I need to start by saying that I really like Astro. I think it's great. Obviously, as a performance nerd, I'm really happy with the score, the Core Web Vital score that people usually get when they use Astro. So nobody should misconstrue my intention. that I dislike Astro, but I do have to ask about the fit of Astro for your specific use case because when the people from Astro describe the best or the optimal types of websites that are appropriate for Astro, they usually talk about content websites and less about And you on the other hand seems to be specifically targeting applicative scenarios. So why did you choose Astro over, I don't know, Solid, Quick, Svelte,
Yaroslav Lapin:
Yeah,
Dan:
or
Yaroslav Lapin:
I like to talk
Dan:
Next.js,
Yaroslav Lapin:
about this.
Dan:
God forbid.
Yaroslav Lapin:
Yeah.
Dan:
It's even from Vercell.
Yaroslav Lapin:
Yeah, exactly. And that's going a bit back to like our idea of like having kind of like eject instructions. When we started, we kind of like tried different ideas of like, can we just like build everything on top of super bass? Can we build like everything on top of Vercell? Because like... they all have some kind of auth, some kind of like database and all that stuff. Like how much do we want to like depend, how much we wanna like bet everything on like one provider. And in the end, we set up like this setup where it's like everything is kind of replaceable. If you don't like super base database, just pick any other kind of like SQL like thing and it will work. And that... Kind of like approach of flexibility is also like the reason why we were using Astro because Astro is in my mind is really flexible. And I'm not the only one who thinks that like solid start and 10 stack start are going to be built on top of Astro even though they are like full blown kind of like application frameworks, right? Because Astro, in a way, it's kind of like full stack Veed. So Veed is really kind of like popular libraries for building web frameworks. And Astro just does that, plus it adds you like a server integration part. So if you're building a framework, like Dan Abramov recently published an article of like, hey, let's build React-Sore components from scratch. And I... And JCPennt on Twitter did like a dramatic reading of that article and he created like all of that stuff in Express.js. And I went to his thing and I quickly built it on top of Astro. So it's like you can
Andrei:
I'm going
Yaroslav Lapin:
build
Andrei:
to
Yaroslav Lapin:
basically anything on top of Astro. And there are like
Andrei:
turn
Yaroslav Lapin:
two
Andrei:
it over
Yaroslav Lapin:
answers
Andrei:
to you.
Yaroslav Lapin:
to that. So like
Andrei:
So,
Yaroslav Lapin:
one
Andrei:
I'm
Yaroslav Lapin:
answer is if you're using
Andrei:
going
Yaroslav Lapin:
application
Andrei:
to turn
Yaroslav Lapin:
based framework. what you will end up doing probably is creating a separate website for your landing. Or you're doing your landing in XJS
Andrei:
it over
Yaroslav Lapin:
and
Andrei:
to
Yaroslav Lapin:
I can clearly see
Andrei:
you.
Yaroslav Lapin:
that because it's like it has 30 scores of lighthouse. It's like it's immediately obvious when people are like, oh, it's fine. We can use React on landing. And we used it as well and we also had
Dan:
I
Yaroslav Lapin:
30.
Dan:
do have to interject on this point
Yaroslav Lapin:
Sure.
Dan:
because it's an important, I know that you were saying this kind of in jest, but I do have to, it's an important conception or misconception that some people have. So I have this talk that I'm giving at some conferences where I do a performance comparison between the various frameworks and
Yaroslav Lapin:
Yeah.
Dan:
meta frameworks. And at the very end, what I say is that, you know, I look at the ratio of good of what what's the probability you might say that you'll build
Yaroslav Lapin:
Uh
Dan:
a
Yaroslav Lapin:
huh.
Dan:
fast performing website using any one of the frameworks. And what I say is that none of the frameworks have a good ratio of 0 percent, which means that you can build a fast website using any framework. even Angular.
Yaroslav Lapin:
Yeah.
Dan:
Likewise, no framework has 100%, which means you can build a slow website using any framework, even Astra or Quik. So, yeah, it's more of a question of how much the framework works for you rather than maybe against you or increases the likelihood or probability that you build a fast-loading website. And just as a specific case in point, at Next Insurance where I work, our landing page, our homepage, our marketing website, the landing pages, the homepage, the blog, etc., are all built on Next.js and all have fine scores. Especially
Yaroslav Lapin:
Can you share me a
Dan:
for…
Yaroslav Lapin:
URL and I will check?
Dan:
Yeah, especially Core Web Vitals. It's OK. Nothing to write home about, but it's OK. But what's really important is what you get with Core Web Vitals, which reflects the experience of your actual users. But yeah, it's also because they've hired me. Ha ha. And
Yaroslav Lapin:
Yeah,
Dan:
I
Yaroslav Lapin:
exactly.
Dan:
have.
Yaroslav Lapin:
I'm not saying that every Next.js website is slow and every Astro website is fast.
Dan:
No, no, I
Yaroslav Lapin:
I'm
Dan:
know
Yaroslav Lapin:
just
Dan:
it.
Yaroslav Lapin:
saying that the baseline or the average
Dan:
Yeah,
Yaroslav Lapin:
is going
Dan:
yeah,
Yaroslav Lapin:
to be different,
Dan:
yeah.
Yaroslav Lapin:
and
Dan:
Oh,
Yaroslav Lapin:
you can
Dan:
that's
Yaroslav Lapin:
quickly
Dan:
for sure.
Yaroslav Lapin:
see that.
Dan:
Yeah, that's the other thing that I definitely do mention at my talk is that the differences in probabilities can be pretty substantial. So yeah, your choice of framework definitely does have a potentially significant impact on the likelihood that you will build a fast website. But again, going to your choice, given that you're building on Astro,
Andrei:
Thanks for watching!
Dan:
Does that mean that by definition, the web application that I built is a multi-page application or an MPA? And if so, what are the consequences of that, if any?
Yaroslav Lapin:
Yeah, so the short answer is no. The long answer is that, as I was saying, that usually ends up in people building two apps, so one for landing and one for application. And they will use the, I forgot how they call it, but like Squarespace or something like that for a landing, just because it has completely different performance or even content management requirements. So it's going to be like just a different thing. So because Astro is much more flexible, you can build all kinds of app with it. And answering the like SPA question. So what we have on from promswithfriends.com, which is currently like our like example app that is showing off all the kind of like features that we have. On that app, we have kind of like distinct, three distinct applications. that are built in like in different ways so that we can showcase like how, well basically how Astro, what kind of answer Astro has for this question. So when you go to the landing page or you go to like setup page or eject page, those are like MPA pages. So when you click between them, you will see like the full loading spinner, all that stuff, full page navigation, all that stuff. But... Like they don't have any JavaScript. The only JavaScript that we have is like on setup and then check pages. That's like, it's like a bit nicer, like animation when you like come collapse or expand things. If you turn off your JavaScript, it will still continue working. That's kind of like this progressive enhancement kind of like story, right? So like here, if your application is really simple or you have like documentation website or something like that, you can use this approach. Next we have slash survey application. I don't think we have like links to it yet, but it's basically completely create react app, Veed style application. If you turn off your JavaScript, it's a blank page.
Dan:
Hmm.
Yaroslav Lapin:
That's kind of like, uh, that's what we use at FogBender by the way, like on FogBender, like landing page and our blog is in Astro, but our slash admin, uh, route is kind of like this, uh, Veed or create react app style application, but it's still through Astro. So.
Dan:
So
Yaroslav Lapin:
Uh-huh.
Dan:
roughly stating it, the parts of your website that are SEOed or
Yaroslav Lapin:
Uh huh.
Dan:
are indexed by search engines, those are
Yaroslav Lapin:
Yeah.
Dan:
mostly built to be able to function with or without JavaScript. They work mostly
Yaroslav Lapin:
Mm-hmm.
Dan:
as multi-page applications. But that part of your site that's really an app.
Yaroslav Lapin:
Mm-hmm.
Dan:
and probably requires authentication or stuff something like that. So
Yaroslav Lapin:
Yeah.
Dan:
it's not really relevant for search engines anyway. That part is built with JavaScript as a single page application.
Yaroslav Lapin:
Yeah, and
Charles Max Wood:
Mm-hmm.
Yaroslav Lapin:
I want to say that it's like a mix as well. So I mentioned like our landing, our survey, and we'll also have slash app. App is what I call remix architecture. So it's modeled kind of like after remix framework, and it's using remix router, which is like React router, right? And... It's a full blown kind of like SSR framework. So you will get initial rendering on the server. You can do like, hey, if user doesn't have a cookie, redirect him to login page. Like all of that stuff is built in. And that
Andrei:
Thanks
Yaroslav Lapin:
application
Andrei:
for watching!
Yaroslav Lapin:
itself has two parts. It has slash prompts, which is our like public, Andrea you probably should mute yourself. That is so nice.
Andrei:
Sorry.
Yaroslav Lapin:
There is like slash prompts, which is public and it's indexable by Google. It has like OG tags and all that stuff. And again, it's, it's done through this, like what I call a remix thing. And you have like a completely kind of like behind notifications slash app. And they use the same like remix router. So they like. when you go between pages, it will be single page application, client side navigation, kind of like navigation, without full page reload. So that's the answer of, yes, I know that Astro is only focusing on the content thing, but the tool itself is versatile. You can build any application on top of it.
Dan:
Yeah, and I also have to say that I kind of spoken about this with, I think with Fred as well from Astro and certainly with Ryan Corneato from Solid and also with Mishko from Quick and others. I don't like these distinctions so much at the end of the day. From my perspective, when people reach out for framework slash meta framework these days, you know, they might, more appropriate for certain things. But at the end of the day, you pretty much need to support everything. Because people, we like to say use the best tool for the job. But at the end of the day, there are just so many tools people can be really proficient with. So people tend to reuse the same tools for everything at the end of the day, from my experience at least.
Andrei:
I think there's a big business case to be made too for using something like Astra, which again, I actually I don't care, right? As long as it works. That's my approach. But I know that once
Dan:
That's a good approach.
Andrei:
I know that I know that the like the management and administration of two different websites is provides a huge overhead, right? And we've done this at our previous company. We had like our blog, which was the all of our lead gen was through. organic Google search, right? So it was a really important thing, but it was hosted on Ghost, like some server somewhere that we didn't even really know who has access. Like it was really difficult to manage. Certainly, certainly was not part of our code base, all those blog posts. I knew it was awful. It was truly awful. And then before we figured it out with Fogbender where we like, we now have a monorepo that has our blog, it has our app, it's all in one... repo, it's actually really easy to manage. We can kind of, you know, we have a single hash that kind of definitively determines what version this is. It was also difficult just from like access perspective, management perspective. So I think, I actually think as a small company with very few people, it's also much easier to host it all in one repo in one place. where you have one set of merge requests, you have the same set of users inside your version control, GitLab, GitHub, whatever. It's just been easy for us, I think, to manage a relatively complex thing. And again, we have something to compare it to. So that's my approach. Is this better? It's better. Great. Let's roll.
Dan:
Also, you don't want to silo your developers, especially when it's a small company. I mean, can you really afford to have like two developers that you can't, you know, that aren't interchangeable because each one of them is specialized like in a particular set of technologies and they only know how to work on their part of the overall thing. You know, that's really problematic
Andrei:
That's a huge
Dan:
from my experience.
Andrei:
part of it. Absolutely, absolutely.
Charles Max Wood:
Yeah, I think a lot of that though depends on how closely interchangeable some of this stuff is. And I have to say some of these, what did you call it Dan, a meta-meta framework?
Dan:
Yeah.
Charles Max Wood:
A lot of these that go together, we need a better term for it, but a lot of these what you wind up getting out of it, and I don't know if this is something that you all are doing, is you get something that looks a whole lot more like, hey, we've got integration points for all this stuff. So. at the end of the day, if you're doing the Astro stuff or the, uh, react stuff, right. Cause you include the both or whether you're doing, you know, something in this area or that area, you kind of pull things together so that for the most part, the Astro, if you squint at it, it looks a whole lot like the react and you make it easy so that, yeah, you may have people who are working in both arenas, but the crossover or the overhead. for knowing this stuff is a lot simpler.
Yaroslav Lapin:
Yeah, I wanted to go into a bit like this, the same kind of question about the backend because one other kind of decision that we made, right, is to use JavaScript on backend, which is not controversial like these days, but it used to be a much bigger deal.
Dan:
Well,
Charles Max Wood:
I'll
Dan:
it's
Charles Max Wood:
say it
Dan:
not
Charles Max Wood:
JavaScript back end. Ooh.
Dan:
Well, it's
Yaroslav Lapin:
Thank
Dan:
not
Yaroslav Lapin:
you.
Dan:
100% true though, is it? I mean, Astro isn't exactly a JavaScript backend, is it? I mean...
Yaroslav Lapin:
So we can go a bit into that. So the idea is that at FogBinder, for example, we don't have any JavaScript on the backend. We use Elixir. And this is again kind of like marketing thing. Like we could build B2B SASKit with Elixir backend, but the amount of people who are going to be excited about it and they will try it, it goes down dramatically, right? So this is,
Charles Max Wood:
Are you using
Yaroslav Lapin:
this,
Charles Max Wood:
Phoenix? Can I just
Yaroslav Lapin:
no.
Charles Max Wood:
ask? No.
Yaroslav Lapin:
No, we're
Charles Max Wood:
What are you using?
Yaroslav Lapin:
too old. We are like, we started with Erlang like more than 10 years ago. So like we only switched to Elixir because of like the kind of... Anyway,
Charles Max Wood:
There's
Yaroslav Lapin:
so
Charles Max Wood:
a lot to like there anyway.
Yaroslav Lapin:
yeah, I know. And exactly, like with something like that built like on only like Elixir, like Phoenix Live, you would that be cool? Yes, but it's a bit harder to find a hosting for it. It's harder to find people for it and all that stuff. So we have somewhere in our Eject Instructions, like, yeah, probably at the backend, if you're building a real app, probably the backend is the first thing to go, you will create a real backend.
Dan:
I don't like
Charles Max Wood:
I don't
Dan:
the
Charles Max Wood:
know,
Dan:
term real.
Charles Max Wood:
I-
Dan:
I don't
Yaroslav Lapin:
Hehehe
Dan:
like the term real back end, I have to tell you.
Charles Max Wood:
Well,
Yaroslav Lapin:
I'm joking, by the way.
Charles Max Wood:
I know a lot of people who have built really robust things on top of SuperBase or Firebase.
Yaroslav Lapin:
Yeah.
Andrei:
Yeah, I think eventually it runs into cost at the end of the day. And so
Charles Max Wood:
Yes,
Andrei:
it
Charles Max Wood:
that's usually,
Andrei:
really just,
Charles Max Wood:
yeah.
Dan:
Yeah.
Andrei:
it depends on scale. And also when it comes to concurrency, you know, if your app really needs concurrency, like messaging apps tend to, then you may win by using runtime that's kind of inherently designed for it. But you know, if it's like, prompts with friends? Does that need to run in an Erlang VM? No, it does not. Like there's really no reason to do it. I don't think.
Yaroslav Lapin:
Yeah, and I'm sorry.
Dan:
So for your back end, basically what you're saying is that you, again, given that it's based on Astro and React, you're kind of using Astro for the quote unquote more static stuff and React on the back end and front end for the quote unquote more dynamic stuff.
Yaroslav Lapin:
Yeah, so it's a really fun question to answer because there is no... It's not like React or Svelte, right? It's like, it's not, I'm using like one or the other. It's more like you can use React inside of Next.js or inside of Beat or inside of Astro. It's just kind of like a way for you to run it. build it or whatever. So like, it's, it's a, that's actually like why I'm personally like a fan of Astro because they didn't came up with the idea of like, we're going to compete with everyone in the green. They came out with like, we're going to collaborate with everyone in the beam. Right. So that's, that's like a big, that's a big difference compared to some, some other solutions, because you We actually have that like in docs somewhere like could you use something else instead of react? Sure, like just go ahead and like rewrite it and it will it will work the same We just very more comfortable with react. I think Like the benefits How they said like the benefits of something like solid which is like pretty close to what react does right? Benefits of Solite are on one hand, when you have like a static website that just needs one button. It's like, why am I sending, I forgot, like 77 kilobytes just zipped. I think like the minimum amount of like what you can send in Next.js. Why am I sending this amount of JavaScript for one button? It's like, yeah, just use like Preact or Svelte or Svelte or Solite or something like that for this kind of like thing. Or if you have really interactive application that's. has to show like 50,000 DOM nodes at the same time and everything has to be updated. It's like, yeah, that's where you like need to something more performant than React. But like for the most part, you're fine with React.
Dan:
Oh yeah, that's, I think that's React's winning slogan more or less. That for the most part, you're fine with React.
Yaroslav Lapin:
Yes, they should print it on t-shirt.
Dan:
Yeah. Also it has, you know, what has it, it has most going for it is that if you look at JavaScript frameworks and JavaScript framework, meta framework backends, then React is as big as all the rest combined, actually even more so. Uh, so, so yeah, and given that you're building on tools that, you know, should be popular tools, I definitely understand why you would pick react rather than something more, I don't know, opinionated, controversial, call it what you will, some other framework. You might make some developers really happy, but you'll probably shrink your addressable market.
Yaroslav Lapin:
Yeah, and we use solid by the way, like on the setup eject pages. We don't use like the whole solid, but we use some libraries from it. It's like, yes, it's like exactly the perfect kind of like trade offs kind of like for that page. So going back to your like idea of like, so how does dynamic parts work? So one of the things that we do is when you go to prompts.src and slash prompt and slash like some public prompt ID. this page is going to be generated on the server using both Astro and React to generate all the HTML that this page has, right? With all the prompt information, user information, all that stuff. And so is that page dynamic or static? It's generated like SSR. So this is another kind of like a split, I guess. Like another... another fork where you can go. And in Astro, it's pretty easy. For each route, you can set const prerender equals like true or false. And that page will be generated, will be stored as static HTML on your hosting and it will be like deployed through CDN like quickly. Or you can make it prerender true, oh sorry, false. and it will make sure that there is a server rendering happening for this exact user with this exact hooky and all that stuff. And it will return maybe a list of my prompts for this user from the server. So we have all of those hooks, all of those levers that you can pull again.
Dan:
Thanks for watching!
Charles Max Wood:
Mm-hmm.
Dan:
Yeah. Huh. Now you mentioned that portion also talks about the database. So I guess that's a good segue into asking you what you're using as what's your database of choice, really.
Yaroslav Lapin:
Yeah, so because our background of not using JavaScript on the backend, it was like a fun detour in like, okay, how do people live in that, right? Because if you're using your own server, which is like what Epic Stack, for example, does, they use FlyIO, which gives you like real server. So you can do like anything you want. You can host any database there. It's like a one world, right? If you use serverless, that's kind of like different limitations, you have problem of cold starts and all that stuff. So you can't use everything, you have to a bit narrow down. And if you deploy to edge, then it's like end. That's just like a few basic players in that area. So we picked what... felt like the most extensible way of doing it. Again, kind of like playing more into that flexibility. I'm sorry. So the idea is that we picked on a drizzle ORM, which is one of our risky bets, because it doesn't have version 1.0 yet. but it felt like a nice middle ground because it gives you all the type safety that you kind of like want from your ORM. So if you create like a user table and it has a name, that name is a string. You don't have to kind of like have as string 1000 times in your code base, it's like, it's already a string. And it has some kind of like migration story that allows you to have. Like one of the steps that you're doing when you're setting this up locally, you run migrations and it will set up everything for you and everything is going to work. We don't have you to click through all the databases if you selected something like Firebase, right? Because it's more like UI oriented or whatever, back end. And... The RISL ORM allows you to connect to anything. We decided that SuperBass is kind of like a good middle ground because it's not... How do I say it? It has a good serverless story, so you don't have to worry too much about how you're going to access it from like Vercell and all that stuff. And it's not limiting you in any way. So you're not losing anything in a sense. So they allow you to do all of the Postgres extensions or whatever they call it. So if you want to do machine learning or whatever, they have all of that stuff. But again, because we're just connecting as like database URL, you can change it for something else and it will work. So. Yes.
Dan:
Hmm.
Yaroslav Lapin:
I think there's like about SuperBase, there's a lot of kind of like, preconceived notions. And I just wanna kind of clear this a bit because SuperBase gives you everything. They have their own authentication, they have their own like file upload, like everything, right?
Charles Max Wood:
Mm-hmm.
Yaroslav Lapin:
And we only use database, basically database URL. That's the only thing that we ever touch in SuperBase. So we don't use like their SDK, we don't use their like... CLI, we use it pretty limited way. It doesn't mean that like someone who is using our kit, like will not use more because it's like, as again, we try to make it as flexible as possible. But for our use case, even for like, can I get a Postgres in the cloud? I think SuperBase is kind of like the best solution for that. At least how we look at it. Yeah. Yeah. Yeah, and I think people who think that we're building a website in Astro, they probably don't think about JRPG.
Dan:
Yeah, that's an interesting combination I have to say. It's not one that immediately comes to mind.
Yaroslav Lapin:
Yeah, so, so...
Dan:
Yeah, so a few thoughts about that. And there are my thoughts or opinions, and not necessarily fully coalesced. So you can take them or leave them. First of all, it feels to me like TRPC is, or pretty soon will be, a technology looking for a home, in a sense. Because most of the leading meta frameworks are going to have some sort of RPC solution baked in. So they'll not really be needing a third party one, maybe except for Astro, by the way. So that's an interesting combination, what you're having or you're using because it, yeah. If you're going to be using Next.js going forward, you're probably going to be using React Server components. If you're going to be using Quick or Solid, you're going to be using ServerDollar. It'll be interesting to see who will be using TRPC.
Yaroslav Lapin:
Just on that note, I think yesterday, two days ago, React Query published the new version with full React Server components support. So I'm not as afraid for those technologies to disappear. It's actually, yeah, speaking of React Server components, I have a lot of thoughts about it. And the easiest way to think about it is like... Did Redux completely disappear once we had use reducer hook? I was like, not really. It disappeared in a place where it didn't make sense. But that's kind of like the extent
Dan:
Oh yeah,
Yaroslav Lapin:
of it.
Dan:
technologies don't disappear,
Yaroslav Lapin:
Yeah.
Dan:
especially on the web. But I think you can argue merits and whether something is good, quote unquote, or bad, quote unquote. But in the long run, if you're going to be using React, then my guess is two or three years from now, when you start a new project, you you're going to be using React server components. Because if you're
Yaroslav Lapin:
Yes.
Dan:
not, then why are you using React?
Yaroslav Lapin:
Yes, and I think that's true, but that's in the same case as like, are you going to use hoops? Yes, you will. But does that mean that your project is 100% is not going to have redux? It doesn't necessarily
Dan:
Yeah,
Yaroslav Lapin:
mean that.
Dan:
but I don't see the, look, I can see the use, again, maybe it's me, but I can see the, I can kind of see the use case for React query even with React server components. I don't really see the use case for TRPC with React server components.
Yaroslav Lapin:
Yeah, so I completely kind of like share your like concern about this. And whenever you were picking up TRPC, the same kind of like thought occurred to me as well, but I think there are like few ways to look at it. So one is it's probably going to be there. It's going to be just like compatible with React-Sore components. And the other is, as you mentioned. Because Astro doesn't have React server components, they have their own server components. It's probably going to change even slower in Astro compared to
Dan:
Oh
Yaroslav Lapin:
like
Dan:
yeah,
Yaroslav Lapin:
Next.js.
Dan:
Astro has islands and that's something completely different. It's not so much about the data story. It's more about, you know, where, which, where you render stuff and when it's hydrated,
Yaroslav Lapin:
So
Dan:
I,
Yaroslav Lapin:
we use Astra for data storage. That's kind of like the point.
Dan:
Yeah. Cool. It's interesting.
Yaroslav Lapin:
So going back to TRPC, because this question is such a great question, I think the way to think TRPC is not like react replacement, it's like express replacement.
Dan:
Oh yeah, for
Yaroslav Lapin:
When
Dan:
sure.
Yaroslav Lapin:
you have express, you have all kinds of middleware and this is all of my routes that are here, this is all of the context that this request needs and all that stuff. This is what TRPC is solving. It allows you to structure your backend code in a way that is going to be safe. And then you can call that backend code from just like a plain API that you're like giving to some third party, like the same function. You can call it from your front end with like TRPC, or React, or Creative, or like library. Or you can call it from your backend. that will check all the same cookies that will check. So the point how we use TRPC in Astro is that we have the same procedure called from three different places, three different ways to show, here's how you do it completely client-side, here's how you do it during SSR, here's how you do it from remix loaders so that when you click on the page, It will not show up until the data from loader is there. And we do all of that through TRPC. So that's kind of like my bet on TRPC.
Dan:
Yeah, without going too deep, because it's probably a topic for an entire episode, and we only have a few minutes left, I think it's really interesting to see the web world kind of transitioning in a way from the approach of RESTful asynchronous APIs towards type synchronous APIs in the form of remote procedure calls or RPCs. And it's interesting. And there are several reasons why I think this is happening now. But I think, again, it's beyond the scope of this conversation.
Charles Max Wood:
Yep. In fact, I'm gonna take this opportunity to move us right into the next section of the show. This has been really interesting though, and I think a lot of times you talk about the little pieces, and so it's kind of interesting to talk about how the pieces kind of go together and how to think about pulling an app together. You know, whether you use B2B SaaSKit or something else, or kind of piece it together yourself. So this has been really, really cool just to be part of. But yeah, let's go ahead and do our picks. Dan, do you want to start us off with pics?
Dan:
Yes, so really I wanted to pick two TV shows. So it's a funny thing in the context of updating our home network infrastructure. We also switched some of our content providers and I got Disney Plus for a month or two, just as a tryout period. And I took the chance to watch a couple of shows. that I hadn't had the chance to watch before, specifically Loki and WandaVision and they were fun, not much more than that I liked Loki, I enjoyed WandaVision more I found, I don't know, again Loki was fun but And at a certain point, it got a bit messy and slightly repetitive. And in one division, I enjoyed more maybe the whole concept of building a TV show around TV shows from different eras really resonated with me. So I liked that part. And it also kind of segued then into that movie, what's it called, The Doctor Strange One. which was kind of fun. I do think that the Marvel Universe or whatever they call it is full of contradictions these days. It just doesn't make sense all the concepts together, but you know, it is what it is. So those two shows are my picks, you know, for what they are. I'm probably not going to leverage Disney Plus to watch the... various Star Wars stuff, it's just too much. And I just can't see myself trying to get into it all over again. But to be honest, we're probably going to let it lapse, you know, once that month or two are over. I don't see us renewing. And other than that, the ongoing war in Ukraine supports the Ukrainian people. and the ongoing fight for democracy in Israel, support the Israelis fighting to keep the country a democracy. And those are my picks for today.
Steve:
So Dan, is it fair to say that your opinion of the Loki show is that it's Loki disappointing?
Dan:
No, I don't think it's disappointing. I think that it's low-key pleasant.
Steve:
thought I'd ask.
Charles Max Wood:
I think there's a pun in there that I didn't quite pick up on.
Steve:
Low key, L-O-W-K-E-Y.
Charles Max Wood:
Oh, okay.
Dan:
Yeah, I also just, you know, could the guy in the movie just, he killed like dozens of people in New York. He's responsible for so many deaths and then all of a sudden he's a good guy. I mean, eh.
Steve:
Sounds like a John Wick movie.
Dan:
Yeah, with John Wick I can't help myself but think like why don't they just throw a grenade at him?
Steve:
He has one of those never-ending gun clips too, or magazines.
Charles Max Wood:
Ooh, I want one of those. All right,
Steve:
No
Charles Max Wood:
Steve,
Steve:
kidding.
Charles Max Wood:
what are your picks?
Steve:
So I found a pic that in my opinion is rather brilliant because it ties together Dan's past with a topic from today that came up early. And we were talking about meta frameworks, how you can just spin something up and it creates something for you. So TechCrunch found this on Hacker News, has an article about Wix's new tool can create entire websites from prompts. It apparently uses AI and you can go in and say,
Dan:
Yeah.
Steve:
it will let Wix users describe their intent and generate a website complete with the homepage, inner pages, and text and images, as well as business specific sections for events, bookings and more.
Dan:
Yeah,
Steve:
So.
Dan:
it's not surprising. And it's not also totally new either. Maybe they added a lot of new AI-based features to it, but they had tools that used that approach for a couple of years now. And they're also not the only ones doing it. But it kind of makes sense.
Steve:
Oh, I'm sure they're not.
Dan:
It kind of makes sense. I mean, machine learning, it's what it's all about. I mean, you can't describe a picture, and it draws a picture. So or paints a picture, whatever, generates a picture. But so why not the same with a website? And companies like Wix actually have an advantage because they own or manage a huge number of websites. And they know which ones work better and which ones don't. So if you want a web, so they have the vocabulary. They have the data that they can use to build the models from. That's what I'm trying to say.
Steve:
I just thought it was rather brilliant how it sort of tied multiple things together in one post. So I'll pat myself on the back for that. Okay, so for the dad jokes of the week, Yaroslav and Andre, I'm sorry to subject you to this, but it's my big thing. So a turtle was crossing the road and then he was assaulted by two snails. When the police asked him what happened, the shaken turtle just said, I don't know, man, it happened all so fast. So question of the day or a jack-handy type of thought for those who are familiar with Saturday Night Live. If a vegetarian eats vegetables, what do humanitarians eat?
Charles Max Wood:
That is a solid question.
Steve:
And it has a very solid question, tasty one. And then finally, my doctor told me that I was suffering from paranoia. Well, he didn't actually, but I could tell that's what he was thinking. Boy, I didn't even get a smile out of Dan. Either that or his screen's frozen. Anyway, those are my picks.
Charles Max Wood:
All right, AJ, what are your picks?
AJ:
So I just got one today. I just discovered this last night. There's a science woman whose name is Sabine and she has a science newsreel on YouTube where it's very Concise and easy to digest the sub the subtitle of the channel is science without all the gobbledygook and It turns out that she has a book called Lost in Math and the subtitle is basically something uh about how physics is going in the wrong direction and I and she has a video about is math real and the she makes a different point than I would make but she redefines what real means in order or at least gives a definition of what real means before starting to say it but she says that math is real the math that describes the observable world in ways that enables us to make predictions is real and math that does not fit that criteria cannot be considered real. And one point that she made that I thought was really, really interesting distinction is that among the real numbers, there's an infinite number of decimal places that you can have. But not all of those numbers are actually real numbers, because after a certain number of decimal places, the number cannot be used to describe an observation or make a prediction of something in the observable real world. So therefore the number is not real. And I thought that was such a good point. And she talks about how all of this stuff with super symmetry and the grand unified theory and all of it is essentially religion, not science, and that we need to get back to science. And I just I love what she's saying about that. And I'm looking forward to looking both listening more to her, her science newscasts, as well as learning more about her book. And I, man, I just thought she hit it spot on. We need, we need people to be recognizing to separate their religious views from their scientific views and, and honestly recognize, okay, this is a religious belief system. versus this is an observable fact or detail of the universe or the world.
Dan:
Yeah, that's really true. My dad, who's a practical physicist, would get upset with some theoretical physics theories that he would claim them as being more metaphysical than physical.
AJ:
Yeah, that's to be falsifiable in order for it to be considered science.
Charles Max Wood:
Cool. All right, I'm gonna jump in here and then we'll have our guests throw out some pics. So I'm gonna be fast. One thing, I keep getting people asking me about podcasting. I've actually been coaching some people about podcasting. So if you want me to walk you through the whole process of podcasting front to back, soup to nuts, I'm gonna be doing a three month podcast bootcamp. It's gonna be $2,500. Starts August 1st. If you're after that, you can still sign up. You just might have to do a little bit of catch up. And most of the stuff at the beginning is set up anyway, and so you can kinda hit that as you come upon the stuff. But some of the stuff like getting your artwork rolling and working with your artwork artists and stuff like that. The stuff that you have to start early so that you can have it when you're ready to release. So if you're a little behind on that, then you can just do all the other stuff. And then when you get it, then you can start releasing. So. It's not critical. It's just so that you can be releasing on the same timeframe as everybody else. So yeah, go to topendevs.com slash podcasting. It's probably actually going to take you to podcastplaybook.com, which is where I'm putting all the podcast stuff. But I'm going to have a section specifically for podcasts about programming and technology as part of that because I have some other friends who want to start podcasts that are not programmers and are not talking to programmers. Anyway, So if you're interested in any of that, let me know. Or just go to topendefs.com slash podcasting, like I said. And then the other picks I have. So a few weeks ago, we went to Disneyland. It seems like there was something like every dang week. And so we were at Disneyland and then 4th of July. And then I was on track, which is basically a reenactment of handcart pioneers that came to Utah. And it's something the church puts on. And so I was there with a bunch of teenage kids. Four of my kids actually went, but none of them were in my quote unquote family on that, and it was 95 degrees, so it was freaking hot. But yeah, so Disneyland was a ton of fun. I don't know if I made any picks related to that, so I'm just going to throw those out there real quick. And I know I didn't do a board game pick, but I didn't prep one, and I'm a little behind on that. So... The first one is the Genie Pass. So Genie Plus Pass, if you go to Disneyland, I highly recommend you get it. Yeah, we had seven people in our group, so it was a little bit expensive. But what it is before when you'd go, you could get fast passes for free. You can't get fast passes for free anymore. That's what Genie Plus is. The nice thing is, is you run it through your app. So you just use the app, you reserve your place in line, and then you show up and you scan the barcode on your phone. Or what I did is I'd scan seven barcodes on my phone. and then we'd all go through the fast line, right? And that was awesome. And it was a ton of fun. But the other thing is, is just for that, it's a little pricey, but the nice thing is, is it also includes the PhotoPass. And so the PhotoPass is, is you can stop any of the photographers that Disney has around the park and have them take your picture and you get all those high quality pictures for free. And it also includes access to, they have an AI, generated, it turns you into a villain or a hero or a character from the Disney movies. Right, so it just overlays on your face on your on the phone and you get that for free too and you can save all those pictures. And so we had a ton of fun with that so I'm going to pick that. One other thing that we did and this was while we were in line and it kind of depends on your group and you know what people are into but my kids are way into Harry Potter. We were at Disneyland. They like Star Wars, so all that stuff. There's an app called Heads Up, and you just hold your phone above your head, facing out toward whoever's playing with you, and then they give you clues without saying any part of the word to get you to guess the thing, right? And so we're in the line for like, Rise of the Resistance for an hour and a half, and so we were playing Heads Up the whole time, right? As long as I had battery, and as long as I actually carried one of those. battery packs in my pocket, right? So I'd plug it in when it was going dead. But that worked out great. My kids just loved playing that game. Now the Harry Potter pack and the Star Wars pack and the Disney parks pack and some of the other packs, I think I got for like 10 bucks. They just, so the app is free and it comes with like five packs and then as you pick it, as you get in, then it says, do you want these other 100 packs or 50 packs for 10 bucks? And that's where all those were. So it was a lot of fun. Some of the other packs are like TV shows like Friends or Seinfeld or something. And so if you're with a group where you're all big fans of those franchises, you can play those. So I guess that's sort of a game, but it's more of a party game than a board game. But that made it a ton of fun. And so we did that. And then the last pick I have just basically is down to the way things worked out. So we flew on Delta. And whenever Delta overbooks a flight, they'll actually start offering travel credit for you to postpone your flight. And while we were getting ready to fly out, they called me up on my phone and said, we had to switch airplanes and the airplane we switched to is smaller. So we need a lot of people to switch. So they gave us $300 per person to switch, which totaled to like $2,100 because my wife and I and our five kids. And so that worked out pretty nice. So my wife and I are now trying to figure out if we can make it to Italy on that. And
Steve:
luck
Charles Max Wood:
so
Steve:
with that.
Charles Max Wood:
anyway, it's pretty fun. It should cover most of the airfare. So the rest of it's just the travel while we're there. But I have the added benefit of speaking Italian fluently. So we'll figure that out and I can arrange some of that myself. But at the end of the day, yeah, it was a terrific trip and I highly, highly recommend it. If you're gonna go to get that Genie Plus Pass going to Disney and then yeah, be flexible. But yeah, those are my picks.
Steve:
So Chuck,
Charles Max Wood:
Yeah.
Steve:
one game I figured out, we figured out when I was at Disney World with my kids. And there were, you know. in line there like that and you got an hour to burn is we started airdrop bombing people around us, which is a ton of fun.
Charles Max Wood:
Hahaha
Steve:
So my son has these just tons of goofball pictures of dogs with weird looks on their faces and just all kinds of goofball stuff. And so we would start airdrop bombing people around us. And those are people that have iPhones with airdrop open, anybody outside their contacts. And pretty soon you start to see people looking around, who's doing this? Who's doing this? Who's photobombing me? And my son was so good that there was one group of people right next to us in line. And he would take pictures of them and air drop bomb them with their own pictures. And they still couldn't figure out who was doing it. It was so funny. And I got hooked on it. And they tell me to knock it off. But anytime I'm on a plane or in an airport, I start doing that with goofball pictures. And you see some people accept them and some people reject them. It's just, it's a lot of fun.
Charles Max Wood:
That
Steve:
So.
Charles Max Wood:
sounds fun. So you just changed the name of your phone to.
Steve:
Yeah, well, the name I have on my phone isn't like Steve's iPhone or something like that. It's a different so you'd have to really know who it is to know that it's me. But when it's people walking by in an airport at a gate or people that are stuck on a plane, it's funny. I don't go to the extremes. There was a news story I remember seeing us in the news probably three, four months ago about somebody on a plane that was doing that with nude pics or something and the pilot had to get on and
Charles Max Wood:
Uh
Steve:
say,
Charles Max Wood:
oh.
Steve:
well, whoever's doing that, please stop. So. I won't get in trouble
Charles Max Wood:
Yeah,
Steve:
like
Charles Max Wood:
that's
Steve:
that.
Charles Max Wood:
over the line, but.
Steve:
Yeah, that's a bit too far, but I keep it within the rules and it's good times.
Charles Max Wood:
That sounds like fun. All right, Jaroslav, what are your picks?
Yaroslav Lapin:
I have a lot, so. So first thing is that I recommend this book to anyone who is starting to learn programming and I read it when I was programming for like 10 or 15 years, so it's still a good book. It's called Programmer's Brain. The main kind of like takeaway for me is that a lot of programmers... think of programming as just like swimming. You just were thrown in a pool and you figure out how to do it. And this is more about like, how would you learn a language, right? So like here are like the actual kind of like science, how to learn programming. So I really enjoy that. It's called programmer's brain. And so speaking of Sabine, I think her name is like a physics YouTube. I have another physics YouTube recommendation. So the best way to search for it, if you just find, if you just search AI doesn't exist, but it will ruin everything anyway. So that's the last video she did. She's an astrophysicist, but she covers like different kind of like topics. And the last one was about the AI, which is very cool. The thumbnail has her dressed as a clown. So you will figure it out right away. So one other pick is that August 3rd, there's a remix meetup in Utah. So if you're in Utah, Charles, for example,
Charles Max Wood:
Mm-hmm.
Yaroslav Lapin:
you can join
Charles Max Wood:
So's AJ.
Yaroslav Lapin:
it. It's in Lehigh and you can find it on meetup.com. It's called like, I think it's called remix, remix Utah. Yeah. And If everything goes right, I should be presenting there and talking about the XR components so that could be fun. And yeah, speaking about like meta frameworks, the term that I want to coin is hyper frameworks. So.
Dan:
That's a good one.
Yaroslav Lapin:
Yeah, so speaking of Hyper, I want to plug HTMLX, which is a really kind of like a thing that's kind of like doing rounds on Twitter and like everywhere. It's a very... Very old take on very old problem. It used to be called intercooler.js. It was like a jQuery plugin to, which is kind of like, it's half of the like live view or live wire like that things. And it's competing kind of like with TurboLinks and all that stuff. But I think that the main idea is not like in the technology. It's more like just the way that you can think about the applications to build. So it's compatible with any framework you can write, like Astro, React, whatever you want, but it's more about how would you build a web application that is driven by the backend, which is LiveView is, I forgot who mentioned it before, but LiveView is a cool one, but requires you to buy into Elixir, and HTMLX is a lighter version
Dan:
So
Yaroslav Lapin:
of that.
Dan:
we actually had Carson Gross, who's the creator of HTMX, as a guest on JavaScript Jabber quite a while ago. I think it was episode 5.3 or something like that. So yeah, it's definitely a really cool project. I really like that approach, being really lightweight and HTML-centric rather than JavaScript-centric.
Yaroslav Lapin:
Yeah, and what happened is that, I think like yesterday, the guy who is doing a million JS, Aiden, he posted on Twitter or something like, hey, I created like a new integration with like React and it has like refs instead of like IDs. So it's like, I'm just curious to see like people trying it. And someone else on Twitter said like, hmm, I wonder if we can build like this in our framework and all that stuff. So I wonder if that... that's going to be like a thing that everyone kind of like wants to try. The same way how it happened with like Alpine Jest back in the day.
Dan:
Yeah.
Charles Max Wood:
Yeah, we also did an episode on MillionJS.
Dan:
very recently, yeah.
Yaroslav Lapin:
Yeah.
Charles Max Wood:
Yes.
Yaroslav Lapin:
Okay, end rate.
Charles Max Wood:
Awesome. Now one last thing, if people want to follow you online or connect with you over any of this stuff, where do they find you? Awesome. ABS
Yaroslav Lapin:
And
Charles Max Wood:
like
Yaroslav Lapin:
I mean.
Charles Max Wood:
anti-lock brake system. Now you know what I do in my spare time. Anyway, this was awesome. Thanks for coming.
Yaroslav Lapin:
Yeah, thanks.
Charles Max Wood:
All right, we'll wrap it up here. Till next time, Max out.
Steve:
Adios.
Dan:
Bye!