WEBVTT

NOTE
This file was generated by Descript 

00:00:05.075 --> 00:00:06.115
CJ: Welcome to build and learn.

00:00:06.125 --> 00:00:06.885
My name is CJ.

00:00:07.052 --> 00:00:07.982
Colin: And I'm Colin.

00:00:07.982 --> 00:00:11.682
And today we are digging
into the campfire code base.

00:00:12.202 --> 00:00:15.922
We talked about it a little bit last
episode and it's time to roll up our

00:00:15.922 --> 00:00:17.962
sleeves and talk about what we found.

00:00:18.942 --> 00:00:19.132
CJ: Yeah.

00:00:19.132 --> 00:00:23.402
So if you're just catching up,
campfire is, the first product

00:00:23.442 --> 00:00:29.862
that the, the team over at 37
signals released as a once product.

00:00:29.862 --> 00:00:32.612
So it's like the one time you paid
one time and you get the code.

00:00:32.632 --> 00:00:35.662
And we argued that most people are going
to buy it just so they can read the code.

00:00:36.072 --> 00:00:37.152
Colin: We bought it to read the code.

00:00:38.047 --> 00:00:38.297
CJ: did.

00:00:38.457 --> 00:00:38.577
Yeah.

00:00:39.127 --> 00:00:43.987
and yeah, interesting takeaways, but
before we get into campfire, what

00:00:43.997 --> 00:00:45.767
is a personal board of directors?

00:00:45.777 --> 00:00:47.407
Like, what is this concept?

00:00:47.892 --> 00:00:50.842
Colin: Yeah, I thought this would
be fun to chat briefly about.

00:00:50.892 --> 00:00:53.152
it's something that I've been doing.

00:00:53.202 --> 00:00:56.152
We actually just had one
with some friends yesterday.

00:00:56.622 --> 00:01:00.822
it's kind of like a mastermind,
but the way we're approaching it is

00:01:01.082 --> 00:01:05.782
being able to have calls that you
can like bring questions to a really

00:01:05.782 --> 00:01:09.672
trusted friend group when I'm trying
to make this decision in my life.

00:01:09.767 --> 00:01:12.397
Very similar to a company
board of directors.

00:01:12.417 --> 00:01:13.307
They've got your back.

00:01:13.307 --> 00:01:17.347
They're not necessarily in the day to day
of the business, but they have insights,

00:01:17.357 --> 00:01:19.137
different experiences and perspectives.

00:01:19.137 --> 00:01:21.627
For our first one yesterday,
we tried doing like a theme

00:01:22.037 --> 00:01:23.487
around personal finance.

00:01:23.487 --> 00:01:25.907
So like people brought their
questions that they had.

00:01:26.282 --> 00:01:28.942
and it was kind of interesting cause
there's a bunch of us that work in tech,

00:01:28.942 --> 00:01:32.242
some people who don't, and there were
some questions about like, Oh, I've

00:01:32.242 --> 00:01:35.702
just assumed like this was always the
best way for me to do health insurance.

00:01:35.702 --> 00:01:38.772
I picked this thing because
it has no deductible.

00:01:39.122 --> 00:01:42.582
is there anything I'm missing out on,
by not having like a high deductible

00:01:42.582 --> 00:01:44.152
with an HSA, things like that.

00:01:44.152 --> 00:01:47.032
So it was just kind of
interesting to have questions and.

00:01:47.682 --> 00:01:52.072
I've taken the same approach with some
other friends where having people that

00:01:52.072 --> 00:01:56.822
you can go to when you're applying
for a new job or doing something

00:01:56.822 --> 00:02:00.612
different, like let's throw some,
some things at the wall and just make

00:02:00.612 --> 00:02:03.752
sure that they're prepared for the
actual interviews, things like that.

00:02:04.557 --> 00:02:04.937
CJ: Yeah.

00:02:05.007 --> 00:02:05.477
Nice.

00:02:06.197 --> 00:02:08.067
so was it like a big group?

00:02:08.067 --> 00:02:11.187
Is this like over zoom or in person?

00:02:11.892 --> 00:02:14.282
Colin: Yeah, it was five of us in discord.

00:02:14.362 --> 00:02:17.902
it's five of us that have a group
text message thread always going on.

00:02:18.342 --> 00:02:20.832
And there's always those like little
questions, Hey, what's everyone using?

00:02:20.832 --> 00:02:23.782
Like, well, actually when mint went
away, like they were all using mint.

00:02:23.782 --> 00:02:27.722
And so those, that was kind of what,
what spawned this because people

00:02:27.722 --> 00:02:30.812
started getting into text conversations
of like, no, you should do this.

00:02:30.862 --> 00:02:35.062
And we had to like, kind of
reiterate, like, this is not a group.

00:02:35.312 --> 00:02:37.292
For us to judge what
other people are doing.

00:02:37.292 --> 00:02:39.192
It's not to tell people what to do.

00:02:39.512 --> 00:02:41.422
It's to give data.

00:02:41.522 --> 00:02:42.992
And this is very similar.

00:02:42.992 --> 00:02:45.872
Like if you ever go through an
accelerator or through any sort of

00:02:45.882 --> 00:02:50.182
mentor network,  you're going to get a
bunch of data from a bunch of mentors.

00:02:50.497 --> 00:02:53.117
And you have to synthesize it
and make your own decisions.

00:02:53.117 --> 00:02:55.537
So it's not meant to be  financial advice.

00:02:55.557 --> 00:02:59.297
This is the one true way or,
Oh, what you're doing is dumb.

00:02:59.297 --> 00:03:02.737
Cause it kind of happened and I'm
not going to name names, but like

00:03:03.157 --> 00:03:06.467
I've been slowly investing in Rivian.

00:03:06.612 --> 00:03:09.952
And like there was some, there's,
it's a very hot contentious thing

00:03:10.032 --> 00:03:13.672
for, for, for people where they don't
believe that I should be doing that.

00:03:13.672 --> 00:03:17.482
And it's like, no, nothing that
you are going to tell me in a text

00:03:17.482 --> 00:03:20.502
message is going to like, tell me
to go take my money out of Rivian.

00:03:20.512 --> 00:03:21.892
Like, I'm not going to
change that decision.

00:03:21.892 --> 00:03:22.602
It's been made.

00:03:23.107 --> 00:03:24.387
I'm holding it for the long term.

00:03:24.767 --> 00:03:29.467
You can tell me why you don't believe in
Rivian and why you aren't going to do it,

00:03:29.467 --> 00:03:33.747
but I, we're not here to like judge each
other's, things we can try to direct,

00:03:33.767 --> 00:03:38.147
but ideally we shouldn't be directing
unless there's a question like, kind of

00:03:38.147 --> 00:03:39.987
asking for consent to provide feedback?

00:03:39.987 --> 00:03:42.627
Like, do you want feedback on a portfolio?

00:03:42.627 --> 00:03:46.537
Do you want feedback on how much
or how little you're saving?

00:03:46.547 --> 00:03:47.277
Things like that.

00:03:48.397 --> 00:03:48.957
CJ: Yeah.

00:03:49.037 --> 00:03:49.497
Okay.

00:03:49.547 --> 00:03:50.857
That sounds really cool.

00:03:50.877 --> 00:03:51.357
I.

00:03:51.537 --> 00:03:56.387
and reminded of  the adage that like, you
are the sum of your five closest friends.

00:03:56.417 --> 00:04:02.687
And so I think the people who I admire
the most and who've been the most

00:04:02.687 --> 00:04:05.977
successful in their life, they all
seem to have these like pockets of

00:04:06.377 --> 00:04:11.677
friends that are also very successful
and, and ambitious and whatever.

00:04:11.677 --> 00:04:13.737
This sounds,  really valuable to have.

00:04:13.757 --> 00:04:16.407
And also, I don't know
how to cultivate it.

00:04:16.457 --> 00:04:22.697
I have friends that I have made
through just like happenstance, but

00:04:22.697 --> 00:04:26.247
then figuring out how to get the right
people in the right rooms to talk

00:04:26.257 --> 00:04:29.667
about the right stuff so that everyone
can grow and learn from it is tricky.

00:04:30.107 --> 00:04:35.337
But yeah, I, it's definitely a really
powerful experience when you have a couple

00:04:35.337 --> 00:04:39.357
of friends who are in similar but somewhat
different situations and they're all

00:04:39.357 --> 00:04:43.667
learning different things about whatever
it is, money or parenting or whatever.

00:04:43.667 --> 00:04:47.537
And being able to share, what worked
for you or what didn't work for you.

00:04:47.537 --> 00:04:51.457
And also to get the advice from
other people is like super powerful.

00:04:51.507 --> 00:04:54.587
Yeah, I don't know if it was, if this is
like a Tony Robbins thing or something,

00:04:54.587 --> 00:04:58.857
but some book somewhere has something
similar that's like personal board of

00:04:58.857 --> 00:05:03.857
directors, but it's actually just like
fake people that you keep in your mind.

00:05:03.887 --> 00:05:06.827
Like this board of directors,
like, Oh, I'm going to ask,

00:05:06.827 --> 00:05:08.567
George Washington a question.

00:05:08.567 --> 00:05:13.177
And I'm going to ask, you kind of like
take this to, This group of people to

00:05:13.997 --> 00:05:18.357
kind of give yourself a little bit of
different perspective, I guess, which is

00:05:18.357 --> 00:05:21.367
really what your friends are providing
to is just like another set of eyes.

00:05:21.377 --> 00:05:25.597
And especially when it comes to jobs,
like if you're changing jobs, just pinging

00:05:25.677 --> 00:05:28.107
people who know you really well and
being like, what do you think about this?

00:05:28.157 --> 00:05:28.497
Colin: Yeah.

00:05:28.507 --> 00:05:31.187
I mean, it helps with things
like, imposter syndrome too.

00:05:31.187 --> 00:05:33.487
We kind of formed this ad
hoc board of directors.

00:05:34.157 --> 00:05:35.747
They spent like a month.

00:05:36.282 --> 00:05:40.862
negotiating a non profit
job that was like, they were

00:05:40.862 --> 00:05:43.872
like, I've never negotiated so
hard to make so little money.

00:05:44.187 --> 00:05:44.427
CJ: Yeah.

00:05:44.427 --> 00:05:45.093
Mm hmm.

00:05:45.152 --> 00:05:47.492
Colin: And I was like, okay, well,
there's a red flag, like obviously

00:05:47.492 --> 00:05:49.812
a non profit, you're not going
to be able to make as much money.

00:05:49.812 --> 00:05:55.252
But,, it was a really sad, like two
and a half weeks of, of PTO and sick

00:05:55.252 --> 00:05:56.892
leave combined or something like that.

00:05:56.892 --> 00:06:00.902
And it was like, you're going to be
fighting for every little day off,

00:06:00.942 --> 00:06:06.542
every little amount of work life
balance to make less money than

00:06:06.542 --> 00:06:07.712
you were making in your last job.

00:06:08.042 --> 00:06:08.512
CJ: hmm.

00:06:08.722 --> 00:06:10.812
Colin: Do you really want to
do this or do you want to use

00:06:10.812 --> 00:06:11.912
your board to help you find?

00:06:12.417 --> 00:06:14.087
Some other things to apply for.

00:06:14.087 --> 00:06:17.917
and for them, they were like, well, no,
this feels like this is the job for me,

00:06:17.917 --> 00:06:21.897
but also they can't pay and it's like,
that's a job mismatch, it's not on you.

00:06:21.917 --> 00:06:23.287
That's, that's the job.

00:06:23.377 --> 00:06:25.987
Like it might be a great
job for somebody else.

00:06:27.872 --> 00:06:28.482
CJ: Very cool.

00:06:28.502 --> 00:06:29.932
I, I, yeah, I think it's a great idea.

00:06:30.332 --> 00:06:32.852
maybe there's, that's like
a, also like a product idea.

00:06:32.902 --> 00:06:37.862
People can try to find other people,
other like minded people to create

00:06:37.872 --> 00:06:39.462
their own board of directors.

00:06:40.127 --> 00:06:40.487
Colin: Yeah.

00:06:41.152 --> 00:06:44.542
CJ: I guess that's what these, little
groups are, like mega maker and whatever.

00:06:44.542 --> 00:06:46.992
There's groups you can join too that
will  set up masterminds for you.

00:06:46.992 --> 00:06:48.442
But I guess it's a little bit different.

00:06:48.932 --> 00:06:49.252
Colin: Yeah.

00:06:49.252 --> 00:06:50.972
The mastermind format can work.

00:06:50.972 --> 00:06:53.382
I think it tends to be more
like I'm working on my business.

00:06:53.382 --> 00:06:54.122
What should I do?

00:06:54.132 --> 00:06:55.312
But, this is for yourself.

00:06:55.822 --> 00:06:56.782
I'm working on myself.

00:06:56.782 --> 00:06:59.122
What should, what questions do you have?

00:06:59.132 --> 00:06:59.582
So

00:06:59.932 --> 00:07:00.422
CJ: Very cool.

00:07:01.102 --> 00:07:05.552
I'm sort of becoming a meme, a New England
meme, one day after being in New England,

00:07:05.572 --> 00:07:09.472
broken ankle from the freezing snow,
two years after being in New England,

00:07:09.542 --> 00:07:12.572
I am going to try and make maple syrup.

00:07:13.032 --> 00:07:15.132
So I'm going to tap my trees.

00:07:15.192 --> 00:07:15.712
Yeah.

00:07:15.782 --> 00:07:20.372
And, set up a little evaporator outside
and try to make some maple syrup.

00:07:20.372 --> 00:07:22.472
So we'll see how it goes.

00:07:23.012 --> 00:07:28.722
apparently it's a, as a type of
hobby that can be very obsessive.

00:07:28.722 --> 00:07:31.292
And like, once you get into it, you
want to tap every tree in your whole

00:07:31.292 --> 00:07:35.252
yard,  collect all the SAP, but, Yeah,
we're going to start  small, three or

00:07:35.252 --> 00:07:40.762
so trees and see if we can get a single
waffles worth of pancake syrup or like

00:07:40.762 --> 00:07:42.962
a single, yeah, single serving of syrup.

00:07:43.022 --> 00:07:45.822
And if so, it'll be a success.

00:07:45.902 --> 00:07:49.802
So we'll have to, we'll have to
share some updates as we go, but

00:07:50.032 --> 00:07:51.532
Colin: Look at you homesteading.

00:07:53.022 --> 00:07:53.872
CJ: it's just, I don't know.

00:07:53.872 --> 00:07:58.232
It seems like such a
fun crafty, thing to do.

00:07:58.312 --> 00:07:58.702
Colin: Yeah.

00:07:58.902 --> 00:08:01.642
Well, and speaking of that,
there's been a lot of memes about

00:08:01.772 --> 00:08:06.222
homesteading and little house on
the prairie, with an AT& T outage.

00:08:06.222 --> 00:08:08.962
Do you know like what the cause is?

00:08:08.962 --> 00:08:11.462
Do we have, are we getting, are
we going to get a postmortem?

00:08:11.472 --> 00:08:12.072
Do you think,

00:08:12.562 --> 00:08:13.772
CJ: I hope so.

00:08:14.687 --> 00:08:17.467
It's, it's been going in
and out all day today.

00:08:17.727 --> 00:08:21.447
We live about an hour North of Boston
and all of the news that I've been

00:08:21.447 --> 00:08:24.967
reading, it's like, Oh, it's a huge
outage all across the United States.

00:08:24.977 --> 00:08:29.147
But, yeah, I don't know if
it's just focused on, yeah.

00:08:29.147 --> 00:08:30.717
New England or what the deal is.

00:08:31.477 --> 00:08:36.817
Yeah, it says that it hit AT& T customers
nationwide and it definitely hit us.

00:08:36.817 --> 00:08:38.857
So we, we've been in and
out of service all day.

00:08:39.037 --> 00:08:41.617
So definitely feels like

00:08:41.672 --> 00:08:41.972
Colin: is good.

00:08:42.487 --> 00:08:43.367
CJ: wifi is good.

00:08:43.377 --> 00:08:43.727
Yeah.

00:08:43.727 --> 00:08:49.137
So it was funny, Nicole, she was out
running some errands and she had to

00:08:49.147 --> 00:08:53.067
go into a Barnes and Noble, connect
to the wifi and then send a text.

00:08:53.577 --> 00:08:57.487
And, it's like, I don't know if it's
freeing or if it's terrifying to

00:08:57.487 --> 00:09:00.427
know that we've become so dependent
on being able to just talk to each

00:09:00.427 --> 00:09:02.337
other at any point at any like, if

00:09:02.662 --> 00:09:04.052
Colin: Or taking it for granted,

00:09:04.187 --> 00:09:05.347
CJ: totally, totally.

00:09:05.387 --> 00:09:05.777
Yeah.

00:09:06.337 --> 00:09:07.567
So I don't know.

00:09:07.567 --> 00:09:10.637
Maybe it's a good test to
see if we are able to survive

00:09:10.637 --> 00:09:12.627
without phones or something,

00:09:12.732 --> 00:09:15.692
Colin: You used to have to
figure out where you're going,

00:09:15.852 --> 00:09:18.262
print out a map before you left,

00:09:19.147 --> 00:09:20.477
CJ: yeah, it's wild.

00:09:21.052 --> 00:09:22.322
Colin: rip MapQuest.

00:09:22.527 --> 00:09:26.267
CJ: I wonder if you could even find
physical maps of like towns other

00:09:26.267 --> 00:09:27.557
than, I guess if you go like to

00:09:27.612 --> 00:09:28.082
Colin: Oh yeah, you

00:09:28.157 --> 00:09:28.927
CJ: or something,

00:09:29.352 --> 00:09:29.652
Colin: Yeah.

00:09:30.302 --> 00:09:31.222
Or Barnes Noble.

00:09:31.837 --> 00:09:32.277
CJ: Okay.

00:09:32.327 --> 00:09:32.697
Okay.

00:09:32.727 --> 00:09:33.127
Okay.

00:09:33.577 --> 00:09:33.887
True.

00:09:33.887 --> 00:09:34.077
Yeah.

00:09:34.077 --> 00:09:34.747
That's a, that's a great

00:09:34.812 --> 00:09:37.212
Colin: Then you have to know
if you know how to read a map.

00:09:37.497 --> 00:09:40.877
I have a Nevada map that I keep
in my truck because we go in the

00:09:40.887 --> 00:09:42.207
back country and stuff a lot.

00:09:42.257 --> 00:09:45.627
We never had to use it, but if your phone
is completely dead and you're somewhere

00:09:46.247 --> 00:09:47.807
you want to know where you're at.

00:09:48.227 --> 00:09:48.617
CJ: Yeah.

00:09:49.027 --> 00:09:51.197
When you're out in the back
country, do you bring like a

00:09:51.197 --> 00:09:53.617
solar panel with you or, Oh, you

00:09:53.722 --> 00:09:57.142
Colin: Yeah, I've got solar panels and,
obviously the truck can charge it too,

00:09:57.142 --> 00:10:01.472
as long as it has gas, but, yeah, and
we can talk about it on another show,

00:10:01.472 --> 00:10:04.922
but I'm looking at getting one of those
like Garmin inReach devices, it's like

00:10:04.922 --> 00:10:10.732
a satellite thing too, just in case,
because Nevada is big and, not a lot of

00:10:10.732 --> 00:10:15.392
service in a lot of places, so AT& T's
constantly having an adage out there.

00:10:16.540 --> 00:10:17.070
CJ: All right.

00:10:17.170 --> 00:10:22.793
Why don't we jump in and maybe share just
initial first impressions of the campfire

00:10:22.793 --> 00:10:28.866
code base and then we can go through some
specific stuff, like specific takeaways.

00:10:29.426 --> 00:10:31.856
What stood out to you
when you got into this?

00:10:32.871 --> 00:10:37.531
Colin: I think very similarly to you, I
was surprised at how simple the code was.

00:10:38.956 --> 00:10:40.336
I will caveat this with that.

00:10:40.336 --> 00:10:41.826
I am not running the code.

00:10:41.896 --> 00:10:44.736
Like I haven't actually used the app.

00:10:45.051 --> 00:10:46.421
we're looking purely at the code.

00:10:47.011 --> 00:10:50.421
I am going to get it stood up on a server
so I can play around with it a little

00:10:50.421 --> 00:10:54.881
bit, cause I'm curious to see like how
the bots and web hooks and stuff work.

00:10:55.461 --> 00:11:00.011
but just looking at the code, it does look
like they added that after the launch.

00:11:00.141 --> 00:11:03.201
it's unclear how you get updates to that.

00:11:03.756 --> 00:11:07.626
When those happen, but my version
that I downloaded had already had it.

00:11:08.266 --> 00:11:09.716
so yeah, just very simple.

00:11:09.776 --> 00:11:13.346
I perused the gem file and the
routes just to get a shape of things.

00:11:13.896 --> 00:11:16.796
And, yeah, it looks like it
would be easy to maintain.

00:11:17.526 --> 00:11:22.596
I don't know if it would tick all the
boxes of the actual product again,

00:11:22.596 --> 00:11:25.956
I want to get it hosted and try it
out and, and we can chat in it and

00:11:25.956 --> 00:11:27.636
see how, how we like it as a product.

00:11:27.786 --> 00:11:28.056
But,

00:11:28.166 --> 00:11:31.556
It's one of the cleaner,
simpler apps that I've seen.

00:11:31.626 --> 00:11:32.096
What do you think

00:11:32.731 --> 00:11:33.451
CJ: Yeah, same.

00:11:33.461 --> 00:11:35.691
every file that I open, I
look at the file and I'm like,

00:11:35.691 --> 00:11:37.001
wow, this is insanely simple.

00:11:37.371 --> 00:11:42.801
And it reminds me a lot of those Sandy
Metz talks, from many years ago where

00:11:43.331 --> 00:11:46.711
she was like, Oh, your controller
methods should be no more than.

00:11:47.626 --> 00:11:48.746
Five lines or whatever.

00:11:48.746 --> 00:11:52.876
I can't even remember like single
instance variable three or five

00:11:52.876 --> 00:11:53.846
lines or something like that.

00:11:53.856 --> 00:11:58.496
And I know that a lot of our
controller actions at work have

00:11:58.496 --> 00:11:59.756
just become really massive.

00:11:59.866 --> 00:12:03.826
because we do a bunch of stuff
like setting up breadcrumbs and

00:12:04.356 --> 00:12:07.386
doing other like weird things
inside of the controllers.

00:12:07.406 --> 00:12:10.746
And so reading these controller
actions and just like every class in

00:12:10.746 --> 00:12:13.016
here, it's just so concise and clean.

00:12:13.016 --> 00:12:17.986
And  it's clear to me that it, it is
an app written using the framework

00:12:18.006 --> 00:12:22.206
by people who are experts with the
framework, like there's things in here

00:12:22.206 --> 00:12:26.756
where, you and I have probably solved
it in a different way with like more

00:12:26.786 --> 00:12:31.036
primitive tools that exist either in Ruby
or in the framework that we know about.

00:12:31.196 --> 00:12:33.446
but yeah, this, I don't know.

00:12:33.746 --> 00:12:35.496
It's very fun to, to read through.

00:12:35.556 --> 00:12:35.906
So

00:12:37.441 --> 00:12:43.091
Colin: now the devil's advocate is, is it
simple because it doesn't do a lot, right?

00:12:43.461 --> 00:12:45.011
That is the other piece of this.

00:12:45.011 --> 00:12:49.071
Like I, that's why I'm curious to use it.

00:12:49.511 --> 00:12:50.461
I do like that.

00:12:50.461 --> 00:12:53.641
They don't reach for
gems just for gems sake.

00:12:53.711 --> 00:12:58.131
I think that's a habit that newer
devs have,  like there's no device.

00:12:58.791 --> 00:13:03.661
devise by itself adds so much
complexity to the code base.

00:13:03.661 --> 00:13:06.761
You've got views and controllers
and stuff that you have to like

00:13:06.761 --> 00:13:08.481
generate and all that kind of stuff.

00:13:08.591 --> 00:13:12.531
but yeah, I'd be curious to see once we
actually use it, does it feel finished

00:13:12.531 --> 00:13:17.691
and to their point, like they tweeted,
blogged about it, this and we'll link

00:13:17.691 --> 00:13:22.631
to it, but he, he wants to deliver
finished quote unquote software, not

00:13:22.631 --> 00:13:28.271
just, This endless treadmill of feature
creep and,, how do you stay alive as a

00:13:28.271 --> 00:13:32.081
SaaS business to just keep churning out
features to keep justifying charging

00:13:32.081 --> 00:13:36.071
people, whereas the value of the thing
should be the thing that you're paying

00:13:36.071 --> 00:13:38.551
for, not what it's going to have and.

00:13:38.981 --> 00:13:39.941
Five years from now.

00:13:40.696 --> 00:13:47.366
CJ: I, yeah, I think as, especially as
like a industry, we seem to have gotten

00:13:47.376 --> 00:13:52.266
used to being able to constantly give
feedback and ask for more features.

00:13:52.816 --> 00:13:56.516
And I don't know like where that
line ends, I would, I mean, we'll

00:13:56.516 --> 00:13:59.526
talk about it in a future episode
more about, buckets that we've been

00:13:59.526 --> 00:14:04.606
building, but it's, it has been on my
mind to like, try to keep the scope.

00:14:05.276 --> 00:14:10.146
As small as possible and be like,
okay, this is literally just, balances

00:14:10.236 --> 00:14:11.666
and transactions and that's it.

00:14:11.696 --> 00:14:16.126
Like not budgeting or like not other
features in order to keep the scope

00:14:16.126 --> 00:14:17.776
as small and tight as possible.

00:14:18.236 --> 00:14:22.726
but I know inevitably as soon as it gets
into user's hands, they'll want, Oh, can

00:14:22.726 --> 00:14:25.396
I export this to, QuickBooks or something?

00:14:25.396 --> 00:14:26.566
You're like, Oh, come on.

00:14:26.626 --> 00:14:26.976
Like,

00:14:27.601 --> 00:14:28.111
Colin: Right.

00:14:28.596 --> 00:14:29.116
CJ: yeah,

00:14:29.211 --> 00:14:29.421
Colin: Yeah.

00:14:29.421 --> 00:14:32.081
I see that question a lot
with a co writing software.

00:14:32.081 --> 00:14:35.361
They're like, does anyone
integrate with QuickBooks desktop?

00:14:35.381 --> 00:14:39.781
And everyone's like, you definitely
know, just, just, just go to QuickBooks

00:14:39.791 --> 00:14:42.591
online and you'll find a bunch
of things that integrate with it.

00:14:43.051 --> 00:14:48.081
That's one of the tweets I keep seeing is,
Hey, do you have integrations like Slack?

00:14:48.131 --> 00:14:53.911
A lot of people rely on these integrations
and their response is to use bots,

00:14:53.941 --> 00:14:58.361
which if you're good at Zapier, you
could go set up a bunch of webhooks

00:14:58.371 --> 00:15:00.716
and probably get 90 integrations.

00:15:00.866 --> 00:15:02.486
9 percent of the way there.

00:15:02.726 --> 00:15:05.526
You're just going to also be
paying for Zapier at that point.

00:15:05.976 --> 00:15:08.706
so you can have a sauna tickets coming in.

00:15:09.196 --> 00:15:12.356
I didn't see anything, but if
there's going to be on anything

00:15:12.356 --> 00:15:16.536
on like the base camp side, that
push can push into your campfire.

00:15:16.536 --> 00:15:20.406
Cause that would be like a natural
integration for them to build on there

00:15:20.406 --> 00:15:22.416
and to just kind of push into campfire.

00:15:23.136 --> 00:15:23.666
CJ: right.

00:15:24.541 --> 00:15:27.911
The other thing that really struck
me was that a lot of times when I'm

00:15:27.911 --> 00:15:35.191
using just vanilla Rails, I, for,
forever have just generated controllers

00:15:35.251 --> 00:15:39.611
and they come with a helper and the
helper usually just stays empty.

00:15:40.031 --> 00:15:45.091
And this app has lots of helpers and
they almost all have something in common.

00:15:45.401 --> 00:15:47.181
Interesting or useful inside of it.

00:15:47.231 --> 00:15:51.101
And then the views are pretty
slick, pretty concise also.

00:15:51.171 --> 00:15:54.961
And they often lean pretty
heavily on the helpers, which.

00:15:55.301 --> 00:15:58.751
Again, playing devil's advocate, I
don't know if I like that because now

00:15:58.751 --> 00:16:02.231
you're kind of like having to jump
around between even more places to

00:16:02.271 --> 00:16:03.831
understand what the view is doing.

00:16:04.311 --> 00:16:09.121
And so in the helper, it might be
like saying, tag dot div, whatever.

00:16:09.181 --> 00:16:10.691
And it's like, okay, if you just

00:16:10.711 --> 00:16:11.721
Colin: in a different folder.

00:16:11.781 --> 00:16:12.411
CJ: Exactly.

00:16:12.591 --> 00:16:14.581
Different folder, different
file, different whatever.

00:16:14.591 --> 00:16:14.911
Yes.

00:16:14.911 --> 00:16:15.471
It's in Ruby.

00:16:15.471 --> 00:16:16.091
That's awesome.

00:16:16.091 --> 00:16:20.581
maybe I'm not understanding  how to
use helpers or maybe some of these

00:16:20.981 --> 00:16:24.381
probably make great sense, but others
I'm like, ah, man, I don't know.

00:16:24.481 --> 00:16:24.721
Colin: Yeah.

00:16:24.721 --> 00:16:27.181
Do you almost feel like when
you open a controller that you

00:16:27.181 --> 00:16:33.021
want the helper to open up like
automatically so that you have context?

00:16:33.481 --> 00:16:35.741
CJ: And, or the view too, right?

00:16:35.751 --> 00:16:40.071
Like if, if, yeah, a good example
here might be looking at like

00:16:40.081 --> 00:16:42.281
the messages helper, I think.

00:16:42.291 --> 00:16:42.571
Yeah.

00:16:42.571 --> 00:16:46.061
So the messages helper has a
bunch of methods inside of it

00:16:46.641 --> 00:16:48.531
where it's like, Oh, tag dot div.

00:16:48.561 --> 00:16:50.761
And then it adds just a whole
bunch of data attributes and

00:16:50.771 --> 00:16:52.821
actions and things like that.

00:16:52.861 --> 00:16:55.531
And then if you look at the
messages views, the messages views

00:16:55.531 --> 00:16:57.871
look like deceptively concise.

00:16:57.871 --> 00:16:58.111
Thanks.

00:16:58.211 --> 00:17:01.031
But, it's because there's a whole
bunch going on in the helpers where

00:17:01.031 --> 00:17:03.971
it's building out a bunch of HTML.

00:17:04.141 --> 00:17:06.511
That's just in the helper
instead of being in the view.

00:17:06.711 --> 00:17:10.291
I don't know, like I haven't gone deep
enough to know, Oh, that's because

00:17:10.291 --> 00:17:14.981
this is reused in a bunch of different
places, but it seems to me that it's

00:17:14.981 --> 00:17:20.121
kind of a mixture of like helper flavored
things that I would typically put

00:17:20.121 --> 00:17:25.591
in a helper, like generating special
URLs for QR codes and things like that

00:17:25.601 --> 00:17:32.101
versus,  building out entire like big
blocks of HTML inside of the helper.

00:17:32.201 --> 00:17:36.911
That might also be a symptom or
like a side effect of us using view

00:17:36.911 --> 00:17:40.351
component to sometimes like, we use
view component, which I think is

00:17:40.351 --> 00:17:43.691
achieving the same thing that a lot of
these helpers might be trying to do.

00:17:44.326 --> 00:17:48.616
Where, yeah, the view component
itself wraps up a little bit of HTML

00:17:48.616 --> 00:17:50.925
and  a reusable bits of the view

00:17:50.975 --> 00:17:54.455
Colin: I still want to dig a
little bit into the turbo stuff.

00:17:54.465 --> 00:17:57.355
Cause that's not something
I've done myself yet.

00:17:57.365 --> 00:18:01.605
I've not had a need to do it cause
we've always had react front ends.

00:18:02.575 --> 00:18:06.715
but it's nice to see all these
JavaScript like stimulus controllers

00:18:08.265 --> 00:18:09.925
that we can use as examples.

00:18:09.935 --> 00:18:11.405
A lot of hotwire stuff.

00:18:12.200 --> 00:18:13.480
CJ: yeah, totally.

00:18:15.785 --> 00:18:19.315
Colin: Is there anything that sticks
out to you in the gem file specifically?

00:18:20.040 --> 00:18:21.770
CJ: There's a couple of gems
in here I've never heard of.

00:18:21.780 --> 00:18:24.780
I'm like, Oh, what, what
the heck is platform agent?

00:18:24.890 --> 00:18:26.840
Or geared pagination.

00:18:26.970 --> 00:18:29.060
I mean, these are probably
just like alternatives maybe

00:18:29.060 --> 00:18:32.080
to pagey or will paginate.

00:18:32.190 --> 00:18:36.330
but yeah, it definitely sparked
my interest to go look at these.

00:18:36.800 --> 00:18:40.960
and then I know, DHH did
this prop shaft thing.

00:18:40.960 --> 00:18:43.720
I think that was like one of
the announcements recently.

00:18:43.720 --> 00:18:46.310
not surprising to see that
in there or import rails.

00:18:46.890 --> 00:18:49.380
But yeah, like rails auto link.

00:18:49.390 --> 00:18:50.090
What is that?

00:18:50.380 --> 00:18:51.160
I'm not sure.

00:18:51.240 --> 00:18:54.280
Geared pagination platform agent.

00:18:54.360 --> 00:18:58.370
It's like they seem to have generic
names and it's unclear like what they do.

00:19:00.480 --> 00:19:05.660
Colin: it seems like most of them are
either from Basecamp or Tenderlove.

00:19:06.610 --> 00:19:07.000
CJ: Got it.

00:19:07.050 --> 00:19:07.500
Okay.

00:19:07.620 --> 00:19:08.200
Interesting.

00:19:09.060 --> 00:19:12.380
Colin: or from the Rails, like, org.

00:19:12.870 --> 00:19:15.670
So like, yeah, Credus is from Rails.

00:19:17.580 --> 00:19:21.120
But then you've got, Faker, Breakman.

00:19:21.740 --> 00:19:22.130
CJ: Yep.

00:19:23.260 --> 00:19:23.640
Those

00:19:23.740 --> 00:19:27.920
Colin: not a crazy long gem file, which
I think it's more of that simplicity.

00:19:27.920 --> 00:19:31.890
And they kind of comment out, the
different groupings of things.

00:19:31.890 --> 00:19:35.420
I think if you do buy the code and
take a look at it, I think reading the

00:19:35.420 --> 00:19:37.330
comments is particularly interesting.

00:19:37.330 --> 00:19:39.860
There's not a lot of comments
in the code, but there's a

00:19:39.860 --> 00:19:41.310
lot of comments in the confiG.

00:19:41.900 --> 00:19:46.160
whoever worked on this, DHH and
whoever else sharing their opinions

00:19:46.160 --> 00:19:48.640
about databases and config.

00:19:48.640 --> 00:19:51.360
And I think that config folder
is probably one of the more

00:19:51.370 --> 00:19:53.840
daunting places for, developers.

00:19:53.840 --> 00:19:57.110
There's just like a lot of true
false flags that you're like, do

00:19:57.110 --> 00:19:58.570
we know what this is really doing?

00:19:58.620 --> 00:19:59.130
CJ: Mm hmm.

00:20:00.130 --> 00:20:05.080
There's also like a couple of
interesting directories to like the

00:20:05.080 --> 00:20:10.090
open graph one, which seems to be,
I imagine that's like what you paste

00:20:10.090 --> 00:20:12.500
a link to Twitter or something.

00:20:12.720 --> 00:20:16.260
into the chat and then it will
like unfurl the URL and show you

00:20:16.300 --> 00:20:17.590
kind of like the preview of it.

00:20:18.020 --> 00:20:22.450
So there's some cool stuff going on
in, in those types of, directories.

00:20:23.030 --> 00:20:24.250
what else is going on here?

00:20:25.030 --> 00:20:29.340
you and I were talking before the
show about how it uses SQLite.

00:20:29.700 --> 00:20:34.380
And there seems to be a lot of
hype right now around using SQLite.

00:20:34.440 --> 00:20:40.880
It seems like SQLite's gotten a lot of
new features recently that bring it on par

00:20:40.880 --> 00:20:46.197
with a lot of other, like more, I don't
know, like bigger, What we would probably

00:20:46.197 --> 00:20:52.387
consider like production, database
management systems like Postgres and MySQL

00:20:52.397 --> 00:20:53.647
that have been around a little bit longer.

00:20:53.647 --> 00:20:57.167
Maybe, I say that, but I don't actually
know if SQL has been around longer.

00:20:57.167 --> 00:20:59.607
I just know that it was
missing features like JSON.

00:21:00.187 --> 00:21:05.267
Columns and things like that, that I think
many of which have been recently updated.

00:21:05.367 --> 00:21:09.427
Colin: Yeah, I think the comment
on SQLite specifically was

00:21:09.447 --> 00:21:11.387
that it's actually good, right?

00:21:11.437 --> 00:21:12.367
and that it can be used.

00:21:12.417 --> 00:21:13.847
I like how portable it is.

00:21:13.887 --> 00:21:17.847
I think when we talked about, whether or
not people actually want to host this or

00:21:17.847 --> 00:21:25.237
not, that's where it feels Very fragile
to me to have SQLite in my opinion.

00:21:25.237 --> 00:21:28.287
I mean, you can obviously do
a backup strategy on that.

00:21:28.347 --> 00:21:30.087
You can do a nightly backup or something.

00:21:30.407 --> 00:21:32.227
I'm assuming you have
to do that on your own.

00:21:32.227 --> 00:21:35.247
I'm not assuming that there's
like a built in script for that.

00:21:35.257 --> 00:21:35.847
There could be.

00:21:36.257 --> 00:21:37.567
I haven't seen that yet.

00:21:37.687 --> 00:21:38.027
CJ: Yeah.

00:21:38.742 --> 00:21:39.672
Colin: There is a backup.

00:21:40.042 --> 00:21:43.282
So yeah, under script
admin prepare backup.

00:21:43.282 --> 00:21:46.607
It looks like there's
probably a nightly backup.

00:21:46.857 --> 00:21:48.387
Or you can probably configure it.

00:21:49.217 --> 00:21:53.177
so you could easily ship that off to an
S3 bucket or something, and then you have

00:21:53.587 --> 00:21:55.537
nightly backups in case something happens.

00:21:56.457 --> 00:21:56.987
CJ: Very cool.

00:21:58.607 --> 00:21:58.867
Yeah.

00:21:58.867 --> 00:22:01.837
I think being able to just
save the money will be cool.

00:22:01.857 --> 00:22:04.417
I know for a long time when people
were deploying to Heroku and you've

00:22:04.417 --> 00:22:08.907
got these like ephemeral sort of,
servers that, wipe everything out.

00:22:08.907 --> 00:22:09.397
That's not.

00:22:09.667 --> 00:22:13.297
committed to get, and then you
end up, removing your database

00:22:13.297 --> 00:22:14.197
or whatever in production.

00:22:14.717 --> 00:22:17.317
so yeah, we've all started
depending on like, Oh, having a

00:22:17.317 --> 00:22:19.527
separate Postgres box or whatever.

00:22:19.957 --> 00:22:22.857
And  I would love to not pay the
10 bucks a month or whatever,

00:22:22.857 --> 00:22:24.187
for like little hobby things.

00:22:24.187 --> 00:22:28.137
And so if we could figure out a
strategy to host it with SQLite

00:22:28.277 --> 00:22:30.307
on render, might be worth,

00:22:30.327 --> 00:22:33.437
Colin: was going to say, how
does SQLite work on Heroku?

00:22:33.517 --> 00:22:37.347
If, if, those files get wiped, you'd
have, usually you'd have to mount an

00:22:37.357 --> 00:22:41.047
S3 bucket or some sort of storage.

00:22:41.657 --> 00:22:42.687
CJ: I don't think it does.

00:22:42.757 --> 00:22:46.737
Like, I think like SQLite, you just
like, can't use it on Heroku or you

00:22:46.737 --> 00:22:50.467
couldn't at least when I, when I was
looking into it a long time ago, but,

00:22:51.097 --> 00:22:52.587
Colin: November 22, 22.

00:22:52.587 --> 00:22:54.317
It looks like there is.

00:22:55.307 --> 00:22:56.227
CJ: is there a new, new

00:22:56.422 --> 00:22:59.232
Colin: is SQLite a bad
fit for running on Heroku?

00:22:59.757 --> 00:23:00.157
CJ: Yeah.

00:23:01.032 --> 00:23:03.842
Colin: yeah, they say use Rails
in there, how to use SQLite.

00:23:04.162 --> 00:23:05.452
Or they say use Postgres.

00:23:05.897 --> 00:23:06.107
CJ: Yeah.

00:23:06.107 --> 00:23:07.047
Use Postgres.

00:23:07.087 --> 00:23:07.507
Yeah.

00:23:08.352 --> 00:23:08.752
Colin: Smart.

00:23:09.462 --> 00:23:14.222
I mean, for development it is, it is
great to just spin it up and it's there.

00:23:14.787 --> 00:23:17.457
CJ: Yeah, it's great too for shipping.

00:23:18.467 --> 00:23:20.857
software that is going to be like
desktop or whatever, like run

00:23:20.857 --> 00:23:23.217
somewhere else, like you give someone
something and then they run it.

00:23:23.257 --> 00:23:28.577
We, we used SQLite a lot when I worked,
at this robotics company where we

00:23:28.577 --> 00:23:32.197
were selling robots with like an IDE.

00:23:33.082 --> 00:23:37.292
That you could use to like program
the robot and there's no reason

00:23:37.292 --> 00:23:39.382
for that to connect to the cloud
or there wasn't at the time.

00:23:39.382 --> 00:23:44.112
And so you would just, you would get
a SQLite database shipped to you.

00:23:44.312 --> 00:23:47.292
And that's where all of your
storage happened was like

00:23:47.302 --> 00:23:49.502
locally in this, in this file.

00:23:49.782 --> 00:23:53.122
I know if you poke around locally
too, there's some really interesting

00:23:53.162 --> 00:23:55.512
Apple services that use SQLite.

00:23:55.532 --> 00:24:01.132
Like if you're on your own machine,
you can open up your iMessages As just

00:24:01.132 --> 00:24:04.902
like a straight up SQLite database,
that's like not encrypted or anything.

00:24:04.902 --> 00:24:10.612
So you can, yeah, there's lots of
cool little use cases for it for, I

00:24:10.612 --> 00:24:15.222
don't know, I guess like if you have a
persistent storage somewhere, then great.

00:24:16.412 --> 00:24:20.252
Colin: Yeah, I think that what's
interesting, maybe the closest parallel

00:24:20.262 --> 00:24:25.472
of an app that I can think of is
Discourse, where it's a Rails app.

00:24:25.872 --> 00:24:30.362
That is packaged with Docker that you
can download and host yourself for

00:24:30.362 --> 00:24:37.572
free versus once slash campfire is
paid and it's not open source, right?

00:24:37.592 --> 00:24:39.142
So discourse is open source.

00:24:39.522 --> 00:24:40.542
It's free to use.

00:24:41.182 --> 00:24:44.762
I don't know what license it is,
but you can also pay discourse

00:24:44.812 --> 00:24:47.412
to just have them host it for you
and you don't have to do anything.

00:24:47.982 --> 00:24:51.822
it'll be interesting to see how this
shapes up because discourse has that.

00:24:52.282 --> 00:24:57.412
Hosted version that they use to make money
to then spend on the team contributing

00:24:57.422 --> 00:24:59.622
back to campfire or back to discourse.

00:25:00.052 --> 00:25:03.432
And I'm just curious to see if this
actually happens with campfire or

00:25:03.842 --> 00:25:07.032
like some of the podcasts, build
your sass talked about this with

00:25:07.032 --> 00:25:11.082
Justin and some others about , do
they, it was just an experiment.

00:25:11.287 --> 00:25:15.467
And if they find that it wasn't
successful, do they just not do it again?

00:25:16.017 --> 00:25:19.757
I think people were hoping for
a once version of base camp but

00:25:19.767 --> 00:25:20.897
that's their bread and butter.

00:25:20.947 --> 00:25:24.812
they might have learned
That this, wasn't a success.

00:25:24.862 --> 00:25:27.522
And I think the same thing is like,
would it have been a success with

00:25:27.522 --> 00:25:29.162
base camp, but not with campfire?

00:25:29.162 --> 00:25:31.182
Cause it's such a simpler products.

00:25:31.182 --> 00:25:35.932
We already know the number of features
and base camp is so much bigger

00:25:35.932 --> 00:25:40.962
than just joining a chat room and
posting messages and I would say.

00:25:42.042 --> 00:25:45.362
Looking at the way that they
implemented the bots, I mean, really,

00:25:45.632 --> 00:25:47.912
I think it's a good first pass at it.

00:25:47.912 --> 00:25:51.362
I don't think, they're going for
really crazy, implementations

00:25:51.372 --> 00:25:53.272
like Slack has or Discord has.

00:25:53.992 --> 00:25:57.662
It really is just, you send a
webhook and that webhook gets posted

00:25:57.662 --> 00:26:00.482
as a message by that bot user.

00:26:00.962 --> 00:26:04.202
I enjoy the naming of the route
and the controller for that.

00:26:05.582 --> 00:26:06.462
I don't know if you saw that.

00:26:06.862 --> 00:26:07.732
CJ: I did not.

00:26:08.287 --> 00:26:13.007
Colin: So yeah, if we go into our
routes folder, it's like, bot key it,

00:26:13.107 --> 00:26:19.367
the controller is messages and then
it's a by bots controller versus, yeah.

00:26:19.387 --> 00:26:20.917
And then you have your create.

00:26:21.367 --> 00:26:30.247
So you post to whatever your URL is
slash rooms slash looks like it might

00:26:30.247 --> 00:26:32.607
be slash bot key slash messages.

00:26:32.762 --> 00:26:33.202
CJ: Mm hmm.

00:26:33.507 --> 00:26:36.207
Colin: And then that goes
into that controller.

00:26:36.207 --> 00:26:39.217
So I'm going to be curious to play
around with that and just see like.

00:26:39.822 --> 00:26:46.242
What controls how it gets rendered and,
because Slack has a lot of  conventions

00:26:46.242 --> 00:26:49.722
for sending in data a certain way
for it to be rendered a certain way,

00:26:49.832 --> 00:26:53.642
or is this just going to barf out
whatever you send it as a message?

00:26:55.212 --> 00:26:58.562
CJ: This is also really interesting
because we're building like two

00:26:58.562 --> 00:27:02.952
way end to end messaging with SMS
to, for this like support product.

00:27:02.972 --> 00:27:04.812
And so much of it is the same.

00:27:04.822 --> 00:27:08.682
And we have to deal with a lot of the
same stuff in terms of attachments and.

00:27:08.917 --> 00:27:09.967
rendering and whatever.

00:27:09.977 --> 00:27:11.937
So yeah, this is super interesting.

00:27:12.742 --> 00:27:13.102
Colin: Yeah.

00:27:14.987 --> 00:27:22.207
CJ: yeah, again, like lots of
included helpers and concerns that are

00:27:22.247 --> 00:27:23.767
probably doing a lot of heavy lifting.

00:27:24.307 --> 00:27:27.697
did you notice the like thruster
packaging thruster thing?

00:27:28.572 --> 00:27:30.662
Colin: I saw that in the Dockerfile.

00:27:30.757 --> 00:27:35.257
CJ: Okay, there's like a whole bunch
of go code in here, which seemed

00:27:35.277 --> 00:27:39.737
surprising since it's like such a,
Ruby shop, they're pushing Ruby so

00:27:39.737 --> 00:27:45.857
hard, but it looks like a lot of this,
based on one of DHH's tweets is, a

00:27:45.897 --> 00:27:49.162
proxy accelerator for Rails and Ruby.

00:27:50.342 --> 00:27:55.742
Puma to make it so that you can
use HTTP to, compression, caching,

00:27:55.982 --> 00:27:58.072
caching, and, uh, XN file.

00:27:58.352 --> 00:28:05.072
So, yeah, I don't know, like maybe this
is an alternative that is pre packaged

00:28:05.082 --> 00:28:10.832
instead of something like engine X or,
whatever else you might be reaching for,

00:28:10.862 --> 00:28:14.572
but, yeah, kind of interesting to see how
much go code is, is shipped with this.

00:28:15.382 --> 00:28:15.722
Colin: Yeah.

00:28:15.722 --> 00:28:20.092
If you look at the Dockerfile, you can,
it's cool to see a Dockerfile for a

00:28:20.092 --> 00:28:24.932
Rails app, But you can get to that build
stage for thruster up until that it looks

00:28:24.932 --> 00:28:31.432
mostly like rails And then you end up
with the build stage and then they can

00:28:31.432 --> 00:28:37.002
figure their environment a little bit
install packages from a more of a linux

00:28:37.192 --> 00:28:43.972
package side of things and Then they boot
everything up after they do their ports

00:28:44.642 --> 00:28:49.432
CJ: On the root of the repo
too, you can see that it's 7.

00:28:49.472 --> 00:28:53.852
8 percent of the code in here is go,
which I don't know, kind of surprising.

00:28:54.012 --> 00:28:57.212
38 percent is Ruby JavaScript.

00:28:57.222 --> 00:29:00.622
Also, I thought DHH wasn't a huge
fan of JavaScript, but there we go.

00:29:00.642 --> 00:29:01.012
18%.

00:29:02.252 --> 00:29:03.542
Of, this is JavaScript.

00:29:03.542 --> 00:29:08.342
So there's quite a bit of, stimulus
and hotwire stuff going on here, which

00:29:08.752 --> 00:29:13.432
we've really, I don't know, fallen in
love with, I guess, at craftwork doing

00:29:13.432 --> 00:29:18.372
a lot more with stimulus than, than in
react on the rail side, which is awesome.

00:29:18.956 --> 00:29:23.236
Colin: I think they're critical of more
of the full front end JavaScript apps

00:29:23.236 --> 00:29:28.126
where, you really do have to implement
almost everything twice when you have the

00:29:28.126 --> 00:29:31.916
back end and then the front end, right,
that you have to build an interface,

00:29:31.946 --> 00:29:37.236
an API to, to get the data you need, or
you're using like GraphQL or something.

00:29:38.176 --> 00:29:40.206
Because even when I look
at these JavaScript files,

00:29:40.206 --> 00:29:42.226
they're vanilla JavaScript.

00:29:43.496 --> 00:29:44.406
CJ: Mm hmm.

00:29:44.461 --> 00:29:45.291
Colin: they're really simple.

00:29:45.291 --> 00:29:47.501
They're like, stimulus
controllers and things.

00:29:48.111 --> 00:29:51.361
Does, does this support TypeScript
if you even wanted to use it?

00:29:52.561 --> 00:29:53.331
I don't think so.

00:29:53.356 --> 00:29:54.586
CJ: I, yeah, I would doubt it.

00:29:54.616 --> 00:29:57.646
I know that that was like a
big contentious thing recently.

00:29:58.281 --> 00:29:58.631
Colin: Yeah.

00:30:00.496 --> 00:30:03.322
CJ: Uses tricks, action text.

00:30:03.689 --> 00:30:04.009
I don't know.

00:30:04.019 --> 00:30:07.919
I, I loved going through the code.

00:30:07.939 --> 00:30:09.229
I thought it was really, really fun.

00:30:09.319 --> 00:30:12.279
It's, opening a present and
getting to nerd out on all kinds

00:30:12.279 --> 00:30:14.376
of new approaches to things.

00:30:14.376 --> 00:30:17.876
And definitely  stacked my reading
list for, bits and pieces that I

00:30:17.876 --> 00:30:23.376
want to go take a look at things like
action, text, content, filters, and.

00:30:23.871 --> 00:30:24.851
All the helpers.

00:30:24.851 --> 00:30:27.661
And I definitely want to
learn more about channels.

00:30:27.711 --> 00:30:31.561
I know we, we have  the standard
channel and we throw streams a bunch of

00:30:31.561 --> 00:30:36.541
places, but when should you create your
own, create a new channel versus not.

00:30:36.551 --> 00:30:40.451
So lots of really, really good
stuff in here to emulate, I think.

00:30:41.481 --> 00:30:44.111
Colin: Yeah, and if you did buy
Campfire, I don't know if they're

00:30:44.121 --> 00:30:47.471
going to be doing it again, but I
know DHH did a code walkthrough.

00:30:47.531 --> 00:30:50.401
I'd be curious to watch that,
even if it was just recorded.

00:30:51.031 --> 00:30:56.061
and then one of their designers did
like a style and CSS walkthrough.

00:30:56.341 --> 00:30:57.271
Cause I think that's the other thing.

00:30:57.661 --> 00:31:01.791
They get a lot of crap about their
design choices, and it's simple.

00:31:01.791 --> 00:31:06.701
It's, could be argued a little bit
more approachable and Fisher price.

00:31:07.181 --> 00:31:10.021
but you can read the CSS files.

00:31:10.071 --> 00:31:12.531
It's not this crazy compiled thing.

00:31:12.541 --> 00:31:16.721
It's not using a bootstrap
or a tailwind, a shad CN.

00:31:16.731 --> 00:31:21.321
It's, it's using just pure CSS, sometimes
I, I think back to those old days of

00:31:21.371 --> 00:31:26.961
the list apart and the, the Jeffrey
Zeldman and all the old CSS, things,

00:31:26.981 --> 00:31:29.181
but I said, love me some tailwind.

00:31:29.461 --> 00:31:34.501
CJ: The messages that
CSS file, for context is.

00:31:34.951 --> 00:31:42.161
585 lines long, which I
think is shockingly huge.

00:31:42.881 --> 00:31:48.121
But, if you sort of stand back a little
bit and look at just like really rough

00:31:48.151 --> 00:31:51.601
metrics around the code, like how many
lines are certain files and things,

00:31:52.021 --> 00:31:53.291
I think that can give you a sense.

00:31:53.301 --> 00:31:58.091
So for instance, the user
model in here is 68 lines.

00:31:58.516 --> 00:32:04.076
Which in my opinion is crazy small
given how big user models usually get.

00:32:04.566 --> 00:32:07.846
so yeah, I don't know,
like lots of CSS, I guess.

00:32:08.246 --> 00:32:14.936
Colin: Having written a lot of handwritten
CSS,  there's about 200, lines of button

00:32:15.126 --> 00:32:19.686
CSS, and you get your base button, and
you get your circle buttons, and reverse

00:32:19.706 --> 00:32:24.171
buttons, and avatar buttons, so, you're
gonna have to do the weird things to make

00:32:24.171 --> 00:32:26.281
it support on all the different devices.

00:32:26.351 --> 00:32:30.441
Autocomplete, is in here and there's
like, less than 200 lines of CSS that

00:32:30.441 --> 00:32:35.221
handle, autocomplete, Messages is, is
arguably like the biggest thing you do.

00:32:35.451 --> 00:32:38.351
In, in here, so that kind of makes sense.

00:32:38.671 --> 00:32:40.961
I bet the room, let's
see if there's a room.

00:32:41.071 --> 00:32:42.381
Oh, they don't even have one for room.

00:32:42.761 --> 00:32:46.471
The container of like where you go
look at your settings and you create

00:32:46.471 --> 00:32:50.181
a bot and update your user, like those
are all probably using the same CSS,

00:32:50.181 --> 00:32:52.081
so those are probably pretty small.

00:32:52.441 --> 00:32:52.941
CJ: Right.

00:32:54.951 --> 00:32:59.281
Colin: Bunch of box shadows and
stuff, Yeah, I mean if anyone wants

00:32:59.281 --> 00:33:02.521
to learn how to do CSS, this would be
an interesting way to look at it too.

00:33:02.921 --> 00:33:06.801
CJ: I know that we said , Oh, it's
finished software and stuff, but I think

00:33:06.811 --> 00:33:11.091
it might be interesting to try to go
in here and add some features yourself.

00:33:11.121 --> 00:33:14.351
Cause you'll end up bumping
against different bits and pieces

00:33:14.351 --> 00:33:15.601
of the code to try to learn.

00:33:16.311 --> 00:33:16.821
So

00:33:17.686 --> 00:33:19.796
Colin: Yeah, I don't know what happens.

00:33:19.836 --> 00:33:24.256
I think someone had mentioned
if you change the code like You

00:33:24.256 --> 00:33:28.266
don't get any guarantees of like
updates or anything happening

00:33:28.921 --> 00:33:29.391
CJ: sure.

00:33:29.441 --> 00:33:29.811
Yeah.

00:33:29.956 --> 00:33:31.956
Colin: don't think it
phones home for updates.

00:33:31.966 --> 00:33:33.286
So i'm still curious about that.

00:33:33.336 --> 00:33:37.136
There's not a campfire gem or something
that you can just get updates through

00:33:37.696 --> 00:33:41.506
Maybe they're figuring that out as they
go because there's a github source for

00:33:41.516 --> 00:33:45.006
base camp, but I think that's being
used for some of their base camp gems

00:33:46.796 --> 00:33:47.086
CJ: Yeah.

00:33:47.086 --> 00:33:48.686
Maybe they'll just hide it in the go code.

00:33:50.066 --> 00:33:51.846
It's like, Oh, your NGINX

00:33:51.901 --> 00:33:56.351
Colin: it dips your, dips your code and
drops any changes that you made to it.

00:33:56.691 --> 00:34:00.671
I'll say the last thing you don't see
a lot in a Rails app is under assets.

00:34:00.671 --> 00:34:02.001
There is a sounds folder

00:34:02.146 --> 00:34:03.386
CJ: I saw that.

00:34:03.761 --> 00:34:05.101
Colin: wonderful MP3s,

00:34:05.866 --> 00:34:06.826
CJ: Oh my gosh.

00:34:07.401 --> 00:34:11.221
Colin: I just, that Mario coin, I'm going
to steal that and put that in discord.

00:34:11.221 --> 00:34:11.721
I think

00:34:11.757 --> 00:34:12.567
CJ: It's so fun.

00:34:12.607 --> 00:34:12.947
Yeah.

00:34:13.107 --> 00:34:15.007
That was fun for me to, see also.

00:34:15.007 --> 00:34:15.327
Yeah.

00:34:16.337 --> 00:34:17.307
The yodel.

00:34:17.872 --> 00:34:20.372
Colin: I think these are the same ones.

00:34:20.582 --> 00:34:24.232
So like you used to be able in the
original campfire, you could use, there

00:34:24.232 --> 00:34:26.452
was a preselected amount of sounds.

00:34:26.922 --> 00:34:30.382
And when you posted them, it
would have a little sound icon.

00:34:30.382 --> 00:34:32.202
And if you pressed it again,
it would play it again.

00:34:32.742 --> 00:34:36.712
and I think there, this was, it
was probably a setting to turn off

00:34:36.722 --> 00:34:42.152
sounds, but like when we used to use
campfire internally, over a decade ago.

00:34:42.152 --> 00:34:46.052
Like it was always a chance to
see who didn't have their volume

00:34:46.052 --> 00:34:47.702
down or wasn't wearing headphones.

00:34:47.702 --> 00:34:52.372
And or if you make a sale, you have the
cash register sound and stuff like that,

00:34:52.712 --> 00:34:56.332
which I think, Slack, we're so used to
like a little tick tock, a little like

00:34:56.782 --> 00:35:02.172
ditting, or in discord, having different
sounds and soundboards and stuff, but

00:35:03.377 --> 00:35:03.537
CJ: So

00:35:03.562 --> 00:35:04.762
Colin: make the internet fun again.

00:35:04.997 --> 00:35:07.607
CJ: do you have sound on,
on Slack like all day?

00:35:07.667 --> 00:35:10.787
Yeah,

00:35:10.822 --> 00:35:15.212
Colin: Discord, I have
sound on my personal one.

00:35:16.102 --> 00:35:18.672
because actually I'm running two
versions of Discord, so like my

00:35:18.672 --> 00:35:21.952
personal one makes like a very
specific sound, so I know those are

00:35:21.952 --> 00:35:23.382
personal things, I can ignore them.

00:35:23.897 --> 00:35:27.647
And then, I just go off the
red dot for my work one.

00:35:28.427 --> 00:35:31.047
notably, this does not
have a native app, right?

00:35:31.327 --> 00:35:32.067
For Campfire.

00:35:32.437 --> 00:35:33.977
So this is gonna be web only.

00:35:34.467 --> 00:35:38.487
I'm gonna get it spun up on a box and I'll
invite you, and then we can  play with it

00:35:38.487 --> 00:35:40.317
on the phone, play with it on the desktop.

00:35:40.527 --> 00:35:44.717
But yeah, this was, this was a pure, a
pure code read without actually seeing

00:35:44.717 --> 00:35:46.347
what the actual thing looks like.

00:35:48.432 --> 00:35:51.362
CJ: you'll have to imagine at home
while you're driving along in the car,

00:35:51.362 --> 00:35:53.542
listening to this or walking the dog.

00:35:54.332 --> 00:35:55.332
Colin: Yeah, I think it was fun.

00:35:55.847 --> 00:35:58.497
, CJ: fun to walk through the code
and yeah, I recommend checking

00:35:58.497 --> 00:35:59.717
it out if you get a chance.

00:36:00.547 --> 00:36:02.167
maybe that's a good spot to wrap it up.

00:36:02.167 --> 00:36:02.427
What do you say?

00:36:03.382 --> 00:36:07.232
Colin: Yeah, I think, maybe next
time we'll do a similar dig into

00:36:07.272 --> 00:36:09.822
buckets and talk about some of the
things that we're doing over there.

00:36:10.927 --> 00:36:11.387
CJ: Awesome.

00:36:11.597 --> 00:36:12.017
Awesome.

00:36:12.607 --> 00:36:14.987
As always, you can head
over to buildandlearn.

00:36:14.987 --> 00:36:18.757
dev to check out links to all the
resources in the show notes and we'll

00:36:18.757 --> 00:36:23.187
drop links to some of these tweets
and articles and blog posts and,

00:36:23.237 --> 00:36:23.577
Colin: All right.

00:36:23.577 --> 00:36:24.427
We'll see you next time.

00:36:25.582 --> 00:36:26.432
CJ: Alright, bye friends.