Aaron
00:00:00 – 00:00:23
Hello, friends.
Just Aaron today coming at you from my kitchen table instead of the shed quarters.
My wife went out of town, and so I'm on baby duty solo.
So I'm inside at the kitchen table with the monitor and a bunch of baby clothes, freshly laundered.
So if you hear a baby crying that means show's over.
Aaron
00:00:23 – 00:00:48
I gotta go see why the baby is crying.
Sean and Colleen had a call earlier, but it was super client specific, so it didn't record it.
So I wanted to get something out there.
So I'm gonna do just a little bit of, like, hammer stone history, who who we are, how we got here.
Sometimes I'll be listening to podcasts and be like, wait.
Aaron
00:00:48 – 00:01:01
Who are these people?
Which one is currently talking?
And what products do they make?
So I'm Aaron.
The other male voice on the show is Sean, and then the third person is Colleen.
Aaron
00:01:02 – 00:01:19
So that's always nice to know who is who.
So where where we got started?
Well, I guess let's see.
How should we do this?
Where we got started or what products we currently have or what we're currently working on.
Aaron
00:01:19 – 00:01:43
Let's do where we got started.
So Sean and I met several years ago at Bacon Biz Conf, which is Amy Hoy and Alex Hillman's, I think now dead conference.
I think they only did I think they did 2 years.
But we first met at Bacon Biz Conf in 2012, I think.
And we've been Internet friends ever since then.
Aaron
00:01:43 – 00:02:05
And a couple of years ago, Sean and I were talking in Slack, and he was like, hey, man.
I wanna start a widget empire.
And I was like, that sounds great.
What is a widget empire?
And he told me he basically wanted to do, like, drop in components for hard to build features, which is the hammer stone thesis, and hammer stone is the name of our company.
Aaron
00:02:05 – 00:02:41
So he wanted to do drop in components for hard to build features.
Basically, features that people need, but aren't, like, the, aren't the core of your product.
So it's something that you kinda have to have, but it doesn't set you apart from anybody else.
It's just like, you know, consumers expect that you have it.
His idea in the beginning was, he was gonna do a page builder component, like, maybe, like, WordPress's Gatsby.
Aaron
00:02:41 – 00:03:22
I think they use blocks and stuff, or I don't know what Elementor is, but something where, like, you can build a page out of components, and you could just drop that into your app, and then then you have page builder.
So, like, I don't know, Transistor would use it to offer website building services for people that host podcasts, that kind of thing.
I told him, that sounds great.
That sounds super complicated.
What if we do this thing that I'm doing, which is this, like, flexible query builder, filter builder, report builder kind of thing.
Aaron
00:03:22 – 00:04:04
And so I showed it to him.
I had it working in an app at work, and I showed it to him and I was like, here's what we got.
It allows you to like, it allows the developer on the back end to say, okay.
The consumer can choose between, first name, last name, birth date, start date, anything that, you know, the developer defines, the consumer can then on the front end, can then use in their filter.
And then the user can go in and be like, I want first name equals to equal to Aaron and birthday is February 14th 1989 and filter and find all the people named Aaron born on my birthday.
Aaron
00:04:05 – 00:04:17
And so I showed him that, and he was like, hey, this looks really great.
I could do the front end.
You could do the back end.
We could sell it as like a integrated component drop in feature.
I was like, yeah.
Aaron
00:04:17 – 00:04:30
That's great.
And so at that point, it was like, okay.
We're in this together, I guess.
And so we kinda I don't remember when this was.
It might have been 2018 or 2019.
Aaron
00:04:31 – 00:04:48
We're like, great.
Let's do this one together and see what happens.
And, basically, since then, it must have been 2019.
It can't have been that long ago.
Since then, he and I have been working on this one component together, and I know that that sounds insane because it's 2021 now.
Aaron
00:04:49 – 00:05:17
But there's a good reason mostly.
So we started working on this and, oh, by the way, this is specifically excluded from my employment contract with my company.
So I specifically delineated filter builder is not doesn't is not owned by the company.
So don't just take things from your company and sell them.
So we're working on this, query builder, filter builder thing.
Aaron
00:05:17 – 00:05:39
I was building out the back end.
I had it easy because I this was now my 3rd time to do it.
I had reimplemented it from scratch.
I wrote it from scratch a long time ago, reimplemented it, at my current job, and then this is the 3rd time now I'm I've reimplemented it from scratch.
So I had it easy.
Aaron
00:05:39 – 00:06:08
Sean had it a lot harder.
There's a ton of, like, recursive nested looping because the users can do basically whatever they want.
Right?
So they can say, first name is Aaron or Sean, and last name is not Francis or Fiorito, and and they can just, like, do as much as they want.
So it gets kinda it gets to be kinda like, you can get wrapped around the axle pretty easily.
Aaron
00:06:08 – 00:06:30
So Sean rode it, rewrote it, and rode it again, over the course of, like, a year between, you know, full time jobs and family and stuff.
And the other part that's kind of difficult about it is it's all generative.
Right?
So the developer on the back end can say, here are the conditions.
This one's a text condition.
Aaron
00:06:30 – 00:06:54
This one's a date condition.
This one is a Boolean, but it also has nulls.
So if it has nulls, you need to let the user choose is unknown.
So instead of just true false, you have to say true false or maybe, basically.
And so all of those things have to be accounted for and basically, like, self generate on the front end all driven by back end configuration.
Aaron
00:06:54 – 00:07:19
Anyway, Sean worked on that for a long time while I was working on, you know, tuning up the Laravel back end, writing documentation, all of that kind of stuff.
So that product is called Refine.
Like, you wanted to refine a list of results.
It's pretty clever.
So that product is called refine.
Aaron
00:07:19 – 00:07:43
We are actively working on it and, you know, hopefully about to launch it before we have this retreat coming up in October.
It is a Laravel back end with a Vue JS front end.
The Vue front end will be open source.
The Laravel back end will be paid.
Right now, we're thinking it's gonna be $1,000 a year for the back end, so less than $100 a month.
Aaron
00:07:45 – 00:07:56
That product, is where this all got started.
With Sean coming to me and saying, I wanna do a page builder.
I said, I've got something easier.
Let's do this.
Turns out it's not that easy.
Aaron
00:07:57 – 00:08:23
That's where we got started.
While we were working on that so at the beginning of right now, it's 2021.
At the beginning of I think it was this year, one of our Internet friends came to us and said, hey.
I know you're working on refine, and it's great.
What if you do it for a client that I'm working with right now, and the client will pay you to work on it?
Aaron
00:08:23 – 00:08:36
It's like, yeah.
That sounds amazing.
Here's the sticky wicket, though.
The client is all Ruby on Rails and Hotwire, not Laravel or Vue.
Js.
Aaron
00:08:37 – 00:09:06
I was like, oh, okay.
Sure.
If they wanna, you know, if they wanna pay us and we get to keep the Rails version at the end, which we do, then that's great because we were always gonna have a rails version.
We just thought, you know, it would take us we thought we would be able to launch the Laravel one before we wrote the rails one, but who can know these things?
So Sean and I talked about it, decided this is an opportunity that's that's just too good to pass up.
Aaron
00:09:08 – 00:09:40
But neither of us I don't know rails at all, and Sean didn't have time to do both the rails back end and the Hotwire front end.
And so we decided we would just subcontract to get somebody to write the rails version.
And we told the client that and they're like, yeah, of course, we don't care.
And so we, hired Colleen, who is the 3rd partner now and the 3rd voice you'll hear on this show.
We hired Colleen, and we're like, hey, Colleen.
Aaron
00:09:40 – 00:09:52
We've got this project for you.
It should be easy.
It shouldn't take too long.
This was, like it's had to be, you know, 8 months ago or something.
Like, hey.
Aaron
00:09:52 – 00:10:16
We've got this project for you.
Pays well.
Won't take too long.
All you have to do all you have to do, quotes, is port this Laravel library over to Rails, and then you'll be done.
Turns out, it's a pretty complicated library, that I have spent, you know, 5 years thinking about.
Aaron
00:10:16 – 00:10:42
And so to just, like, hey.
Let's just port it to another language, a different ORM with different features.
Turns out that's not quite as straightforward as one might think it is.
Maybe you think it's not straightforward at all, in which case, dear listener, you would be correct.
So she and Sean have been working on that since, I wanna say, like, March or something, for a long time.
Aaron
00:10:42 – 00:11:33
And so that kinda left me just, like, hanging out, because I had already mostly finished the Laravel side, and Sean was mostly done with Vue, but not totally.
And the thought at the time was, oh, he'll just finish it here and there.
Looking back, I probably should've just picked it up myself.
But we devised this plan where I would be on call for Colleen, to talk to her about, you know, the wackiness of this project.
And then I would go put some dedicated effort into building hype, you know, releasing open source projects, that kind of stuff in the Laravel ecosystem so that when the time came, people would know who we are and not just be like, okay.
Aaron
00:11:33 – 00:11:43
Well, now we're finished.
We should start marketing.
Like, try to start a little bit of marketing ahead of time.
So that was the plan.
Right?
Aaron
00:11:43 – 00:12:14
So at this point, we've got, you know, 95% of a Laravel Vue product.
We've got Colleen and Sean working at the client, and we've got the plan for me to start building hype in the Laravel world.
Also, my wife is pregnant with twins at that point.
And so just kinda like everything is happening at once.
So that's I guess, fast forward to May of of 2021.
Aaron
00:12:15 – 00:12:38
My wife has twins.
They're amazing.
I'm biased, but, objectively, they're the cutest kids in the world, boy and girl.
And I've got at that point, I've got, like, 6 or 7 weeks of PTO.
And so I'm not sleeping very much, but I'm like, I don't really have to work.
Aaron
00:12:38 – 00:13:08
I can just do whatever I want when the kids are asleep.
And so I just start doing stuff.
One of the things that I was doing was working on this Laravel documentation for our website and I was just so frustrated that every, syntax highlighter got stuff wrong.
Like, I would be writing just basic, you know, PHP 8 stuff and it would be like, yeah.
I don't understand that.
Aaron
00:13:08 – 00:13:34
I'm just gonna pick a random color.
And I was so frustrated, because, like, when your whole product is when your whole product is the code, you kinda want it to look good.
Right?
If I was, you know, selling something else and the code was tangential or tertiary, I'd be like, it's not that big of a deal.
The product the product is something else.
Aaron
00:13:34 – 00:14:09
You know?
But in our case, the product is the code, and so it's kind of important to me, that we put our best foot forward, and it looks good.
So I was getting super frustrated, and I found I found this syntax highlighter called SheikY, and it uses the the Versus Code parser, tokenizer.
I was like, man, this is great.
This is a massive pain to set up, though, because you have to, like, run a node process, and you can't do it like, it has to be a node.
Aaron
00:14:10 – 00:14:28
So if you're using a Laravel project, like, how do you do that on every request?
Or then do you introduce some sort of build step to your Laravel project?
That seems wacky.
K.
Kids are still asleep.
Aaron
00:14:29 – 00:14:57
So I, you know, I hacked my way around it.
I was, like, this is really stupid, but I got good syntax highlighting on our documentation.
And then I thought this is, like, this is really frustrating.
Other people must have this problem.
And so I took Shiki and used it as my tokenizer to, like it does the it does the part that turns it into, like, you know, this is, a variable.
Aaron
00:14:57 – 00:15:13
This is a keyword.
This is a function, whatever.
So it takes the user's code and does that.
And then I wrote a renderer.
I wrote a renderer on top of Sheeky that handles all, like, the annotations and stuff.
Aaron
00:15:13 – 00:15:38
So you can say, like, highlight this line, focus on this line.
This is a git add.
This is a git remove.
Start at this massive, renderer on top of it and then put it on like, started putting it on, a Lambda, like a AWS Lambda function so I could call it just whenever I wanted.
And so you can see where this is going.
Aaron
00:15:41 – 00:15:51
I took that and was like, this could be a service.
Like, other people are really frustrated by this too.
Right?
It's not just me.
And so I had this adorable idea.
Aaron
00:15:52 – 00:16:19
I'll have to find the tweet.
I think it was in March, maybe.
That seems early, doesn't it?
I had this adorable idea that I would, build a SaaS in a day, and here we are in September, so I put my, you know, I put my renderer and everything on.
I ended up moving it to Vercel because it was just way easier to to manage.
Aaron
00:16:21 – 00:16:53
Ended up moving Torchlight is what it is now.
Ended up moving that to Vercel.
And so then a new service was born, a new product.
We've got Torchlight.
So Torchlight is a Versus Code compatible syntax highlighter that also handles focusing, highlighting, like, actual, line highlighting, git add and remove, collapsing of irrelevant code blocks, you know, dozens of Versus Code themes, all that kind of stuff.
Aaron
00:16:59 – 00:17:16
There's a baby.
Sometimes they do this thing where they're fast asleep and they scream, and then they fall right back asleep.
I think that's what's happening here.
So now we've got Refine, the Laravel product, and Torchlight, the Syntax highlighter.
Right?
Aaron
00:17:17 – 00:17:47
And I mentioned in there, that I had originally put it on Lambda but found it too difficult, like, to use.
And so when the babies came and I had all this free time, I was like, free time.
I was like, what should I work on?
And that's when I wrote, Sidecar, which is, a Laravel package.
It's a Laravel package to manage, deploy, and execute, AWS Lambdas from your Laravel application.
Aaron
00:17:47 – 00:18:08
So there's no API gateway.
There's no HTTP, accessibility at all.
Everything has to come through your Laravel application.
So I wrote this because I had had some experience with Lambda.
I had tried to get sidecar nope.
Aaron
00:18:08 – 00:18:29
I had tried to get Torchlight running on Lambda.
Super frustrated.
Thought there's gotta be a better way.
And then Jonathan Renick, the, inertia guy, was like was tweeting about getting, server side rendering working on Vapor, which is a Laravel serverless application.
I was like, hey.
Aaron
00:18:29 – 00:18:46
You could use Lambdas.
You can call them directly.
You don't have to have an HCP endpoint.
And he's like, dude, I don't know what you're talking about.
And so over the course of, like, a week, I wrote Sidecar as a Laravel package and then put it out there and was like, hey, everybody.
Aaron
00:18:46 – 00:19:08
I wrote this I wrote this open source package.
Wrote all the docs, put them on the Hammerstone website, which is the plan all along to try to get, you know, people to come back to Hammerstone, to get them familiar with our name.
That's that's definitely a baby.
Okay, I think we're running out of time here.
I think babies are starting to wake up.
Aaron
00:19:08 – 00:19:42
So I wrote Sidecar, put all the docs on the Hammerstone website, which was the goal, drive people back to Hammerstone, exist in the community, that sort of thing.
Turns out Sidecar was a pretty good idea.
People really liked it, seemed to resonate with a lot of people.
People picked it up and started using it for inertia, server side rendering.
Some guy's using it to, like, do 3 d stuff, and he has, like, 700 consecutive Lambda's running on, you know, one one, Laravel requests.
Aaron
00:19:42 – 00:19:56
And so people are doing waggy stuff with it.
So I wrote that.
People started to like it.
Okay.
So I wrote that.
Aaron
00:19:58 – 00:20:16
People started to like it, started to get out there.
So sidecar is a thing now.
I'm actually speaking at the, Laravel Worldwide Meetup.
I think not this Tuesday, but the following one, I think, doing a a demo of sidecar.
Gonna show off some cool stuff there.
Aaron
00:20:18 – 00:20:51
So that, you know, that started working.
And then I finally got torchlight to a spot where people could start using it.
And to my amazement, people just kinda glommed onto it, and it just kinda took off.
So I wrote these adapters for Laravel, Jigsaw, and CommonMark, which is a markdown thing.
And the common mark one works with the statomic, which is another, CMS kind of thing in the Laravel space.
Aaron
00:20:51 – 00:21:04
So I wrote all of these adapters.
And so I I was finally like, alright.
Well, I guess somebody can start using it.
It was actually, Ninja Parade.
A guy named Yaz was like, hey.
Aaron
00:21:04 – 00:21:14
I wanna use it.
Give me a token.
I was like, oh, it's not ready.
And he got a token, and I gave him one.
He got a token and put it on his website and then was like, hey, everybody.
Aaron
00:21:14 – 00:21:24
Look at this.
And then it just kinda was like, hey, I want one.
Hey, hook me up.
Hey, how do I get this?
And like that night, Laravel News had installed it on their production website, and I was like, why?
Aaron
00:21:24 – 00:21:52
What what is happening?
So I was totally taken off guard by that, but it was, an extremely happy surprise, and I owe Yaz a lot for, like, putting it on his website and telling everybody else to do the same.
So we've got refine, which is the Laravel query builder thing.
We've got torchlight, which is syntax highlighting.
We've got, god, what did I just say?
Aaron
00:21:52 – 00:22:21
Sidecar, which is just totally open source, but is a thing that exists in the world.
And then we recently bought for $600, we bought a SaaS called Unmark Docs.
Bought it from a guy called, Sven.
I forget his last name.
And he had in turn bought it originally from a guy called Miguel, who both of these guys are Laravel people.
Aaron
00:22:21 – 00:22:56
And what unmarked docs is is it takes your it, like, takes markdown documentation from your repo and publishes publishes it, you know, pretties it up and publishes it as a website.
And so as I was doing this, it was actually as I was writing the Torchlight docs, I thought, why is this so freaking hard?
I just want to write markdown.
Like, I don't wanna write the sidebars.
I don't wanna write the part where when you're scrolling it, you know, highlights where you are on the page and, like, I don't wanna I don't wanna do any of that.
Aaron
00:22:56 – 00:23:12
I just wanna write markdown, and I just wanna push it to a repo.
And so I thought, again, like, why is this so difficult?
Like, why is my life so hard relatively?
And so I started looking around for solutions.
I found unmarked docs.
Aaron
00:23:12 – 00:23:27
It looked kinda like what I was thinking, but was totally unmaintained clearly.
And so I reached out to Sven, and he was like, yeah.
I bought it from Miguel.
I haven't really done anything with it in a couple years.
It's like, deal.
Aaron
00:23:27 – 00:24:06
I'll buy it.
How much did you buy it for?
He actually said, I'll sell it to you for what I bought it for.
So we bought it, and that is in process right now.
So the goal there is you, you write all your docs in markdown in your repo, and then you can push it, and the docs will show up versioned on either your website as a subdomain, our website as a subdomain, or if you're fancy, we'll have integrations where the docs can show up on your website as a subdirectory.
Aaron
00:24:06 – 00:24:36
So it can be your website.com/docs, which is, you know, probably better for SEO purposes, but that'll be that'll be a little bit of a tricky integration.
Like, how do you integrate someone else's, a third party content as a subdirectory on your own site?
And I have some ideas there.
So that's what unmarked docs is.
So it'll take markdown, make it real pretty.
Aaron
00:24:36 – 00:25:04
Obviously, it will add torchlight to the code examples, and then it'll give you a beautiful documentation website.
And the goal there is just make it as stupidly simple as possible because all of this other stuff is really frustrating, and I don't wanna do it.
That's basically the goal with everything.
That's hammer stones entire thesis.
We'll focus on stuff that's annoying that you have to do that you don't wanna do.
Aaron
00:25:05 – 00:25:22
It doesn't make your product different to have documentation.
You have to have documentation.
So it's just this thing that you have to do that for some reason, we're all okay with it being really frustrating to do.
I know that VuePress exists.
I don't wanna set up VuePress.
Aaron
00:25:22 – 00:25:40
I just don't wanna do it.
Like, I don't wanna take the time to learn VuePress.
I wanna be writing my product or working on my SaaS, not reinventing the wheel.
I know next and next and next and next all exist.
I don't wanna learn them.
Aaron
00:25:40 – 00:25:48
I just want something to work.
So that's where we're at right now.
I'm Aaron.
Sean exists.
Colleen exists.
Aaron
00:25:50 – 00:26:13
We've got refine for Laravel, refine for rails.
We've got, torchlight and sidecar and unmarked docks.
All of these threads will come together at some point, and they're all self reinforcing.
If you go on the Hammerstone, website, you'll see docs.
You'll see code blocks.
Aaron
00:26:13 – 00:26:42
You'll see under those code blocks, you know, code highlighting provided by Torchlight, a Hammerstone product that links you over there.
I think on the Torchlight site, you'll see a Hammerstone product that links you back.
At some point, you'll see, you know, documentation powered by Unmark something like that.
It all, like, it all comes together in the Hammerstone universe.
So that's who we are.
Aaron
00:26:42 – 00:26:54
That's Hammerstone in history.
It's 445.
I gotta prepare some bottles for some babies.
Thanks for listening.
You can find me on Twitter at Aaron D Francis.
Aaron
00:26:55 – 00:27:13
I don't know Sean's off the top of my head.
I think Sean is s Fiorito.
Yep.
S Fiorito, f I o r I t t o, and Colleen is, for some reason, Leenyberger.
I need to ask her about that.
Aaron
00:27:13 – 00:27:21
Leenyberger, like hamburger.
Who knows?
A great question for the next episode.
Alright.
That's all.
Aaron
00:27:21 – 00:27:23
Baby time.
Talk to you later.