Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
0:06
This is JS Party,
0:09
your weekly celebration of JavaScript
0:11
and the web. The
0:13
software world moves fast. Keep up
0:16
the easy way with changelog news,
0:18
the only software newsletter that's also
0:20
a podcast. Sign up
0:22
today at changelog.com/news. Big thanks to
0:24
our partners at Fly. Launch your
0:27
app as close to your users
0:29
as possible. Fly makes it easy.
0:31
Learn how at fly.io. Okay,
0:34
it's party time y'all. What's
0:47
up friends and party people. I'm
0:49
here with my good friend over
0:52
at SpeakEasy founding engineer George Hadar.
0:54
SpeakEasy is the complete platform for
0:56
great API developer experience. They help
0:58
you produce SDKs, Terraform providers, docs,
1:01
and more. George take me on
1:03
a journey through this process. Help
1:05
me understand exactly what it takes
1:08
to generate an SDK for an
1:10
API at the quality level required
1:12
for good user experience, good dev
1:15
experience. The reality is the larger
1:17
your API becomes, the more you
1:19
want to support users that want
1:22
to use your API. To
1:24
do that, your instinct will be to ship
1:28
a library, a package, and what we've been
1:30
calling an SDK. There's a lot of effort
1:32
involved in taking an API that lives in
1:34
the world and creating a piece of software
1:36
that can talk to that API. Building
1:39
SDKs by hand is a significant investment
1:41
and a lot of large companies might
1:44
pour a lot of money into that
1:46
effort to create something that's
1:48
like approaches good developer
1:50
experience. Another group of
1:53
a more growing group of companies
1:56
will rely on tooling
1:58
by code generators. they're
2:00
very interested in like
2:02
once you make the decision to use a code
2:04
generator, you're kind of forfeiting some of your own
2:06
opinions and what you think a
2:08
good developer experiences because you're going to delegate
2:11
that to a code generator to give you
2:13
an SDK that you think
2:15
users will enjoy using. So
2:17
there's various open source tooling out there
2:19
that can do a version of what
2:22
you do. How much research have you all
2:24
put into doing it at a quality level
2:26
that is enterprise API ready? One
2:28
of the customers that we've spoken to didn't
2:31
have that experience. So they went to code
2:33
generators, they tried to point them at their
2:35
APIs and tell them give me an SDK
2:38
and the outcome wasn't great. Like it didn't
2:40
support some of the features in open API
2:42
or the code that it
2:45
was generating was not idiomatic type script.
2:47
We didn't boldly think we were going
2:50
to solve this better than everyone else.
2:52
The reality is that that's where we
2:55
came in. We surveyed all the things
2:57
that have happened in JavaScript over the
2:59
last few years, all the incredible projects
3:01
like for example and the web platform
3:03
APIs that are now like broadly supported
3:05
like the fetch API, the web streams
3:07
API. We kind of saw this and
3:10
said there's a great opportunity to mix
3:12
all these together and create the best
3:14
experience you can get out of a
3:16
code generator for users. Okay,
3:18
so paint a picture. What's a good
3:20
next step? What can people expect when
3:22
they go to speakeasyapi.dev? If
3:25
you're coming across SpeakEasy today and you want
3:27
to use it, you will go through the
3:29
onboarding flow and at some point, you're going
3:31
to give us an open API document. That's
3:34
your description of your API and we're going
3:36
to take that document and turn it into
3:38
an SDK of your choice. You're going to
3:41
get to pick which language is your first
3:43
language. That's the one you'll get for free.
3:45
And at that point, you can publish that
3:47
package to the world to use.
3:49
That's going to be yours. You
3:52
get to license that however you want and
3:54
then carry on from there. The way you
3:56
iterate now is you keep changing
3:58
your open API documents. So as
4:00
you develop your backend, you're going to
4:02
produce alongside that the open API document
4:04
with any updates over time and evolve
4:06
that. And as you're evolving that, we're
4:09
generating the SDKs and publishing them for
4:11
you. And that also
4:13
includes rich documentation that goes with them.
4:15
So we're asking you to put a
4:17
lot of effort just into describing your
4:19
API. And we're going to do a
4:22
lot of the heavy lifting that follows
4:24
from that. Okay, so as George mentioned,
4:26
go to speak easy API.dev. You
4:29
get your first SDK for free. So
4:32
cool. Once again, speak easy
4:34
API.dev. Hello, party people. Hello,
4:45
party people. I'm Jared,
4:49
your internet
4:54
friend.
5:00
And today, I hope not to bore you.
5:03
We will be talking about the
5:05
boring JavaScript stack
5:07
with Kelvin. Omar
5:09
Ashone, maybe
5:12
not a nine out of 10, like I just did
5:14
in pre-production, but maybe an eight out of 10 Kelvin.
5:17
Welcome to JS party. Thank you,
5:19
Jared. I'm really happy to be here.
5:21
I'm a big fan of the show.
5:23
So yeah, thank you for having me. You
5:25
bet. And for go ahead and
5:27
land a 10 out of 10 on that last
5:29
name, so everybody knows how you actually say it.
5:31
Yeah, for sure. So my name is Kelvin, Omar
5:33
Ashone. It's really African. So
5:36
I don't fault anyone for knowing how to
5:38
pronounce it. So that's why I go by
5:40
the initials KOO online because my last two
5:42
names, it's a nightmare to pronounce.
5:46
KOO, I like it. I
5:49
like it. And you have a big banner
5:51
on your Twitter slash
5:53
X profiles. Ship less
5:56
JavaScript, the boring
5:58
JS stack. You want to tell
6:01
us about this project and what
6:03
you're up to and why you think it's interesting. Yeah,
6:05
for sure. Thank you so much. First
6:07
of all, I started
6:09
building the boring stack way
6:12
before people now know it
6:15
as a boring stack. So I started working on it as
6:17
my answer to the very
6:20
shiny but not so
6:22
productive world of modern JavaScript full
6:24
stack web development. So at
6:26
the time I was building a platform called
6:29
salescales.com. I still work on the platform. It's
6:31
a place where I educate JavaScript developers that's
6:33
beautiful stack apps using the sales
6:35
framework or whatnot. So at the time
6:38
I was building the app with
6:40
like a sales API and a
6:42
Noxed SPA, which is like
6:44
a view meta framework. So the
6:46
promise I had from Node.js was
6:49
like using JavaScript across the stack,
6:51
more language, it makes everything really
6:53
faster. But having to have
6:55
the separation of concern with two repos,
6:58
that's two code bases, double routing
7:00
because I have to route in
7:02
view router, then I route in
7:04
my API. Don't get me started
7:06
with authentication nightmare because how
7:09
many people really invalidate
7:11
their JWT really well. So
7:14
I was doubting the whole promise
7:16
of SP. I was like, okay, yeah, this is good. And
7:19
especially when they are loading spinners where when
7:21
there is a page, for example, on
7:24
salescales.com is a cross-expage. The
7:26
page is useless without the courses
7:28
list. But with the
7:30
current status quo, I will have to have like
7:32
a loading spinner. Why do I
7:34
need a loading spinner? Why can't the page
7:36
just load with the courses because without the
7:39
courses, there is no courses page. But
7:41
that's the status quo of modern
7:43
SPAs, right? So I got dissatisfied
7:46
as I'm looking for alternative. I
7:48
found InertiaJS, which is this thing that
7:50
came out from the level of the world because of course, they
7:53
wanted to make out
7:55
the tool. John at Arrhenic had the same problem I have,
7:58
which is like I want to build a better. modern
8:00
SPS, but I don't want to sit with
8:02
API. Can't my backend drive
8:04
the SPA experience? And
8:07
that's what the Boring Stack is all about. It's where you
8:09
have this solid MVC
8:12
stable, predictable web framework,
8:14
and then you can bring in
8:16
your React, your Vue as well
8:18
as your pages. So you
8:20
get the SPA experience, your routing is on the
8:22
server, the data the page
8:25
needs come with the page. Each
8:27
time the users request the page,
8:29
so there's no loading spinners at
8:31
all. So in a nutshell,
8:33
that's what it is. There's other things that goes into it, but
8:35
that's just what it is. That's what it is. Cool,
8:39
so you mentioned Sales Casts
8:41
is your site, and Sales
8:43
JS is the node
8:45
framework. This goes way back. I remember sales
8:47
came out, was it 2011, 2012? I
8:50
mean, this has been around for a long
8:52
time. Yeah, very boring and stable. What's the
8:54
history of that project? Who
8:57
made it and how's it maintained? Tell
8:59
us more about sales, because I haven't heard
9:02
about it much lately. Yeah, and you're going
9:04
to be hearing more about it because of
9:06
yours truly. So
9:10
I came from a lot of PHP backgrounds.
9:13
So I can remember vividly one semester when
9:15
I was in uni. So we
9:17
had this break and I was like, you know what? I'm going to
9:19
learn to start web development with a
9:21
lot of PHP. It was
9:23
like my project for the break.
9:26
So I learned PHP, I learned Lava, I
9:28
really loved it. But over
9:30
time, I discovered that I liked JavaScript more. And
9:32
with Node.js, there was no need to use any
9:34
other language. I could just learn one language and
9:36
use it across the stack. So
9:39
at the time, Express was everyone's
9:41
favorite. It still is in terms
9:43
of low-level API stuff. But I
9:46
wanted the same Lava experience. I
9:48
looked around in the Node.js world, I found
9:51
a couple, I tried a couple, I found
9:53
Nest, not next, Nest. I found
9:55
Adonis. Then I found this
9:57
little obscure thing everybody deemed outdated. thing
10:00
called sales and I kind of
10:02
liked it because it was just
10:04
JavaScript. There was no magic. Everything
10:06
was just JavaScript. It spoke to me
10:09
and I was like, you know what?
10:11
I think I like this. I'll go with it.
10:13
So at the time I was a consultant on
10:15
a project to build their web service and I
10:17
picked sales for that project and I was so
10:19
fast in delivering everything.
10:22
So because of that, I formed a great love
10:24
for the project and then I started looking online
10:27
and no one was talking about it. I was like,
10:29
why is no one talking about it? And I saw
10:31
like, okay, people think it's outdated. It's still at one
10:33
point X and I was like,
10:36
okay, okay. Not if I can help
10:38
it. So I started writing about it. I created
10:40
Salesforce to come to teach it. I created
10:42
a community, Salesforce community on Discord
10:44
to help people with the problems and
10:46
all that. So I was doing this on
10:48
my own. Then Mike McNeil,
10:50
who is the creator of Sales, noticed
10:53
the work I was doing and
10:55
over the years we started talking. And
10:58
fun fact, he actually pushed a
11:00
gig one time my way, which
11:03
was very lucrative in terms of money because
11:05
these folks wanted to build like a sales
11:08
powered web app
11:10
because he didn't have the time and everything pushed it my
11:12
way because of the work I've been doing. Then
11:14
I also organized Salesforce. I've done it for three years.
11:16
This will be the fourth year. This will be the first
11:19
ever physical one, which I'm excited about. And
11:21
last year Salesforce, Mike McNeil announced
11:23
me as the lead maintainer. So I'm calling it the
11:25
lead maintainer of the project. People
11:28
could have more trust because the
11:30
project powered the boring stack and it powers
11:33
two of my products already, salesforce.com and Hackfish,
11:35
which is one I just launched. And
11:38
it may or may not have something to do with
11:40
another secret project I'm working on, which I couldn't name
11:42
Project 50. So
11:44
yeah, it's very, very much alive. People use it.
11:47
Fun fact, Postman uses it. Paystack, which
11:49
is like the stripe of Africa, uses
11:51
it as well. And
11:53
I know a lot of companies who have
11:55
taken it off, who have been using it
11:57
for decades, even in Europe and elsewhere, even
11:59
banks. an airline, it's just
12:01
being used and it's calm and it's boring.
12:04
So people don't talk about it much, but my job
12:06
is to make sure that people talk about it much.
12:11
Okay. I like it.
12:13
I like it. So you found it, you liked
12:15
it, it spoke to you. It was
12:17
a small community. It was a long
12:20
standing, boring project. As you said that
12:23
it didn't have much magic, but all the
12:25
things that you need to build your projects
12:27
and you slowly started contributing and eventually now
12:29
you are lead maintainer of
12:31
SalesJS from which you
12:33
build on top of for the boring stack and
12:35
you're building products on top of this. You mentioned
12:38
Hagfish, real quickly
12:40
mentioned what that is and what
12:42
you're up to with that. So hagfish.io is
12:44
because, you know, right now I work full time
12:47
for myself. I don't have a nine to five
12:49
job. I'm a full time indie hacker entrepreneur. And
12:52
before now I've always, I
12:54
do a show called TQIT. So I have a lot
12:56
of ways where I need invoices. And
12:58
I also have a lot of ways where people send me
13:00
invoices because I hire contractors from all over the place. So
13:03
I always wanted a way to manage it. So
13:05
Hagfish is my, I know there are other platforms
13:07
out there, but it's the way
13:09
I want to work in terms of like, you know, if
13:12
I have to send invoices before, okay, I go to Google
13:14
docs, create the invoice in your doc, as
13:16
well as PDF, go to my email clients,
13:18
send emails, and then I don't know where
13:20
the invoice is anymore. But with
13:22
Hagfish, I get to see this one place
13:24
where I get to send my invoices and manage
13:27
them. And I automate the email and you
13:29
can send emails, your invoices as emails. You're
13:31
going to attach the PDF as well, which is
13:33
very important. And I have so much plans for
13:35
it, but for right now it's just an invoice
13:37
platform. And yeah, I've been
13:40
using it. I use it a lot. People also
13:42
send me invoices through the platform as well. And
13:44
it's all built with the Boring Stack. So it's
13:46
fun. That's cool. So what's
13:48
your primary income there? So you're,
13:50
you live in Nigeria, you are
13:52
full time indie hacker, making products,
13:55
invoicing people, how do you make your living? Yeah.
13:58
So a couple of ways. Currently
14:00
the most lucrative way is the partnership
14:02
I've had for Project 50. So
14:05
online I announced that I partnered
14:07
with Century and also Render
14:10
for the project. So their partners in
14:12
terms of like Century is the APM
14:14
partner Render is a company I've used
14:17
for years for deployment. So all my
14:19
products are deployed on Render. So
14:21
it's a really good for them to come on board for
14:23
Project 50. They know what the project is, but the rest of
14:25
the world don't until July 3rd. It's going to kind of make
14:28
it secret. So that
14:30
has been very, very good in terms of
14:32
like, you know, income. And the
14:34
idea is because salesguys.com, I sell courses
14:36
there. So the idea is to grow
14:39
that as well and also see how
14:41
Project 50 is a good bet. I
14:44
think, and of course, Century and
14:46
Render also think so that's why they are partners.
14:48
It's going to really turn out really, really well.
14:50
And apart from that, I have TKYT sponsorship. TKYT
14:53
is my show, Teach, Go, Win, Your Thing on
14:55
YouTube, where I get people to come teach me
14:57
what they built or they're working on for like
14:59
an hour. That also gets sponsorship. In fact, when
15:01
I decided not to do 9 to 5, that
15:04
kept the light on for like
15:06
months before Project 50 kicked in.
15:09
So it's more of like subscription
15:11
to my products, TKYT sponsorships and
15:14
whatever way for your 50 is
15:16
going to bring in constraints. Yeah. That's cool.
15:37
What's up friends and party
15:39
people? I'm talking to you
15:41
today about our friends over
15:43
at Clerk, the complete suite
15:45
of embeddable UIs, the full
15:47
on most comprehensive user management
15:50
platform. If you're using React
15:52
or Next. Yes, Clerk is
15:54
perfect for you. In embeddable
15:56
UIs, flexible APIs, and admin
15:58
dashboards to authenticate. and
16:00
manage your users. And I'm here with
16:02
Clerk CEO, Colin S and
16:54
it's great. Right? Like, and we
16:56
had a question of like, why, like, why
16:59
didn't that exist for Auth really? And so
17:01
for Clerk, you drop in our components and
17:03
it's really just a complete like end-to-end experience
17:05
right out of the box with that
17:07
high degree of polish, high degree of professionalism
17:10
that I think users have really come
17:12
to expect these days. Okay. So
17:14
easy to drop in components. Really
17:16
beautiful UI, by the way. I love it.
17:19
Very nice. Clerk must be the most welcomed
17:21
easy button when it comes to authentication, good
17:23
UI, and all that, right? One of the
17:25
most striking things is still to this day,
17:27
I think Clerk might be the only Auth
17:30
solution that comes with a user profile screen.
17:32
And it's so insane to think about because
17:34
you need the user profile screen because that's
17:36
where the user goes and they self-serve to
17:39
set up to a and
17:41
it ties back into the sign-in. And so
17:43
it's like we had to do that to
17:45
be able to offer that experience. But it's
17:48
so bizarre to us. Auth depends so much
17:50
on the user profile yet most Auth solutions
17:52
don't include it. And it's just this weird
17:54
bizarre thing that never made sense to us.
17:56
And so approaching it from first principles, we
17:59
have it. out of the box. Very
18:01
cool. So Pixel Perfect UIs, embedded
18:03
in Minutes, React, or Next.js. This
18:05
is the easy button for you.
18:07
Clerk is perfect for you. It
18:10
is a full-on comprehensive user management
18:12
platform with, as I said, beautiful
18:14
UI. Best of all, they have
18:16
pricing that scales with you. They
18:18
have a phenomenal free tier. 10,000
18:22
monthly active users for free. Plus, when
18:24
you scale to a paid plan, they
18:27
have first day free. This means you
18:29
won't be tired for users who sign up
18:31
and never return. So that's phenomenal.
18:33
Every feature you need now, and
18:35
as you scale, get
18:37
started at clerk.com. That's
18:40
c-l-e-r-k.com. Once again, clerk.com.
19:01
So Project 50, you've been working on it, but
19:03
it's not out yet. You said it comes out in
19:05
July, so you're not gonna talk about what it is. But
19:07
it's in partnership with Sentry and Render, is that what
19:09
you said? Yes. How did that come together? That seems
19:11
like a motley crew of people. Yeah,
19:14
so I got the idea for the project, and
19:18
first of all, I use Render, right? So that means
19:20
I have like, you know, the Render API,
19:22
and I use Render. And then I use Sentry,
19:24
and I use Render. So when I got the
19:27
idea for Project 50, I found a way for
19:29
them to partner. I reached out to
19:31
them, made an offer, and the same thing
19:33
I did for Sentry. I even have another partner on board
19:35
base. I don't know if you know them. They are like
19:37
security infrastructure, or like making sure all
19:39
your secrets are secure and all what not. So
19:42
they are the third partners, right? They
19:44
may or may not be two other partners, which I will
19:46
announce, may or may not announce later on. But I will
19:48
just say that I told them the vision of the project,
19:50
what is going to happen, and then I told them, I'm
19:52
gonna make a new project, and then I'm gonna make a
19:54
new partner. So I told them the vision of the project,
19:56
what it's gonna be about. partners
20:00
are subsidizing what I was supposed to charge for
20:02
the projects. Cool. Yeah.
20:06
How do you pitch that to them? Like, hey, I got an
20:08
idea. It's going to make money. It's going to be awesome. You
20:10
should sponsor me to build this. I mean, I think a lot
20:12
of people would love to have that set up, but you've got
20:14
it. How'd you get it? Yeah, I
20:17
don't. So it's so let's just
20:19
say, first of all, I never
20:21
knew they would go for it. Okay. I
20:24
wanted them to go for it, but it was so novel. There was nothing to
20:26
eat though. It's the premium vaporware
20:28
because there's nothing to paint for.
20:31
But I have a sizable
20:34
reputation online. So
20:37
I have a, I think my work already
20:39
kind of spoke for me in terms
20:42
of, okay, you could trust this person. Right.
20:45
And then I was like, so I was banking on that.
20:48
And of course I want Project 50 to be successful
20:50
because it's going to be one of
20:52
my biggest income stream if it works. So I
20:54
gave them the pitch. The offer was, I
20:57
think for them to go for it, it was too
20:59
good. They couldn't say no, because
21:01
they don't have any, probably don't have too much
21:03
of a downside because it's going to be like
21:05
more marketing for them. And the way I'm going
21:08
to, you know, do any partnership works, but
21:10
partially it's a good marketing spend. All
21:13
right. So that was just it. I just,
21:16
I just threw a hole in me, I
21:18
guess. And the universe
21:20
caught it. Yeah.
21:24
Well, there's an old saying that says you have
21:26
not because you ask not. And it sounds like
21:28
you have because you ask. Oh yeah. And
21:31
I'm excited. I mean, you got me intrigued. I
21:33
want to know what Project 50 is. I
21:35
want you to come back in July and
21:37
let me know because this is
21:39
very, very interesting. But this is too exciting.
21:41
We need to get more boring. Let's go back
21:44
to boring JavaScript stack.
21:47
Okay. Give people the
21:49
sales pitch for Sales JS
21:51
because you're all in on this and you love
21:53
it. I heard the very little magic
21:55
part, but why would somebody else maybe
21:58
consider using sales as a basis
22:00
for their web app? Yeah, for
22:03
sure. So primarily, good software, good
22:05
technology stay in the background and
22:07
just let you be awesome. So
22:11
what sales have been able to do for me is
22:13
to stay in the background and let
22:15
me just focus on my business logic.
22:17
With technologies today, with the other competitors
22:19
out there, I know it's a lot
22:21
of pain because I've seen people move from
22:23
the other way to the boring
22:26
stack. You know, like just the other
22:28
day I was embodying someone from like next
22:30
to the boring stack because it just, it
22:32
works. Like what I've been yelling for anyone
22:34
who uses it is that it's predictable. And
22:37
that's what good software is to me because
22:39
our life's already hard when we have to
22:41
solve these different problems in our business domain.
22:44
You don't want to be solving frameworks problems because
22:46
the framework is supposed to make your life easy.
22:48
So when you have to find the framework and
22:50
the mental model don't work for you, you have
22:52
to always guess if it's going to work. That
22:54
don't work for me. So sales is just boring.
22:57
Like anytime I'm writing sales, I'm writing JavaScript
22:59
and it's just behind. I know the whole
23:01
thing, which part is sales, which part is
23:03
not sales? It's all JavaScript. So for the
23:06
longest time I've worked with sales, it has
23:08
made me a better JavaScript developer. All
23:10
right, so if you want a robust
23:13
MVC framework that will let you build
23:15
full stack apps, you definitely
23:17
have to use sales for your
23:19
back end. Right? And
23:22
with the way the boring stack is set up, if you want
23:24
to build full stack application, it's a no brainer because with
23:26
the boring stack, you are 90%
23:28
of the time in Vue React or Velt, which is where most
23:30
people want to be like your UI, then
23:32
for your back end, all you are doing
23:35
is sending queries, doing back end business logic,
23:37
you're also taking care of your authorization and
23:39
authentication or in the back end. It's just
23:42
that, except you are being paid
23:44
by the hour, you
23:46
don't have any reason to not use
23:49
sales because it just gonna let you
23:51
not spend the whole time you spend
23:53
debugging framework stuff. It's just
23:55
stable. Love it, love it. Unless
23:57
you get paid by the hour, in
23:59
which case maybe. you wanna go slow. If
24:01
you wanna go fast, go boring. Go
24:03
sales. I think that's a
24:05
very good sales pitch. I'll stop now with
24:08
my puns. But let's break down the boring
24:10
stack again. You mentioned at the top, let's
24:12
go piece by piece. So you start with
24:14
sales and then you add inertia, which you
24:16
mentioned a little bit. Then there's tail wind
24:18
and then you kinda pick your front end
24:21
framework or view library, view, react, spelt, et
24:23
cetera. Can you talk through each component? We've
24:25
covered sales but inertia, how it works, what
24:27
part does it bring to the stack and
24:29
why do you think it's boring enough for
24:31
your boring stack? Yeah, for sure. So
24:33
inertia is more like a protocol. In fact, you
24:35
won't even notice it there. So
24:38
it's like swapping your routing, your
24:40
react router, your view router with
24:42
inertia. All right, so
24:44
it uses HTTP with a lot of
24:46
headers. In fact, you can really
24:49
implement an adapter for both the back end and the
24:51
front end, but there's already adapters for the front
24:53
ends, right? So I hired to build an adapter
24:55
for sales, which work really, really
24:57
well. So it's a tiny layer that lets
24:59
you, so when you click a link, like
25:02
an initial link, right? Normally it's supposed to
25:04
be a full page request and refresh
25:07
and stuff. So when you click the
25:09
link, inertia will hijack that click, for example, and
25:12
make an Ajax request to the back end.
25:14
The back end already understand how to interpret
25:16
this. So when it says that, okay, whoa,
25:18
this is an initial request, it's going to
25:20
send the name of the component, which
25:23
is the page you're navigating
25:25
to, right? So it's that
25:27
layer that glues the back end on the
25:29
front end in one code base that makes
25:32
it redundant to have like a separate client
25:34
side routing and a separate server side routing.
25:37
Yeah, it is just mind blowing. It's a
25:39
simple tech. It is so boring because in a
25:41
lot of other world, there's this talk of, okay,
25:43
should we use inertia or live wire? It's
25:46
not an approach to approach comparison because
25:48
inertia is just boring. It
25:50
is, anyone could write the
25:52
back end adapter. It's that simple, right?
25:55
But all it asks is this glue.
25:57
That's okay. Let me have my SP
25:59
experience. but let my server side controls all
26:01
the business logic. So when
26:04
you need a page, it's going to
26:06
send the name of the component
26:08
of the page and also the data the page
26:10
need as props, which is brilliant use of the
26:12
prop interface. So anytime the page
26:15
loads, it loads with the data. So
26:17
no more loading spinners as
26:19
all gone. No more flash
26:21
of on style or authenticated content
26:23
because like I've always said in
26:26
examples, you visit this website where
26:28
you logged in, right? Because everything
26:30
is done client side, you set the sign
26:32
in and login or sign up button.
26:35
Even though you're logging in for like two seconds
26:37
before the JavaScript kicks in, you
26:39
then see that, oh, this is my
26:41
avatar, right? But with Inertia, you don't
26:43
see that because the page is authenticated in
26:46
the server side. So it's always going to call me
26:48
in the state as it's supposed to be. It's just
26:51
mind blowing and simple. That's
26:53
very cool. I had not heard
26:55
of Inertia JS. So this is
26:57
built for Laravel in the
26:59
PHP world, but it's generic. And so you can
27:01
basically adapt it to sales, which is what you
27:03
have done for your boring stack, right? That's
27:06
what I've done. Love it. Love it. OK,
27:08
you picked Tailwind as well. We talk about
27:10
Tailwind a lot. So
27:13
not so much that's new there, probably for me
27:15
and for the listener. But maybe why
27:17
did you pick Tailwind? And is this the
27:20
kind of thing that you could maybe ignore
27:22
or swap out if you don't want that
27:24
particular aspect of the stack? Yeah,
27:26
for sure. Definitely. So if
27:29
you really want to build a
27:31
stable web application, you don't
27:33
want the gymnastics of maintaining CSS.
27:36
Because when I started using Tailwind,
27:39
I was like, where has this been all my
27:41
life? First of all, I hated it because what
27:43
is this monstrosity with all the claimed classes? But
27:46
when you get in the flow and the groove, you'll be
27:48
like, this should be the way we build
27:50
websites, like styling, right? So
27:52
I picked it because it was
27:54
just stable. So
27:57
the stack comes with the Win already set up. Just.
28:00
go put them classes in there. And you all
28:02
go in, so you don't have to maintain it.css
28:04
file or do less or size or whatever you
28:06
want to do or CSS in JS. But the
28:08
cool thing is, if you don't want that, everything
28:11
in the stack, except for sales,
28:13
is swappable. So if you don't want to view, use
28:16
React as well. If you don't want to tell, you
28:18
do whatever you want for your styling. But
28:20
by default, we have opinion. I
28:22
have opinion on how you style CSS, because,
28:24
like I said, just have you being paid
28:27
by the hour. Why wouldn't you
28:29
use Tailwind? I just move fast, because it's
28:31
just literally classes. And most
28:34
people like it. So most people that are like
28:36
me, that like Tailwind, would definitely feel right at
28:38
home with the stack out of the box. But
28:40
you can swap it if you want, because the
28:42
code is all yours, anyway. Are
28:44
there any open source, boring
28:46
stack, web apps that people
28:48
can go read through and see exactly how
28:51
one works? For sure. So
28:53
the way the boring stack works
28:55
is that I provide templates. So
28:57
for now, we have the MeLu template. So because unlike
29:00
most frameworks, I don't
29:03
feel that when someone scaffolds a
29:05
project in JavaScript land, we
29:07
see a counter. I don't think that's
29:09
very good use of our
29:11
time. Because in other ecosystems, you get
29:13
like a full blown authentication, like authenticated
29:16
app. You have models in there
29:19
and everything. So we have templates
29:22
in the boring stack. So when you want MPS create
29:24
sales, the project name, dash, dash,
29:26
dash, view, you will see, you
29:28
will get a full template. So
29:31
if you choose view for today, the
29:33
view template is more up to date
29:35
react. I'm still here to get to
29:37
like, you know, but you get like
29:39
a react based boring stack app, but
29:41
you won't get the auth yet until
29:43
I work on it. So let's assume
29:45
you're using view, you get authentication, authorization,
29:47
and also auth with Google. So
29:50
if you want to look at the app right now, you
29:52
just look at the MeLu view template, which
29:54
is on the boring stack repository. That would be
29:57
get other cons slash sales cache, HQ slash boring
29:59
stack. Then. templates that you see all the
30:01
templates. They're all real code that you could read.
30:03
I will understand how the stack works. What
30:06
about deploying a boring stack app? What
30:08
does that look like? Oh, it is.
30:10
Anywhere you could run node app.js, literally,
30:12
you could deploy there. So I have
30:15
people deploying of EPSs. I
30:17
personally deploy render, so the docs you see,
30:19
render, deploy. So I want to work on
30:21
more. So anywhere you
30:23
could run node app.js, literally, I'm not
30:25
even kidding. You could deploy the
30:27
boring stack app. So I'm thinking that's
30:29
almost like every hosting provider out there
30:31
that supports node.js. So wherever you want
30:33
to deploy is so simple. Because
30:36
sales is that simple, there's no
30:38
much orchestration needed. Just node app.js,
30:40
your app is live in
30:43
wherever you're deploying. What about Mac
30:45
and database connections, etc? Yeah, thank
30:47
you. I love that. So in
30:49
the boring stack, we use sales,
30:51
of course. And sales has
30:55
an ORM waterline, which is superb. I don't
30:57
know why we don't talk about it enough.
31:00
So it's a first party ORM in
31:02
sales, which lets you connect to any
31:04
database. You want MongoDB, Postgres, MySQL. I'm
31:06
working on a SQLite adapter, which I'm
31:08
going to reveal at your sconf anyways
31:11
next month. So for
31:14
database, in fact, one cool
31:16
thing is if you scaffold a new
31:18
boring stack app, sales
31:20
is very pragmatic, because we
31:23
don't have an opinion on what database issues.
31:25
I think database are too personal to be
31:27
like, okay, in this stack, we use SQLite
31:29
or in that stack, we use Postgres. No,
31:31
no, no, no, you don't have, you cannot
31:33
decide the data, the data need of a
31:35
project. So because of the
31:37
way waterline is, you could easily start
31:39
a boring stack app. And don't worry
31:41
about the database until you have to.
31:43
So we ship with something called sales
31:46
disk, which will act
31:48
like this development only
31:50
database layer, you use your
31:52
waterline query as default.
31:55
So you could use user dot find or
31:57
user dot create or whatever. When
32:00
it comes time for you to have real production
32:02
data, you just have to change one config, give
32:04
it the database adapter and the URL of
32:07
your database, and all your queries still the
32:09
same, and buffs your on code, you
32:11
just go. And one cool thing
32:13
I like is you could have
32:15
different models use different database in one sales.
32:18
I haven't had to do that, I had to do that just once
32:20
in a client's project, but if that's what
32:22
you want, you're like, okay, maybe my
32:25
users table, let it be on Postgres, my
32:28
older table should be on MongoDB for whatever reason.
32:30
Sales is that flexible, it
32:33
can handle it, it's just
32:35
beautiful to see. This
32:42
is a changelog news break. YouTuber,
32:45
Internet of Bugs, posted a
32:47
lengthy breakdown exposing Devon's creators,
32:49
Cognition Labs, for falsifying claims
32:52
about their world's first AI
32:54
software engineer. Devon was pitched
32:56
as a fully autonomous software
32:59
developer, and one of the
33:01
more impressive demos showed it
33:03
completing and getting paid for
33:05
freelance jobs on Upwork. Sound
33:08
too good to be true? It did
33:10
to Internet of Bugs, who says, quote,
33:13
I broke down the Devon Upwork video
33:15
frame by frame, and here I show
33:17
what Devon was supposed to do, what
33:19
it actually managed to do instead, and
33:21
how bad a job of that it
33:23
did. On the whole, that's
33:25
not surprising given the current state of generative
33:27
AI, and I wouldn't be bothering to debunk
33:30
it, except, one, the company lied
33:32
about what Devon could do in the video
33:34
description, and two, a
33:36
lot of people uncritically parroted the lie
33:38
all over the Internet, and three, that
33:41
caused a lot of non-technical people to
33:43
believe that AI might replace programmers soon,
33:45
end quote. Devon really did
33:47
garner a lot of attention, also known
33:49
as money, because of that demo. We
33:51
talked about it on our shows with
33:53
a healthy amount of skepticism, I think,
33:55
but I'm thankful their claims have been
33:57
debunked, and I hope we all give
33:59
cognition labs, the side-eye from here on out.
34:02
Exaggerating your development capabilities? Maybe
34:04
Devin really is human after
34:06
all. You just
34:09
heard one of our five
34:11
top stories from Monday's changelog
34:13
news. Subscribe to the podcast
34:15
to get all of the
34:17
week's top stories and pop
34:19
your email address in at
34:21
changelog.com/news to also receive our
34:23
free companion email with even
34:25
more developer news worth your
34:27
attention. Once again, that's changelog.com/news.
34:34
Why do you think sales isn't more popular than it
34:36
is? Like, why do you think that people don't use
34:39
it all that often? So two
34:41
things. One, I think it's
34:43
more of like a marketing thing, right? So
34:45
in tech Twitter, in the tech space, it's
34:47
all about the loud air, it's all about,
34:50
you know, we went to more conferences and
34:52
all that. Mike McNeil, currently
34:54
is the CEO of Fleet Device Management. So
34:56
he definitely has his hands filled with working
34:59
there, right? I'll be in the CEO, right? So that's
35:01
why I come in. So for
35:03
the longest time, Mike, definitely not interested
35:05
in what's shining or
35:08
popular, but I'm interested in because I think
35:10
the project deserves all the flowers. Right? So
35:12
the reason why it's not a popular, probably
35:14
because I haven't stepped in the same for
35:16
a while, because like I said, Mike is
35:18
just, Mike, so anytime we speak, he always
35:21
say like, you know, sales is the only
35:23
way it can build full stack JavaScript
35:26
application. And he's not the only one who
35:28
thinks so. Like I said, there are lots of companies. In
35:31
fact, just the other day, I
35:33
found out an Nigerian company who is using
35:35
sales, they are doing up to
35:38
72 billion Naira internal transaction,
35:40
they're like a fintech company per
35:42
month, using this boring
35:45
stuff. And they just casually told me about
35:47
it. And they said that they
35:49
wouldn't move, they wouldn't have moved faster if it
35:51
wasn't for sales. But oh, really? So
35:54
it's all about shiny. It's all about to know
35:56
who's the loudest out there. So that's why I'm
35:58
coming to help it. Because I think that's the
36:00
only thing piece when I talk about it and get more
36:02
people excited about it and really
36:05
get the word out there because the tech is
36:07
too good. And one thing that
36:09
always blows my mind, we are at 1.x in sales.
36:13
And I could tell you for free
36:15
that we are feature priority with any
36:18
other framework out there. I'm
36:20
not even kidding. But we're still at
36:22
1.x to tell you how stable because stability
36:25
is at the core of sales. Stability is
36:27
what Mike wanted. So at 1.x,
36:29
just think about what will happen if we are
36:31
too serious for. I
36:34
actually dream of those days. I can tell.
36:37
I can tell you're very into this. You do
36:39
a good job of being an advocate
36:41
for both sales and for this
36:43
combination of tooling. Where
36:46
do you see this going? I mean, if you cast
36:48
forward your efforts now, go a year,
36:50
two years, five years down the road,
36:52
what do you see in the boring
36:54
stack and sales feature? So I
36:56
see more adoption because I am very
36:58
entrepreneurial. In fact, I have something called
37:00
the African Indie Hackers Project
37:03
I'm working on, which is encouraging more people to build
37:05
products on the web and get paid for
37:07
it. So I get to see more people,
37:09
more indie hackers using sales and the boring
37:12
stack because it's just a
37:14
no-brainer because I've seen it both
37:16
ways. So even more enterprise companies
37:18
using sales because it's really the boring
37:20
stack. And of course sales, if you just want
37:22
back end. So I see more people
37:25
knowing about it and more people picking
37:27
it up as a no-brainer and as
37:29
a very modern
37:31
replacement for demand
37:33
stock or MongoDB Express
37:35
reaction. Anyone
37:38
using Express or demand stack
37:40
have no reason not to
37:42
use the boring stack. And
37:45
from what I've seen, more people
37:48
that are tired of the complexity of modern
37:50
web dev from things like next year's will
37:52
be coming to sale because like I said, people are already coming. Like
37:56
I have someone who was building their first product, they
37:58
were working with next year. They were
38:00
so frustrated and he's be able to do it. I got to
38:03
try the boring stuff. They set it up in a
38:05
day. Everything they've been building on, and they set it up
38:07
in a day, and it was
38:09
a little night and day difference for them,
38:11
and they loved it so much. So I
38:13
get to see people who want simplicity, because
38:15
I like to code, but I
38:17
don't want to spend hours coding. I just want to
38:19
do work for like an hour, and I get my
38:22
stuff done, and I'm gone. It's
38:24
because work should enable me to leave
38:26
as soon as possible. So my tools
38:29
should not keep me on my desk
38:31
for hours, just because I'm debugging something
38:33
specific. So there's some work. There's
38:35
going to be very much more adopted, and
38:37
what I want is my opinion is, I
38:40
don't want people building demo apps to
38:42
use the boring stack. I want people
38:44
shipping businesses. So agencies, they
38:47
want to ship for their clients. Businesses
38:49
that are, you know, they're building SaaS, freelancers,
38:53
and anyone that just want to ship stuff, like you don't
38:55
really care about the shiny, but they can also go from
38:58
the ship stuff. Yeah, I see them
39:00
using SaaS and loving it, because I love it. Well,
39:03
I think if people try it
39:05
out, they may love it as
39:07
well. What's the best way to
39:09
get started with this project? Yeah,
39:12
so quickly, if you get your hands
39:14
dirty, if you're like me, you want to see
39:16
something on your screen really quickly, just on MPX
39:18
Create Sails, here with
39:20
the, just on MPX Create Sails, you could
39:22
also pick the project name, and the,
39:25
with a view, React does that,
39:27
right? You could pick those. So
39:30
on MPX Create Sails, that's all, and you
39:32
can get started. You could also look at
39:34
the docs. So docs.salescars.com,
39:37
because I work on a ton
39:39
of open source projects, so we have this
39:42
unified docs at the sales cards company. So
39:44
go to docs.salescars.com, slash boring stack. Then
39:46
you get to see the docs, our nice
39:48
little mascot. So
39:51
fun fact, the mascot is a
39:53
manatee, which are the
39:55
gentle cows of the sea, if you
39:58
will. Very slow, very boring. So
40:01
that's why we picked that mask cut.
40:03
So we are taking this boring thing
40:05
really seriously, if you haven't noticed.
40:07
Not to be confused with a hippopotamus,
40:09
which is also in the water, but
40:11
not boring at all, right? Very
40:14
dangerous. Hippos. Yes.
40:17
Good choice, manatees. Manatees are awesome. That's
40:19
a great... Yeah. How'd you get that
40:22
artwork? Did you have dolly draw for you or did you
40:24
have a human draw for you? Yeah.
40:26
So, the designer was working with me for
40:28
like three, four years now. She does all
40:30
the logos. She's so good. So
40:33
she did that. Cool.
40:37
Very cool. The boring JavaScript
40:40
stack. Kelvin, this is all really interesting
40:42
stuff. I like how exciting you
40:45
make the boring things. I do also
40:47
think that choosing boring technologies serves people
40:49
well most of the time. And
40:52
we do find ourselves chasing yet
40:55
another shiny object too often. In
40:57
fact, around here at J's Party,
40:59
we're often covering the new frameworks. And most of
41:02
the time I say no because we've covered so
41:04
many frameworks. And
41:06
in fact, when I first heard from you, I was like,
41:08
I don't know, another stack. Should we talk about yet another
41:10
stack? But I'm like, well, this one has a little bit
41:12
different view of the world. It's trying to
41:14
be maybe your last stack that you
41:16
need for your business. Because if you
41:18
pick these tried and true tech, you
41:20
won't have to find yourself upgrading,
41:24
refactoring, rewriting, and migrating
41:26
to another stack
41:28
six months, 12 months, three years from now. Very
41:32
cool, Kelvin. Well, what's the best way to
41:34
connect with you and to connect with the
41:36
boring stack and say hi out there online?
41:38
Yeah, for sure. So I am most active
41:41
and I'm like very notorious on
41:44
ex Twitter. So you could
41:46
find me at Domino's underscore
41:48
Kelvin, Domino's underscore
41:50
Kelvin. And also you
41:52
could check out the docs because I
41:54
think the docs are quite good. They're
41:57
not perfect because there's still so much
41:59
to add. from the perspective of new
42:01
people coming into the stack. So
42:03
check out the docs, let me know how you hate it and
42:05
how you like it because I always want to make it better.
42:08
Then you could
42:11
also look forward to SalesConf Africa because I
42:13
am given a workshop. Migrating
42:15
for Murn to the Boeing stack is
42:18
by May 17th. So it's going to be live streamed.
42:20
So anyone can watch it from wherever they are in
42:22
the world. So it's going to be like this hands-on
42:25
thing because people are going to ask questions in real
42:27
time. If you have any questions online too, go also
42:29
bring it. So those are like the
42:31
ways. So first of all, just Twitter, then
42:34
also you could join the SalesConf community
42:36
Discord so you could ask questions. So
42:38
salesconf.com.chat will redirect you to the Discord
42:40
invite that you come in and bring
42:43
in a question. I like
42:45
to see fresh perspective because I've been
42:47
using this for like six, seven
42:50
years. So I definitely have bias
42:52
whether it's easy or not. So
42:54
bring your perspectives. I love
42:56
to hear them. Very good. Well,
42:58
Kelvin, send us all the links to
43:00
all those things you mentioned. I'll make
43:02
sure that everything gets into the show
43:04
notes so that our listener can click
43:06
through and connect the easy
43:09
way. Well, that is our show for
43:11
this week. Thank you for listening to the JS party on
43:14
behalf of Kelvin Omerichone and
43:16
the boring JS stack and
43:19
hagfish and sales cast, all
43:21
the things. Thanks for listening. We'll
43:23
talk to you on next. That
43:43
is JS party for this week. Thanks
43:45
for hanging with us. We
43:48
would love to get more awesome
43:50
reviews for the pod into Apple podcasts
43:52
and Spotify. So for a limited time
43:54
only you leave us a thoughtful five
43:57
star review, send the evidence
43:59
to JS party. party at changelog.com
44:01
and we'll send you a free
44:03
pack of changelog stickers right to
44:05
your door. Let's do
44:07
this. Thanks once again to our
44:09
partners at fly.io, to our beat
44:11
freak in residence, Breakmaster
44:13
Cylinder and to our friends at Sentry.
44:16
We love Sentry and have been using
44:18
it for years. If and
44:20
when it's time for you to check it
44:22
out, use code changelog. That helps us because
44:24
Sentry knows we're making an impact on their
44:26
business and it helps you because they'll give
44:28
you $100 off the team plan. Once
44:31
again, use code changelog, all one word.
44:34
That's all for now, but come on back
44:36
and party with us again next week.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More