Podchaser Logo
Home
The boring JavaScript stack

The boring JavaScript stack

Released Thursday, 18th April 2024
Good episode? Give it some love!
The boring JavaScript stack

The boring JavaScript stack

The boring JavaScript stack

The boring JavaScript stack

Thursday, 18th April 2024
Good episode? Give it some love!
Rate Episode

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.

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features